AWS EMS
AWS EMS
目次

AWS KMS徹底解説:暗号鍵管理の基本から、Google Cloud KMS(CMEK)・Azure Key Vault比較までわかる実務設計

先に要点(忙しい方向けのまとめ)

  • AWS Key Management Service(AWS KMS)は、暗号鍵(KMSキー)を安全に作成・管理し、暗号化/復号などの暗号操作を提供するマネージドサービスです。多くのAWSサービスと統合され、保存データの暗号化で「顧客管理キー(customer managed key)」を指定できる場面が多いのが特徴です。
  • アクセス制御の中心は「キーポリシー(KMSキーのリソースポリシー)」です。IAMポリシー等を使う場合でも、キーポリシー側がそれを許可している必要がある、という“クセ”があり、設計ミスが起きやすいポイントです。
  • 監査は強力で、AWS KMSのAPI呼び出しはCloudTrailに記録されます。鍵の利用(誰がいつ鍵を使ったか)を後から追える体制を作りやすいです。
  • ローテーション(鍵素材の入れ替え)は、AWS管理キーは毎年ローテーションされ、顧客管理キーは任意で自動ローテーションを有効化できます(年次が既定)。さらにオンデマンド回転も可能です。
  • 料金は「鍵の保管(キーあたり月額)」と「暗号操作リクエスト」などが中心です。鍵は$1/月(按分)という明確な単位があり、設計時にコストの“増え方”を読みやすいです。
  • GCPはCloud KMSでCMEK(Customer-managed encryption keys)を提供し、鍵の所有/制御を利用者側に寄せられます。鍵のローテーションスケジュール設定も可能です(非対称鍵には自動ローテーション制限あり)。
  • AzureはKey Vaultで鍵/シークレット/証明書を扱い、Key rotation policyで自動ローテーションや通知を設定できます。VaultとManaged HSMの資源タイプ差も押さえると選定がスムーズです。

この記事が役に立つ方(具体的に)

AWS KMSは、暗号の専門家だけの道具ではありません。むしろ「クラウドでシステムを作る人が、最後に必ず向き合う“責任”の受け皿」になりやすいサービスです。次のような方に、特に効く内容にしています。

  1. 事業開発・プロダクト開発で、データ保護の説明責任が増えてきたバックエンド/インフラの方
    「暗号化しています」と言うだけでは足りなくなり、「どの鍵で」「誰が使えるのか」「鍵はどう回転するのか」「ログは残るのか」を問われがちです。KMSは、この説明責任を“構成として”満たしやすい選択肢になります。

  2. セキュリティ・監査要件(内部統制、規制対応、顧客要件)を抱えるSRE/セキュリティ担当の方
    KMSはCloudTrailにより鍵操作を監査しやすく、アクセスをキーポリシー中心に設計できます。監査の観点から「誰が鍵を使えたか」を言語化しやすいのが強みです。

  3. マルチクラウド/移行を見据えて、GCP・Azureの同等機能も同時に理解したいアーキテクトの方
    KMS(AWS)・Cloud KMS(GCP)・Key Vault(Azure)はいずれも「鍵管理サービス」ですが、運用の流儀(ポリシー、バージョン、ローテーションの考え方)に差があります。比較軸を揃えることで、移行設計や共通ガバナンスが作りやすくなります。


1. AWS KMSとは:暗号鍵を“サービスとして”扱うための中核

AWS KMSは、暗号鍵(KMSキー)を作成・管理し、暗号化/復号などの暗号操作を提供します。顧客管理キーは自分のアカウントで作成・所有・管理でき、キーポリシー、IAMポリシー、グラント等の設定、鍵の有効/無効、暗号素材のローテーション、削除スケジュールなどを制御できる、と公式に整理されています。

ここで大切なのは、KMSが単なる“鍵置き場”ではなく、クラウド上のデータ暗号化を支える運用の中心点になりやすい、ということです。アプリケーションが直接暗号処理を実装すると、鍵の保管・配布・ローテーション・監査が難しくなります。KMSに寄せることで、鍵のライフサイクル管理と監査可能性を、サービスレベルで整えやすくなります。


2. まず押さえる基礎:KMSキーの種類と「管理の境界」

