관리 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 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Azure CLI를 사용하여 이 문서의 단계를 실행하려는 경우:
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
Azure PowerShell을 사용하여 이 문서의 단계를 실행하려는 경우:
- Azure PowerShell을 로컬로 사용하도록 선택하는 경우:
- 최신 버전의 Az PowerShell 모듈을 설치합니다.
- Connect-AzAccount cmdlet을 사용하여 Azure 계정에 로그인합니다.
- Azure Cloud Shell을 사용하도록 선택하는 경우:
- 자세한 내용은 Azure Cloud Shell 개요를 참조하세요.
- Azure PowerShell을 로컬로 사용하도록 선택하는 경우:
1. Azure 리소스 만들기
시작하기 전에 새 리소스 그룹, 가상 머신 및 키 자격 증명 모음 인스턴스를 만들어야 합니다.
가상 머신 배포
Azure에 가상 머신을 배포합니다. Go 코드를 실행하여 해당 가상 머신에서 Azure Key Vault에 비밀을 만듭니다.
Azure 리소스 그룹을 만듭니다.
az group create --name go-on-azure --location eastus
--location
매개 변수를 환경에 적합한 값으로 변경합니다.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 설치
Azure 가상 머신의 공용 IP 주소를 가져옵니다.
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
Azure VM에 SSH합니다.
ssh azureuser@<public-ip>
Azure VM의 공용 IP 주소로 바꿉
<public-ip>
니다.Go 설치
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Go 패키지 만들기
홈 디렉터리에 이름이
go-on-azure
있는 새 디렉터리를 만듭니다.mkdir ~/go-on-azure
go-on-azure
디렉터리로 변경합니다.cd ~/go-on-azure
go mod init
를 실행하여go.mod
파일을 만듭니다.go mod init go-on-azure
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"
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() }
KEY_VAULT_NAME
라는 환경 변수를 만듭니다. Azure Key Vault 인스턴스의 이름으로 바꿉<keyVaultName>
니다.export KEY_VAULT_NAME=<keyVaultName>
명령을 실행
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>
을 키 자격 증명 모음의 이름으로 바꿉니다.
다음 단계
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기