JavaScript용 Azure SDK를 사용하여 Azure 서비스에 JavaScript 앱을 인증하는 방법

애플리케이션이 Azure 리소스(예: Storage, Key Vault 또는 Cognitive Services)에 액세스해야 하는 경우 애플리케이션은 Azure에 인증되어야 합니다. 이는 Azure에 배포되거나, 온-프레미스에 배포되거나, 로컬 개발자 워크스테이션에서 개발 중인 모든 애플리케이션에 해당됩니다. 이 문서에서는 JavaScript용 Azure SDK를 사용할 때 Azure에 앱을 인증하는 데 권장되는 방법을 설명합니다.

권장되는 프로세스는 Azure 리소스에 인증할 때 앱이 연결 문자열 키 대신 토큰 기반 인증을 사용하도록 하는 것입니다. Azure SDK는 토큰 기반 인증을 제공하며 앱이 로컬 개발 중이든, Azure에 배포되거나, 온-프레미스 서버에 배포되는지 여부에 관계없이 Azure 리소스에 원활하게 인증할 수 있도록 합니다.

앱이 Azure 리소스에 인증하는 데 사용해야 하는 특정 유형의 토큰 기반 인증은 앱이 실행되는 위치에 따라 달라지고 다음 다이어그램에 표시됩니다.

환경 인증
로컬 개발자가 로컬 개발 중에 앱을 실행하는 경우 - 앱은 로컬 개발용 애플리케이션 서비스 주체를 사용하거나 개발자의 Azure 자격 증명을 사용하여 Azure에 인증할 수 있습니다. 각 옵션은 로컬 개발 중 인증 섹션에서 자세히 설명합니다.
Azure 앱이 Azure에서 호스트되는 경우 - 앱은 관리 ID를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은 아래의 서버 환경에서 인증 섹션에서 자세히 설명합니다.
온-프레미스 앱이 온-프레미스에서 호스트되고 배포되는 경우 - 앱은 애플리케이션 서비스 주체를 사용하여 Azure 리소스에 인증해야 합니다. 이 옵션은 아래의 서버 환경에서 인증 섹션에서 자세히 설명합니다.

앱이 실행되는 위치에 따라 앱에 권장되는 토큰 기반 인증 전략을 보여 주는 다이어그램

토큰 기반 인증의 이점

Azure용 앱을 빌드할 때 비밀(연결 문자열 또는 키)에 토큰 기반 인증을 사용하는 것이 좋습니다. 토큰 기반 인증은 DefaultAzureCredential과 함께 제공됩니다.

토큰 기반 인증 비밀(연결 문자열 및 키)
최소 권한 원칙은 Azure 리소스에서 앱에 필요한 특정 권한을 설정합니다. 연결 문자열 또는 키는 Azure 리소스에 대한 모든 권한을 부여합니다.
저장할 애플리케이션 비밀이 없습니다. 앱 설정 또는 환경 변수에 비밀을 저장하고 회전해야 합니다.
Azure ID SDK는 백그라운드에서 토큰을 관리합니다. 따라서 토큰 기반 인증을 연결 문자열 쉽게 사용할 수 있습니다. 비밀은 관리되지 않습니다.

연결 문자열의 사용은 프로덕션 또는 중요한 데이터에 액세스하지 않는 초기 개념 증명 앱 또는 개발 프로토타입으로 제한되어야 합니다. 그렇지 않으면 Azure 리소스에 인증할 때 Azure SDK에서 사용할 수 있는 토큰 기반 인증 클래스를 항상 기본으로 설정해야 합니다.

다음 SDK를 사용합니다.

DefaultAzureCredential

Azure SDK DefaultAzureCredential 메서드를 사용하면 앱이 실행되는 환경에 따라 다른 인증 방법을 사용할 수 있습니다. 이렇게 하면 코드를 변경하지 않고 로컬, 테스트 및 프로덕션 환경에서 앱을 배포할 수 있습니다. 각 환경에 대해 적절한 인증 방법을 구성하고 DefaultAzureCredential 해당 인증 방법을 자동으로 검색하고 사용합니다. DefaultAzureCredential 조건부 논리 또는 기능 플래그를 수동으로 코딩하여 다른 환경에서 다양한 인증 방법을 사용하는 것이 좋습니다.

DefaultAzureCredential 클래스 사용에 대한 자세한 내용은 이 문서의 뒷부분에 있는 애플리케이션에서 DefaultAzureCredential 사용 섹션에서 설명합니다.

서버 환경에서의 인증

서버 환경에서 호스팅할 때 각 애플리케이션에는 환경당 고유한 애플리케이션 ID가 할당되어야 합니다. Azure에서 앱 ID는 Azure에서 앱을 식별하고 인증하기 위한 특별한 형식의 보안 주체서비스 주체로 표시됩니다. 앱에 사용할 서비스 주체 형식은 앱이 실행되는 위치에 따라 다릅니다.

로컬 개발 중 인증

