カスタマーマネージドキーで Azure Database for PostgreSQL のデータを暗号化してみよう!
Azure Database for PostgreSQL のデータ暗号化を、カスタマーマネージドキーで実施してみました。キーコンテナー(Azure Key Vault)およびカスタマーマネージドキー(CMK)、マネージドIDの作成手順を含めて確認しています。
ぬこのたのしいぽすぐれ教室
- 2025年06月13日公開

はじめに
こんにちは!NTTテクノクロスで PostgreSQL やクラウド基盤の技術支援をやっています、中村です。みなさんも、Azure Database for PostgreSQL インスタンス(以下、Azure PostgreSQL)を構築するときに、以下の画面を見たことがあると思います。

そうです。「カスタマーマネージドキー」です!
この「カスタマーマネージドキー」て何だろう?って思いながら、「カスタマーマネージドキー」のラジオボタンを選択してみると、急にいろんな設定項目が出てくるんですよね。
それを見て、そっと「サービスマネージドキー」に戻した記憶、ないでしょうか?
そこで、今回は実際にカスタマーマネージドキーを使用して Azure PostgreSQL フレキシブルサーバを構築してみました。
「サービスマネージドキー」と「カスタマーマネージドキー」の各方式のメリットについては公式ドキュメント「Azure Database for PostgreSQL でのデータ暗号化」に記載されています。
実際の運用時にはキーをユーザ側で管理したいという要件もありますので、データベースの作成の一環として覚えておくとよいでしょう。
カスタマーマネージドキーを使用するための事前準備は2つ
まず結論として、カスタマーマネージドキーを使用するためには、2つの事前準備が必要でした。「キーコンテナー」は、「カスタマーマネージドキー」を格納する入れ物です。「カスタマーマネージドキー(オブジェクト名称は「キー」)」を作成するためには、先に「キーコンテナー」を作成しておく必要があります。
「マネージドID」は、リソースを管理するIDです。「キーコンテナー」内に格納されている「キー」をマネージドIDを紐づけることで、キーを Azure のリソースとして扱えるようにします。
「カスタマーマネージドキー」を使用する場合と使用しない場合との違いをイメージで表してみました。

「サービスマネージドキー」を使う場合は、Azure PostgreSQL だけを作成できますが、「カスタマーマネージドキー」を使う場合は、「マネージドID」と「キーコンテナー」を事前に作成しておく必要があります。
|
「マネージドID」と「キーコンテナー」および「カスタマーマネージドキー」を作成する
さて、ここからは手順になります。事前準備として、「マネージドID」と「キーコンテナー」および「カスタマーマネージドキー」を作成する手順を具体的に確認していきましょう。以下の手順を実施することで、Azure PostgreSQL を構築する際に「カスタマーマネージドキー」を使用する準備が整います。
①マネージドIDを作成する
②キーコンテナーを作成する
③キーを生成するために必要な権限をコンテナに割り当てる
④Azure PostgreSQL で暗号化キーを使用するために必要な権限をコンテナに割り当てる
⑤キーを生成する
①マネージドIDを作成する
(1) Azureポータルで「マネージドID」を検索するか、全てのサービス→ID から選択して「マネージドID」の管理画面に遷移します。「作成」を押して、マネージドIDの作成画面に遷移します。

(2) マネージドIDを作成します。
リソースグループとリージョン、マネージドIDの名前を指定して、「作成」します。

(3) マネージドIDが作成できていることを確認します。

②キーコンテナーを作成する
続いて、キーコンテナーを作成します。(1) Azureポータルで「キーコンテナー」を検索するか、全てのサービス→セキュリティ から選択して、「キーコンテナー」の管理画面に遷移します。
「作成」を押して、キーコンテナーの作成画面に遷移します。

(2) 作成するキーコンテナーの情報を入力します。
リソースグループとキーコンテナ名、リージョンを入力します。その他のオプションはここでは変更しませんが、「消去保護」は「有効」にします。消去保護を有効にしないと、Azure PostgreSQL のデプロイ時にエラーになるためです。(「消去保護」はキーコンテナを作成した後で変更することも可能です。なお、一度「消去保護」を有効にすると、無効に戻すことはできません)

(3) 設定内容を確認して、作成します。

(4) キーコンテナーが作成されていることを確認します。

③キーを生成するために必要な権限をコンテナに割り当てる
キーコンテナを作成したら、コンテナ内にキーを生成するために必要な権限を、今作成したキーコンテナに付与します。作成したコンテナを選択して、以下の手順を実施します。
(1) 左メニューの「アクセス制御」を選択し、「追加」ボタンを押して、「ロールの割り当ての追加」を選択します。

(2) 追加する権限を選択します。
「職務ロール」の「キーコンテナー暗号化責任者」を選択して、「次へ」を押します。

(3) 権限を追加するメンバーを選択します。
「メンバーを選択する」を押すとポップアップが出ますので、メンバーを選択して、「次へ」を押します。

<ポップアップされる画面>

(4) レビューと割り当てを行います。
「ロール」が「キーコンテナー暗号化責任者」になっていることを確認して、「レビューと割り当て」押します。これで、「キー」を生成するための権限の割り当ては完了です。

