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

Bu öğreticide, azure sanal makinesini kullanarak Azure'da kimlik doğrulaması yapmak için yönetilen kimliğe sahip bir Azure Go için Azure SDK.

Yönetilen kimlikler, doğrudan bir Azure kaynağına kimlik sağlayarak kimlik bilgilerini yönetmenizi sağlar. Kimliğe atanan izinler, kaynağa yönetilen kimlikleri destekleyen diğer Azure kaynaklarına erişim izni sağlar. Uygulamanıza kimlik bilgileri geçme ihtiyacı ortadan kaldırılarak.

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

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Go yüklü:Sürüm 1.16 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 bir sanal makine dağıtın. Bu sanal makineden Azure Key Vault'ta gizli anahtar oluşturmak için Go kodunu çalıştırabilirsiniz.

  1. Bir 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ştirme.

  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>
    

    Parolanızı <password> 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 Key Vault örneği oluşturun:

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

yerine <keyVaultName> genel olarak benzersiz bir ad yazın.

2. Yönetilen kimlik oluşturma

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

Sistem tarafından atanan kimlikler doğrudan bir Azure kaynağına iliştirilmiş ve yalnızca bu kaynakla sınırlıdır. Kullanıcı tarafından atanan kimlikler, bir veya daha fazla Azure kaynağına atanabilir 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:

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

Sistem tarafından atanan bir 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 bir 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>

yerine <UserIdentityId> yönetilen kullanıcı kimliğinin kimliğini girin.

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

3. Yönetilen kimliğe rol atama

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

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 Key Vault Contributor kimliğe atamak 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>'

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

Rolü kullanıcı tarafından atanan yönetilen Key Vault Contributor kimliğe atamak 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 azure yerleşik rolleri'ne göz atabilirsiniz.

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

Ardından Azure sanal makinesine SSH ile Gidin'i yükleyin ve Go paketini hazırlar.

Azure VM'ye Go yükleme

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

    az vm show -d -g QuickstartAnsible-rg -n QuickstartAnsible-vm --query publicIps -o tsv
    
  2. Azure VM'ye SSH ile.

    ssh azureuser@<public-ip>
    

    yerine <public-ip> Azure VM'nin genel IP adresini yazın.

  3. Go'ya 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ş dizininize adıyla yeni go-on-azure bir dizin yazın.

    mkidr ~/go-on-azure
    
  2. dizinine go-on-azure değiştirme.

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

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

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/keyvault/armkeyvault"
    go get "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
    go get "github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
    
  5. Bir main.go dosya oluşturun ve içine aşağıdaki kodu kopyalayın.

    package armkeyvault_test
    
    import (
        "context"
        "log"
    
        "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
        "github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
        "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
        "github.com/Azure/azure-sdk-for-go/sdk/keyvault/armkeyvault"
    )
    
    func SecretsClient_CreateOrUpdate() {
        cred, err := azidentity.NewDefaultAzureCredential(nil)
        if err != nil {
            log.Fatalf("failed to obtain a credential: %v", err)
        }
        client := armkeyvault.NewSecretsClient(arm.NewDefaultConnection(cred, nil), "")
        resp, err := client.CreateOrUpdate(
            context.Background(),
            "<resourceGroupName>",
            "<keyVaultName>",
            "<secretName>",
            armkeyvault.SecretCreateOrUpdateParameters{
                Properties: &armkeyvault.SecretProperties{
                    Attributes: &armkeyvault.SecretAttributes{
                        Attributes: armkeyvault.Attributes{
                            Enabled: to.BoolPtr(true),
                        },
                    },
                    Value: to.StringPtr("<password>"),
                }}, nil)
        if err != nil {
            log.Fatalf("failed to create the key: %v", err)
        }
        log.Printf("Secret ID: %v\n", *resp.Secret.ID)
    }
    
    func main() {
        SecretsClient_CreateOrUpdate()
    }
    

    <password>, <resourceGroupName> , ve değerlerini <keyVaultName> uygun <secretName> değerlerle değiştirin.

  6. Anahtar go run kasası gizli anahtarı oluşturmak için komutunu çalıştırın

    go run main.go
    

Azure PowerShell, Azure CLI veya Azure portal.

Sonraki adımlar