다음을 통해 공유


빠른 시작: Azure Key Vault Go 클라이언트 라이브러리를 사용하여 비밀 관리

이 빠른 시작에서는 Go용 Azure SDK를 사용하여 Azure 키 자격 증명 모음에서 비밀을 만들고, 검색하고, 나열하고, 삭제하는 방법을 알아봅니다.

다양한 개체 형식을 Azure 키 자격 증명 모음에 저장할 수 있습니다. 키 자격 증명 모음에 비밀을 저장하는 경우 코드에 비밀을 저장하지 않아도 되므로 애플리케이션의 보안을 개선하는 데 도움이 됩니다.

azsecrets 패키지를 시작하고 Go를 사용하여 Azure 키 자격 증명 모음에서 비밀을 관리하는 방법을 알아봅니다.

필수 구성 요소

설정

이 빠른 시작에서는 azidentity 패키지를 사용하여 Azure CLI를 통해 Azure에 인증합니다. 다양한 인증 방법에 대해 알아보려면 Go용 Azure SDK를 사용한 Azure 인증을 참조하세요.

Azure Portal에 로그인

  1. Azure CLI에서 다음 명령을 실행합니다.

    az login
    

    Azure CLI는 기본 브라우저를 열 수 있는 경우 Azure Portal 로그인 페이지에서 열 수 있습니다.

    페이지가 자동으로 열리지 않으면 https://aka.ms/devicelogin으로 이동한 다음, 터미널에 표시되는 권한 부여 코드를 입력합니다.

  2. 계정 자격 증명을 사용하여 Azure Portal에 로그인합니다.

리소스 그룹 및 키 자격 증명 모음 만들기

이 빠른 시작에서는 미리 만든 Azure Key Vault를 사용합니다. Azure CLI 빠른 시작, Azure PowerShell 빠른 시작 또는 Azure Portal 빠른 시작의 단계에 따라 키 자격 증명 모음을 만들 수 있습니다.

또는 다음의 Azure CLI 또는 Azure PowerShell 명령을 실행할 수 있습니다.

Important

각 Key Vault마다 고유한 이름이 있어야 합니다. 다음 예제에서는 <your-unique-keyvault-name>을 키 자격 증명 모음의 이름으로 바꿉니다.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization

키 자격 증명 모음에 대한 액세스 권한 부여

RBAC(역할 기반 액세스 제어)를 통해 키 자격 증명 모음에 대한 권한을 얻으려면 Azure CLI 명령 az role assignment create을 사용하여 UPN("사용자 계정 이름")에 역할을 할당합니다.

az role assignment create --role "Key Vault Secrets Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

<upn>, <subscription-id>, <resource-group-name> 및 <your-unique-keyvault-name>을 실제 값으로 바꿉니다. UPN은 일반적으로 이메일 주소 형식(예: username@domain.com)입니다.

새 Go 모듈 만들기 및 패키지 설치

다음 Go 명령을 실행합니다.

go mod init kvSecrets
go get -u github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity

샘플 코드

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/keyvault/azsecrets"
)

func main() {
    mySecretName := "secretName01"
    mySecretValue := "secretValue"
    vaultURI := fmt.Sprintf("https://%s.vault.azure.net/", os.Getenv("KEY_VAULT_NAME"))

    // Create a credential using the NewDefaultAzureCredential type.
    cred, err := azidentity.NewDefaultAzureCredential(nil)
    if err != nil {
        log.Fatalf("failed to obtain a credential: %v", err)
    }

    // Establish a connection to the Key Vault client
    client, err := azsecrets.NewClient(vaultURI, cred, nil)

    // Create a secret
    params := azsecrets.SetSecretParameters{Value: &mySecretValue}
    _, err = client.SetSecret(context.TODO(), mySecretName, params, nil)
    if err != nil {
        log.Fatalf("failed to create a secret: %v", err)
    }

    // Get a secret. An empty string version gets the latest version of the secret.
    version := ""
    resp, err := client.GetSecret(context.TODO(), mySecretName, version, nil)
    if err != nil {
        log.Fatalf("failed to get the secret: %v", err)
    }

    fmt.Printf("secretValue: %s\n", *resp.Value)

    // List secrets
    pager := client.NewListSecretsPager(nil)
    for pager.More() {
        page, err := pager.NextPage(context.TODO())
        if err != nil {
            log.Fatal(err)
        }
        for _, secret := range page.Value {
            fmt.Printf("Secret ID: %s\n", *secret.ID)
        }
    }

    // Delete a secret. DeleteSecret returns when Key Vault has begun deleting the secret.
    // That can take several seconds to complete, so it may be necessary to wait before
    // performing other operations on the deleted secret.
    delResp, err := client.DeleteSecret(context.TODO(), mySecretName, nil)
    if err != nil {
        log.Fatalf("failed to delete secret: %v", err)
    }

    fmt.Println(delResp.ID.Name() + " has been deleted")
}

코드 실행

  1. 코드를 실행하기 전에 KEY_VAULT_NAME이라는 환경 변수를 만듭니다. 환경 변수 값을 이전에 만든 키 자격 증명 모음의 이름으로 설정합니다.

    export KEY_VAULT_NAME=quickstart-kv
    
  2. Go 앱을 시작하려면 다음 명령을 실행합니다.

    go run main.go
    
    secretValue: createdWithGO
    Secret ID: https://quickstart-kv.vault.azure.net/secrets/quickstart-secret
    Secret ID: https://quickstart-kv.vault.azure.net/secrets/secretName
    quickstart-secret has been deleted
    

코드 예제

자세한 예제는 모듈 설명서를 참조하세요.

리소스 정리

다음 명령을 실행하여 리소스 그룹 및 나머지 리소스를 모두 삭제합니다.

az group delete --resource-group quickstart-rg

다음 단계