Yönetilen kimlik kullanarak Go için Azure SDK ile kimlik doğrulaması

Bu öğreticide, Go için Azure SDK'sını kullanarak Azure'da kimlik doğrulaması yapmak için yönetilen kimliğe sahip bir Azure sanal makinesi yapılandıracaksınız.

Yönetilen kimlikler, doğrudan bir Azure kaynağına kimlik sağlayarak kimlik bilgilerini yönetme gereksinimini ortadan kaldırır. Kimliğe atanan izinler, yönetilen kimlikleri destekleyen diğer Azure kaynaklarına kaynak erişimi verir. Kimlik bilgilerini uygulamanıza geçirme gereksinimi ortadan kaldırılıyor.

Bir sanal makineye yönetilen kimlik atamak ve yönetilen kimlik kullanarak Azure'da kimlik doğrulaması yapmak için bu öğreticiyi izleyin.

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Go installed: Sürüm 1.18 veya üzeri

1. Ortamınızı yapılandırma

Başlamadan önce ortamınızı yapılandırmanız gerekir.

Sanal makine dağıtma

Azure'a sanal makine dağıtma. Bu sanal makineden Azure anahtar kasasında gizli dizi oluşturmak için Go kodunu çalıştıracaksınız.

  1. Azure kaynak grubu oluşturun.

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

    parametresini --location ortamınız için uygun değerle değiştirin.

  2. Azure sanal makinesini oluşturun.

    az vm create \
    --resource-group go-on-azure \
    --name go-on-azure-vm \
    --image canonical:ubuntuserver:19.04:latest \
    --admin-username azureuser \
    --admin-password <password>
    

    <password> Parolanızı değiştirin.

Yönetilen kimlikleri destekleyen diğer hizmetler hakkında daha fazla bilgi edinmek için bkz . Azure kaynakları için yönetilen kimlikleri destekleyen hizmetler.

Anahtar kasası örneği dağıtma

Aşağıdaki komutu çalıştırarak yeni bir Azure anahtar kasası örneği oluşturun:

az keyvault create --location eastus --name `<keyVaultName>` --resource-group go-on-azure

değerini genel olarak benzersiz bir adla değiştirin <keyVaultName> .

2. Yönetilen kimlik oluşturma

Azure'da iki tür yönetilen kimlik desteklenir; sistem tarafından atanan ve kullanıcı tarafından atanan.

Sistem tarafından atanan kimlikler doğrudan bir Azure kaynağına eklenir ve yalnızca bu kaynakla sınırlıdır. Kullanıcı tarafından atanan kimlikler, bir veya daha fazla Azure kaynağına atanabilen tek başına kaynaklardır.

Sistem tarafından atanan ve kullanıcı tarafından atanan arasındaki fark hakkında daha fazla bilgi edinmek için Yönetilen kimlik türleri'ne göz atın.

Aşağıdaki seçeneklerden birini belirleyin:

Seçenek 1: Sistem tarafından atanan kimlik oluşturma

Sistem tarafından atanan yönetilen kimlik oluşturmak için aşağıdaki komutları çalıştırın:

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

2. Seçenek: Kullanıcı tarafından atanan kimlik oluşturma

Kullanıcı tarafından atanan yönetilen kimlik oluşturmak için aşağıdaki komutları çalıştırın:

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

az vm identity assign -g go-on-azure -n go-on-azure-vm --identities <UserIdentityId>

değerini yönetilen kullanıcı kimliğinin kimliğiyle değiştirin <UserIdentityId> .

Daha fazla bilgi edinmek için Bkz . Azure CLI kullanarak Azure VM'de Azure kaynakları için yönetilen kimlikleri yapılandırma.

3. Yönetilen kimliğe rol atama

Yönetilen kimlik oluşturulduktan sonra, kimliklere diğer Azure kaynaklarına erişim izinleri vermek için roller atarsınız. Bu öğreticide, Go uygulamasının anahtar kasası örneğinde bir gizli dizi oluşturabilmesi için yerleşik rolünü Key Vault Contributor yönetilen kimliğe atayacaksınız.

Aşağıdaki seçeneklerden birini belirleyin:

1. Seçenek: Sistem tarafından atanan kimliğe rol atama

Rolü sistem tarafından atanan yönetilen kimliğe atamak Key Vault Contributor için aşağıdaki komutları çalıştırın:

#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
scope=$(az keyvault show --name go-on-azure-kv --query id -o tsv)

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

Seçenek 2: Kullanıcı tarafından atanan kimliğe rol atama

Rolü kullanıcı tarafından atanan yönetilen kimliğe atamak Key Vault Contributor için aşağıdaki komutları çalıştırın:

#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 go-on-azure-kv --query id -o tsv

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

Yerleşik roller hakkında daha fazla bilgi edinmek için Bkz . Azure yerleşik rolleri.

4. Go ile anahtar kasası gizli dizisi oluşturma

Azure sanal makinesine SSH'nin ardından Go'yı yükleyin ve Go paketini derleyin.

Azure VM'ye Go yükleme

  1. Azure sanal makinesinin genel IP adresini alın.

    az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
    
  2. Azure VM'de SSH.

    ssh azureuser@<public-ip>
    

    değerini Azure VM'nin genel IP adresiyle değiştirin <public-ip> .

  3. Go'u yükleme

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

Go paketini oluşturma

  1. Giriş dizininizde adıyla go-on-azure yeni bir dizin oluşturun.

    mkidr ~/go-on-azure
    
  2. Dizinine go-on-azure geçin.

    cd ~/go-on-azure
    
  3. Dosyasını oluşturmak go.mod için komutunu çalıştırıngo mod init.

    go mod init go-on-azure
    
  4. Gerekli Go modüllerini yüklemek için komutunu çalıştırın go get .

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/azsecrets"
    
  5. Bir main.go dosya oluşturun ve aşağıdaki kodu dosyaya kopyalayın.

    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 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)
        }
    
        resp, err := client.SetSecret(context.TODO(), secretName, secretValue, 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()
    }
    
    

Kodu çalıştırmadan önce adlı KEY_VAULT_NAMEbir ortam değişkeni oluşturun. Ortam değişkeninin değerini daha önce oluşturulan Azure Key Vault adına ayarlayın. değerini Azure Key Vault örneğinizin adıyla değiştirin <KeyVaultName> .

export KEY_VAULT_NAME=<KeyVaultName>

Ardından, anahtar kasası gizli dizisi oluşturmak için komutunu çalıştırın go run .

go run main.go

Anahtar kasası gizli dizisinin Azure PowerShell, Azure CLI veya Azure portalı kullanılarak oluşturulduğunu doğrulayın.

Sonraki adımlar