Azure SDK for Go를 사용한 인증(레거시)

Important

이 문서는 Go용 Azure SDK의 레거시 버전에 적용됩니다. 최신 모듈에 인증하려면 Azure ID 패키지를 사용합니다.

Go용 Azure SDK는 Azure를 사용하여 인증하는 여러 방법을 제공합니다. 이러한 인증 유형 은 서로 다른 인증 방법을 통해 호출됩니다. 이 문서에서는 사용 가능한 형식, 메서드 및 애플리케이션에 가장 적합한 형식을 선택하는 방법을 설명합니다.

사용 가능한 인증 유형 및 방법

Azure SDK for Go는 서로 다른 자격 증명 집합을 사용하여 여러 가지 유형의 인증을 제공합니다. 각 인증 유형은 서로 다른 인증 방법을 통해 사용할 수 있으며, 인증 방법은 SDK가 이러한 자격 증명을 입력으로 사용하는 방법을 나타냅니다. 다음 표에서는 사용할 수 있는 인증 유형 및 애플리케이션에서 해당 인증 유형의 사용이 권장되는 상황을 설명합니다.

Authentication type 권장되는 경우...
인증서 기반 인증 Microsoft Entra 사용자 또는 서비스 주체에 대해 구성된 X509 인증서가 있습니다. 자세한 내용은 Microsoft Entra ID에서 인증서 기반 인증 시작을 참조하세요.
클라이언트 자격 증명 이 애플리케이션에 대해 설정된 구성된 서비스 주체가 있거나 해당 서비스 주체가 속한 애플리케이션 클래스가 있습니다. 자세한 내용은 Azure CLI를 사용하여 서비스 주체 만들기를 참조하세요.
Azure 리소스에 대한 관리 ID 관리 ID로 구성된 Azure 리소스에서 애플리케이션을 실행하는 중입니다. 자세한 내용은 Azure 리소스에 대한 관리 ID를 참조 하세요.
디바이스 토큰 애플리케이션은 대화형으로 사용됩니다. 사용자가 다단계 인증을 사용하도록 설정했을 수 있습니다. 사용자는 로그인할 웹 브라우저에 액세스할 수 있습니다. 자세한 내용은 디바이스 토큰 인증 사용을 참조하세요.
사용자 이름/암호 다른 인증 방법을 사용할 수 없는 대화형 애플리케이션이 있습니다. 사용자에게 Microsoft Entra 로그인에 대해 다단계 인증을 사용할 수 없습니다.

핵심 내용

  • 클라이언트 자격 증명 이외의 인증 유형을 사용하는 경우 애플리케이션을 Microsoft Entra ID에 등록해야 합니다. 방법을 알아보려면 Microsoft Entra ID와 애플리케이션 통합을 참조하세요.
  • 특별한 요구 사항이 없으면 사용자 이름/암호 인증을 사용하지 마세요. 사용자 기반 로그인이 적절한 경우 일반적으로 디바이스 토큰 인증을 대신 사용할 수 있습니다.

이러한 인증 유형은 다양한 방법을 통해 사용할 수 있습니다.

  • 환경 기반 인증 은 프로그램 환경에서 직접 자격 증명을 읽습니다.
  • 파일 기반 인증 은 서비스 주체 자격 증명을 포함하는 파일을 로드합니다.
  • 클라이언트 기반 인증 은 코드의 개체를 사용하며 프로그램 실행 중에 자격 증명을 제공할 책임이 있습니다.
  • 디바이스 토큰 인증 을 사용하려면 사용자가 토큰을 사용하여 웹 브라우저를 통해 대화형으로 로그인해야 합니다.

모든 인증 함수 및 형식은 github.com/Azure/go-autorest/autorest/azure/auth 패키지에서 사용할 수 있습니다.

참고 항목

특별한 요구 사항이 없으면 클라이언트 기반 인증을 사용하지 마십시오. 이 인증 방법은 잘못된 사례를 조장합니다. 특히, 클라이언트 기반 인증을 사용하면 자격 증명을 하드 코딩하고 싶어지게 됩니다. 인증 요구 사항이 변경되면 향후 SDK 릴리스에서 인증을 위한 사용자 지정 코드 작성이 중단될 수도 있습니다.

환경 기반 인증 사용

제어된 설정에서 애플리케이션을 실행하는 경우 환경 기반 인증은 자연스러운 선택입니다. 이 인증 방법을 사용하면 애플리케이션을 실행하기 전에 셸 환경을 구성합니다. 런타임 시 Go SDK는 이러한 환경 변수를 읽고 Azure로 인증합니다.

