다음을 통해 공유


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: 환경 변수 정의

이 형식은 DefaultAzureCredentialEnvironmentCredential 세 가지 인증 유형을 지원하는 환경 변수를 사용하여 인증을 구성합니다. 다음 인증 유형 중에서 선택하고 적절한 환경 변수를 정의합니다.

비밀이 있는 서비스 주체

변수 이름
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.

  1. 샘플 Go 코드를 테스트하고 실행할 디렉터리를 만든 다음, 해당 디렉터리로 변경합니다.

  2. go mod init를 실행하여 모듈을 만듭니다.

    go mod init azure-auth
    
  3. 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"
    
  4. 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로 바꿉니다.

  5. 애플리케이션을 빌드하고 실행하려면 다음을 실행 go run 합니다.

    go run .
    

    참고 항목

    로컬 시스템에서 있는 그대로 실행하려면 Azure CLI 또는 Azure 개발자 CLI를 사용하여 Azure에 로그인해야 합니다.

DefaultAzureCredential로 Azure에 인증

애플리케이션에서 다음 코드를 사용하여 Azure ID 모듈을 사용하여 DefaultAzureCredentialAzure에 인증합니다.

// 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
}

문제 해결

특정 자격 증명 유형의 오류를 해결하는 방법에 대한 지침은 문제 해결 가이드참조하세요.

다음 단계