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.
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.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
- 2. Seçenek: Kullanıcı tarafından atanan kimlik oluşturma
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
- Seçenek 2: Kullanıcı tarafından atanan kimliğe rol atama
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
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
Azure VM'de SSH.
ssh azureuser@<public-ip>
değerini Azure VM'nin genel IP adresiyle değiştirin
<public-ip>
.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
Giriş dizininizde adıyla
go-on-azure
yeni bir dizin oluşturun.mkidr ~/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"
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_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. 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
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