환경 기반 인증은 디바이스 토큰을 제외한 모든 인증 유형을 지원하며 다음 순서로 평가됩니다.

  • 클라이언트 자격 증명
  • 인증서 기반 인증
  • 사용자 이름/암호
  • Azure 리소스에 대한 관리 ID

인증 유형에 설정되지 않은 값이 있거나 거부된 경우 SDK는 자동으로 다음 인증 유형을 시도합니다. 시도할 수 있는 형식이 더 이상 없으면 SDK에서 오류를 반환합니다.

다음 표에서는 환경 기반 인증에서 지원하는 각 인증 유형에 대해 설정해야 하는 환경 변수를 자세히 설명합니다.

Authentication type 환경 변수 설명
클라이언트 자격 증명 AZURE_TENANT_ID 서비스 주체가 속한 Active Directory 테넌트에 대한 ID입니다.
AZURE_CLIENT_ID 서비스 주체의 이름 또는 ID입니다.
AZURE_CLIENT_SECRET 서비스 주체와 연결된 비밀입니다.
MSSQLSERVER에 대한 프로토콜 속성 AZURE_TENANT_ID 인증서가 등록된 Active Directory 테넌트에 대한 ID입니다.
AZURE_CLIENT_ID 인증서와 연결된 애플리케이션 클라이언트 ID입니다.
AZURE_CERTIFICATE_PATH 클라이언트 인증서 파일의 경로입니다.
AZURE_CERTIFICATE_PASSWORD 클라이언트 인증서의 암호입니다.
사용자 이름/암호 AZURE_TENANT_ID 사용자가 속한 Active Directory 테넌트에 대한 ID입니다.
AZURE_CLIENT_ID 애플리케이션 클라이언트 ID입니다.
AZURE_USERNAME 로그인에 사용하는 사용자 이름입니다.
AZURE_PASSWORD 로그인할 암호입니다.
관리 ID 관리 ID 인증에 자격 증명이 필요하지 않습니다. 관리 ID를 사용하도록 구성된 Azure 리소스에서 애플리케이션을 실행해야 합니다. 자세한 내용은 Azure 리소스에 대한 관리 ID를 참조 하세요.

기본 Azure 퍼블릭 클라우드가 아닌 클라우드 또는 관리 엔드포인트에 연결하려면 다음 환경 변수를 설정합니다. 가장 일반적인 이유는 Azure Stack, 다른 지리적 지역의 클라우드 또는 클래식 배포 모델을 사용하는 경우입니다.

환경 변수 설명
AZURE_ENVIRONMENT 연결할 클라우드 환경의 이름입니다.
AZURE_AD_RESOURCE 관리 엔드포인트의 URI로서, 연결에 사용할 Active Directory 리소스 ID입니다.

환경 기반 인증을 사용하는 경우 NewAuthorizerFromEnvironment 함수를 호출하여 권한 부여자 개체를 가져옵니다. 그런 다음, 이 개체는 클라이언트의 Authorizer 속성에 설정되어 Azure에 액세스할 수 있도록 합니다.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := auth.NewAuthorizerFromEnvironment()

Azure Stack 인증

Azure Stack에서 인증하려면 다음 변수를 설정해야 합니다.

환경 변수 설명
AZURE_AD_ENDPOINT Active Directory 엔드포인트입니다.
AZURE_AD_RESOURCE Active Directory 리소스 ID입니다.

이러한 변수는 Azure Stack 메타데이터 정보에서 검색할 수 있습니다. 메타 데이터를 검색하려면 Azure Stack 환경에서 웹 브라우저를 열고 다음 url을 사용 합니다.(ResourceManagerURL)/metadata/endpoints?api-version=1.0

Azure ResourceManagerURL Stack 배포의 지역 이름, 컴퓨터 이름 및 외부 FQDN(정규화된 do기본 이름)에 따라 다릅니다.

Environment ResourceManagerURL
Development Kit https://management.local.azurestack.external/
통합 시스템 https://management.(region).ext-(machine-name).(FQDN)

Azure Stack에서 Go용 Azure SDK를 사용하는 방법에 대한 자세한 내용은 Azure Stack에서 Go와 함께 API 버전 프로필 사용을 참조 하세요.

파일 기반 인증 사용

파일 기반 인증은 Azure CLI에서 생성된 파일 형식을 사용합니다. 매개 변수를 사용하여 새 서비스 주체 --sdk-auth 를 만들 때 이 파일을 쉽게 만들 수 있습니다. 파일 기반 인증을 사용하려는 경우 서비스 주체를 만들 때 이 인수가 제공되는지 확인합니다. CLI가 출력을 파일로 리디렉션하므로 stdout출력을 파일로 리디렉션합니다.

az ad sp create-for-rbac --role Contributor \
    --scopes /subscriptions/<subscription_id> \
    --sdk-auth > azure.auth

환경 변수를 AZURE_AUTH_LOCATION 권한 부여 파일이 있는 위치로 설정합니다. 이 환경 변수는 애플리케이션에서 읽고 그 안의 자격 증명은 구문 분석됩니다. 런타임에 권한 부여 파일을 선택해야 하는 경우 os를 사용하여 프로그램 환경을 조작합니다. Setenv 함수입니다.

인증 정보를 로드하려면 NewAuthorizerFromFile 함수를 호출합니다. 환경 기반 권한 부여와 달리, 파일 기반 권한 부여에는 리소스 엔드포인트가 필요합니다.

import "github.com/Azure/go-autorest/autorest/azure/auth"
authorizer, err := NewAuthorizerFromFile(azure.PublicCloud.ResourceManagerEndpoint)

서비스 주체 사용 및 액세스 권한 관리에 대한 자세한 내용은 Azure CLI에서 서비스 주체 만들기를 참조하세요.

디바이스 토큰 인증 사용

사용자가 대화형으로 로그인하도록 하려면 디바이스 토큰 인증을 사용하는 것이 가장 좋습니다. 이 인증 흐름은 사용자에게 Microsoft 로그인 사이트에 붙여넣을 토큰을 전달한 다음 Microsoft Entra 계정으로 인증합니다. 이 인증 방법은 표준 사용자 이름/암호 인증과 달리 다단계 인증을 사용하도록 설정된 계정을 지원합니다.

디바이스 토큰 인증을 사용하려면 NewDeviceFlowConfig 함수를 사용하여 DeviceFlowConfig 권한 부여자를 만듭니다. 인증 프로세스를 시작하려면 결과 개체에서 권한 부여자를 호출합니다. 디바이스 흐름 인증은 전체 인증 흐름이 완료될 때까지 프로그램 실행을 차단합니다.

import "github.com/Azure/go-autorest/autorest/azure/auth"
deviceConfig := auth.NewDeviceFlowConfig(applicationID, tenantID)
authorizer, err := deviceConfig.Authorizer()

인증 클라이언트 사용

특정 유형의 인증이 필요하고 프로그램에서 사용자로부터 인증 정보를 로드하도록 하려는 경우 인증을 준수하는 모든 클라이언트를 사용할 수 있습니다. AuthorizerConfig 인터페이스입니다. 다음과 같은 경우 이 인터페이스를 구현하는 형식을 사용합니다.

  • 대화형 프로그램 작성
  • 특수 구성 파일 사용
  • 기본 제공 인증 메서드를 사용하는 것을 금지하는 요구 사항이 있는 경우

Warning

애플리케이션에 Azure 자격 증명을 하드 코딩하지 않습니다. 애플리케이션 이진 파일에 비밀을 배치하면 애플리케이션이 실행 중인지 여부에 관계없이 공격자가 암호를 더 쉽게 추출할 수 있습니다. 이렇게 하면 자격 증명에 대한 권한이 부여된 모든 Azure 리소스가 위험에 처하게 됩니다.

다음 표에는 AuthorizerConfig 인터페이스를 따르는 SDK의 형식이 나열되어 있습니다.

Authentication type 권한 부여자 유형
인증서 기반 인증 ClientCertificateConfig
클라이언트 자격 증명 ClientCredentialsConfig
Azure 리소스에 대한 관리 ID MSIConfig
사용자 이름/암호 UsernamePasswordConfig

연결된 New 함수를 사용하여 인증자를 만든 다음 결과 개체를 호출 Authorize 하여 인증합니다. 예를 들어 인증서 기반 인증을 사용하려면 다음을 수행합니다.

import "github.com/Azure/go-autorest/autorest/azure/auth"
certificateAuthorizer := auth.NewClientCertificateConfig(certificatePath, certificatePassword, clientID, tenantID)
authorizerToken, err := certificateAuthorizer.Authorizer()

다음 단계