[Azure]キーコンテナー (Azure Key Vault)

Key Vaultはアプリケーションやサービス内で使用する各種キー、パスワードなどの機密情報を安全に管理するための金庫のような役割を持つ。

例としてデータベース接続パスワードなどのような外部に漏洩したときに高いリスクを持つものを、Key Vaultで保管すると、高いセキュリティで保護され、アクセスを許可されたアプリケーションから必要な時に取得することができる。

価格プラン (SKU) と提供する機能

Key VaultはStandardとPremiumの2つの価格プランで提供される。PremiumはStandardの機能に加え、HSM (Hardware Security Module) を使用したキーの管理をサポートする。

KeyVaultで提供する機能は以下の通り

  • シークレット管理
  • キー管理
  • 証明書の管理
  • HSMを利用したキーの格納

Key Vaultでのデータ保管

キー管理

データの暗号化に使用する暗号化キーの作成と管理を行う。以下2種類のキーの作成を行う。

  • ソフトキー
    キーコンテナーによってアプリケーションから使用されるキー
  • ハードキー
    HSMによってハードウェアから使用されるキー
キーの確認

生成したキーはAzure Portal、Power Shell、az-cliで確認できる。

キーの確認方法
確認方法 詳細
Azure Portal Azure KeyVault > [対象のキーコンテナー] > Keys
Azure Power Shell Get-AzKeyVaultKeyコマンドレット
az-cli az keyvault key show
az-cliの例:
$ az keyvault key show \ --name {キー名} \ --vault-name {キーコンテナー名} { "attributes": { "created": "2023-01-01T08:00:00+00:00", "enabled": true, "expires": null, "exportable": null, "notBefore": null, "recoverableDays": 90, "recoveryLevel": "Recoverable", "updated": "2023-01-01T08:00:00+00:00" }, "key": { "crv": null, "d": null, "dp": null, "dq": null, "e": "AQAB", "k": null, "keyOps": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], "kid": "https://{{キーコンテナー名}}.vault.azure.net/keys/{キー名}/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "kty": "RSA", "n": "dGVzdDIwMjMxMTIyCg==", "p": null, "q": null, "qi": null, "t": null, "x": null, "y": null }, "managed": null, "releasePolicy": null, "tags": null }
属性値について
enabled 有効フラグ(True:有効、False:無効)
expires 有効期限
notBefore 使用可能になる日時
recoveryLevel リカバリーレベル(削除時の挙動)
  • Recoverable (デフォルト)
    論理削除を有効にし、指定した期間保持する。
  • Purgeable
    特権ユーザーのによって完全に削除される。
recoverableDays 論理削除した場合の保持期間(日数)
カスタマーマネージドキー

暗号化を行う際の暗号化キーは、Microsoftが提供するマネージドキーを使うか、ユーザー側が自らキーを管理するカスタマーマネージドキーを使うか選択することができる。カスタマーマネージドキーは以下のサービスでサポートされている(一例)。

  • Azure Disk Encryption
    仮想マシンのディスク暗号化
  • Always Encrypted
    SQL Serverの列の暗号化
  • Storage Service Encryption
    ストレージアカウントの暗号化(BlobストレージとAzure Filesのみサポート

シークレット管理

シークレットは、DB接続パスワードや、APIにアクセスするためのアプリケーションキーなどの主にアプリケーションから参照される機密情報を管理するために使用する。キー管理と同様に使用可能になる日時や有効期限を設定・管理できる。

シークレットの確認

生成したシークレットはAzure Portal、Power Shell、az-cliで確認できる。

シークレットの確認方法
確認方法 詳細
Azure Portal Azure KeyVault > [対象のキーコンテナー] > Secrets
Azure Power Shell Get-AzKeyVaultSecretコマンドレット
az-cli az keyvault secret show
az-cliの例:
$ az keyvault secret show \ --name {キー名} \ --vault-name {キーコンテナー名} { "attributes": { "created": "2021-12-01T00:00:00+00:00", "enabled": true, "expires": null, "notBefore": null, "recoverableDays": 90, "recoveryLevel": "Recoverable", "updated": "2021-12-01T00:00:00+00:00" }, "contentType": null, "id": "https://{キーコンテナー名}.vault.azure.net/secrets/{キー名}/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "kid": null, "managed": null, "name": "APP-KEY-WAPP-CONS", "tags": {}, "value": "{値}" }

証明書の管理

Key Vaultを利用して、証明書を作成またはインポートして管理することができる。Key Vaultを利用して証明書を作成すると、秘密鍵はKey Vault内に作成され、証明書の所有者に公開されることはない。

アクセス制御

Key Vaultは管理プレーンとデータプレーンの2層に分かれている。アクセス制御は各層ごとに行う。

Azure Key Vaultへのアクセス

管理プレーン

管理プレーンではKeyVault自体の管理、主に以下作業を行う。

  • キーコンテナーの作成
  • アクセスポリシーの変更

データプレーン

データプレーンではKey Vaultに保管されたデータの操作を行う。

  • キーの管理
  • シークレットの管理
  • 証明書の管理

KeyVaultの安全性と回復機能

論理削除

キーコンテナー内のオブジェクト(キー、シークレット、証明書)は、論理削除が有効な場合、設定された保持期間の間は回復することができる。設定値のデフォルトは論理削除が有効で、完全削除までの日数は論理削除から90日となっている。

バックアップ

キーコンテナー内のオブジェクトをバックアップすることができる。それぞれのキーコンテナーのメニューからバックアップを行うが、この操作にはバックアップ権限が必要になる。

バックアップオブジェクトは暗号化されたBlobデータとして、ストレージアカウント内に保存される。Azureの外部でこのデータをの暗号化を解除することはできない。また、復元するには 同じサブスクリプション+同じリージョン のキーコンテナーに復元する必要がある。

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)