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:
- 1. Seçenek: Gizli dizi ile Azure hizmet sorumlusu oluşturma
- 2. Seçenek: Sertifikayla Azure hizmet sorumlusu oluşturma
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 DefaultAzureCredential
kimlik 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 DefaultAzureCredential
daha 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.
Giriş dizininizde adlı
go-on-azure
yeni bir dizin oluşturun.mkdir ~/go-on-azure
Dizinine
go-on-azure
geçin.cd ~/go-on-azure
Dosyasını oluşturmak
go.mod
için komutunu çalıştırıngo mod init
.go mod init go-on-azure
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"
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") }
adlı
KEY_VAULT_NAME
bir 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>
.go run
Yeni anahtar kasası gizli dizisini oluşturmak için komutunu çalıştırın.go run main.go
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin