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.
Bir Azure kaynak grubu oluşturun.
az group create --name go-on-azure --location eastusparametresini
--locationortamınız için uygun değerle değiştirme.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
- 2. Seçenek: Kullanıcı tarafından atanan kimlik oluşturma
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
- 2. Seçenek: 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 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
Azure sanal makinesinin genel IP adresini alır.
az vm show -d -g QuickstartAnsible-rg -n QuickstartAnsible-vm --query publicIps -o tsvAzure VM'ye SSH ile.
ssh azureuser@<public-ip>yerine
<public-ip>Azure VM'nin genel IP adresini yazın.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
Giriş dizininize adıyla yeni
go-on-azurebir dizin yazın.mkidr ~/go-on-azuredizinine
go-on-azuredeğiştirme.cd ~/go-on-azuredosyasını
go mod initoluşturmak içingo.modçalıştırın.go mod init go-on-azureGerekli
go getGo 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"Bir
main.godosya 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.Anahtar
go runkasası gizli anahtarı oluşturmak için komutunu çalıştırıngo run main.go
Azure PowerShell, Azure CLI veya Azure portal.