2017-08-13 15 views
0

Azure PowershellコマンドAdd-AzureKeyVaultManagedStorageAccountをサブスクリプションの所有者プロファイルで実行していても実行できません。私は成功し、次のようにしてkeyvault、ストレージアカウント、およびストレージアカウントキーを作成します。Azure Powershell Add-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 

失敗しました。私が言及したように、私はサブスクリプションの所有者のプロファイルの下で実行している、どのように認可を持っていないのですか?第2に、以下で識別される「同じ編集オブジェクト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 

ところで、カット・アンド・ペースト以外のポータルでキーのVaultを通じてストレージアカウントキーを管理するにはどのような方法があるように表示されません。

答えて

3

エラーメッセージによると、RBACの問題です。使用しているサービスプリンシパルにそのテナント内の権限がありません。

テナントにはサブスクリプションがあり、サービスプリンシパルはテナントに属します。 Azureリソースマネージャは、特定のプリンシパルのロールベースの認可も公開しています。これにより、Azureリソースに対する権限が与えられます。サービスプリンシパルは、そのサブスクリプションから読み取る権限を持っていないようです。

リソーススコープでAzureポータルを使用してRBACの役割を割り当てることができます。RBACの割り当ての詳細については、linkを参照してください。


キーボールトはそれを行うには、次の手順を使用することができ、ストレージaccount.weためリストへのアクセス権再生成キーを必要とします:

アカウントののObjectIdを取得します。

Get-AzureRmADServicePrincipal -SearchString "Azure Key Vault" 

Azure Key Vaultにストレージキーオペレーターの役割を割り当てます。

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 アップデート2:
私はこのエラーを再現する必要があり、根本的な原因は、私たちが校長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を取得する必要がありますI:ここでは

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

は結果である:秘密のURIを取得について enter image description here

enter image description here

詳しい情報は、このarticleを参照してください。

+0

ジェイソン、これは私のために働いていない。 Get-AzureRmADServicePrincipalは、New-AzureRmRoleAssignment、ApplicationIdおよびIdのobjectIdのように見える2つのプロパティを返しますが、どちらか一方を使用すると「パラメータ 'ObjectId」の引数を検証できません。' System.Guid 'そしてさらに試みる"。彼らはどちらも私の指導者のように見えます。 –

+0

@JackFox 'get-azurermkeyvault'を使って情報を取得することができます。その出力では、オブジェクトIDを見つけることができます。スクリーンショットを確認してください。 –

+0

Jasonは、1)keyvaultのObjectIdではなく、$ KeyVault.AccessPolicies [0] .ObjectIdという2つの問題を修正しました。それを指摘してくれてありがとう。 2)そして、ストレージアカウントのリソースIDは実際には$ StorageAccount.Idです。すべてが良いです。私は元の問題に戻ります。 Add-AzureKeyVaultManagedStorageAccountがエラーをスローするオブジェクトID 'unrecognized guid'を持つクライアント 'unrecognized guid'に 'Microsoft.Authorization/permissions/read'スコープの 'storage accountのリソースID'に対するアクションが実行される権限がありません –

関連する問題