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 ve uygulamanızda kimlik bilgilerini geçirme gereksinimini ortadan kaldırır. Azure'da barındırılan uygulamaların kimliğini doğrulamak ve diğer Azure kaynaklarıyla yetkilendirmek için yönetilen kimlikleri kullanabilirsiniz.
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.
Bu makaledeki adımları çalıştırmak için Azure CLI'yi kullanmak istiyorsanız:
Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.
CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.
Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.
İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.
Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
Bu makaledeki adımları çalıştırmak için Azure PowerShell kullanmak istiyorsanız:
- Azure PowerShell'i yerel olarak kullanmayı seçerseniz:
- Az PowerShell modülünün en son sürümünü yükleyin.
- Bağlan-AzAccount cmdlet'ini kullanarak Azure hesabınıza Bağlan.
- Azure Cloud Shell'i kullanmayı seçerseniz:
- Daha fazla bilgi için bkz . Azure Cloud Shell'e genel bakış.
- Azure PowerShell'i yerel olarak kullanmayı seçerseniz:
1. Azure kaynakları oluşturma
Başlamadan önce yeni bir kaynak grubu, sanal makine ve anahtar kasası örneği oluşturmanız gerekir.
Sanal makine dağıtma
Azure'a sanal makine dağıtma. Azure anahtar kasasında bu sanal makineden gizli dizi oluşturmak için Go kodunu çalıştırırsı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:0001-com-ubuntu-server-jammy:22_04-lts: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 --enable-rbac-authorization
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 GoUserIdentity
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 gizli dizi oluşturabilmesi için yerleşik rolünü Key Vault Secrets Officer
yönetilen kimliğe atarsı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 Secrets Officer
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
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
İkinci komutta değerini anahtar kasanızın adıyla değiştirin <keyVaultName>
. Son komutta ve <keyVaultId>
değerini ilk iki komutun çıkışıyla değiştirin<principalId>
.
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 Secrets Officer
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 <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
İkinci komutta değerini anahtar kasanızın adıyla değiştirin <keyVaultName>
. Son komutta ve <keyVaultId>
değerini ilk iki komutun çıkışıyla değiştirin<principalId>
.
Azure anahtar kasasındaki yerleşik roller hakkında daha fazla bilgi edinmek için bkz . Azure rol tabanlı erişim denetimiyle Key Vault anahtarlarına, sertifikalarına ve gizli dizilerine erişim sağlama. Azure'daki 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.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/security/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/security/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) } params := azsecrets.SetSecretParameters{Value: &secretValue} resp, err := client.SetSecret(context.TODO(), secretName, params, 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() }
adlı
KEY_VAULT_NAME
bir ortam değişkeni oluşturun. değerini Azure anahtar kasası örneğinizin adıyla değiştirin<keyVaultName>
.export KEY_VAULT_NAME=<keyVaultName>
Anahtar kasası gizli dizisi oluşturmak için komutunu çalıştırın
go run
.go run main.go
Başarılı olduğunda, çıkış aşağıdakine benzer:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
Anahtar kasası gizli dizisinin Azure PowerShell, Azure CLI veya Azure portalı kullanılarak oluşturulduğunu doğrulayabilirsiniz.
Not
Azure CLI veya Azure PowerShell kullanıyorsanız, Azure kullanıcı hesabınıza "Key Vault Gizli Dizileri Yetkilisi" veya "Key Vault Gizli Dizileri Kullanıcısı" gibi anahtar kasasında gizli dizileri okumasına izin veren bir rol atandığından emin olmanız gerekir.
5. Kaynakları temizleme
Bu makalede oluşturduğunuz Azure kaynaklarını artık kullanmak istemiyorsanız, bunları silmek iyi bir uygulamadır. Kullanılmayan kaynakları silmek, devam eden ücretlerden kaçınmanıza yardımcı olur ve aboneliğinizin dağınık kalmasını sağlar. Bu öğreticide kullandığınız kaynakları silmenin en kolay yolu kaynak grubunu silmektir.
az group delete --name go-on-azure --force-deletion-types Microsoft.Compute/virtualMachines --yes
force-deletion-type
bağımsız değişkeni komutuna kaynak grubundaki VM'lerin silinmesini zorlamasını söyler. bağımsız --yes
değişkeni komutuna onay istememelerini söyler.
Yukarıdaki komut, kaynak grubundaki anahtar kasasında geçici silme işlemi gerçekleştirir. Aboneliğinizden kalıcı olarak kaldırmak için aşağıdaki komutu girin:
az keyvault purge --name <keyVaultName> --no-wait
değerini anahtar kasanızın adıyla değiştirin <keyVaultName>
.