1. В чем разница между назначенным системой и назначенным пользователем управляемым идентификатором?
Согласно моему исследованию, назначенный системой управляемый идентификатор активируется непосредственно на Azure экземпляр службы. Жизненный цикл назначенного системой удостоверения напрямую связан с экземпляром службы Azure, на котором он включен. Если экземпляр удален, Azure автоматически очищает учетные данные и идентификационные данные в Azure AD.
Но назначенный пользователем управляемый идентификационный номер создается как отдельный ресурс Azure. После создания идентификатора его можно назначить одному или нескольким Azure экземплярам службы. Жизненный цикл назначенного пользователем удостоверения управляется отдельно от жизненного цикла Azure экземпляров службы, которым он назначен.
Подробнее см. В документе .
2. Как подготовить MSI, Azure Key хранилище и предоставить доступ
Предоставить назначенный пользователем управляемый идентификатор
Согласно моим исследованиям, если мы Если мы хотим предоставить назначенный пользователем управляемый идентификатор, мы можем использовать Azure REST API , Azure Powershell и Azure CLI
Например,
Azure CLI
az login
az identity create -g <RESOURCE GROUP> -n <USER ASSIGNED IDENTITY NAME>
Azure REST API a. Получить токен доступа с помощью Azure CLI
az login
az account get-access-token
b. Позвоните остальным api
curl 'https://management.azure.com/subscriptions/<SUBSCRIPTION ID>/resourceGroup
s/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>?api-version=2015-08-31-preview' -X PUT -d '{"loc
ation": "<LOCATION>"}' -H "Content-Type: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
Provision Azure Key хранилище и предоставьте доступ
Согласно моему исследованию, если мы хотим реализовать это, мы можем, если мы хотим предоставить пользователю назначенный управляемый идентификатор, мы можем использовать Azure REST API , Azure Powershell , Azure CLI и SDK (например, net). Для получения более подробной информации, пожалуйста, обратитесь к документу
Например
Azure Rest API
a. Получить токен доступа с помощью Azure CLI
az login
az account get-access-token
b. Позвоните остальным api
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}?api-version=2018-02-14
Header :
Content-Type: application/json
Authorization: Bearer <ACCESS TOKEN>
Body
{
"location": "westus",
"properties": {
"tenantId": "<your tenant id>",
"sku": {
"family": "A",
"name": "standard"
},
"accessPolicies": [
{
"tenantId": "<your tenant id>",
"objectId": "<the object id of the MSI>",
"permissions": {
"keys": [
"encrypt",
"decrypt",
"wrapKey",
"unwrapKey",
"sign",
"verify",
"get",
"list",
"create",
"update",
"import",
"delete",
"backup",
"restore",
"recover",
"purge"
],
"secrets": [
"get",
"list",
"set",
"delete",
"backup",
"restore",
"recover",
"purge"
],
"certificates": [
"get",
"list",
"delete",
"create",
"import",
"update",
"managecontacts",
"getissuers",
"listissuers",
"setissuers",
"deleteissuers",
"manageissuers",
"recover",
"purge"
]
}
}
],
"enabledForDeployment": true,
"enabledForDiskEncryption": true,
"enabledForTemplateDeployment": true
}
}
. Net SDK
a. создать субъект обслуживания с помощью Azure CLI
az login
az ad sp create-for-rbac -n "MyApp" --role contributor --sdk-auth
b. Код. Для получения более подробной информации, пожалуйста, обратитесь к образец
// please install package Microsoft.Azure.Management.Fluent
var credentials = SdkContext.AzureCredentialsFactory
.FromServicePrincipal(<the sp app id>,
<the sp password>,
tenantId,
AzureEnvironment.AzureGlobalCloud);
var azure = Microsoft.Azure.Management.Fluent.Azure
.Configure()
.Authenticate(credentials)
.WithSubscription ("<your subscription id>");
var vault =await azure.Vaults.Define("")
.WithRegion(Region.AsiaSouthEast)
.WithExistingResourceGroup("groupname")
.DefineAccessPolicy()
.ForObjectId("the object id of msi")
.AllowCertificateAllPermissions()
.AllowKeyAllPermissions()
.AllowSecretAllPermissions()
.Attach()
.WithDeploymentEnabled()
.WithDiskEncryptionEnabled()
.WithTemplateDeploymentEnabled()
.WithSku(Microsoft.Azure.Management.KeyVault.Fluent.Models.SkuName.Standard)
.CreateAsync()