④Azure PostgreSQL で暗号化キーを使用するために必要な権限をコンテナに割り当てる
キーコンテナーには、「キー」を「暗号化キー」として使用するために必要な権限も付与しておきます。(1) 「キーを生成するために必要な権限をコンテナに割り当てる」の手順と同様に、追加する権限を選択して、追加します。
ここでは、「キーコンテナー暗号化サービスの暗号化(プレビュー)」の権限を付与します。
この権限を割り当てないと、Azure PostgreSQL のデプロイ時に以下のエラーが発生します。
「The operation could not be completed because the Azure Key Vault Key name 'キーのURL' does not exist or User Assigned Identity does not have Get access to the Key.」 (Azure Key Vault キー名「キーのURL」が存在しないか、マネージドID にキーへの取得アクセス権がないため、操作を完了できませんでした。) (コード: AzureKeyVaultKeyNameNotFound) |
つまり Azure PostgreSQL がキーを使用する権限がないということですね。
このエラーを回避するためには、Azure PostgreSQL のデータ暗号化の必要条件に記載されている、「Key Vault Crypto Service Encryption User」ロールを割り当てる必要があります。が、該当する権限は選択肢にはありません。。そのため、代替で「キーコンテナー暗号化サービスの暗号化(プレビュー)」ロールを割り当てています。
また、今回の手順で追加した「キーコンテナー暗号化サービスの暗号化(プレビュー)」権限についても公式ドキュメント「Azure の Key Vault データ プレーン操作用組み込みロール」に記載がありません。(ドキュメントと実体が一時的に乖離しているだけかもしれません)
⑤キーを生成する
権限を付与したら、コンテナ内にキーを生成します。生成されたキーが「カスタマーマネージドキー」になります。カスタマーマネージドキーは「インポート」して生成する方法もありますが、今回は「生成」する方法を実施しています。
(1) キーコンテナーの左メニューの「キー」を選択し、「生成/インポート」を押します。

(2) 生成するキーの条件を入力します。
「名前」を入力して、「作成」を押します。
※「キーの種類」は「RSA」にします。Azure PostgreSQL のデータ暗号化キーに指定できるのは「RSA」または「RSA-HSM」のみのためです。「RSA キーサイズ」は「4096」が推奨ですが、ここでは手順の確認のため、「2048」を選択しています。
キーの条件については公式ドキュメントの Azure PostgreSQL のデータ暗号化の必要条件を確認してください。

(3) キーが生成されたことを確認します。

Azure PostgreSQLを作成する
事前準備がようやく完了しました!ここからは Azure PostgreSQL の構築に戻り、セキュリティ設定から再開しましょう。Azure PostgreSQL の「基本」「ネットワーク」の設定はセキュリティ設定に影響しませんのでここでは設定内容を割愛します。
(1) 「データ暗号化キー」で「カスタマーマネージドキー」を選択します。
カスタマーマネージドキーを選択すると、新しい選択肢として「ユーザー割り当てマネージドID」で「IDの選択」と「キー」で「キーの選択」が出てきます。

(2) 「IDの変更」を押し、「ユーザー割り当て済みマネージドID」を選択します。
ここで、先ほど作成した「マネージドID」を選択します。

選択すると、「ユーザー割り当てマネージドID」欄に、選択したマネージドIDが表示されるようになります。

(3) キーを選択します。
続けて、「キーの選択」を押し、先ほど生成したカスタマーマネージドキーを選択します。
これは、キーの識別子を直接入力することでも結果は同じになります。

※「バージョン」は作成当初1つしかないので自動入力されます。
(4) セキュリティの設定内容を確認します。
「ユーザー割り当てマネージドID」と「キー」が設定できたら、セキュリティの設定は完了です。ほかの設定が完了したら、「確認及び作成」を押します。

(5) Azure PostgreSQL の構築条件を再確認して、「作成」を押します。
今回は PostgreSQL16 を、ほぼデフォルトの設定で作成しています。設定内容に誤りがなければ、「作成」を押してデプロイを開始します。

(6) 「デプロイが完了しました」が出ることを確認します。

(7) Azure PostgreSQL のデータ暗号化設定を確認します。
作成後に、データ暗号化の設定が期待通りになっているか確認します。
「データ暗号化キー」は「カスタマーマネージドキー」から変更できなくなっていると思います。

まとめ
本記事では Azure PostgreSQL でカスタマーマネージドキーを使ってデータの暗号化を行うための条件と手順を確認しました。データベースの構築前に必要な事前準備の内容について整理できたかと思います。
特に、Azure キーコンテナーについては、データベースの業務では触る機会も少ないと思いますので、一度触って慣れておくと構築時にも安心ですね。
それでは、本記事は以上となります。
ここまでお付き合い頂き、ありがとうございました!
PostgreSQLのことならNTTテクノクロスにおまかせください!
NTTテクノクロス株式会社ではPostgreSQLに関する各種のお問い合わせや、移行に関する対応を受け付けています。
オンプレだけではなく、Azure、AWSなどのクラウド上でのシステムの導入、開発、維持管理のご相談もお待ちしております。
連載シリーズ
ぬこのたのしいぽすぐれ教室
あわせて読みたい
著者プロフィール

中村 憲一
Oracle、PostgreSQL 両方のデータベースを熟知。特にOracle→PostgreSQLへのデータベース移行が得意。 初めて触ったデータベースはOracle8i。のちにOracle10g RACを使ったシステムを構築し、 オラクルマスター10g GOLDを取得するも、いつの間にかPostgreSQLひとすじに。 当然のようにネコ好き。
Oracle、PostgreSQL 両方のデータベースを熟知。特にOracle→PostgreSQLへのデータベース移行が得意。 初めて触ったデータベースはOracle8i。のちにOracle10g RACを使ったシステムを構築し、 オラクルマスター10g GOLDを取得するも、いつの間にかPostgreSQLひとすじに。 当然のようにネコ好き。