Aracılığıyla paylaş


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 ve uygulamanızda kimlik bilgilerini geçirme gereksinimini ortadan kaldırır. Azure'da barındırılan uygulamaların kimliğini doğrulamak ve diğer Azure kaynaklarıyla yetkilendirmek için yönetilen kimlikleri kullanabilirsiniz.

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.
  • Bu makaledeki adımları çalıştırmak için Azure CLI'yi kullanmak istiyorsanız:

    • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

    • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

      • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

      • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

      • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makaledeki adımları çalıştırmak için Azure PowerShell kullanmak istiyorsanız:

1. Azure kaynakları oluşturma

Başlamadan önce yeni bir kaynak grubu, sanal makine ve anahtar kasası örneği oluşturmanız gerekir.

Sanal makine dağıtma

Azure'a sanal makine dağıtma. Azure anahtar kasasında bu sanal makineden gizli dizi oluşturmak için Go kodunu çalıştırırsı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:0001-com-ubuntu-server-jammy:22_04-lts: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 --enable-rbac-authorization

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 GoUserIdentity

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 gizli dizi oluşturabilmesi için yerleşik rolünü Key Vault Secrets Officer yönetilen kimliğe atarsı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 Secrets Officer 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
az keyvault show --name <keyVaultName> --query id -o tsv

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

İkinci komutta değerini anahtar kasanızın adıyla değiştirin <keyVaultName> . Son komutta ve <keyVaultId> değerini ilk iki komutun çıkışıyla değiştirin<principalId>.

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 Secrets Officer 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 <keyVaultName> --query id -o tsv

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

İkinci komutta değerini anahtar kasanızın adıyla değiştirin <keyVaultName> . Son komutta ve <keyVaultId> değerini ilk iki komutun çıkışıyla değiştirin<principalId>.

Azure anahtar kasasındaki yerleşik roller hakkında daha fazla bilgi edinmek için bkz . Azure rol tabanlı erişim denetimiyle Key Vault anahtarlarına, sertifikalarına ve gizli dizilerine erişim sağlama. Azure'daki 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.

    mkdir ~/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/security/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/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. adlı KEY_VAULT_NAMEbir ortam değişkeni oluşturun. değerini Azure anahtar kasası örneğinizin adıyla değiştirin <keyVaultName> .

    export KEY_VAULT_NAME=<keyVaultName>
    
  7. Anahtar kasası gizli dizisi oluşturmak için komutunu çalıştırın go run .

    go run main.go
    

    Başarılı olduğunda, çıkış aşağıdakine benzer:

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

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

Not

Azure CLI veya Azure PowerShell kullanıyorsanız, Azure kullanıcı hesabınıza "Key Vault Gizli Dizileri Yetkilisi" veya "Key Vault Gizli Dizileri Kullanıcısı" gibi anahtar kasasında gizli dizileri okumasına izin veren bir rol atandığından emin olmanız gerekir.

5. Kaynakları temizleme

Bu makalede oluşturduğunuz Azure kaynaklarını artık kullanmak istemiyorsanız, bunları silmek iyi bir uygulamadır. Kullanılmayan kaynakları silmek, devam eden ücretlerden kaçınmanıza yardımcı olur ve aboneliğinizin dağınık kalmasını sağlar. Bu öğreticide kullandığınız kaynakları silmenin en kolay yolu kaynak grubunu silmektir.

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

force-deletion-type bağımsız değişkeni komutuna kaynak grubundaki VM'lerin silinmesini zorlamasını söyler. bağımsız --yes değişkeni komutuna onay istememelerini söyler.

Yukarıdaki komut, kaynak grubundaki anahtar kasasında geçici silme işlemi gerçekleştirir. Aboneliğinizden kalıcı olarak kaldırmak için aşağıdaki komutu girin:

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

değerini anahtar kasanızın adıyla değiştirin <keyVaultName> .

Sonraki adımlar