다음을 통해 공유


관리 ID를 사용하여 Go용 Azure SDK로 인증

이 자습서에서는 Azure SDK for Go를 사용하여 Azure에 인증하도록 관리 ID가 있는 Azure 가상 머신을 구성합니다.

관리 ID는 Azure 리소스에 직접 ID를 제공하여 자격 증명을 관리할 필요가 없습니다. ID에 할당된 권한은 관리 ID를 지원하는 다른 Azure 리소스에 대한 리소스 액세스 권한을 부여하므로 애플리케이션에서 자격 증명을 전달할 필요가 없습니다. 관리 ID를 사용하여 다른 Azure 리소스로 Azure 호스팅 앱을 인증하고 권한을 부여할 수 있습니다.

이 자습서에 따라 관리 ID를 가상 머신에 할당하고 관리 ID를 사용하여 Azure에 인증합니다.

필수 조건

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

1. Azure 리소스 만들기

시작하기 전에 새 리소스 그룹, 가상 머신 및 키 자격 증명 모음 인스턴스를 만들어야 합니다.

가상 머신 배포

Azure에 가상 머신을 배포합니다. Go 코드를 실행하여 해당 가상 머신에서 Azure Key Vault에 비밀을 만듭니다.

  1. Azure 리소스 그룹을 만듭니다.

    az group create --name go-on-azure --location eastus
    

    --location 매개 변수를 환경에 적합한 값으로 변경합니다.

  2. Azure 가상 머신을 만듭니다.

    az vm create \
    --resource-group go-on-azure \
    --name go-on-azure-vm \
    --image canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest \
    --admin-username azureuser \
    --admin-password <password>
    

    <password> 암호를 바꿉니다.

관리 ID를 지원하는 다른 서비스에 대한 자세한 내용은 Azure 리소스에 대한 관리 ID를 지원하는 서비스를 참조 하세요.

키 자격 증명 모음 인스턴스 배포

다음 명령을 실행하여 새 Azure Key Vault 인스턴스를 만듭니다.

az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization

전역적으로 고유한 이름으로 대체 <keyVaultName> 합니다.

2. 관리 ID 만들기

Azure에서는 두 가지 유형의 관리 ID가 지원됩니다. 시스템 할당 및 사용자 할당

시스템 할당 ID는 Azure 리소스에 직접 연결되며 해당 리소스로만 제한됩니다. 사용자 할당 ID는 하나 이상의 Azure 리소스에 할당할 수 있는 독립 실행형 리소스입니다.

시스템 할당과 사용자 할당 간의 차이점에 대해 자세히 알아보려면 관리 ID 유형을 검사.

다음 옵션 중 하나를 선택합니다:

옵션 1: 시스템 할당 ID 만들기

다음 명령을 실행하여 시스템 할당 관리 ID를 만듭니다.

az vm identity assign -g go-on-azure -n go-on-azure-vm

옵션 2: 사용자 할당 ID 만들기

다음 명령을 실행하여 사용자 할당 관리 ID를 만듭니다.

az identity create -g go-on-azure -n GoUserIdentity

az vm identity assign -g go-on-azure -n go-on-azure-vm --identities GoUserIdentity

자세한 내용은 Azure CLI를 사용하여 Azure VM에서 Azure 리소스에 대한 관리 ID 구성을 확인하세요.

3. 관리 ID에 역할 할당

관리 ID를 만든 후 역할을 할당하여 다른 Azure 리소스에 액세스할 수 있는 ID 권한을 부여합니다. 이 자습서에서는 Go 애플리케이션이 키 자격 증명 모음 인스턴스 내에서 비밀을 만들 수 있도록 관리 ID에 기본 제공 역할을 Key Vault Secrets Officer 할당합니다.

다음 옵션 중 하나를 선택합니다:

옵션 1: 시스템 할당 ID에 역할 할당

다음 명령을 실행하여 시스템 할당 관리 ID에 역할을 할당 Key Vault Secrets Officer 합니다.

#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query principalId -o tsv

#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv

az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>

두 번째 명령에서 키 자격 증명 모음의 이름으로 바꿉 <keyVaultName> 니다. 마지막 명령에서 처음 두 명령의 출력으로 바꿉 <principalId><keyVaultId> 니다.

옵션 2: 사용자 할당 ID에 역할 할당

다음 명령을 실행하여 사용자가 할당한 Key Vault Secrets Officer 관리 ID에 역할을 할당합니다.

#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query principalId -o tsv

#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv

az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>