2-1. “誰が鍵を管理するか”で考える:AWS管理キーと顧客管理キー

AWS KMSの説明では、顧客管理キーは利用者が作成・所有・管理し、暗号操作に使え、CloudTrailで利用状況を監査できることが明記されています。また顧客管理キーには月額と利用(無料枠超過時など)料金が発生する、と整理されています。

実務では、次のように整理すると判断が速くなります。

  • “鍵を自分で握る必要がある”データ(顧客要件・規制・内部統制が強い)→ 顧客管理キーを第一候補
  • “運用を極力簡略化したい”データ(一般的な暗号化で十分)→ サービス既定の管理鍵を使う余地

この判断を、システムのデータ分類(機密性・保持期間・取り扱い者)と結びつけて文書化すると、チーム内の合意が作りやすいです。

2-2. ローテーションは「鍵を入れ替える」ではなく「鍵バージョンを増やす」感覚

AWS側では、顧客管理キーの自動ローテーションは任意で、AWS管理キーは毎年ローテーションされること、さらにオンデマンドでローテーションを開始できることが説明されています。既定の自動ローテーションは年次(約365日)で、期間の指定もできることがCLIリファレンスに記載されています。

重要なのは、「ローテーション=既存データが自動で再暗号化される」ではない、という誤解を避けることです。多くの場合、暗号化は“データ鍵(DEK)”と“鍵暗号鍵(KEK=KMSキー)”を組み合わせるエンベロープ暗号の形で行われます。ローテーション後は、新規暗号化に使われる鍵素材が更新され、復号は旧素材も含めて成立する、という挙動を前提に設計すると、運用が安定します。


3. いちばん事故が多い:アクセス制御(キーポリシー)の設計

3-1. KMSは「キーポリシーが主役」

AWSの公式ドキュメントでは、キーポリシーはKMSキーのリソースポリシーであり、アクセス制御の主要手段で、すべてのKMSキーは必ず1つのキーポリシーを持つ、と明記されています。さらに、IAMポリシーやグラント等も使えるが、キーポリシーがそれらの利用を許可している必要がある、という点が強調されています。

この仕様が、実務で次の“つまずき”を生みます。

  • IAM側で許可したのに、KMSがAccessDeniedになる
  • 管理者権限っぽいロールでも鍵が使えない
  • クロスアカウントで想定通りに共有できない

原因の多くは「キーポリシーが、IAMや他アカウント利用を成立させる形になっていない」ことです。KMSは暗号の根幹なので、他リソースより厳密に“鍵側”で制御する思想が強い、と捉えると理解が楽になります。

3-2. サンプル:チーム運用で揉めにくい“役割分担”の考え方

以下は、よく効く分割例です。文章として合意しておくと、設計がブレません。

  • 鍵管理者(Security/Platform)
    • キー作成・削除スケジュール・ローテーション設定
    • キーポリシーの管理
  • 鍵利用者(Application)
    • 暗号化/復号を実行する権限(必要最小限)
    • ただしキーポリシーの変更はしない

KMSは「鍵を使う権限」と「鍵を管理する権限」を分けやすいサービスです。分けるほど、事故が減ります。


4. 監査と可観測性:CloudTrailで“鍵の利用”を追える

AWS KMSはCloudTrailと統合され、ユーザー/ロール/他AWSサービスによるKMSへの呼び出しがイベントとして記録される、と公式に説明されています。コンソール操作、API、CLI、CloudFormation経由などを含めて記録される点が明記されています。

監査の設計では、次を先に決めると運用が楽になります。

  • 監査で必要なのは「鍵管理の操作」か「鍵利用の操作」か(両方か)
  • どの期間保管するか(ログ保管コストと要件の折り合い)
  • “誰が使ったか”の追跡単位をどこまで細かくするか(アプリ単位、環境単位、テナント単位など)

また、CloudTrailのログ暗号化には対称KMSキーのみが使えるなど、組み合わせの前提もドキュメントに明記されています。
このような制約は「あとで詰む」ポイントなので、鍵の種類(対称/非対称)を選ぶ前に、監査ログの要件を確認しておくのが安全です。


5. コスト設計:KMSは“鍵の数”と“リクエスト数”で効いてくる

