Go용 Azure ID 모듈을 사용하여 Azure 인증
이 자습서 에서는 Go용 Azure ID 모듈의 DefaultAzureCredential 형식을 사용하여 Azure에 인증합니다. Azure ID 모듈은 Microsoft Entra ID를 사용하여 OAuth에 초점을 맞춘 여러 자격 증명 형식을 제공합니다.
DefaultAzureCredential
일반적으로 사용되는 자격 증명 형식을 결합하여 인증을 간소화합니다. 개발 환경에서 인증하는 데 사용되는 자격 증명 형식을 사용하여 Azure 배포 애플리케이션을 인증하는 데 사용되는 자격 증명 형식을 연결합니다.
필수 조건
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
- Go 설치: 버전 1.18 이상
1. Go용 Azure ID 모듈 설치
다음 명령을 실행하여 azidentity 모듈을 다운로드합니다.
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
2. Azure를 사용하여 인증
다음 기술 중 하나를 사용하여 Azure에 인증하는 데 사용합니다 DefaultAzureCredential
.
다양한 자격 증명 형식에 대한 자세한 내용은 자격 증명 형식을 참조하세요.
옵션 1: 환경 변수 정의
이 형식은 DefaultAzureCredential
EnvironmentCredential
세 가지 인증 유형을 지원하는 환경 변수를 사용하여 인증을 구성합니다. 다음 인증 유형 중에서 선택하고 적절한 환경 변수를 정의합니다.
비밀이 있는 서비스 주체
변수 이름 | 값 |
---|---|
AZURE_CLIENT_ID |
Azure 서비스 주체의 애플리케이션 ID |
AZURE_TENANT_ID |
애플리케이션의 Microsoft Entra 테넌트 ID |
AZURE_CLIENT_SECRET |
Azure 서비스 주체의 암호 |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
인증서가 있는 서비스 주체
변수 이름 | 값 |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra 애플리케이션의 ID |
AZURE_TENANT_ID |
애플리케이션의 Microsoft Entra 테넌트 ID |
AZURE_CLIENT_CERTIFICATE_PATH |
프라이빗 키를 포함한 PEM 또는 PKCS12 인증서 파일의 경로 |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(선택 사항) 인증서 파일의 암호 |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
사용자 이름 및 암호
변수 이름 | 값 |
---|---|
AZURE_CLIENT_ID |
Microsoft Entra 애플리케이션의 ID |
AZURE_USERNAME |
사용자 이름(일반적으로 전자 메일 주소) |
AZURE_PASSWORD |
해당 사용자의 암호 |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
구성은 이전 순서대로 시도됩니다. 예를 들어 클라이언트 암호와 인증서에 대한 값이 모두 있는 경우 클라이언트 암호가 사용됩니다. 서비스 주체를 사용하여 인증하는 방법에 대한 엔드투엔드 자습서는 서비스 주체를 사용한 Azure SDK for Go 인증을 참조하세요.
옵션 2: 워크로드 ID 사용
Microsoft Entra 워크로드 ID Kubernetes 클러스터의 Pod가 Kubernetes ID(서비스 계정)를 사용할 수 있도록 합니다. Kubernetes 토큰이 발급되고 OIDC 페더레이션 을 사용하면 Kubernetes 애플리케이션이 Microsoft Entra ID를 사용하여 Azure 리소스에 안전하게 액세스할 수 있습니다.
필요한 환경 변수가 EnvironmentCredential
없는 DefaultAzureCredential
경우 WorkloadIdentityCredential을 사용하여 인증을 시도합니다. WorkloadIdentityCredential
는 워크로드 ID 웹후크에서 설정한 환경 변수에서 서비스 주체 구성을 읽으려고 시도합니다.
옵션 3: 관리 ID 사용
관리 ID를 통해 개발자는 자격 증명을 관리할 필요가 없습니다. Microsoft Entra 인증을 지원하는 리소스에 연결할 때 Azure에서 호스트되는 애플리케이션은 자격 증명 대신 Microsoft Entra 토큰을 사용할 수 있습니다. 관리 ID는 로컬 개발에서 지원되지 않습니다.
필요한 환경 변수가 WorkloadIdentityCredential
없는 DefaultAzureCredential
경우 ManagedIdentityCredential을 사용하여 인증을 시도합니다.
사용자 할당 관리 ID를 사용하는 경우 다음 명령을 실행하여 환경 변수를 AZURE_CLIENT_ID
설정합니다.
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
환경 변수가 AZURE_CLIENT_ID
설정 DefaultAzureCredentials
되지 않은 경우 호스팅 리소스에서 사용하도록 설정된 경우 시스템 할당 관리 ID를 사용하여 인증을 시도합니다.
Azure 호스팅 앱에서 관리 ID로 인증하는 방법에 대한 엔드투엔드 자습서는 관리 ID를 사용하여 Go용 Azure SDK 인증을 참조 하세요.
옵션 4: Azure CLI로 로그인
로컬 개발 DefaultAzureCredential
의 마찰을 줄이기 위해 사용자가 Azure CLI에 로그인한 것으로 인증할 수 있습니다.
다음 명령을 실행하여 Azure CLI에 로그인합니다.
az login
옵션 5: Azure Developer CLI로 로그인
로컬 개발에서 사용자가 Azure CLI에 로그인하지 않은 경우 사용자가 Azure Developer CLI DefaultAzureCredential
에 로그인한 것으로 인증할 수 있습니다.
다음 명령을 실행하여 Azure Developer CLI에 로그인합니다.
azd auth login
Azure에서 실행되는 애플리케이션에는 Azure 개발자 CLI 인증을 권장하지 않습니다.
3. DefaultAzureCredential을 사용하여 ResourceClient 인증
다음을 사용하여 AzureDefaultAzureCredential
에 대한 인증을 테스트하는 새 샘플 Go 모듈을 만듭니다azure-auth
.
샘플 Go 코드를 테스트하고 실행할 디렉터리를 만든 다음, 해당 디렉터리로 변경합니다.
go mod init를 실행하여 모듈을 만듭니다.
go mod init azure-auth
Go를 실행하여 Go 모듈에 필요한 Azure SDK를 다운로드, 빌드 및 설치합니다.
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
main.go
라는 파일을 만들고 다음 코드를 삽입합니다.package main import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" ) const subscriptionID = "<subscription ID>" func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { // TODO: handle error } // Azure SDK Resource Management clients accept the credential as a parameter. // The client will authenticate with the credential as necessary. client, err := armsubscription.NewSubscriptionsClient(cred, nil) if err != nil { // TODO: handle error } _, err = client.Get(context.TODO(), subscriptionID, nil) if err != nil { // TODO: handle error } }
<subscription ID>
는 구독 ID로 바꿉니다.애플리케이션을 빌드하고 실행하려면 다음을 실행
go run
합니다.go run .
참고 항목
로컬 시스템에서 있는 그대로 실행하려면 Azure CLI 또는 Azure 개발자 CLI를 사용하여 Azure에 로그인해야 합니다.
DefaultAzureCredential로 Azure에 인증
애플리케이션에서 다음 코드를 사용하여 Azure ID 모듈을 사용하여 DefaultAzureCredential
Azure에 인증합니다.
// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
// handle error
}
문제 해결
특정 자격 증명 유형의 오류를 해결하는 방법에 대한 지침은 문제 해결 가이드를 참조하세요.