![](/img/trans.png)
[英]Azure VM Scaleset custom script extension not working - possibly failing to get VM identity?
[英]Azure VM Custom script extension identity access to Storage Account
在 VM 的自定義腳本擴展中,我想執行以下命令:
#download azcopy from http://aka.ms/downloadazcopy
c:\azcopy login --identity
C:\azcopy copy https://mystorage.blob.core.windows.net/software C:\Temp --recursive
但要使其正常工作,需要將 VM 的身份添加為“Storage Blob Data Contributor”。 在 terraform 我們可以這樣做
resource"azurerm_role_assignment""role" {
scope= data.azurerm_storage_account.vault.id
role_definition_name="Storage Blob Data Contributor"
principal_id= azurerm_windows_virtual_machine.vm.identity.0.principal_id
}
但是如果我們不使用 terraform 而是使用 Azure DevOps 和 ARM 模板,你將如何執行它? 因為尚未創建 VM 以授予身份訪問權限。 自定義腳本擴展是創建的一部分。
您可以使用 Azure 資源管理器模板啟用系統分配的托管標識。 參考這里。
步驟1
要啟用系統分配的托管標識,請在資源部分中找到感興趣的Microsoft.Compute/virtualMachines
資源,並在與“type”相同的級別添加"identity"
屬性"type": "Microsoft.Compute/virtualMachines"
屬性。 使用以下語法:
"identity": {
"type": "SystemAssigned"
},
第2步
完成后,應將以下部分添加到模板的資源部分,它應類似於以下內容:
"resources": [
{
//other resource provider properties...
"apiVersion": "2018-06-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[variables('vmName')]",
"location": "[resourceGroup().location]",
"identity": {
"type": "SystemAssigned",
},
},
//The following appears only if you provisioned the optional VM extension (to be deprecated)
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "[concat(variables('vmName'),'/ManagedIdentityExtensionForWindows')]",
"apiVersion": "2018-06-01",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
],
"properties": {
"publisher": "Microsoft.ManagedIdentity",
"type": "ManagedIdentityExtensionForWindows",
"typeHandlerVersion": "1.0",
"autoUpgradeMinorVersion": true,
"settings": {
"port": 50342
}
}
}
]
第三步
授予它對創建它的資源組的“存儲 Blob 數據參與者”角色訪問權限。
在參數部分下添加以下內容:
"builtInRoleType": {
"type": "string",
"defaultValue": "StorageBlobDataContributor"
},
"rbacGuid": {
"type": "string"
}
在變量部分下添加以下內容:
"StorageBlobDataContributor": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'ba92f5b4-2d11-453d-a403-e96b0029c9fe')]"
在資源部分下添加以下內容:
{
"apiVersion": "2017-09-01",
"type": "Microsoft.Authorization/roleAssignments",
"name": "[parameters('rbacGuid')]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[reference(variables('vmResourceId'), '2017-12-01', 'Full').identity.principalId]",
"scope": "[resourceGroup().id]"
},
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
]
}
授予具有 RBAC 角色的身份以訪問特定存儲帳戶。 參考這個答案。
{
"apiVersion": "2018-01-01-preview",
"type": "Microsoft.Storage/storageAccounts/providers/roleAssignments",
"name": "[concat(variables('storageAccountName'), '/Microsoft.Authorization/',parameters('rbacGuid'))]",
"properties": {
"roleDefinitionId": "[variables(parameters('builtInRoleType'))]",
"principalId": "[reference(resourceId('Microsoft.Compute/virtualMachines',parameters('vmName')), '2017-12-01', 'Full').identity.principalId]"
},
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.