두 번째 명령에서 키 자격 증명 모음의 이름으로 바꿉 <keyVaultName> 니다. 마지막 명령에서 처음 두 명령의 출력으로 바꿉 <principalId><keyVaultId> 니다.

Azure Key Vault 의 기본 제공 역할에 대한 자세한 내용은 Azure 역할 기반 액세스 제어를 사용하여 Key Vault 키, 인증서 및 비밀에 대한 액세스 제공을 참조하세요. Azure의 기본 제공 역할에 대한 자세한 내용은 Azure 기본 제공 역할을 참조하세요.

4. Go를 사용하여 키 자격 증명 모음 비밀 만들기

다음으로 Azure 가상 머신에 SSH를 실행하고, Go를 설치하고, Go 패키지를 빌드합니다.

Azure VM에 Go 설치

  1. Azure 가상 머신의 공용 IP 주소를 가져옵니다.

    az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
    
  2. Azure VM에 SSH합니다.

    ssh azureuser@<public-ip>
    

    Azure VM의 공용 IP 주소로 바꿉 <public-ip> 니다.

  3. Go 설치

    sudo add-apt-repository ppa:longsleep/golang-backports;
    sudo apt update;
    sudo apt install golang-go -y
    

Go 패키지 만들기

  1. 홈 디렉터리에 이름이 go-on-azure 있는 새 디렉터리를 만듭니다.

    mkdir ~/go-on-azure
    
  2. go-on-azure 디렉터리로 변경합니다.

    cd ~/go-on-azure
    
  3. go mod init를 실행하여 go.mod 파일을 만듭니다.

    go mod init go-on-azure
    
  4. go get을 실행하여 필요한 Go 모듈을 설치합니다.

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
    
  5. main.go 파일을 만들고 다음 코드를 복사합니다.

    package main
    
    import (
        "context"
        "fmt"
        "log"
        "os"
    
        "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
        "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
    )
    
    func createSecret() {
        keyVaultName := os.Getenv("KEY_VAULT_NAME")
        secretName := "quickstart-secret"
        secretValue := "createdWithGO"
        keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName)
    
        cred, err := azidentity.NewDefaultAzureCredential(nil)
        if err != nil {
            log.Fatalf("failed to obtain a credential: %v", err)
        }
    
        client, err := azsecrets.NewClient(keyVaultUrl, cred, nil)
        if err != nil {
            log.Fatalf("failed to create a client: %v", err)
        }
    
        params := azsecrets.SetSecretParameters{Value: &secretValue}
        resp, err := client.SetSecret(context.TODO(), secretName, params, nil)
        if err != nil {
            log.Fatalf("failed to create a secret: %v", err)
        }
    
        fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value)
    }
    
    func main() {
        createSecret()
    }
    
    
  6. KEY_VAULT_NAME라는 환경 변수를 만듭니다. Azure Key Vault 인스턴스의 이름으로 바꿉 <keyVaultName> 니다.

    export KEY_VAULT_NAME=<keyVaultName>
    
  7. 명령을 실행 go run 하여 키 자격 증명 모음 비밀을 만듭니다.

    go run main.go
    

    성공하면 출력은 다음과 유사합니다.

    Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
    

Azure PowerShell, Azure CLI 또는 Azure Portal을 사용하여 키 자격 증명 모음 비밀이 생성되었는지 확인할 수 있습니다.

참고 항목

Azure CLI 또는 Azure PowerShell을 사용하는 경우 Azure 사용자 계정에 "Key Vault 비밀 책임자" 또는 "Key Vault 비밀 사용자"와 같은 키 자격 증명 모음에서 비밀을 읽을 수 있는 역할이 할당되었는지 확인해야 합니다.

5. 리소스 정리

이 문서에서 만든 Azure 리소스를 더 이상 사용하지 않으려면 삭제하는 것이 좋습니다. 사용하지 않는 리소스를 삭제하면 지속적인 요금이 발생하지 않도록 하고 구독을 깔끔하게 유지할 수 있습니다. 이 자습서에서 사용한 리소스를 삭제하는 가장 쉬운 방법은 리소스 그룹을 삭제하는 것입니다.

az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes

인수는 force-deletion-type 리소스 그룹에서 VM을 강제로 삭제하도록 명령에 지시합니다. 인수는 --yes 명령에 확인을 요청하지 말라고 지시합니다.

위의 명령은 리소스 그룹의 키 자격 증명 모음에서 일시 삭제를 수행합니다. 구독에서 영구적으로 제거하려면 다음 명령을 입력합니다.

az keyvault purge --name <keyVaultName> --no-wait

<keyVaultName>을 키 자격 증명 모음의 이름으로 바꿉니다.

다음 단계