Hizmet sorumlusuyla Go için Azure SDK kimlik doğrulaması

Bu öğreticide, gizli dizi veya sertifika kullanarak Azure hizmet sorumlusuyla Azure'da kimlik doğrulaması yapmak için Go için Azure SDK'sını kullanacaksınız.

Azure hizmet sorumluları, bir Microsoft Entra kiracısında erişim ilkesini ve izinleri tanımlar. Oturum açma sırasında kimlik doğrulaması ve kaynak erişimi sırasında yetkilendirme gibi temel özellikleri etkinleştirme. Azure kaynaklarına erişmek için kişisel hesapları kullanma gereksinimini kaldırma. Go için Azure SDK'nın Azure Kimliği modülü, ortam değişkenlerini, gizli diziyi veya sertifikayı kullanarak hizmet sorumlusu kullanarak Azure'da kimlik doğrulaması yapmak için kullanışlı bir yol sağlar

Hizmet sorumlusu kullanarak Go için Azure SDK'sı oluşturmak ve 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 yeni bir kaynak grubu ve anahtar kasası örneği oluşturun.

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

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

değerini genel olarak benzersiz bir adla değiştirin <keyVaultName> . Çıkıştan Id öğesini de not alın; bunu hizmet hesabının kapsamı için kullanacaksınız.

2. Azure hizmet sorumlusu oluşturma

Azure hizmet sorumlusu oluşturmak için aşağıdaki tekniklerden birini kullanın:

Daha fazla Azure hizmet sorumlusu öğrenmek için bkz . Hizmet sorumlusu nesnesi.

1. Seçenek: Gizli dizi ile Azure hizmet sorumlusu oluşturma

Azure hizmet sorumlusu oluşturmak için aşağıdaki komutları çalıştırın.

az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>

ve <resourceGroupId> değerlerini uygun değerlerle değiştirin<servicePrincipalName>.

Parola değerini kopyaladığınızdan emin olun; alınamaz. Parolayı unutursanız hizmet sorumlusu kimlik bilgilerini sıfırlayın.

2. Seçenek: Sertifikayla Azure hizmet sorumlusu oluşturma

az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>

ve <resourceGroupId> değerlerini uygun değerlerle değiştirin<servicePrincipalName>.

3. Hizmet sorumlusuyla Azure'da kimlik doğrulaması

kullanarak, Azure'da DefaultAzureCredentialkimlik doğrulaması yapmak için ortama özgü kod yazmaktan kaçınabilirsiniz.

Ortam değişkenlerini tanımlayarak hizmet sorumlusu kimlik bilgilerinizi yapılandırmak için öğesini DefaultAzureCredential kullanın.

Hizmet sorumlusu kimlik bilgilerinizi yapılandırmak için aşağıdaki seçeneklerden birini belirleyin:

hakkında DefaultAzureCredentialdaha fazla bilgi edinmek için Bkz . Go için Azure SDK ile Azure kimlik doğrulaması

1. Seçenek: Gizli dizi ile kimlik doğrulaması

Aşağıdaki ortam değişkenlerini tanımlayın:

Değişken adı Değer
AZURE_CLIENT_ID Azure hizmet sorumlusunun uygulama kimliği
AZURE_TENANT_ID Uygulamanın Microsoft Entra kiracısının kimliği
AZURE_CLIENT_SECRET Azure hizmet sorumlusunun parolası
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

2. Seçenek: Sertifikayla kimlik doğrulaması

Değişken adı Değer
AZURE_CLIENT_ID Azure hizmet sorumlusunun uygulama kimliği
AZURE_TENANT_ID Uygulamanın Microsoft Entra kiracısının kimliği
AZURE_CLIENT_CERTIFICATE_PATH Özel anahtar içeren bir sertifika dosyasının yolu (parola koruması olmadan)
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

ResourceClient kimliğini doğrulamak için DefaultAzureCredential kullanma

NewDefaultAzureCredential ResourceClient kimliğini doğrulamak için Azure Identity modülünün işlevini kullanın.

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

4. Örnek kod

Hizmet sorumlunuzun Azure'da kimlik doğrulaması gerçekleştirdiğini ve kaynak grubu için uygun izinlere sahip olduğunu doğrulamak için aşağıdaki kod örneğini kullanın.

  1. Giriş dizininizde adlı 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/keyvault/azsecrets"
    
  5. adlı main.go bir dosya oluşturun ve aşağıdaki kodu ekleyin.

    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(name, value string) {
    	keyVaultName := os.Getenv("KEY_VAULT_NAME")
    	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(), name, value, 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("ExamplePassword", "hVFkk965BuUv")
    }
    
    
  6. 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.

    export KEY_VAULT_NAME=<KeyVaultName>
    

    değerini Azure Key Vault örneğinizin adıyla değiştirin <KeyVaultName> .

  7. go run Yeni anahtar kasası gizli dizisini oluşturmak için komutunu çalıştırın.

     go run main.go
    

Sonraki adımlar