簡體   English   中英

Azure VM 自定義腳本擴展身份訪問存儲帳戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM