Microsoft がマネージドストレージアカウントと呼んでいるストレージアカウントを作成する方法を紹介します。ご存知かもしれませんが、各ストレージアカウントには、汎用ストレージアカウントの4つのサービスに対してプログラムで認証するために使用できる2つの交換可能な秘密キーがあります。
図1は私の ipstorage704 汎用 v2 ストレージアカウントですが、これはマネージドでないストレージアカウントです。つまり、Azure が管理するのではなく、これら2つの秘密キーを自分で管理することになります。
図1:マネージドでない Azure ストレージアカウント
キーの再生成とローテーションを忘れた場合、もしくは、さらに悪いことに、ソースコードにプレーンテキストキーを残した場合などはまさしく、Azure データのセキュリティ侵害を求めるようなものです。
では、マネージドストレージアカウントとはどういうものでしょうか?
マネージドストレージアカウントは、セキュリティが Azure によって管理される汎用ストレージアカウントです。次の2つの目的があります。
この演習用に Azure 環境をセットアップするには、次の3つのタスクを実行する必要があります。
Azure ポータルでは現在この機能を使用できないため、Azure PowerShell または Azure コマンドラインインタフェース(CLI)を使用してプログラムでマネージドストレージアカウントを定義する必要があります。コードは、「Key Vault と Azure PowerShell を使用してストレージアカウントキーを管理する」というタイトルの Microsoft Azure の記事を参照しました。では始めましょう。
PowerShell コンソール、または Visual Studio Code インスタンスを起動し、Azure サブスクリプションに対して認証します。
Connect-AzAccount
複数の Azure サブスクリプションがある場合、デフォルトのコンテキストを指定する必要があります。
Set-AzContext -SubscriptionName 'MySub'
次に、ストレージアカウントと Key Vault を簡単に参照できるよう、変数を定義します。自分で試す場合は、筆者用の値を自分の値に置き換える必要があることに注意してください。
$resourceGroupName = "ipswitch"
$storageAccountName = "ipstorage704"
$storageAccountKey = "aUQBMQFMnnk2fBNsv2K49mqW31Vc0nHjMDGJm4HAZId+5PgBYfKbrZMippBaTGjlGOsg+EovpVYKwhBCIT0eSA=="
$keyVaultName = "ipswitch-keyvault"
$keyVaultSpAppId = "cfa8b339-82a2-471a-a3c9-0fc0be7a4093"
上記のコードに関する注意事項:
また、ユーザー ID を取得し、ターゲットのストレージアカウントのリファレンスを獲得する必要があります。
$userId = (Get-AzContext).Account.Id
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -StorageAccountName $storageAccountName
Azure のロールベース・アクセスコントロール(RBAC)の、「Storage Account Key Operator Service Role」というロールを、最小特権アクセス(範囲をストレージアカウントに限定)で、Key Vault に割り当てます。これで、Key Vault は、ストレージアカウントキーのみを管理し、他の Key Vault シークレットまたはリソースは管理できません。
New-AzRoleAssignment -ApplicationId $keyVaultSpAppId -RoleDefinitionName 'Storage Account Key Operator Service Role' -Scope $storageAccount.Id
図2を見ると、Key Vault に適切なRBACのロールが正しいスコープで割り当てられていることがわかります。
図2:Key Vault はストレージアカウントのスコープでアクセス可能
Azure Key Vaultは、ユーザーまたはサービスプリンシパルに、Azure Key Vault シークレットへの特定のアクセス許可を付与するのに、アクセスポリシーを使用します。ユーザーIDにプリンシパルのアクセス許可を付与する必要があります。
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $userId -PermissionsToStorage get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge
図3に、Key Vault アクセス許可の Azure ポータルのビューを示します。
図3:ユーザーアカウントは Key Vault シークレットへのフルコントロールを所有
最後に、ターゲットのストレージアカウントを Key Vault のマネージドストレージアカウントのリストに追加します。
Add-AzKeyVaultManagedStorageAccount -VaultName $keyVaultName -AccountName $storageAccountName -AccountResourceId $storageAccount.Id -ActiveKeyName 'key1' -DisableAutoRegenerateKey
上記のコードに関する注意事項:
もし、Key Vault で、たとえば90日間ごとに再生成するように設定したい場合は、まず、再生成期間の変数を次のように設定します。
$regenerationPeriod = [System.Timespan]::FromDays(90)
そして、-DisableAutoRegenerateKey スイッチの代わりに、次のパラメータ/値のペアで置き換えます。
-RegenerationPeriod $regenerationPeriod
Add-AzKeyVaultManagedStorageAccount を実行すると、「BadRequest」エラーが表示される場合があります。これは、既知の問題で、少なくとも1つの GitHub バグレポートが存在します。
このエラーが発生しても、すべてが失われるわけではありません。Azure Cloud Shell を開いて、サブスクリプションに対して認証を行い、次の Azure CLI コマンドを、リソース名と ID を自分のものに置き換えて実行してください。
az keyvault storage add --vault-name ipswitch-keyvault -n ipstorage704 --active-key-name key1 --auto-regenerate-key --regeneration-period P90D --resource-id "/subscriptions/2fbf906e-1101-4bc0-b64f-adc44e462fff/resourceGroups/ipswitch/providers/Microsoft.Storage/storageAccounts/ipstorage704"
上記のコードは筆者のシステムで正常に完了しました。ここでは、90日間のキー再生成期間を指定していることに注意してください。
残念ながら、Azure ポータルには、Key Vault にもストレージアカウントにも、マネージドストレージアカウントに関する情報がまったく表示されません。ですが、Get-AzKeyVaultManagedStorageAccount を実行すれば検証できます。
Get-AzKeyVaultManagedStorageAccount -VaultName 'ipswitch-keyvault' -Name 'ipstorage704'
Id : https://ipswitch-keyvault.vault.azure.net:443/storage/ipstorage704
Vault Name : ipswitch-keyvault
AccountName : ipstorage704
Account Resource Id : /subscriptions/2fbf906e-1101-4bc0-b64f-adc44e462fff/resourceGroups/ipswitch/providers/Microsoft.Storage/
storageAccounts/ipstorage704
Active Key Name : key1
Auto Regenerate Key : True
Regeneration Period : 90.00:00:00
Enabled : True
Created : 9/30/19 8:25:18 PM
Updated : 9/30/19 8:25:18 PM
Tags :
これで確認できました。マネージドストレージアカウントを作成する手順は非常にやっかいで面倒ですが、ストレージアカウントのアクセスキーを手作業で管理する必要がないというメリットは面倒さを凌ぐものがあるので、設定する価値はあると思います。
Tim Warner is a Microsoft MVP, Microsoft Press/Wiley author, and Azure solution architect based in Nashville, TN. Contact Tim at Twitter (@TechTrainerTim) or his website, techtrainertim.com.
より優れた業務アプリケーションやウェブサイトの開発に役立つ、ニュース、情報、チュートリアルをご案内します。