Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure App Service, Azure Sanal Makineler veya Azure Container Instances gibi hizmetleri kullanarak bir uygulamayı Azure'da barındırdığınızda, Azure kaynaklarına bir uygulamanın kimliğini doğrulamak için önerilen yaklaşım yönetilen kimlik'tir.
Yönetilen kimlik, gizli anahtar veya başka bir uygulama gizli dizisi kullanmaya gerek kalmadan diğer Azure kaynaklarına bağlanabilecek şekilde uygulamanız için bir kimlik sağlar. Azure, uygulamanızın kimliğini ve bağlanmasına izin verilen kaynakları dahili olarak bilir. Azure, uygulama gizli dizilerini yönetmek zorunda kalmadan uygulamanın diğer Azure kaynaklarına bağlanmasına izin vermek üzere otomatik olarak Microsoft Entra belirteçlerini almak için bu bilgileri kullanır.
Not
Azure Kubernetes Service (AKS) üzerinde çalışan uygulamalar, Azure kaynaklarıyla kimlik doğrulaması yapmak için bir iş yükü kimliği kullanabilir. AKS'de iş yükü kimliği, yönetilen kimlik ile Kubernetes hizmet hesabı arasındaki güven ilişkisini temsil eder. AKS'ye dağıtılan bir uygulama böyle bir ilişkide Kubernetes hizmet hesabıyla yapılandırılmışsa DefaultAzureCredential
yönetilen kimliği kullanarak uygulamanın kimliğini Azure'da doğrular. İş yükü kimliği kullanarak kimlik doğrulaması, Azure Kubernetes Serviceile Microsoft Entra İş Yükü Kimliğini Kullanma bölümünde ele alınmaktadır. İş yükü kimliğini yapılandırma adımları için bkz. Azure Kubernetes Service (AKS) kümesinde iş yükü kimliğini dağıtma ve yapılandırma.
Yönetilen kimlik türleri
İki tür yönetilen kimlik vardır:
- Sistem tarafından atanan yönetilen kimlikler - Bu tür yönetilen kimlikler Azure tarafından sağlanır ve doğrudan bir Azure kaynağına bağlıdır. Bir Azure kaynağında yönetilen kimliği etkinleştirdiğinizde, bu kaynak için sistem tarafından atanan bir yönetilen kimlik alırsınız. Sistem tarafından atanan yönetilen kimlik, ilişkili olduğu Azure kaynağının yaşam döngüsüne bağlıdır. Kaynak silindiğinde Azure sizin için kimliği otomatik olarak siler. Tek yapmanız gereken kodunuzu barındıran Azure kaynağı için yönetilen kimliği etkinleştirmek olduğundan, bu yaklaşım en kolay yönetilen kimlik türüdür.
- Kullanıcı tarafından atanan yönetilen kimlikler - Yönetilen kimliği tek başına Azure kaynağı olarak da oluşturabilirsiniz. Bu yaklaşım en sık çözümünüzde aynı kimliği ve aynı izinleri paylaşması gereken birden çok Azure kaynağı üzerinde çalışan birden çok iş yükü olduğunda kullanılır. Örneğin, çözümünüzde aynı Azure kaynakları kümesine erişmesi gereken birden çok App Service ve sanal makine örneğinde çalışan bileşenler varsa, bu kaynaklar arasında kullanılan kullanıcı tarafından atanan yönetilen kimlik mantıklıdır.
Bu makale, bir uygulama için sistem tarafından atanan yönetilen kimliği etkinleştirme ve kullanma adımlarını kapsar. Kullanıcı tarafından atanan yönetilen kimlik kullanmanız gerekiyorsa, kullanıcı tarafından atanan yönetilen kimliğin nasıl oluşturulacağını görmek için Kullanıcı tarafından atanan yönetilen kimlikleri yönetme
1 - Uygulamayı barındıran Azure kaynağında yönetilen kimliği etkinleştirme
İlk adım, uygulamanızı barındıran Azure kaynağında yönetilen kimliği etkinleştirmektir. Örneğin, Azure Container Apps kullanarak bir Gin uygulaması barındırırsanız kapsayıcı uygulaması için yönetilen kimliği etkinleştirmeniz gerekir. Uygulamanızı barındırmak için bir sanal makine kullanıyorsanız VM'nizin yönetilen kimliği kullanmasını sağlayabilirsiniz.
Yönetilen kimliğin Azure portalı veya Azure CLI kullanarak Bir Azure kaynağı için kullanılmasını etkinleştirebilirsiniz.
Azure CLI komutları
Bir Azure kaynağı için yönetilen kimliği etkinleştirmek için kullanılan Azure CLI komutları az <command-group> identity --resource-group <resource-group-name> --name <resource-name>
biçimindedir. Popüler Azure hizmetleri için belirli komutlar aşağıda gösterilmiştir.
az containerapp identity assign \
--resource-group <resource-group-name> \
--name <container-app-name> \
--system-assigned
Çıkış aşağıdaki gibi görünür.
{
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
principalId
değeri, yönetilen kimliğin benzersiz kimliğidir. Sonraki adımda bu değerlere ihtiyaç duyacağınız için bu çıkışın bir kopyasını saklayın.
2 - Yönetilen kimliğe rol atama
Ardından, uygulamanızın hangi rollere (izinlere) ihtiyacı olduğunu belirlemeniz ve yönetilen kimliği Azure'daki bu rollere atamanız gerekir. Yönetilen kimliğe kaynak, kaynak grubu veya abonelik kapsamında roller atanabilir. Bu örnekte, çoğu uygulama tüm Azure kaynaklarını tek bir kaynak grubunda gruplandırdığından kaynak grubu kapsamında rollerin nasıl atandığı gösterilmektedir.
Azure'da yönetilen kimliğe az role assignment create komutu kullanılarak bir rol atanır. Atanan için, 1. adımda kopyaladığınız principalId
kullanın.
az role assignment create --assignee {managedIdentityprincipalId} \
--scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"
Bir hizmet sorumlusunun atanabileceği rol adlarını almak için az role definition list komutunu kullanın.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Örneğin, kimliği
az role assignment create --assignee aaaaaaaa-bbbb-cccc-1111-222222222222 \
--scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/your-resource-group-name \
--role "Storage Blob Data Contributor"
Azure CLI kullanarak kaynak veya abonelik düzeyinde izin atama hakkında bilgi için Azure CLIkullanarak Azure rollerini atama
3 - Uygulamanızda DefaultAzureCredential'i kullanın
Kodunuz Azure'da çalıştırıldığında ve uygulamanızı barındıran Azure kaynağında yönetilen kimlik etkinleştirildiğinde, DefaultAzureCredential
kullanılacak kimlik bilgilerini aşağıdaki sırayla belirler:
-
AZURE_CLIENT_ID
,AZURE_TENANT_ID
veAZURE_CLIENT_SECRET
veyaAZURE_CLIENT_CERTIFICATE_PATH
ve (isteğe bağlı olarak)AZURE_CLIENT_CERTIFICATE_PASSWORD
ortam değişkenleri tarafından tanımlanan hizmet sorumlusunun ortamını denetleyin. - Kullanıcı tarafından atanan yönetilen kimliğin istemci kimliği için
AZURE_CLIENT_ID
ortam değişkenini denetleyin. - Azure kaynağı için sistem tarafından atanan yönetilen kimliği, etkinleştirildiyse kullanın.
Bu makalede, Azure Container App için sistem tarafından atanan yönetilen kimliği kullanıyoruz, bu nedenle ortamda yönetilen kimlik yapılandırmamız veya bunu parametre olarak geçirmemiz gerekmez. Aşağıdaki adımlarda DefaultAzureCredential
nasıl kullanacağınız gösterilmektedir.
İlk olarak, azidentity
paketini uygulamanıza ekleyin.
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Ardından, uygulamanızda bir Azure SDK istemcisi örneği oluşturan tüm Go kodları için şunları yapmak istersiniz:
-
azidentity
paketini içeri aktarın. -
DefaultAzureCredential
türünün bir örneğini oluşturun. -
DefaultAzureCredential
türünün örneğini Azure SDK istemci oluşturucusna geçirin.
Aşağıdaki kod kesiminde azure depolama blob istemcisi ile bu adımların bir örneği gösterilmiştir.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
const (
account = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
containerName = "sample-container"
blobName = "sample-blob"
sampleFile = "path/to/sample/file"
)
func main() {
// create a credential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// TODO: handle error
}
// create a client for the specified storage account
client, err := azblob.NewClient(account, cred, nil)
if err != nil {
// TODO: handle error
}
// TODO: perform some action with the azblob Client
// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}
Go için Azure SDK kimlik doğrulamasına genel bakış makalesinde açıklandığı gibi, DefaultAzureCredential
birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında kullanılan kimlik doğrulama yöntemini belirler. Bu yaklaşımın avantajı, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda farklı kimlik doğrulama yöntemleri kullanabilmesidir. Yerel geliştirme sırasında iş istasyonunuzda yukarıdaki kod çalıştırıldığında, DefaultAzureCredential
, ortam ayarları tarafından belirlenen bir uygulama hizmeti ilkesi veya geliştirici aracı kimlik bilgilerini kullanarak diğer Azure kaynaklarına kimlik doğrulaması yapar. Bu nedenle, hem yerel geliştirme sırasında hem de Azure'a dağıtıldığında uygulamanızın Kimliğini Azure kaynaklarına doğrulamak için aynı kod kullanılabilir.
Önemli
DefaultAzureCredential
, Azure barındırma ortamlarında kullanılan kimlik bilgilerini ve yerel geliştirmede kullanılan kimlik bilgilerini birleştirerek Azure'a dağıtım yapan uygulamalar geliştirirken kimlik doğrulamasını basitleştirir. Üretimde, kimlik doğrulamasının daha öngörülebilir ve hata ayıklaması daha kolay olması için belirli bir kimlik bilgisi türünü kullanmak daha iyidir.
4 - Uygulamanızda ManagedIdentityCredential'i uygulayın
ManagedIdentityCredential
uygulama adımları, DefaultAzureCredential
türünü kullanmakla aynıdır.
İlk olarak, azidentity
paketini uygulamanıza ekleyin.
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Ardından, uygulamanızda bir Azure SDK istemcisi örneği oluşturan tüm Go kodları için şunları yapmak istersiniz:
-
azidentity
paketini içeri aktarın. -
ManagedIdentityCredential
türünün bir örneğini oluşturun. -
ManagedIdentityCredential
türünün örneğini Azure SDK istemci oluşturucusna geçirin.
Aşağıdaki kod kesiminde azure depolama blob istemcisi ile bu adımların bir örneği gösterilmiştir.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
const (
account = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
containerName = "sample-container"
blobName = "sample-blob"
sampleFile = "path/to/sample/file"
)
func main() {
// create a credential
cred, err := azidentity.NewManagedIdentityCredential(nil)
// When using User Assigned Managed Identity use this instead and pass your client id in the options
// clientID := azidentity.ClientID("abcd1234-...")
// opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID}
// cred, err := azidentity.NewManagedIdentityCredential(&opts)
if err != nil {
// TODO: handle error
}
// create a client for the specified storage account
client, err := azblob.NewClient(account, cred, nil)
if err != nil {
// TODO: handle error
}
// TODO: perform some action with the azblob Client
// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}