Key Vault と Azure CLI を使用してストレージ アカウント キーを管理する (レガシ)

重要

Key Vault マネージド ストレージ アカウント キー (レガシ) は、現状のままサポートされ、今後の更新は予定されていません。 2018 年 3 月 28 日以降の SAS 定義署名ストレージ サービス バージョンでは、アカウント SAS のみがサポートされます。

重要

Azure CLI のマネージド ストレージ アカウント キーのサポートがバージョン 2.54 で削除されました。このチュートリアルでは、コマンドに Azure CLI バージョン 2.53.1 以前を使用する必要があります。

重要

Azure Storage と Microsoft Entra ID の統合 (Microsoft のクラウドベースの ID およびアクセス管理サービス) を使用することをお勧めします。 Microsoft Entra 統合は、Azure BLOB、キュー、テーブルで利用できます。また、Azure Key Vault と同様に、Azure Storage へのトークンベースの OAuth2 アクセスが提供されます。 Microsoft Entra ID では、ストレージ アカウントの資格情報ではなく、アプリケーションまたはユーザーの ID を使用してクライアント アプリケーションを認証することができます。 Azure で実行するときは、Microsoft Entra マネージド ID を使用できます。 マネージド ID を使用すると、クライアント認証やアプリケーションでの資格情報の保存が不要になります。 Microsoft Entra 認証が不可能な場合にのみ、以下のソリューションを使ってください。

Azure ストレージ アカウントでは、アカウント名とキーで構成された資格情報が使用されます。 キーは自動生成され、暗号キーではなくパスワードとして機能します。 Key Vault では、ストレージ アカウントでストレージ アカウント キーを定期的に再生成することでそれらのキーの管理が行われることに加え、ストレージ アカウント内のリソースへの委任アクセス用の Shared Access Signature トークンが提供されます。

Key Vault マネージド ストレージ アカウント キー機能を使用して、Azure ストレージ アカウントのキーを一覧表示し (同期)、定期的にキーを再生成 (ローテーション) できます。 ストレージ アカウントと従来のストレージ アカウントの両方のキーを管理できます。

マネージド ストレージ アカウント キー機能を使用する場合は、次の点を考慮してください。

  • キーの値は、呼び出し元への応答で返されることはありません。
  • ストレージ アカウント キーの管理は Key Vault のみが行う必要があります。 キーを自分で管理したり、Key Vault のプロセスに干渉したりしないでください。
  • ストレージ アカウント キーの管理は、1 つの Key Vault オブジェクトのみが行う必要があります。 複数のオブジェクトからのキー管理を許可しないでください。
  • キーの再生成は、Key Vault のみを使用して行います。 ストレージ アカウント キーを手動で再生成しないでください。

重要

ストレージ アカウントでキーを直接再生成すると、管理対象ストレージ アカウントのセットアップが中断され、使用中の SAS トークンが無効になり、障害を引き起こす可能性があります。

サービス プリンシパルのアプリケーション ID

Microsoft Entra テナントは、登録されている各アプリケーションにサービス プリンシパルを提供します。 サービス プリンシパルは、アプリケーション ID として機能し、Azure ロールベースのアクセス制御 (Azure RBAC) を使用して他の Azure リソースへのアクセスを承認する設定を行うときに使用されます。

Key Vault は、すべての Microsoft Entra テナントに事前登録されている Microsoft アプリケーションです。 Key Vault は、各 Azure クラウド内に同じアプリケーション ID で登録されています。

テナント クラウド アプリケーション ID
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Azure Public cfa8b339-82a2-471a-a3c9-0fc0be7a4093
その他 Any cfa8b339-82a2-471a-a3c9-0fc0be7a4093

前提条件

このガイドを完了するには、最初に次の手順を実行する必要があります。

ストレージ アカウント キーを管理する

Azure アカウントに接続する

az login コマンドを使用して、Azure CLI セッションを認証します。

az login

Key Vault にストレージ アカウントへのアクセス権を付与する

Azure CLI の az role assignment create コマンドを使用して、ストレージ アカウントへのアクセスを Key Vault に付与します。 コマンドで次のパラメーター値を設定します。

  • --role:"Storage Account Key Operator Service Role" の Azure ロールを渡します。 このロールは、アクセス スコープをお使いのストレージ アカウントに制限します。 従来のストレージ アカウントには、"従来のストレージ アカウント キー オペレーターのサービス ロール" を渡します。
  • --assignee: 値 "https://vault.azure.net" を渡します。これは Azure パブリック クラウドのキー コンテナーの URL です。 (Azure Government クラウドの場合、"--assignee-object-id" を代わりに使用します。「サービス プリンシパルのアプリケーション ID」を参照してください。)
  • --scope:ストレージ アカウントのリソース ID を渡します。これは /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName> という形式で指定します。 Azure CLI の az account list コマンドを使用して、サブスクリプション ID を見つけます。 Azure CLI の az storage account list コマンドを使用して、ストレージ アカウント名とストレージ アカウント リソース グループを見つけます。
az role assignment create --role "Storage Account Key Operator Service Role" --assignee "https://vault.azure.net" --scope "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

マネージド ストレージ アカウントにユーザー アカウントのアクセス許可を与える

Azure CLI az keyvault-set-policy コマンドレットを使用して、Key Vault アクセス ポリシーを更新し、ストレージ アカウントのアクセス許可をユーザー アカウントに付与します。

# Give your user principal access to all storage account permissions, on your Key Vault instance

az keyvault set-policy --name <YourKeyVaultName> --upn user@domain.com --storage-permissions get list delete set update regeneratekey getsas listsas deletesas setsas recover backup restore purge

ストレージ アカウントのアクセス許可は、Azure portal のストレージ アカウントの [アクセス ポリシー] ページでは使用できません。

Key Vault のマネージド ストレージ アカウントを作成する

Azure CLI の az keyvault storage コマンドを使用して、Key Vault マネージド ストレージ アカウントを作成します。 30 日間の再生成期間を設定します。 ローテーションする時期になると、Key Vault によってアクティブでないキーが再生成され、新しく作成されたキーがアクティブとして設定されます。 SAS トークンを発行するために使用されるキーは常に 1 つだけで、これがアクティブなキーです。 コマンドで次のパラメーター値を設定します。

  • --vault-name:キー コンテナーの名前を渡します。 キー コンテナーの名前を検索するには、Azure CLI の az keyvault list コマンドを使用します。
  • -n:ストレージ アカウントの名前を渡します。 ストレージ アカウントの名前を確認するには、Azure CLI の az storage account list コマンドを使用します。
  • --resource-id:ストレージ アカウントのリソース ID を渡します。これは /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName> という形式で指定します。 Azure CLI の az account list コマンドを使用して、サブスクリプション ID を見つけます。 Azure CLI の az storage account list コマンドを使用して、ストレージ アカウント名とストレージ アカウント リソース グループを見つけます。
az keyvault storage add --vault-name <YourKeyVaultName> -n <YourStorageAccountName> --active-key-name key1 --auto-regenerate-key --regeneration-period P30D --resource-id "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

Shared Access Signature トークン

Shared Access Signature トークンを生成するように Key Vault に指示することもできます。 Shared Access Signature を使用すると、ストレージ アカウント内のリソースへの委任アクセスが可能になります。 アカウント キーを共有することなく、ストレージ アカウント内のリソースへのアクセス権をクライアントに付与できます。 Shared Access Signature により、アカウント キーを侵害されることなくストレージ リソースを安全に共有することができます。

このセクションのコマンドは、次の操作を実行します。

  • アカウントの Shared Access Signature 定義 <YourSASDefinitionName> を設定します。 この定義は、Key Vault <YourKeyVaultName> 内の Key Vault マネージド ストレージ アカウント <YourStorageAccountName> に設定されます。
  • Key Vault マネージド ストレージの Shared Access Signature 定義をコンテナーに設定します。 この定義には、作成された Sared Access Signature トークンのテンプレート URI があります。 この定義は、Shared Access Signature の種類 account を持っており、N 日間有効です。
  • Shared Access Signature がキー コンテナーにシークレットとして保存されていることを確認します。

共有アクセス署名定義テンプレートを定義する

Key Vault は、SAS 定義テンプレートを使用して、クライアント アプリケーションのトークンを生成します。

SAS 定義テンプレートの例:

"sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

SAS 定義テンプレートは、次の手順で --template-uri パラメーターに渡します。

Key Vault の SAS 定義テンプレートで必要なアカウント SAS パラメーター

SAS クエリ パラメーター 説明
SignedVersion (sv) 必須。 このアカウント SAS で行われる要求を承認するために使用する署名付きストレージ サービスのバージョンを指定します。 バージョン 2015-04-05 以降に設定する必要があります。 Key Vault では、2018-03-28 までのバージョンがサポートされます
SignedServices (ss) 必須。 アカウント SAS でアクセス可能な署名付きサービスを指定します。 次の値を指定できます。

- BLOB (b)
- キュー (q)
- テーブル (t)
- ファイル (f)

