2017-08-13 65 views
0

即使我正在訂閱所有者配置文件下執行它,我無法執行Azure Powershell命令Add-AzureKeyVaultManagedStorageAccount。我通過以下方式成功創建keyvault,存儲賬戶,並存儲帳戶關鍵:Azure Powershell添加AzureKeyVaultManagedStorageAccount失敗

$KeyVault = New-AzureRmKeyVault ` 
    -VaultName "<redacted>" ` 
    -ResourceGroupName $ResourceGroup.ResourceGroupName ` 
    -Location $Location ` 
    -EnabledForDiskEncryption ` 
    -EnabledForDeployment ` 
    -Tag $Tags 

$StorageAccount = New-AzureRmStorageAccount ` 
    -ResourceGroupName $ResourceGroup.ResourceGroupName ` 
    -Name "<redacted>" ` 
    -SkuName Standard_LRS ` 
    -Location $Location ` 
    -Kind "Storage" ` 
    -EnableEncryptionService "Blob,File" ` 
    -Tag $Tags ` 
    -AssignIdentity 

$StorageAccountKey = New-AzureRmStorageAccountKey ` 
    -ResourceGroupName $ResourceGroup.ResourceGroupName ` 
    -Name $StorageAccount.StorageAccountName ` 
    -KeyName "key1" 

,但想在我的關鍵金庫管理存儲帳戶密鑰失敗

$KeyVaultManagedStorageAccount = Add-AzureKeyVaultManagedStorageAccount ` 
    -VaultName $KeyVault.VaultName ` 
    -AccountName $StorageAccount.StorageAccountName ` 
    -AccountResourceId $StorageAccount.Id ` 
    -ActiveKeyName "key1" ` 
    -Tag $Tags 

這是錯誤。正如我所提到的,我是在訂閱所有者配置文件下執行的,那麼它如何不能獲得授權?其次,下面標識的「相同的編輯對象ID」與我可以找到的訂閱中的任何對象不對應。我第一次遇到了Azure Powershell 4.2.1的這個問題,並且已經升級到4.3.0並且仍然存在問題。

Add-AzureKeyVaultManagedStorageAccount : The client '<same redacted object Id>' with object id '<same redacted object Id>' does not have authorization to perform action 
'Microsoft.Authorization/permissions/read' over scope 
'/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name>/providers/Microsoft.Authorization'. 
At E:\BitSync\Scripts\Azure\Create-Environment.ps1:129 char:34 
+ ... VaultManagedStorageAccount = Add-AzureKeyVaultManagedStorageAccount ` 
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : CloseError: (:) [Add-AzureKeyVaultManagedStorageAccount], KeyVaultErrorException 
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.KeyVault.AddAzureKeyVaultManagedStorageAccount 

順便說一句,有沒有出現任何的方式,通過重點庫比剪切和粘貼等門戶來管理存儲帳戶的密鑰。

回答

3

根據您的錯誤消息,它是RBAC問題,您使用的服務主體在該租戶中沒有權限。

租戶有訂閱,服務主體屬於租戶。 Azure資源管理器還爲給定委託人提供基於角色的授權,這將授予其在Azure資源上的權利。看起來服務負責人沒有權利閱讀該訂閱。

我們可以通過Azure門戶在資源範圍內分配RBAC角色,關於分配RBAC的更多信息請參考此link

注意
重點跳馬需要的權限列表重新生成密鑰用於存儲account.we可以使用以下步驟來做到這一點:

獲取的ObjectId帳戶:

Get-AzureRmADServicePrincipal -SearchString "Azure Key Vault" 

將存儲關鍵操作員角色分配給Azure密鑰庫標識:

New-AzureRmRoleAssignment -ObjectId <objectId of AzureKeyVault from previous command> -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope '<azure resource id of storage account>' 

有關基於角色的訪問控制權限設置的更多信息,請參閱此article

更新

此外,我們還應該設置天青鍵金庫訪問策略權限存儲

​​

這裏是我的keyvault截圖:

enter image description here

通過這種方式,我們可以使用您的腳本來添加鍵庫的存儲帳戶。

enter image description here UPDATE2:
我有重現此錯誤,根本原因是,我們不能授予服務主體Azure Key Vault許可。

我們可以使用這個命令找到對象ID,和你的錯誤信息一樣。

Get-AzureRmADServicePrincipal -SearchString "Azure Key Vault" 

然後我們授與此服務主體,使用這個腳本:

New-AzureRmRoleAssignment -ObjectId '2f6d671f-6c8d-4104-812a-390c5648aed0' -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope '/subscriptions/53847abb-xxxx-xxxx-xxxx-xxxxe29axxxx/resou 
rceGroups/jasonkey/providers/Microsoft.Storage/storageAccounts/jasondisk321' 

這裏是我的結果:

enter image description here

UPDATE3:
運行Add-AzureKeyVaultManagedStorageAccount後,我們應該運行這個命令來獲得祕密UR我:

Set-AzureKeyVaultManagedStorageSasDefinition -Service Blob -ResourceType Container,Service -VaultName yourKV 
-AccountName msak01 -Name blobsas1 -Protocol HttpsOnly -ValidityPeriod ([System.Timespan]::FromDays(1)) -Permission Read,List 

下面是結果: enter image description here

enter image description here

更多獲取祕密URI信息,請參閱本article

+0

傑森,這不適合我。 Get-AzureRmADServicePrincipal返回2個屬性,看起來他們可能是New-AzureRmRoleAssignment,ApplicationId和Id的objectId,但是使用其中一個導致錯誤「無法驗證參數'ObjectId'參數。指定一個類型爲」System.Guid「的參數然後再試一次」。他們都看起來像Guids給我。 –

+0

@JackFox我們可以使用'get-azurermkeyvault'來獲取信息,在那個輸出中,我們可以找到對象ID,請檢查截圖。 –

+0

Jason,修復了幾件事情:1)它不是keyvault的ObjectId,而是$ KeyVault.AccessPolicies [0] .ObjectId。感謝您指出了這一點。 2)而存儲帳戶的資源ID實際上是$ StorageAccount.Id。一切都很好。我又回到了我原來的問題。 Add-AzureKeyVaultManagedStorageAccount拋出錯誤對象ID爲'無法識別的GUID'的客戶端'無法識別的GUID'沒有權限執行操作'Microsoft.Authorization/permissions/read'超過作用域資源ID的存儲帳戶' –