KMSの料金ページでは、KMSキーは1キーあたり$1/月(時間按分)で、対称/非対称/HMAC/マルチリージョンキー(プライマリ・レプリカそれぞれ)などでも同様であることが明記されています。

実務でのコスト設計は、次の順番にすると読みやすいです。

  1. まず鍵の数を抑える:環境×用途で必要十分な単位にまとめる
  2. 次にリクエストを抑える:高頻度サービスでは暗号化呼び出し回数が積み上がる
  3. 最後に“例外”を吸収する:テナントごと鍵分離など、要件で必要な増加を受け入れる

特に保存系の暗号化でKMSリクエストが増えるケースでは、最適化の手段が用意されていることがあります。たとえば、あるストレージ暗号化のコスト削減として「Bucket KeysによりKMSリクエストコストを最大99%削減できる」と公式に説明されています。
このように、KMS単体ではなく“統合先のサービス側”の最適化機構も含めてコストを見積もるのが現実的です。


6. よくあるユースケース:KMSを「どこで効かせるか」

6-1. 保存データ暗号化で顧客管理キーを指定する(CMEKのAWS版)

顧客管理キーの価値が最も出やすいのは、マネージドサービスの保存データ暗号化に“自分の鍵”を使う場面です。AWS側でも「多くのAWSサービスがKMSと統合し、顧客管理キーを指定できる」ことが説明されています。

このときの設計ポイントは「鍵の責任境界」です。

  • 鍵の無効化や削除スケジュールを誤ると、復号ができず業務影響が出ます
  • 逆に、鍵が誰でも使える状態だと、暗号化していてもアクセス統制の意味が薄れます

つまり、KMSは暗号化のための機能であると同時に、アクセス統制の最終関門にもなります。

6-2. アプリケーション暗号(エンベロープ暗号)の中核として使う

アプリ側で「特定フィールドだけ暗号化したい」「DBの前に暗号化したい」などの要件が出ることがあります。ここでKMSを直接使って巨大データを暗号化するのではなく、データ鍵を発行し、データ鍵で暗号化し、データ鍵自体はKMSキーで保護する、という設計(エンベロープ暗号)がよく採用されます。

サンプル(考え方の例)

  • KMSに「データ鍵を生成して」と依頼
  • 返ってくる “平文データ鍵” でアプリがデータを暗号化
  • “暗号化されたデータ鍵” をデータと一緒に保存
  • 復号時は、暗号化データ鍵をKMSに渡して平文データ鍵を復元し、データを復号

この形にすると、データ鍵は短命で扱え、鍵漏えいリスクを下げやすく、監査ログにもKMS利用が残ります。


7. GCP・Azureとの比較:同じ「鍵管理」でも設計の癖が違う

ここからは、AWS KMSを基準に、GCP・Azureの同等サービスを同じ物差しで並べます。

7-1. GCP:Cloud KMSとCMEK(顧客管理鍵)

GCPのドキュメントでは、Cloud KMSを用いたCMEKは「保存データを保護する鍵を利用者が所有し制御できる」ことが明確に説明されています。
さらにCloud KMSは対称鍵に対してローテーションスケジュールを設定し、一定間隔で新しい鍵バージョンを自動生成でき、暗号化にはプライマリの鍵バージョンが使われ、復号には複数バージョンが使われ得る、という運用モデルが示されています。

注意点として、GCPでは非対称鍵は自動ローテーションをサポートしない(新しい公開鍵の配布など追加手順が必要)ことが明記されています。
このあたりは、鍵種別の選定に直結するので、要件の早い段階で確認しておくと安心です。

7-2. Azure:Key Vault(Vault/Managed HSM)とキーのローテーション

Azure Key Vaultは鍵/シークレット/証明書を扱うセキュアなストアとして説明され、ログをストレージ/イベントハブ/Azure Monitor Logsへ送れるなど監視面も整理されています。
また、Key VaultはVaultとManaged HSMの2種類のリソースタイプがあり、Vaultはソフトウェア保護とHSM保護のキーを扱え、Managed HSMはHSM保護キーのみ、という整理が公式に示されています。

ローテーションは、Key rotation policyにより自動ローテーションや期限前通知を構成できると説明されています(日本語ドキュメントにも明記)。

7-3. 比較の結論:選定は「統合先」と「運用文化」で決まる

  • AWSはKMSが多くのサービス統合の中心に居て、キーポリシー主体のアクセス制御が強い
  • GCPはCMEKを“鍵の所有と制御”として強く打ち出し、鍵バージョンとローテーションスケジュールの概念が分かりやすい
  • AzureはKey Vaultを「鍵+シークレット+証明書」の統合ストアとして扱い、Vault/Managed HSMの分岐でコンプライアンス要件を吸収しやすい

つまり「どれが上」ではなく、「自社の統合先(どのクラウドサービスを使うか)」と「運用文化(ポリシー、監査、ローテーションの回し方)」で最適が決まります。


8. ありがちな落とし穴と、先回りの対策

8-1. “管理者なら当然使える”と思ってキーポリシーで詰む

KMSはキーポリシーが主で、IAM等を使う場合でもキーポリシーが許可していなければ成立しません。ここを知らないと、緊急時に復号できずに大きな障害になります。
対策は、鍵管理者ロールの“ブレークグラス(緊急用)”を含めた運用設計を先に作り、定期的に復号できるか検証しておくことです。

8-2. 鍵の削除スケジュールを軽く扱ってしまう

鍵の削除は「復号不能」につながります。鍵の削除・無効化は“データ削除に近い操作”として、変更管理(申請・承認・監査ログ)を強める方が安全です。顧客管理キーは削除スケジュール管理を含めフルコントロールできる、と公式に整理されています。

8-3. ローテーションを“設定しただけ”で満足してしまう

AWSでは顧客管理キーの自動ローテーションは任意です。年次が既定で、必要なら期間変更も可能です。
ただし、ローテーションは「要件」ではなく「運用」です。

  • 期限・頻度をどう決めるか
  • 例外(停止期間、凍結期間)をどう扱うか
  • 影響範囲をどう検証するか
    ここまで含めて“回る仕組み”にしないと、形骸化します。

9. 今日から使える最小テンプレ(サンプル)

最後に、チームでそのまま使える最小テンプレの例を置いておきます。小さく始めて、必要に応じて育ててくださいね。

9-1. 鍵の分割方針(例)

  • prod-app-data-key:本番アプリの保存データ用(顧客管理キー)
  • prod-audit-log-key:監査ログ用(顧客管理キー、アクセスを最小化)
  • dev-shared-key:開発環境共通(必要最小限の統制)

鍵の数を増やしすぎず、でも境界(本番/監査/開発)を明確にするバランスが、運用では効きます。料金は鍵あたり月額なので、“鍵を増やす判断”が説明しやすいのも良い点です。

9-2. 役割分担(例)

  • Security/Platform:キーポリシー変更、ローテーション設定、削除/無効化
  • Application:暗号化/復号の利用権限(必要最小限)
    この分離は、キーポリシー中心のKMSの思想に合い、事故を減らします。

9-3. 監査(例)

  • CloudTrailでKMS API呼び出しを必ず記録する
  • 監査に必要な期間を定め、保管とアクセス権を固定する
    KMSはCloudTrail統合が明記されているため、監査設計の起点にしやすいです。

まとめ:AWS KMSは「暗号化」より「運用と説明責任」を楽にする

AWS KMSは、顧客管理キーを中心に、鍵ポリシー・ローテーション・監査ログまで含めて“鍵の運用”を仕組み化できるサービスです。特に、キーポリシーがアクセス制御の中心である点と、CloudTrailで鍵利用を追える点は、セキュリティと運用品質を底上げしてくれます。

GCPのCloud KMS(CMEK)やAzure Key Vaultも、同じ課題(鍵の所有、ローテーション、監査)を解くための強い選択肢で、それぞれ鍵バージョンやローテーション、リソースタイプの考え方に特徴があります。

最初の一歩としては、「本番データ用の顧客管理キーを1つ用意し、役割分担と監査ログ方針を決める」だけでも十分価値があります。そこから徐々に、鍵の分割、ローテーションの最適化、コスト最適化へと育てていくのが、いちばん失敗しにくい進め方です。


参考リンク(公式ドキュメント中心)

投稿者 greeden

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)