値を組み合わせて、複数のサービスへのアクセスを提供できます。 たとえば、ss=bf は BLOB エンドポイントとファイル エンドポイントへのアクセスを指定します。
SignedResourceTypes (srt) 必須。 アカウント SAS でアクセスできる署名付きリソース タイプを指定します。

- サービス (s): サービス レベル API へのアクセス ("たとえば"、サービス プロパティの取得/設定、サービス統計の取得、コンテナー/キュー/テーブル/共有のリストなど)
- コンテナー (c): コンテナー レベル API へのアクセス("たとえば"、コンテナーの作成/削除、キューの作成/削除、テーブルの作成/削除、共有の作成/削除、BLOB/ファイルとディレクトリのリストなど)
- オブジェクト (o): BLOB、キュー メッセージ、テーブル エンティティ、ファイル用のオブジェクト レベル API へのアクセス ("たとえば"、BLOB の配置、エンティティの照会、メッセージの取得、ファイルの作成など)

値を組み合わせて、複数のリソース タイプへのアクセスを提供できます。 たとえば、srt=sc は、サービス リソースとコンテナー リソースへのアクセスを指定します。
SignedPermission (sp) 必須。 アカウント SAS の署名付きアクセス許可を指定します。 アクセス許可は、指定された署名付きリソース タイプと一致する場合にのみ有効です。それ以外の場合は無視されます。

- 読み取り (r): すべての署名付きリソース タイプ (サービス、コンテナー、オブジェクト) に有効です。 指定されたリソース タイプに対する読み取りアクセス許可を付与します。
- 書き込み (w): すべての署名付きリソース タイプ (サービス、コンテナー、オブジェクト) に有効です。 指定されたリソース タイプに対する書き込みアクセス許可を付与します。
- 削除 (d): キュー メッセージを除く、コンテナーおよびオブジェクト リソース タイプに有効です。
- 永久削除 (y): BLOB オブジェクト リソース タイプに対してのみ有効です。
- リスト (l): サービスおよびコンテナー リソース タイプに対してのみ有効です。
- 追加 (a): 次のオブジェクト リソース タイプに対してのみ有効です: キュー メッセージ、テーブル エンティティ、追加 BLOB。
- 作成 (c): 次のオブジェクト リソース タイプに対してのみ有効です: BLOB とファイル。 ユーザーは新しい BLOB またはファイルを作成できますが、既存の BLOB またはファイルを上書きすることはできません。
- 更新 (u): 次のオブジェクト リソース タイプに対してのみ有効です: キュー メッセージとテーブル エンティティ。
- プロセス (p): 次のオブジェクト リソース タイプに対してのみ有効です: キュー メッセージ。
- タグ (t): 次のオブジェクト リソース タイプに対してのみ有効です: BLOB。 BLOB タグ操作を許可します。
- フィルター (f): 次のオブジェクト リソース タイプに対してのみ有効です: BLOB。 BLOB タグによるフィルター処理を許可します。
- 不変ポリシーの設定 (i): 次のオブジェクト リソース タイプに対してのみ有効です: BLOB。 BLOB の不変性ポリシーと訴訟ホールドの設定/削除を許可します。
SignedProtocol (spr) 任意。 アカウント SAS で行われる要求に対して許可するプロトコルを指定します。 使用可能な値は、HTTPS と HTTP の両方 (https,http) または HTTPS のみ (https) です。 既定値は https,http です。

「HTTP のみ」は、許可された値ではありません。

アカウント SAS の詳細については、「アカウント SAS を作成する」を参照してください

注意

Key Vault は、'Signed Expiry'、'Signed Start' などの有効期間パラメーターや、2018-03-28 バージョン以降に導入されたパラメーターを無視します

Key Vault で Shared Access Signature 定義を設定する

Azure CLI の az keyvault storage sas-definition create コマンドを使用して、前の手順の SAS 定義テンプレートを --template-uri パラメーターに渡し、Shared Access Signature 定義を作成します。 -n パラメーターには任意の名前を指定できます。

az keyvault storage sas-definition create --vault-name <YourKeyVaultName> --account-name <YourStorageAccountName> -n <YourSASDefinitionName> --validity-period P2D --sas-type account --template-uri <sasDefinitionTemplate>

Shared Access Signature 定義の検証

Shared Access Signature 定義がキー コンテナーに格納されていることを確認するには、Azure CLI の az keyvault storage sas-definition show コマンドを使用します。

ここで、az keyvault storage sas-definition show コマンドと id プロパティを使用して、そのシークレットの内容を表示できます。

az keyvault storage sas-definition show --id https://<YourKeyVaultName>.vault.azure.net/storage/<YourStorageAccountName>/sas/<YourSASDefinitionName>

次のステップ