로컬 개발 중에 개발자의 워크스테이션에서 애플리케이션을 실행하는 경우 로컬 환경은 여전히 앱에서 사용하는 모든 Azure 서비스에 인증해야 합니다.

애플리케이션에서 DefaultAzureCredential 사용

JavaScript 앱에서 DefaultAzureCredential을 사용하려면 애플리케이션에 @azure/ID 패키지를 추가합니다.

npm install @azure/identity

그런 다음, 다음 코드 예제 에서는 개체를 DefaultAzureCredential 인스턴스화하고 Azure SDK 클라이언트 클래스와 함께 사용하는 방법을 보여 줍니다. 이 경우 Blob Storage에 액세스하는 데 사용되는 BlobServiceClient입니다.

// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');

const blobServiceClient = new BlobServiceClient(
  `https://${accountName}.blob.core.windows.net`,
  new DefaultAzureCredential()
);

DefaultAzureCredential 는 앱에 대해 구성된 인증 메커니즘을 자동으로 검색하고 Azure에 앱을 인증하는 데 필요한 토큰을 가져옵니다. 애플리케이션에서 둘 이상의 SDK 클라이언트를 사용하는 경우 각 SDK 클라이언트 개체와 동일한 자격 증명 개체를 사용할 수 있습니다.

DefaultAzureCredential을 사용할 때 인증 방법 선택 시퀀스

내부적으로 Azure DefaultAzureCredential 리소스에 애플리케이션을 인증하기 위한 자격 증명 공급자를 선택하는 체인을 구현합니다. 각 자격 증명 공급자는 해당 형식의 자격 증명이 앱에 구성되어 있는지 검색할 수 있습니다. DefaultAzureCredential은 각 공급자를 순서대로 순차적으로 확인하고 자격 증명이 구성된 첫 번째 공급자의 자격 증명을 사용합니다.

둘 이상의 자격 증명을 구성한 경우 체인을 통해 자격 증명을 찾는 순서가 중요합니다.

JavaScript에 DefaultAzureCredential 대한 자격 증명을 찾는 순서는 아래 다이어그램과 표에 나와 있습니다.

Application에 대해 구성된 인증 원본을 확인하기 위해 DefaultAzureCredential 검사 시퀀스를 보여 주는 다이어그램입니다.

두 가지 경로가 있습니다.

  • 배포된 서비스 (Azure 또는 온-프레미스): 시퀀스는 환경 변수, 관리 ID, 자격 증명에 대한 나머지 위치(Visual Studio Code, Azure CLI, Azure PowerShell)로 시작합니다.
  • 개발자의 로컬 환경: 로컬 개발자 워크스테이션의 체인은 IDE의 아래쪽 막대에 표시된 Visual Studio Code의 로그인된 Azure 사용자로 시작한 다음, Azure CLI로 이동한 다음, Azure PowerShell로 이동합니다. 전체 환경 또는 프로젝트의 가상 환경(예: DOTENV)에 대해 로컬 환경 변수를 구성했는지 이해해야 합니다. 이러한 변수는 체인에 검사 첫 번째 자격 증명이므로 Visual Studio Code -> Azure CLI -> PowerShell 체인을 재정의합니다.
자격 증명 유형 설명
환경 DefaultAzureCredential은 환경 변수 집합을 읽고 애플리케이션 서비스 주체(애플리케이션 사용자)가 앱에 대해 설정되었는지 확인합니다. 그렇다면 DefaultAzureCredential은 이러한 값을 사용하여 Azure에 앱을 인증합니다.

이 방법은 서버 환경에서 가장 많이 사용되지만, 로컬로 개발할 때도 사용할 수 있습니다.
관리 ID 애플리케이션이 관리 ID가 사용하도록 설정된 Azure 호스트에 배포되면 DefaultAzureCredential은 해당 관리 ID를 사용하여 Azure에 앱을 인증합니다. 관리 ID를 사용한 인증은 이 문서의 서버 환경에서 인증 섹션에서 설명합니다.

이 메서드는 관리 ID 사용 서비스를 사용하여 애플리케이션이 Azure에서 호스트되는 경우에만 사용할 수 있습니다.
Visual Studio Code 개발자가 Visual Studio Code Azure 계정 플러그 인을 사용하여 Azure에 인증한 경우 DefaultAzureCredential은 동일한 계정을 사용하여 Azure에 앱을 인증합니다.
Azure CLI 개발자가 Azure CLI에서 az login 명령을 사용하여 Azure에 인증한 경우 DefaultAzureCredential은 동일한 계정을 사용하여 Azure에 앱을 인증합니다.
Azure PowerShell 개발자가 Azure PowerShell의 Connect-AzAccount cmdlet을 사용하여 Azure에 인증한 경우 DefaultAzureCredential은 동일한 계정을 사용하여 Azure에 앱을 인증합니다.
대화형 사용하도록 설정된 경우 DefaultAzureCredential은 현재 시스템의 기본 브라우저를 통해 개발자를 대화형으로 인증합니다. 기본적으로 이 옵션은 사용하지 않도록 설정되어 있습니다.