401
AWS Key Management Service 開発者ガイド

AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service開発者ガイド

Page 2: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

AWS Key Management Service: 開発者ガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

Table of ContentsAWS Key Management Service とは ..................................................................................................... 1

概念 .......................................................................................................................................... 2カスタマーマスターキー (CMK) ............................................................................................ 3データキー ........................................................................................................................ 5データキーペア .................................................................................................................. 7暗号化オペレーション ....................................................................................................... 10キー識別子 (KeyId) ............................................................................................................ 11キーマテリアルのオリジン ................................................................................................. 13キー仕様 .......................................................................................................................... 13キーの使用方法 ................................................................................................................. 14エンベロープ暗号化 .......................................................................................................... 14暗号化コンテキスト .......................................................................................................... 15キーポリシー .................................................................................................................... 18許可 ................................................................................................................................ 19許可トークン .................................................................................................................... 19CMK の使用の監査 ............................................................................................................ 19キー管理インフラストラクチャ ........................................................................................... 19

開始方法 .......................................................................................................................................... 20キーの作成 ............................................................................................................................... 20

対称 CMK の作成 .............................................................................................................. 20非対称 CMK の作成 .......................................................................................................... 23

キーの表示 ............................................................................................................................... 26コンソールでの CMK の表示 .............................................................................................. 26API を使用した CMK の表示 .............................................................................................. 33キー ID と ARN を検索する ............................................................................................... 36対称 CMK と非対称 CMK の識別 ........................................................................................ 37

キーの編集 ............................................................................................................................... 40CMK を編集する (コンソール) ............................................................................................ 40CMK を編集する (AWS KMS API) ....................................................................................... 43

キーのタグ付け ......................................................................................................................... 44CMK タグを管理する (コンソール) ...................................................................................... 44CMK タグを管理する (AWS KMS API) ................................................................................. 45

キーの有効化と無効化 ............................................................................................................... 46CMK の有効化と無効化 (コンソール) ................................................................................... 47CMK の有効化と無効化 (AWS KMS API) .............................................................................. 47

パブリックキーのダウンロード ................................................................................................... 48パブリックキーのダウンロードに関する特別な考慮事項 ......................................................... 48パブリックキーのダウンロード (コンソール) ......................................................................... 49パブリックキーのダウンロード (AWS KMS API) ................................................................... 49

認証とアクセスコントロール .............................................................................................................. 51認証 ........................................................................................................................................ 51アクセスコントロール ............................................................................................................... 52アクセス管理の概要 .................................................................................................................. 52

AWS KMS リソースおよびオペレーション ........................................................................... 53AWS KMS CMK へのアクセスの管理 ................................................................................... 53ポリシーでのアクセス許可の指定 ........................................................................................ 54ポリシーでの条件を指定する .............................................................................................. 54

キーポリシーの使用 .................................................................................................................. 55キーポリシーの概要 .......................................................................................................... 55デフォルトのキーポリシー ................................................................................................. 56キーポリシーの例 .............................................................................................................. 63キーポリシーの表示 .......................................................................................................... 67キーポリシーの変更 .......................................................................................................... 70キーポリシーを最新の状態に保つ ........................................................................................ 72

iii

Page 4: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

IAM ポリシーの使用 .................................................................................................................. 74IAM ポリシーの概要 .......................................................................................................... 74IAM ポリシーステートメントでの CMK の指定 ...................................................................... 75AWS KMS コンソールを使用するために必要なアクセス許可 ................................................... 76AWS KMS に関する AWS 管理 (事前定義) ポリシー .............................................................. 76カスタマー管理ポリシーの例 .............................................................................................. 77

CMK へのクロスアカウントアクセスを許可する ............................................................................ 79ステップ 1: ローカルアカウントにキーポリシーステートメントを追加する ................................ 80ステップ 2: 外部アカウントに IAM ポリシーを追加する .......................................................... 81他のアカウントで使用できる CMK の作成 ............................................................................ 82AWS のサービスによる外部 CMK の使用 ............................................................................. 84

AWS KMS API アクセス許可のリファレンス ................................................................................ 84ポリシー条件の使用 .................................................................................................................. 94

AWS グローバル条件キー .................................................................................................. 95AWS KMS 条件キー .......................................................................................................... 96

許可の使用 ............................................................................................................................. 123許可を作成する ............................................................................................................... 123対称 CMK および非対称 CMK の許可 ................................................................................. 124制約の付与 ..................................................................................................................... 124キーポリシーでの CreateGrant の許可 ................................................................................ 125CreateGrant アクセス許可の付与 ....................................................................................... 125

サービスにリンクされたロールの使用 ........................................................................................ 126AWS KMS カスタムキーストア用のサービスにリンクされたロールのアクセス許可 ................... 126

アクセスの確認 ....................................................................................................................... 127キーポリシーを確認する ................................................................................................... 127IAM ポリシーの確認 ........................................................................................................ 129許可の確認 ..................................................................................................................... 130キーアクセスのトラブルシューティング ............................................................................. 131

対称キーと非対称キーの使用 ............................................................................................................. 138対称 CMK と非対称 CMK について ............................................................................................ 139

対称カスタマーマスターキー ............................................................................................. 139非対称カスタマーマスターキー ......................................................................................... 139

CMK 設定の選択方法 ............................................................................................................... 140キー使用法の選択 ............................................................................................................ 141キー仕様の選択 ............................................................................................................... 142

CMK の暗号化設定の表示 ......................................................................................................... 147対称 CMK と非対称 CMK の比較 ............................................................................................... 148

キーローテーション ......................................................................................................................... 151キーの自動ローテーションの仕組み ........................................................................................... 152キーの自動ローテーションを有効または無効にする方法 ................................................................ 153

キーローテーションの有効化と無効化 (コンソール) .............................................................. 153キーローテーションの有効化と無効化 (AWS KMS API) ......................................................... 153

手動でのキーローテーション ..................................................................................................... 154キーマテリアルのインポート ............................................................................................................. 156

インポートしたキーマテリアルについて ..................................................................................... 156キーマテリアルのインポート方法 .............................................................................................. 157キーマテリアルの再インポート方法 ........................................................................................... 157インポートされたキーマテリアルを使用する CMK を特定する方法 ................................................. 158

CMK の Origin プロパティの値を特定するには (コンソール) ............................................... 158CMK の Origin プロパティの値を特定するには (AWS KMS API) .......................................... 158

ステップ 1: キーマテリアルなしで CMK を作成する ..................................................................... 159キーマテリアルなしで CMK を作成する (コンソール) ........................................................... 159キーマテリアルなしで CMK を作成する (AWS KMS API) ...................................................... 161

ステップ 2: パブリックキーおよびインポートトークンのダウンロード ............................................ 161パブリックキーとインポートトークンのダウンロード (コンソール) ........................................ 163パブリックキーとインポートトークンのダウンロード (AWS KMS API) ................................... 164

ステップ 3: キーマテリアルを暗号化する ................................................................................... 165

iv

Page 5: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

例: OpenSSL でキーマテリアルを暗号化する ...................................................................... 165ステップ 4: キーマテリアルのインポート ................................................................................... 166

キーマテリアルのインポート (コンソール) .......................................................................... 166キーマテリアルのインポート (AWS KMS API) ..................................................................... 167

キーマテリアルの削除 .............................................................................................................. 167キーマテリアルの削除が、AWS KMS と統合された AWS のサービスに与える影響 ................... 168キーマテリアルの削除 (コンソール) ................................................................................... 168キーマテリアルの削除 (AWS KMS API) .............................................................................. 169

カスタマーマスターキーを削除する ................................................................................................... 170CMK の削除の仕組み ............................................................................................................... 170

非対称 CMK の削除 ......................................................................................................... 171CMK の削除が、統合されている AWS のサービスに与える影響 ............................................. 171

キーの削除のスケジュールとキャンセル ..................................................................................... 172AWS マネジメントコンソール の使用 ................................................................................ 172AWS CLI の使用 ............................................................................................................. 173AWS SDK for Java の使用 ............................................................................................... 174

キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する .............................. 174AWS マネジメントコンソール の使用 ................................................................................ 175AWS CLI の使用 ............................................................................................................. 175

Amazon CloudWatch アラームを作成する ................................................................................... 176CloudWatch アラームの要件 ............................................................................................. 176CloudWatch アラームの作成 ............................................................................................. 177

CMK の過去の使用状況を確認する ............................................................................................. 179CMK のアクセス許可を確認し、潜在的な使用の範囲を判断する ............................................. 179AWS CloudTrail ログを確認して実際の使用状況を判断する ................................................... 179

カスタムキーストアの使用 ................................................................................................................ 182カスタムキーストアとは ........................................................................................................... 184

AWS KMS カスタムキーストア ......................................................................................... 184AWS CloudHSM クラスター ............................................................................................. 185kmsuser Crypto User ...................................................................................................... 185カスタムキーストアでの CMK ........................................................................................... 186

カスタムキーストアへのアクセスのコントロール ......................................................................... 186カスタムキーストアマネージャーおよびユーザーの承認 ........................................................ 186AWS CloudHSM リソースおよび Amazon EC2 リソースを管理することを AWS KMS に許可する ................................................................................................................................. 187

カスタムキーストアの作成 ........................................................................................................ 188前提条件を構成する ......................................................................................................... 189カスタムキーストアを作成する (コンソール) ....................................................................... 191カスタムキーストアを作成する (API) ................................................................................. 191

カスタムキーストアの管理 ........................................................................................................ 192カスタムキーストアの表示 ................................................................................................ 192カスタムキーストア設定の編集 ......................................................................................... 194カスタムキーストアの接続および切断 ................................................................................ 196カスタムキーストアの削除 ................................................................................................ 201

カスタムキーストアでの CMK の管理 ........................................................................................ 202カスタムキーストアでの CMK の作成 ................................................................................ 203カスタムキーストアでの CMK の表示 ................................................................................ 207カスタムキーストアでの CMK の使用 ................................................................................ 208CMK と キーマテリアルの検索 .......................................................................................... 209カスタムキーストアからの CMK 削除のスケジュール ........................................................... 213

カスタムキーストアのトラブルシューティング ............................................................................ 214使用できない CMK を修正する方法 ................................................................................... 214失敗した CMK を修正する方法 .......................................................................................... 215接続障害の修復方法 ......................................................................................................... 215無効な kmsuser 認証情報の修正方法 ................................................................................. 217孤立したキーマテリアルを削除する方法 ............................................................................. 218CMK の削除されたキーマテリアルの復旧方法 ..................................................................... 219

v

Page 6: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

kmsuser としてログインする方法 ..................................................................................... 219VPC エンドポイントの使用 .............................................................................................................. 223

VPC エンドポイントの作成 ...................................................................................................... 224VPC エンドポイントの作成 (コンソール) ........................................................................... 224AWS KMS VPC エンドポイントの作成 (AWS CLI) ............................................................... 225

VPC エンドポイントへの接続 ................................................................................................... 226ポリシーステートメントでの VPC エンドポイントの使用 ............................................................. 227VPC での CMK 使用の監査 ...................................................................................................... 229

ハイブリッドポスト量子 TLS の使用 .................................................................................................. 231ポスト量子 TLS について ......................................................................................................... 232使用方法 ................................................................................................................................ 232設定方法 ................................................................................................................................ 233テスト方法 ............................................................................................................................. 234詳細はこちら .......................................................................................................................... 235

キー状態: CMK への影響 .................................................................................................................. 236AWS のサービスで AWS KMS を使用する方法 .................................................................................... 241

AWS CloudTrail ...................................................................................................................... 241CMK を使用するタイミングについて .................................................................................. 241CMK を使用する頻度について ........................................................................................... 245

Amazon DynamoDB ................................................................................................................ 246DynamoDB のクライアント側の暗号化 ............................................................................... 246CMK とデータキーの使用 ................................................................................................. 247CMK の使用の承認 .......................................................................................................... 248DynamoDB の暗号化コンテキスト ..................................................................................... 252DynamoDB と AWS KMS のやり取りのモニタリング ........................................................... 253

Amazon Elastic Block Store (Amazon EBS) ................................................................................ 256Amazon EBS 暗号化 ....................................................................................................... 256CMK とデータキーの使用 ................................................................................................. 257Amazon EBS の暗号化コンテキスト .................................................................................. 257Amazon EBS エラーの検出 .............................................................................................. 258暗号化された Amazon EBS ボリュームを AWS CloudFormation で作成する ............................ 258

Amazon Elastic Transcoder ...................................................................................................... 258入力ファイルの暗号化 ...................................................................................................... 259入力ファイルの復号 ......................................................................................................... 259出力ファイルの暗号化 ...................................................................................................... 260HLS のコンテンツ保護 ..................................................................................................... 262Elastic Transcoder の暗号化コンテキスト ........................................................................... 262

Amazon EMR ......................................................................................................................... 263EMR ファイルシステム (EMRFS) のデータを暗号化する ....................................................... 263クラスターノードのストレージボリュームのデータを暗号化する ........................................... 265暗号化コンテキスト ......................................................................................................... 266

Amazon Redshift ..................................................................................................................... 267Amazon Redshift による暗号化 ......................................................................................... 267暗号化コンテキスト ......................................................................................................... 267

Amazon Relational Database Service (Amazon RDS) ................................................................... 268Amazon RDS の暗号化コンテキスト .................................................................................. 268

AWS Secrets Manager ............................................................................................................. 269シークレット値の保護 ...................................................................................................... 269シークレットの暗号化と復号 ............................................................................................. 269AWS KMS CMK の使用 ................................................................................................... 271CMK の使用の許可 .......................................................................................................... 272Secrets Manager の暗号化コンテキスト ............................................................................. 274Secrets Manager と AWS KMS のやり取りのモニタリング ................................................... 275

Amazon Simple Email Service (Amazon SES) ............................................................................. 277Amazon SES を使用した AWS KMS 暗号化の概要 .............................................................. 277Amazon SES の暗号化コンテキスト .................................................................................. 278

vi

Page 7: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

Amazon SES カスタマーマスターキー (CMK) を使用するためのアクセス許可を AWS KMS に付与する ........................................................................................................................... 278E メールメッセージの取得と復号 ...................................................................................... 279

Amazon Simple Storage Service (Amazon S3) ............................................................................ 279サーバー側の暗号化: SSE-KMS の使用 ............................................................................... 280Amazon S3 暗号化クライアントの使用 .............................................................................. 281暗号化コンテキスト ......................................................................................................... 281

AWS Systems Manager Parameter Store .................................................................................... 281標準 Secure String パラメータの保護 ................................................................................. 282アドバンストの Secure String パラメータの保護 ................................................................. 284パラメータ値を暗号化および復号するためのアクセス許可の設定 ........................................... 287Parameter Store の暗号化コンテキスト .............................................................................. 288Parameter Store での CMK 問題のトラブルシューティング ................................................... 290

Amazon WorkMail ................................................................................................................... 290Amazon WorkMail の概要 ................................................................................................. 291Amazon WorkMail による暗号化 ........................................................................................ 291CMK の使用の許可 .......................................................................................................... 294Amazon WorkMail の暗号化コンテキスト ............................................................................ 296Amazon WorkMail と AWS KMS のやり取りのモニタリング .................................................. 296

Amazon WorkSpaces ............................................................................................................... 298Amazon WorkSpaces を使用した AWS KMS 暗号化の概要 ................................................... 298Amazon WorkSpaces の暗号化コンテキスト ....................................................................... 299ユーザーに代わって CMK を使用するためのアクセス許可を Amazon WorkSpaces に付与する .... 299

カスタマーマスターキーをモニタリングする ....................................................................................... 302モニタリングツール ................................................................................................................. 302

自動化ツール .................................................................................................................. 302手動ツール ..................................................................................................................... 303

CloudWatch によるモニタリング ............................................................................................... 304メトリクスとディメンション ............................................................................................. 304アラームの作成 ............................................................................................................... 305AWS KMS のイベント ..................................................................................................... 307

AWS CloudTrail による AWS KMS API コールのログ記録 ..................................................................... 309CloudTrail 内の AWS KMS 情報 ................................................................................................ 309証跡からの AWS KMS イベントの除外 ....................................................................................... 310AWS KMS ログファイルエントリの概要 ..................................................................................... 310

CreateAlias ..................................................................................................................... 311CreateGrant .................................................................................................................... 312CreateKey ...................................................................................................................... 313Decrypt .......................................................................................................................... 314DeleteAlias ..................................................................................................................... 314DescribeKey ................................................................................................................... 315DisableKey ..................................................................................................................... 316EnableKey ...................................................................................................................... 317Encrypt .......................................................................................................................... 318GenerateDataKey ............................................................................................................ 318GenerateDataKeyWithoutPlaintext ...................................................................................... 319GenerateRandom ............................................................................................................ 320GetKeyPolicy .................................................................................................................. 320ListAliases ...................................................................................................................... 321ListGrants ...................................................................................................................... 322ReEncrypt ...................................................................................................................... 322Amazon EC2 の例 1 ........................................................................................................ 323Amazon EC2 の例 2 ........................................................................................................ 325

AWS KMS API のプログラミング ...................................................................................................... 330クライアントの作成 ................................................................................................................. 330キーの使用 ............................................................................................................................. 331

カスタマーマスターキーの作成 ......................................................................................... 331

vii

Page 8: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

データキーの生成 ............................................................................................................ 333カスタマーマスターキーの表示 ......................................................................................... 335カスタマーマスターキーのキー ID およびキー ARN の取得 ................................................... 337カスタマーマスターキーの有効化 ...................................................................................... 339カスタマーマスターキーの無効化 ...................................................................................... 341

データキーの暗号化と復号 ........................................................................................................ 342データキーの暗号化 ......................................................................................................... 343データキーの復号化 ......................................................................................................... 345異なるカスタマーマスターキーによるデータキーの再暗号化 .................................................. 347

キーポリシーの使用 ................................................................................................................. 350キーポリシー名のリスト化 ................................................................................................ 350キーポリシーの取得 ......................................................................................................... 352キーポリシーの設定 ......................................................................................................... 354

許可の使用 ............................................................................................................................. 358許可の作成 ..................................................................................................................... 359許可の表示 ..................................................................................................................... 361許可の廃止 ..................................................................................................................... 363許可の取り消し ............................................................................................................... 365

エイリアスの使用 .................................................................................................................... 367エイリアスの作成 ............................................................................................................ 367エイリアスのリスト化 ...................................................................................................... 370エイリアスの更新 ............................................................................................................ 373エイリアスの削除 ............................................................................................................ 375

クォータ ........................................................................................................................................ 378リソースクォータ .................................................................................................................... 378

カスタマーマスターキー (CMK): 10,000 ............................................................................. 379エイリアス: 10,000 .......................................................................................................... 379CMK あたりの許可: 10,000 ............................................................................................... 379CMK キーあたりの特定のプリンシパルの権限: 500 .............................................................. 379キーポリシードキュメントのサイズ: 32 KB ......................................................................... 380

クォータのリクエスト .............................................................................................................. 380クォータのリクエスト を適用する ..................................................................................... 381暗号化オペレーションの共有クォータ ................................................................................ 381ユーザーに代わって API が実行するリクエスト ................................................................... 382クロスアカウントリクエスト ............................................................................................. 382カスタムキーストアのクォータ ......................................................................................... 382各 AWS KMS API オペレーションの クォータのリクエスト ................................................... 383

AWS KMS クォータの引き上げをリクエストする ........................................................................ 386サービスクォータコンソールの使用 ................................................................................... 386Service Quotas API の使用 ............................................................................................... 387

ドキュメント履歴 ............................................................................................................................ 389最新の更新 ............................................................................................................................. 389以前の更新 ............................................................................................................................. 390

viii

Page 9: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

AWS Key Management Service とはAWS Key Management Service (AWS KMS) は、データの暗号化に使用される暗号化キーである カスタマーマスターキー (CMK) の作成と管理を容易にするマネージド型サービスです。AWS KMS CMK は、中国 (北京) リージョンと 中国 (寧夏) リージョンを除き、FIPS 140-2 暗号化モジュール検証プログラムによる検証済みのハードウェアセキュリティモジュール (HSM) で保護されています。

AWS KMS は、データを暗号化する 他のほとんどの AWS のサービスと統合されています。AWS KMSは、AWS CloudTrail とも統合されており、監査、規制、コンプライアンスのニーズに応じて CMK の使用をログに記録します。

AWS KMS カスタマーマスターキー (CMK) に対して次の基本的な管理アクションを実行できます。

• 対称 CMK と非対称 CMK (p. 138) を作成 (p. 20)および表示 (p. 26)し、それらのプロパティをを編集 (p. 40)する

• CMK を有効および無効にする (p. 46)• CMK 用のアクセスコントロールポリシー (p. 51)を作成および表示し、付与 (p. 123)する• CMK の暗号化マテリアルの自動ローテーション (p. 151)を有効および無効にする• CMK にタグ付け (p. 44)をして、使用とコストの識別、分類、追跡を容易にする• CMK のフレンドリ名であるエイリアスを作成、削除、一覧表示、および更新する (p. 367)• CMK を削除 (p. 170)してキーのライフサイクルを完了する

CMK で次の 暗号化オペレーション (p. 10)を実行することもできます。例については、「AWS KMSAPI のプログラミング (p. 330)」を参照してください。

• 対称 CMK または非対称 CMK によるデータの暗号化、復号、再暗号化• 非対称 CMK によるメッセージの署名と検証• エクスポート可能な対称データキーと非対称データキーペアの生成• 暗号化アプリケーションに適したランダムな数値の生成

また、AWS KMS のアドバンスト機能を使用することもできます

• CMK 内に暗号化マテリアルをインポートする (p. 156)• AWS CloudHSM クラスターによってバッキングされている独自のカスタムキーストア (p. 182)に

CMK を作成する• VPC のプライベートエンドポイント (p. 223)を介して AWS KMS に直接接続する• ハイブリッドポスト量子 TLS (p. 231) を使用して、送信データの転送中の前方暗号化を AWS KMS で

提供する

AWS KMS を使用することで、暗号化するデータへのアクセスをより詳細に制御できます。キー管理および暗号化機能を直接アプリケーションで使用するか、AWS KMS と統合される AWS サービスを通じて使用できます。AWS 用のアプリケーションを作成しているか、AWS のサービスを使用しているかにかかわらず、AWS KMS では、だれがカスタマーマスターキーを使用して、暗号化されたデータにアクセスできるかを制御できます。

AWS KMS は、指定した Amazon S3 バケットにログファイルを配信するサービスである AWS CloudTrailと統合されます。CloudTrail を使用することで、マスターキーをだれがいつどのように使用したかをモニタリングし、調査できます。

1

Page 10: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド概念

詳細はこちら

• AWS KMS で使用される用語と概念については、「AWS KMS の概念 (p. 2)」を参照してください。• AWS KMS API の詳細については、AWS Key Management Service API Reference を参照してくださ

い。さまざまなプログラミング言語の例については、「AWS KMS API のプログラミング (p. 330)」を参照してください。

• AWS KMS が暗号化を使用し、マスターキーをセキュリティで保護する詳しい技術情報については、「AWS Key Management Service 暗号化の詳細」ホワイトペーパーを参照してください。このホワイトペーパーでは、中国 (北京) および 中国 (寧夏) リージョンで AWS KMS が機能する仕組みについては説明していません。

• AWS KMS に関する質問のヘルプについては、「AWS Key Management Service ディスカッションフォーラム」を参照してください。

AWS リージョンの AWS KMS

AWS KMS がサポートされる AWS リージョンを AWS Key Management Service エンドポイントとクォータ に示します。AWS KMS がサポートしている AWS リージョンで、サポートされない AWS KMS 機能がある場合は、その機能に関するトピックでリージョンごとの違いが説明されています。

AWS KMS の料金

他の AWS 製品と同様、AWS KMS を使用するための契約や最低契約金は必要ありません。AWS KMS の料金の詳細については、「AWS Key Management Service 料金表」を参照してください。

サービスレベルアグリーメント (SLA)

AWS Key Management Service は、当社のサービス可用性ポリシーを定義するサービスレベルアグリーメントに基づいて提供されます。

AWS Key Management Service の概念AWS Key Management Service (AWS KMS) の基本的な用語および概念についてと、それらがデータの保護にどのように役立つかについて説明します。

トピック• カスタマーマスターキー (CMK) (p. 3)• データキー (p. 5)• データキーペア (p. 7)• 暗号化オペレーション (p. 10)• キー識別子 (KeyId) (p. 11)• キーマテリアルのオリジン (p. 13)• キー仕様 (p. 13)• キーの使用方法 (p. 14)• エンベロープ暗号化 (p. 14)• 暗号化コンテキスト (p. 15)• キーポリシー (p. 18)• 許可 (p. 19)• 許可トークン (p. 19)

2

Page 11: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキー (CMK)

• CMK の使用の監査 (p. 19)• キー管理インフラストラクチャ (p. 19)

カスタマーマスターキー (CMK)カスタマーマスターキーは、AWS KMS のプライマリリソースです。

カスタマーマスターキー (CMK) は、マスターキーの論理的な表現です。CMK には、キー ID、作成日、説明、キーステータスなどのメタデータが含まれます。CMK には、データの暗号化と復号に使用されるキーマテリアルも含まれています。

AWS KMS は、対称 CMK と非対称 CMK をサポートします。対称 CMK は、暗号化と復号に使用される256 ビットのキーを表します。非対称 CMK は、暗号化と復号または署名と検証に使用される RSA キーペア(両方ではない)、または署名と検証に使用される楕円曲線 (ECC) キーペアを表します。対称 CMK と非対称 CMK の詳細については、「対称キーと非対称キーの使用 (p. 138)」を参照してください。

CMK は AWS KMS で作成されます。対称 CMK と非対称 CMK のプライベートキーが、AWS KMS を暗号化されないままにすることはありません。CMK を管理するには、AWS マネジメントコンソール または AWS KMS API を使用できます。暗号化オペレーション (p. 10)で CMK を使用するには、AWS KMSAPI を使用する必要があります。この戦略はデータキー (p. 5)とは異なります。AWS KMS ではデータキーは保存、管理、追跡されません。AWS KMS の外部で使用する必要があります。

デフォルトでは、AWS KMS は CMK のキーマテリアルを作成します。このキーマテリアルを抽出、エクスポート、表示、管理することはできません。また、このキーマテリアルは削除できません。 CMK を削除 (p. 170)する必要があります。ただし、独自のキーマテリアルを CMK にインポートしたり (p. 156)、AWS KMS カスタムキーストア (p. 182)に関連付けられた AWS CloudHSM クラスターで CMK のキーマテリアルを作成したりできます。

CMK の作成および管理については、「開始方法 (p. 20)」を参照してください。CMK の使用については、「AWS Key Management Service API Reference」を参照してください。

AWS KMS は、カスタマー管理の CMK、AWS 管理の CMK、AWS 所有の CMK という 3 種類の CMKをサポートします。

CMK のタイプ CMK メタデータを表示できる

CMK を管理できる

自分の AWS アカウントでのみ使用

自動回転 (p. 151)

カスタマー管理CMK (p. 4)

はい はい はい 省略可能。365日 (1 年) ごと。

AWS 管理CMK (p. 4)

はい いいえ はい 必須。1095 日(3 年) ごと。

AWS 所有CMK (p. 4)

いいえ いいえ いいえ 可変

カスタマー管理の CMK と AWS 管理の CMK を区別するには、DescribeKey オペレーションのレスポンスで受け取る KeyManager フィールドを使用します。カスタマー管理の CMK の場合、KeyManager 値はCustomer です。AWS 管理の CMK の場合、KeyManager 値は AWS です。

AWS KMS と統合された AWS サービス (p. 241)では、CMK のサポートが異なります。一部の AWSサービスでは、デフォルトで AWS 所有の CMK または AWS が管理する CMK を使用してデータが暗号化

3

Page 12: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキー (CMK)

されます。他の AWS サービスでは、選択したカスタマー管理の CMK でデータを暗号化できます。また、他のAWS は、AWS 所有 CMK の容易性、AWS 管理 CMK の可視性、カスタマー管理 CMK の管理を行えるよう CMK のすべてのタイプをサポートしています。AWS のサービスが提供する暗号化オプションの詳細については、ユーザーガイドの「保管時の暗号化」トピックまたはサービスの開発者ガイドを参照してください。

カスタマー管理の CMKカスタマー管理 CMK は、お客様が作成、所有、管理している AWS アカウントの CMK です。お客様はこれらの CMK のすべてを管理できます。キーポリシーの確立と管理、IAM ポリシー、付与 (p. 51)、有効化と無効化 (p. 46)、暗号化マテリアルのローテーション (p. 151)、タグの追加 (p. 44)、CMK を参照するエイリアスの作成 (p. 367)、CMK の削除のスケジューリング (p. 170)を行うことができます。

カスタマー管理の CMK は、AWS KMS の AWS マネジメントコンソール の [Customer managedkeys (カスタマー管理のキー)] ページに表示されます。カスタマー管理の CMK を明確に識別するには、DescribeKey オペレーションを使用します。カスタマー管理の CMK の場合、DescribeKey レスポンスで受け取る KeyManager フィールドの値は CUSTOMER です。

暗号化オペレーションでカスタマー管理 CMK を使用し、AWS CloudTrail ログでその使用を監査できます。さらに、多くの AWS KMS と統合されている AWS サービス (p. 241)を使用すると、カスタマー管理 CMK を指定して、保管および管理しているデータを保護できます。

カスタマー管理 CMK の使用には、月額料金と、無料利用枠を超えた使用量に対する料金がかかります。これらは、お客様のアカウントの AWS KMS クォータ (p. 378)に対して影響があります。詳細については、「AWS Key Management Service 料金表」および クォータ (p. 378) を参照してください。

AWS 管理の CMKAWS 管理の CMK は、お客様のアカウントにある CMK であり、AWS KMS と統合されている AWS サービスがお客様に代わって作成、管理、使用します。一部の AWS のサービスでは、AWS 管理の CMK のみがサポートされます。

アカウントで AWS が管理する CMK を表示 (p. 26)して、キーポリシーを表示 (p. 67)し、AWSCloudTrail ログでその使用を監査 (p. 309)できます。ただし、これらの CMK の管理、ローテーション、キーポリシーの変更はできません。また、AWS が管理する CMK を暗号化オペレーションで直接使用することはできません。サービスはユーザーに代わってそれらを作成し、使用します。

AWS 管理の CMK は、AWS KMS の AWS マネジメントコンソール の [AWS managed keys (AWS 管理のキー)] ページに表示されます。ほとんどの AWS 管理の CMK はエイリアスでも識別できます。その形式は aws/service-name で、aws/redshift のようになります。AWS 管理の CMK を明確に識別するには、DescribeKey オペレーションを使用します。AWS 管理の CMK の場合、DescribeKey レスポンスで受け取る KeyManager フィールドの値は AWS です。

AWS が管理する CMK の月額料金はかかりません。これらは、無料利用枠を超える量を使用した場合は有料になりますが、一部の AWS サービスでこれらのコストがカバーされます。詳細については、サービスのユーザーガイドまたは開発者ガイドの「保管時の暗号化」トピックを参照してください。AWS 管理の CMK は、アカウントの各リージョンの CMK 数のリソースクォータに対してカウントされません。ただし、これらの CMK を使用するのがお客様のアカウントのプリンシパルでない場合、それらの CMK はリクエストレートのクォータにカウントされます。詳細については、「AWS Key Management Service 料金表」および クォータ (p. 378) を参照してください。

AWS 所有 CMKAWS 所有 CMK は、AWS のサービスが複数の AWS アカウントで使用するために所有および管理するCMK のコレクションです。AWS 所有 CMK は AWS アカウントにはありませんが、AWS サービスはAWS 所有 CMK を使用してアカウント内のリソースを保護できます。

4

Page 13: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキー

AWS 所有 CMK を作成または管理する必要はありません。ただし、表示、使用、追跡、監査はできません。AWS 所有 CMK に関しては、月額料金や使用料金は請求されません。また、CMK は、アカウントのAWS KMS クォータ (p. 378)には影響しません。

AWS が所有する CMK のキーローテーション (p. 151)戦略は、CMK を作成および管理する AWS サービスによって決まります。AWS 所有 CMK を含む、AWS のサービスがサポートする CMK のタイプについては、ユーザーガイドまたはサービスの開発者ガイドの「休み時暗号化」トピックを参照してください。

データキーデータキーは、大量のデータや他のデータ暗号化キーといったデータを暗号化するための暗号化キーです。

AWS KMS カスタマーマスターキー (p. 3) (CMK) を使用して、データキーの生成、暗号化、復号化を実行できます。ただし、AWS KMS はデータキーの保存、管理、追跡、またはデータキーの暗号化オペレーションを実行しません。AWS KMS の外部でデータキーを使用して管理する必要があります。

データキーの作成データキーを生成するには、GenerateDataKey オペレーションを呼び出します。AWS KMS が指定したCMK を使用してデータキーを生成します。このオペレーションから、データキーのプレーンテキストコピーと CMK で暗号化されたコピーが返されます。以下の図では、このオペレーションを示しています。

AWS KMS は暗号化されたデータキーのみを返す GenerateDataKeyWithoutPlaintext オペレーションもサポートしています。データキーを使用する必要がある場合、AWS KMS にそのデータキーを復号化するように求めます。

5

Page 14: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキー

データキーでデータを暗号化するAWS KMS は、データキーを使用してデータを暗号化することはできません。ただし、OpenSSL を利用するか、AWS 暗号化 SDK のような暗号化ライブラリを利用することで、KMS の外部でデータキーを使用できます。

プレーンテキストのデータキーを使用してデータを暗号化したら、できる限り早急にメモリからそれを削除します。暗号化したデータと一緒に暗号化データキーを安全に保存して、データの復号化に利用することができます。

データキーでデータを復号化するデータを復号するには、Decrypt オペレーションに暗号化されたデータキーを渡します。AWS KMS はCMK を使ってデータキーを復号し、プレーンテキストのデータキーを返します。プレーンテキストのデータキーを使ってデータを復号し、続いてできる限り早急にメモリからプレーンテキストのデータキーを削除します。

以下の図では、Decrypt オペレーションを使用して暗号化されたデータキーを復号する方法を示しています。

6

Page 15: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーペア

データキーペアデータキーペアは、数学的に関連するパブリックキーとプライベートキーで構成される非対称データキーです。これらは、クライアント側の暗号化と復号、または AWS KMS の外部での署名と検証に使用されるように設計されています。

OpenSSL などのツールが生成するデータキーペアとは異なり、AWS KMS は、指定した AWS KMS の対称 CMK の下で各データキーペアのプライベートキーを保護します。ただし、AWS KMS はデータキーペアの保存、管理、追跡、またはデータキーペアの暗号化オペレーションを実行しません。AWS KMS の外部でデータキーペアを使用して管理する必要があります。

AWS KMS は、次のタイプのデータキーペアをサポートしています。

• RSA キーペア: RSA_2048、RSA_3072、および RSA_4096• 楕円曲線キーペア、ECC_NIST_P256、ECC_NIST_P384、ECC_NIST_P521、および

ECC_SECG_P256K1

選択するデータキーペアのタイプは、通常、ユースケースまたは規制要件によって異なります。ほとんどの証明書には RSA キーが必要です。楕円曲線キーは、デジタル署名によく使用されます。ECC_SECG_P256K1 キーは 暗号通貨によく使用されます です。

データキーペアを作成するデータキーペアを作成するには、GenerateDataKeyPair または GenerateDataKeyPairWithoutPlaintext オペレーションを呼び出します。プライベートキーの暗号化に使用する対称 CMK を指定します。

GenerateDataKeyPair は、プレーンテキストパブリックキー、プレーンテキストプライベートキー、暗号化されたプライベートキーを返します。このオペレーションは、デジタル署名を生成する場合など、プレーンテキストプライベートキーをすぐに必要とする場合に使用します。

GenerateDataKeyPairWithoutPlaintext は、プレーンテキストのパブリックキーと暗号化されたプライベートキーを返しますが、プレーンテキストプライベートキーは返しません。このオペレーションは、パブリックキーで暗号化する場合など、プレーンテキストプライベートキーがすぐに必要ない場合に使用します。その後、データを復号するためにプレーンテキストプライベートキーが必要な場合は、Decrypt オペレーションを呼び出すことができます。

以下の図では、GenerateDataKeyPair オペレーションを示しています。GenerateDataKeyWithoutPlaintext オペレーションは、プレーンテキストプライベートキーを省略します。

7

Page 16: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーペア

データキーペアでデータを暗号化するデータキーペアを使用して暗号化する場合、ペアのパブリックキーを使用してデータを暗号化し、同じペアのプライベートキーを使用してデータを復号します。通常、データキーペアは、プライベートキーを保持している当事者のみが復号できるデータを多くの当事者が暗号化する必要がある場合に使用されます。

次の図に示すように、パブリックキーを持つ当事者は、そのキーを使用してデータを暗号化します。

8

Page 17: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーペア

データキーペアでデータを復号するデータを復号するには、データキーペアでプライベートキーを使用します。オペレーションを成功させるには、パブリックキーとプライベートキーが同じデータキーペアのものである必要があり、また、同じ暗号化アルゴリズムを使用する必要があります。

暗号化されたシークレットキーを復号するには、そのシークレットキーを Decrypt オペレーションに渡します。プレーンテキストプライベートキーを使用してデータを復号します。その後、できるだけ早くプレーンテキストのプライベートキーをメモリから削除します。

次の図は、データキーペアのプライベートキーを使用して暗号テキストを復号する方法を示しています。

データキーペアでメッセージに署名するメッセージの暗号化署名を生成するには、データキーペアのプライベートキーを使用します。パブリックキーを持つすべてのユーザーは、メッセージが自分のプライベートキーで署名されたこと、および署名されてから変更されていないことを確認するために使用できます。

プライベートキーが暗号化されている場合は、暗号化されたプライベートキーを Decrypt オペレーションに渡します。AWS KMS は CMK を使用してデータキーを復号し、プレーンテキストプライベートキーを返します。署名を生成するには、プレーンテキストプライベートキーを使用します。その後、できるだけ早くプレーンテキストのプライベートキーをメモリから削除します。

メッセージに署名するには、OpenSSL で dgst コマンドなどの暗号化ハッシュ関数を使用してメッセージダイジェストを作成します。次に、プレーンテキストプライベートキーを署名アルゴリズムに渡します。結果は、メッセージの内容を表す署名です。

9

Page 18: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド暗号化オペレーション

次の図は、データキーペアのプライベートキーを使用してメッセージに署名する方法を示しています。

データキーペアを使用した署名の検証データキーペアにパブリックキーを持っているユーザーは、誰でもそれを使用して、プライベートキーで生成した署名を検証できます。検証では、承認されたユーザーが指定したプライベートキーと署名アルゴリズムを使用してメッセージに署名し、メッセージが署名後に変更されていないことを確認します。

署名を検証する当事者は、同じタイプのダイジェストを生成し、同じアルゴリズムを使用して、メッセージの署名に使用されるプライベートキーに対応するパブリックキーを使用する必要があります。

次の図は、データキーペアのパブリックキーを使用してメッセージ署名を検証する方法を示しています。

暗号化オペレーションAWS KMS の場合、暗号化オペレーション は、CMK を使用してデータを保護する API オペレーションです。CMK は AWS KMS 内に留まるため、暗号化オペレーションで CMK を使用するには AWS KMS を呼び出す必要があります。

CMK で暗号化オペレーションを実行するには、AWS SDK、AWS Command Line Interface (AWS CLI)、または AWS Tools for PowerShell を使用します。AWS KMS コンソールで暗号化オペレーションを実行することはできません。いくつかのプログラミング言語で暗号化オペレーションを呼び出す例については、「AWS KMS API のプログラミング (p. 330)」を参照してください。

以下の表では、AWS KMS 暗号化オペレーションを示しています。また、これらのオペレーションで使用される CMK のキータイプとキー使用法 (p. 14)の要件も示します。

オペレーション CMK のキータイプ CMK のキー使用法

Decrypt すべて ENCRYPT_DECRYPT

10

Page 19: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー識別子 (KeyId)

オペレーション CMK のキータイプ CMK のキー使用法

Encrypt すべて ENCRYPT_DECRYPT

GenerateDataKey 対称 ENCRYPT_DECRYPT

GenerateDataKeyPair 対称 * ENCRYPT_DECRYPT

GenerateDataKeyPairWithoutPlaintext 対称 * ENCRYPT_DECRYPT

GenerateDataKeyWithoutPlaintext 対称 ENCRYPT_DECRYPT

GenerateRandom 該当なしこのオペレーションでは CMK を使用しません。

該当なし

ReEncrypt すべて ENCRYPT_DECRYPT

Sign 非対称 SIGN_VERIFY

検証 非対称 SIGN_VERIFY

* GenerateDataKeyPair および GenerateDataKeyPairWithoutPlaintext は、対称 CMK によって保護される非対称データキーペアを生成します。

暗号化オペレーションのアクセス許可については、「the section called “AWS KMS API アクセス許可のリファレンス” (p. 84)」を参照してください。

すべてのユーザーに対する AWS KMS の応答性とパフォーマンスを向上させるために、AWS KMS は、1秒あたりに呼び出すことができる暗号化オペレーションの数にクォータを設定しています。詳細については、「the section called “暗号化オペレーションの共有クォータ” (p. 381)」を参照してください。

キー識別子 (KeyId)キー識別子は、AWS KMS カスタマーマスターキー (CMK) の名前として機能します。これらは、コンソールで CMK を認識するのに役立ちます。キー識別子を使用して、AWS KMS API オペレーション、IAM ポリシー、および許可で使用する CMK を指定します。

AWS KMS は、いくつかのキー識別子を定義します。CMK を作成すると、AWS KMS は CMK のプロパティであるキー ARN とキー ID を生成します。エイリアスを作成すると、AWS KMS は定義したエイリアス名に基づいてエイリアス ARN を生成します。キーおよびエイリアスの識別子は、AWS マネジメントコンソール および AWS KMS API で表示できます。

AWS KMS コンソールでは、CMK をキー ARN、キー ID、またはエイリアス名で表示およびフィルタリングし、キー ID とエイリアス名でソートできます。コンソールでキー ID を検索する方法については、「thesection called “キー ID と ARN を検索する” (p. 36)」を参照してください。

AWS KMS API では、CMK の識別に使用するパラメータの名前は、KeyId またはバリエーション(TargetKeyId や DestinationKeyId など) になります。ただし、これらのパラメータの値はキー ID に限定されません。いくつかは、任意の有効なキー識別子を受け取ることができます。各パラメータの値については、「AWS Key Management Service API Reference」のパラメータの説明を参照してください。

Note

AWS KMS API を使用する場合は、使用するキー識別子に注意してください。API ごとに異なるキー識別子が必要です。通常、タスクに対して実用的である最も完全なキー識別子を使用します。

AWS KMS では、次のキー識別子がサポートされています。

11

Page 20: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー識別子 (KeyId)

キー ARN

キー ARN は、CMK の Amazon リソースネーム (ARN) です。これは CMK の一意の完全修飾識別子です。キー ARN には、AWS アカウント、リージョン、およびキー ID が含まれます。CMK のキーARN を見つける方法については、「the section called “キー ID と ARN を検索する” (p. 36)」を参照してください。

キー ARN の形式は次のとおりです。

arn:aws:kms:<region>:<account-id>:key/<key-id>

以下はキー ARN の例です。

arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

キー ID

キー ID は、アカウントとリージョン内の CMK を一意に識別します。CMK のキー ID を見つける方法については、「the section called “キー ID と ARN を検索する” (p. 36)」を参照してください。

以下はキー ID の例です。

1234abcd-12ab-34cd-56ef-1234567890ab

エイリアス ARN

エイリアス ARN は、AWS KMS エイリアスの Amazon リソースネーム (ARN) です。エイリアスと、それが表す CMK の一意の完全修飾識別子です。エイリアス ARN には、AWS アカウント、リージョン、およびエイリアス名が含まれます。

エイリアス ARN は、任意の時点で特定の CMK を識別します。ただし、エイリアスに関連付けられている CMK は変更できるため、エイリアス ARN はさまざまな CMK を異なるタイミングで識別できます。

エイリアス ARN の形式は次のとおりです。

arn:aws:kms:<region>:<account-id>:alias/<alias-name>

以下は、架空の ExampleAlias のエイリアス ARN です。

arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias

エイリアス名

エイリアス名は、アカウントとリージョン内で関連付けられた CMK を一意に識別します。AWS KMSAPI では、エイリアス名は常に alias で始まります。

エイリアス名の形式は次のとおりです。

alias/<alias-name>

以下に例を示します。

alias/ExampleAlias

エイリアス名の aws/ プレフィックスは、AWS 管理 CMK (p. 4) 用に予約されています。このプレフィックスでエイリアスを作成することはできません。たとえば、Amazon Simple Storage Service(Amazon S3) の AWS 管理 CMK のエイリアス名は次のとおりです。

12

Page 21: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーマテリアルのオリジン

alias/aws/s3

キーマテリアルのオリジンキーマテリアルのオリジンは、CMK 内のキーマテリアルのソースを識別する CMK プロパティです。CMKを作成するときにキーマテリアルのオリジンを選択することはできず、変更することもできません。CMKのキーマテリアルのオリジンを確認するには、DescribeKey オペレーションを使用するか、AWS KMS コンソールで CMK の詳細ページの [暗号化設定] セクションの [オリジン] の値を参照してください。ヘルプについては、「キーの表示 (p. 26)」を参照してください。

CMK には、次のいずれかのキーマテリアルオリジン値を指定できます。

KMS (デフォルト)

API の値: AWS_KMS

AWS KMS は、独自のキーストアで CMK のキーマテリアルを作成および管理します。これは、ほとんどの CMK のデフォルト値であり、推奨値です。

AWS KMS からキーマテリアルを持つキーを作成する方法については、「キーの作成 (p. 20)」を参照してください。

外部

API の値: EXTERNAL

CMK には、インポートされたキーマテリアル (p. 156)があります。External キーマテリアルオリジンを持つ CMK を作成する場合、CMK にはキーマテリアルがありません。後で、キーマテリアルをCMK に読み込むことができます。インポートしたキーマテリアルを使用する場合は、そのキーマテリアルを AWS KMS の外部で保護して管理する必要があります。これには、キーマテリアルの有効期限が切れた場合の置き換えも含まれます。詳細については、「インポートしたキーマテリアルについて (p. 156)」を参照してください。

インポートしたキーマテリアル用の CMK の作成方法については、「ステップ 1: キーマテリアルなしで CMK を作成する (p. 159)」を参照してください。

カスタムキーストア (CloudHSM)

API の値: AWS_CLOUDHSM

AWS KMS は、CMK のキーマテリアルをカスタムキーストア (p. 182)で作成しました。

カスタムキーストアで CMK を作成する方法については、「カスタムキーストアでの CMK の作成 (p. 203)」を参照してください。

キー仕様キー仕様は、CMK の暗号化設定を表す CMK プロパティです。キー仕様によって、CMK が対称か非対称か、CMK のキーマテリアルのタイプ、CMK で使用できる暗号化アルゴリズムまたは署名アルゴリズムが決まります。

通常、CMK に対して選択するキー仕様は、ユースケースと規制要件に基づいています。CMK を作成 (p. 20)するときにキー仕様を選択することはできず、変更することもできません。間違ったキー仕様を選択した場合は、CMK を削除 (p. 170)し、新しいキー仕様を作成します。

主要な仕様のリストと主要な仕様の選択方法については、「キー仕様の選択 (p. 142)」を参照してください。CMK のキー仕様を確認するには、DescribeKey オペレーションを使用するか、AWS KMS コンソールで CMK の詳細ページの [暗号化設定] セクションを参照してください。ヘルプについては、「キーの表示 (p. 26)」を参照してください。

13

Page 22: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの使用方法

Note

AWS KMS API オペレーションでは、CMK のキー仕様は CustomerMasterKeySpec と呼ばれます。これにより、データキー (KeySpec) およびデータキーペア (KeyPairSpec) のキー仕様や、インポート用のキーマテリアル (WrappingKeySpec) のラップ時に使用されるキー仕様とは区別されます。各キー仕様のタイプには、異なる値があります。

CMK の作成時にプリンシパルが使用できるキー仕様を制限するには、km:CustomerMasterKeySpec (p. 99) 条件キーを使用します。kms:CustomerMasterKeySpec 条件キーを使用して、プリンシパルがキー仕様に基づいて CMK の AWS KMS オペレーションを呼び出せるようにすることもできます。たとえば、RSA_4096 キー仕様を使用して CMK の削除をスケジュールするアクセス許可を拒否できます。

キーの使用方法[Key usage (キーの使用方法)] は、CMK を暗号化と復号に使用するか、署名と検証に使用するかを決定する CMK プロパティです。両方を選択することはできません。CMK を複数のタイプのオペレーションに使用すると、両方のオペレーションの製品が攻撃に対して脆弱になります。

対称 CMK のキーの使用方法は、常に暗号化と復号です。楕円曲線 (ECC) CMK のキーの使用方法は、常に署名と検証です。RSA CMK のキーの使用方法を選択するだけで済みます。CMK を作成 (p. 20)するときにキーの使用方法を選することはできず、変更することもできません。間違ったキーの使用方法を選択した場合は、CMK を削除 (p. 170)し、新しいキーの使用方法を作成します。

キーの使用方法を選択する方法については、「キー使用法の選択 (p. 141)」を参照してください。CMKのキー使用法を確認するには、DescribeKey オペレーションを使用するか、AWS KMS コンソールでCMK の詳細ページの [暗号化設定] セクションを参照してください。ヘルプについては、「キーの表示 (p. 26)」を参照してください。

プリンシパルが署名と検証のみ、または暗号化と復号のみの CMK を作成できるようにするには、km:CustomerMasterKeyUsage (p. 100) 条件キーを使用します。kms:CustomerMasterKeyUsage条件キーを使用して、プリンシパルがキーの使用方法に基づいて CMK の API オペレーションを呼び出せるようにすることもできます。たとえば、CMK のキーの使用方法が SIGN_VERIFY である場合のみ、CMK を無効にするアクセス許可を許可できます。

エンベロープ暗号化データを暗号化するとデータは保護されますが、暗号化キーを保護する必要があります。1 つの戦略としては、それを暗号化します。エンベロープ暗号化は、データキーでプレーンテキストデータを暗号化してから、そのデータキーを別のキーで暗号化する手法です。

データ暗号化キーを別の暗号化キーで暗号化し、その暗号化キーを別の暗号化キーで暗号化することもできます。しかし、最終的には、キーとデータを復号化するために、1 つのキーをプレーンテキストで保持する必要があります。この最上位プレーンテキストキー暗号化キーは、マスターキーと呼ばれます。

14

Page 23: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド暗号化コンテキスト

AWS KMS は、マスターキーを安全に保管して管理することで、マスターキーを保護するために役立ちます。AWS KMS に保管されたマスターキーはカスタマーマスターキー (p. 3) (CMK) と呼ばれ、AWSKMS FIPS で検証されたハードウェアセキュリティモジュールを非暗号化されたまま移動することはありません。AWS KMS CMK を使用するには、AWS KMS を呼び出す必要があります。

エンベロープ暗号化には、いくつかの利点があります。

• データキーの保護

データキーを暗号化する場合、暗号化されたデータキーの保存について心配する必要がありません。これは、そのデータキーが暗号化によって本質的に保護されているためです。暗号化されたデータとともに、暗号化されたデータキーを安全に保存できます。

• 複数のマスターキーでの同じデータの暗号化

暗号化オペレーションには時間がかかります (特に、暗号化するデータが大きいオブジェクトである場合)。異なるキーで raw データを複数回にわたって再暗号化する代わりに、raw データを保護するデータキーのみを再暗号化できます。

• 複数のアルゴリズムの強度の結合

一般に、対称キーアルゴリズムは、パブリックキーアルゴリズムよりも高速で、より小さい暗号化テキストを生成します。しかし、パブリックキーのアルゴリズムはロールを本質的に分離し、キー管理を簡単にします。エンベロープ暗号化により、それぞれの戦略を組み合わせることができます。

暗号化コンテキスト対称 CMK を使用するすべての AWS KMS 暗号化オペレーション (p. 10)は、暗号化コンテキストを受け入れます。暗号化コンテキストとは、データに関する追加のコンテキスト情報を含めることができるオプションのキーと値のペアのセットです。–AWS KMS は、暗号化コンテキストを追加の認証済みデータ(AAD) として使用し、認証済み暗号化をサポートします。

非対称 CMK (p. 139) を使用して、暗号化オペレーションの暗号化コンテキストを指定することはできません。AWS KMS が使用する標準の非対称暗号化アルゴリズムは、暗号化コンテキストをサポートしていません。

暗号化リクエストに暗号化コンテキストが含まれている場合、暗号化テキストに暗号化されてバインドされます。このため、データを復号する (または復号して再暗号化する) には、同じ暗号化コンテキストが必要です。復号リクエストで指定された暗号化コンテキストが大文字と小文字を区別して完全に一致しない場合、復号リクエストは失敗します。暗号化コンテキストでのキーと値のペアの順序のみを変更できます。

この暗号化コンテキストはシークレットではありません。これは AWS CloudTrail ログ (p. 309)にプレーンテキストで表示されるため、それを使用して暗号化オペレーションを識別して分類できます。

暗号化コンテキストは任意のキーと値で構成できます。ただし、暗号化コンテキストはシークレットではなく暗号化されないため、機密情報を含めないでください。暗号化または復号化されるデータの内容を説

15

Page 24: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド暗号化コンテキスト

明した暗号化テキストの使用をお勧めします。たとえば、ファイルを暗号化するときは、ファイルパスの一部を暗号化コンテキストとして使用することもあります。

暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など別の型を使用する場合、AWS KMS では文字列として解釈されます。

"encryptionContext": { "department": "10103.0"}

暗号化コンテキストのキーと値には、アンダースコア (_)、ダッシュ (-)、スラッシュ (/、\)、コロン (:) などの特殊文字を含めることができます。

たとえば、Amazon Simple Storage Service (p. 281) (Amazon S3) では、キーが aws:s3:arn である暗号化コンテキストを使用します。値は、暗号化されるファイルへの S3 バケットパスです。

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::bucket_name/file_name"}

また、暗号化コンテキストを使用して、アカウントのカスタマーマスターキー (CMK) を絞り込んだり、アクセスを制限したりできます。暗号化コンテキストは許可の制約として (p. 123)、およびポリシーステートメントの条件 (p. 94)として使用できます。

暗号化コンテキストを使用して暗号化されたデータの整合性を保護する方法については、AWS セキュリティブログの How to Protect the Integrity of Your Encrypted Data by Using AWS Key Management Serviceand EncryptionContext を参照してください。

暗号化コンテキストの詳細。

ポリシーでの暗号化コンテキスト暗号化コンテキストは主に整合性と信頼性を検証するために使用されます。ただし、暗号化コンテキストを使用して、キーポリシーおよび IAM ポリシー内の対称カスタマーマスターキー (CMK) へのアクセスを制御することもできます。

kms:EncryptionContext: (p. 104) および kms:EncryptionContextKeys (p. 104) 条件キーは、リクエストに特定の暗号化コンテキストキーまたはキー/値ペアが含まれる場合にのみ、アクセス許可を付与 (または拒否) します。

たとえば、以下のキーポリシーステートメントでは、RoleForExampleApp ロールに Decrypt オペレーションでの CMK の使用を許可します。また、kms:EncryptionContext: 条件キーを使用して、リクエストの暗号化コンテキストに AppName:ExampleApp 暗号化コンテキストペアが含まれる場合にのみ、このアクセス許可を付与します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } }}

16

Page 25: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド暗号化コンテキスト

これらの暗号化コンテキストの条件キーの詳細については、「AWS KMS でのポリシー条件の使用 (p. 94)」を参照してください。

許可での暗号化コンテキスト

許可の作成 (p. 123)では、リクエストが特定の暗号化コンテキストまたは暗号化コンテキストキーを含むときにのみアクセスを許可する許可の制約を含めることができます。EncryptionContextEquals および EncryptionContextSubset 許可の制約の詳細については、「制約の付与 (p. 124)」を参照してください。

対称 CMK の許可に暗号化コンテキストの制約を指定するには、CreateGrant API オペレーションで Constraints パラメータを使用します。この例では AWS Command Line Interface を使用していますが、任意の AWS SDK を使用できます。このコマンドが作成する許可では、exampleUserに 復号 オペレーションを呼び出すためのアクセス許可を付与します。ただし、そのアクセス許可は、"Department": "IT" 暗号化コンテキストペアが Decrypt リクエストの暗号化コンテキストに含まれる場合にのみ有効です。

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextSubset={Department=IT}

したがって、許可は以下のようになります。exampleUser に付与されるアクセス許可は、許可の制約で指定された暗号化コンテキストペアが Decrypt リクエストに含まれる場合にのみ有効です。CMK の許可を見つけるには、ListGrants オペレーションを使用します。

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

{ "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "8c94d1f12f5e69f440bae30eaec9570bb1fb7358824f9ddfa1aa5a0dab1a59b2", "Operations": [ "Decrypt" ], "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, "CreationDate": 1568565290.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole" } ]}

AWS サービスは、多くの場合、AWS アカウントで CMK を使用するためのアクセス許可を付与する許可で、暗号化コンテキストの制約を使用します。たとえば、Amazon DynamoDB は以下のような許可を使用して、お客様のアカウントの DynamoDB に対して AWS 管理の CMK (p. 4) を使用するためのアクセス許可を取得します。この許可での EncryptionContextSubset 許可の制約では、リクエストの暗号化コンテキストに "subscriberID": "111122223333" と "tableName": "Services" のペアが含まれる場合にのみ、この許可でのアクセス許可を有効にします。この許可の制約では、AWS アカウントの特定のテーブルに対してのみ、指定された CMK を使用することを、DynamoDB に許可します。

17

Page 26: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシー

この出力を取得するには、お客様のアカウントの DynamoDB に使用する AWS 管理の CMK に対してListGrants オペレーションを実行します。

$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{ "Grants": [ { "Operations": [ "Decrypt", "Encrypt", "GenerateDataKey", "ReEncryptFrom", "ReEncryptTo", "RetireGrant", "DescribeKey" ], "IssuingAccount": "arn:aws:iam::111122223333:root", "Constraints": { "EncryptionContextSubset": { "aws:dynamodb:tableName": "Services", "aws:dynamodb:subscriberId": "111122223333" } }, "CreationDate": 1518567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com", "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com", "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a", "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59" } ]}

暗号化コンテキストのログ記録AWS KMS は AWS CloudTrail を使用して暗号化コンテキストを記録するため、アクセスされた CMK やデータを判断することができます。ログエントリには、ログエントリ内の暗号化コンテキストによって参照されている特定のデータの暗号化または復号にどの CMK が使用されたかが正確に示されます。

Important

暗号化コンテキストは記録されるため、機密情報が含まれていてはなりません。

暗号化コンテキストの保存Decrypt(または ReEncrypt)オペレーションを呼び出すときに暗号化コンテキストの使用を簡略化するには、暗号化データと共に暗号化コンテキストを保存できます。暗号化や復号で必要になったときに完全な暗号化コンテキストを作成できる十分な暗号化コンテキストのみを保存することをお勧めします。

たとえば、暗号化コンテキストがファイルへの完全修飾パスである場合、そのパスの一部のみを、暗号化されたファイルの内容とともに保存します。次に、完全な暗号化コンテキストが必要になったら、保存されたフラグメントからコンテキストを再構築します。誰かがファイルを改ざんした場合 (名前の変更、別の場所への移動など)、暗号化コンテキスト値が変更され、復号リクエストは失敗します。

キーポリシーCMK を作成するとき、その CMK を使用して管理できるユーザーを決定します。これらのアクセス権限は、キーポリシーと呼ばれるドキュメントに含まれます。キーポリシーを使用して、カスタマー管理の CMK に対するアクセス許可をいつでも追加、削除、または変更できます。ただし、AWS 管理の

18

Page 27: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可

CMK のキーポリシーは編集できません。詳細については、「AWS KMS の認証とアクセスコントロール (p. 51)」を参照してください。

許可許可は、アクセス許可を付与するための別のメカニズムです。キーポリシーに代わるものです。許可は限定的であり、作成と取り消しが容易であるため、一時的なアクセス許可やより詳細なアクセス許可を付与するためによく使用されます。

許可トークン許可を作成する場合、許可で指定されたアクセス権限は、結果整合性により、即時に反映されない場合があります。潜在的な遅延を軽減する必要がある場合は、CreateGrant リクエストへのレスポンスで受け取る許可トークンを使用します。いくつかの AWS KMS API リクエストとともに許可トークンを渡し、許可のアクセス権限を即時有効にすることができます。次の AWS KMS API オペレーションでは許可トークンを使用できます。

• CreateGrant• Decrypt• DescribeKey• Encrypt• GenerateDataKey• GenerateDataKeyWithoutPlaintext• ReEncrypt• RetireGrant

許可トークンはシークレットではありません。許可トークンには、その対象としているユーザーに関する情報が含まれるため、これを使用してより迅速に許可のアクセス権限を有効にできるユーザーに関する情報が含まれます。

CMK の使用の監査キーの利用を監査するには AWS CloudTrail を使用します。CloudTrail は、AWS API 呼び出しとアカウントの関連イベントの履歴を含むログファイルを作成します。これらのログファイルには、AWS マネジメントコンソール、AWS SDK、コマンドラインツールで行ったすべての AWS KMS API リクエストが含まれます。また、AWS サービスによってお客様に代わって行われた AWS KMS へのリクエストも含まれます。これらのログファイルを使用して、CMK が使用された時間、リクエストされたオペレーション、リクエスタの ID、ソースの IP アドレスなどの重要な情報を見つけることができます。詳細については、「AWS CloudTrail による AWS KMS API コールのログ記録 (p. 309)」と『AWS CloudTrail User Guide』を参照してください。

キー管理インフラストラクチャ暗号化の一般的な手法では、AES (Advanced Encryption Standard) など一般に利用でき専門家によって検証されたアルゴリズムとシークレットキーを使用して暗号化し、復号する必要があります。暗号化での主な問題の 1 つは、キーを秘密にしておくのが非常に困難なことです。これは通常、キー管理インフラストラクチャ (KMI) のジョブです。AWS KMS はお客様に代わって KMI を運用します。AWS KMS は CMK と呼ばれるマスターキーを作成し、安全に保存します。AWS KMS の動作の詳細については、「AWS KeyManagement Service 暗号化の詳細」ホワイトペーパーを参照してください。

19

Page 28: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの作成

開始方法AWS マネジメントコンソールおよび AWS KMS API オペレーションを使用した作成、表示、編集、タグ付け、有効化、無効化のトピックがあります。

トピック• キーの作成 (p. 20)• キーの表示 (p. 26)• キーの編集 (p. 40)• キーのタグ付け (p. 44)• キーの有効化と無効化 (p. 46)• パブリックキーのダウンロード (p. 48)

キーの作成AWS マネジメントコンソール でまたは CreateKey オペレーションを使用して、対称および非対称カスタマーマスターキー (p. 138) (CMK) を作成できます。このプロセスでは、CMK の暗号化設定とそのキーマテリアルの生成元を決定します。CMK の作成後にこれらのプロパティを変更することはできません。CMK のキーポリシーも設定します。これはいつでも変更できます。

AWS のサービスで保存または管理するデータを暗号化するための CMK を作成する場合は、対称 CMK を作成します。AWS KMS と統合された AWS のサービスは、対称 CMK を使用してデータを暗号化します。これらのサービスは、非対称 CMK を使用した暗号化をサポートしていません。 作成する CMK のタイプを決定する方法については、「CMK 設定の選択方法 (p. 140)」を参照してください。

詳細はこちら:

• インポートされたキーマテリアルを使用して CMK を作成する方法については (キーマテリアルのオリジン (p. 13)は External)、「キーマテリアルを使用せずにカスタマーマスターキーを作成する (p. 159)」を参照してください。

• カスタムキーストアでの CMK の作成方法については (キーマテリアルのオリジン (p. 13) はカスタムキーストア (CloudHSM))、「カスタムキーストアでの CMK の作成 (p. 203)」を参照してください。

• 既存の CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

• プログラムおよびコマンドラインインターフェイスオペレーションで CMK を使用するには、キー ID またはキー ARN が必要です。詳細な手順については、「キー ID と ARN を検索する (p. 36)」を参照してください。

トピック• 対称 CMK の作成 (p. 20)• 非対称 CMK の作成 (p. 23)

対称 CMK の作成対称 CMK (p. 139) は、AWS マネジメントコンソール で、または AWS KMS API を使用して、作成できます。対称キー暗号化では、データの暗号化と復号化に同じキーが使用されます。

対称 CMK の作成 (コンソール)AWS マネジメントコンソール を使用してカスタマーマスターキー (CMK) を作成できます。

20

Page 29: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK の作成

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. [キーの作成] を選択します。5. 対称 CMK を作成するには、[キータイプ] で [対称] を選択します。

AWS KMS コンソールで非対称 CMK を作成する方法については、「非対称 CMK の作成 (コンソール) (p. 23)」を参照してください。

6. [Next] を選択します。7. CMK のエイリアスを入力します。エイリアス名の先頭を aws/ にすることはできません。aws/ プレ

フィックスは、アカウントの AWS 管理 CMK を表すために Amazon Web Services によって予約されています。

エイリアスは CMK を識別するために使用できる表示名です。保護する予定のデータのタイプ、または CMK で使用する予定のアプリケーションを示すエイリアスを選択することをお勧めします。

エイリアスは、AWS マネジメントコンソールで CMK を作成するときに必要です。CreateKey オペレーションを使用する場合はオプションです。

8. (オプション) CMK の説明を入力します。

保護する予定のデータのタイプ、または CMK で使用する予定のアプリケーションを表す説明を入力します。AWS 管理 CMK (p. 4) に使用される説明形式は使用しないでください。他にキーが定義されていない場合に ... を保護するデフォルトのマスターキーという説明形式は、AWS 管理の CMK 用に予約されています。

キーの状態 (p. 236)が Pending Deletion でない限り、今すぐ説明を追加するか、後でいつでも更新できます。既存のカスタマー管理 CMK の説明を追加、変更、または削除するには、AWS マネジメントコンソール で CMK を編集 (p. 40)するか、UpdateKeyDescription オペレーションを使用します。

9. [次へ] を選択します。10. (オプション) タグキーとオプションのタグ値を入力します。CMK に複数のタグを追加するには、[Add

tag] を選択します。

AWS リソースにタグを追加すると、使用量とコストがタグごとに集計されたコスト配分レポートが AWS によって生成されます。CMK にタグ付けする方法の詳細については、「キーのタグ付け (p. 44)」を参照してください。

11. [次へ] を選択します。12. CMK を管理できる IAM ユーザーとロールを選択します。

Note

IAM ポリシーによって、CMK を管理するアクセス許可を他の IAM ユーザーおよびロールに付与できます。

13. (オプション) 選択した IAM ユーザーおよびロールがこの CMK を削除できないようにするには、ページの下部にある [Key deletion (キーの削除)] セクションで [Allow key administrators to delete this key(キーの管理者がこのキーを削除できるようにします。)] チェックボックスをオフにします。

14. [次へ] を選択します。15. 暗号化オペレーション (p. 10)で CMK を使用できる IAM ユーザーおよびロールを選択します。

Note

AWS アカウント (root ユーザー) には、デフォルトで完全なアクセス権限があります。そのため、IAM ポリシーによって、暗号化オペレーションに CMK を使用するアクセス許可をユーザーとロールに付与することもできます。

21

Page 30: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK の作成

16. (オプション) 他の AWS アカウントが暗号化オペレーションにこの CMK を使用するようにできます。これを行うには、ページの下部にある [Other AWS accounts (別の AWS アカウント)] セクションで[Add another AWS account (別の AWS アカウントを追加する)] を選択し、外部アカウントの AWS アカウント ID 番号を入力します。複数の外部アカウントを追加するには、この手順を繰り返します。

Note

外部アカウントのプリンシパルが CMK を使用できるようにするには、外部アカウントの管理者が、これらのアクセス許可を提供する IAM ポリシーを作成する必要があります。詳細については、「他のアカウントのユーザーに CMK の使用を許可する (p. 79)」を参照してください。

17. [次へ] を選択します。18. 選択した内容で作成されたキーポリシードキュメントを確認します。これを編集することもできま

す。19. [Finish] を選択し、CMK を作成します。

対称 CMK の作成 (AWS KMS API)

CreateKey オペレーションを使用して、新しい対称顧客マスターキー (CMK) を作成できます。以下の例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用することができます。

このオペレーションには必須パラメータはありません。ただし、キーポリシーを指定するために Policyパラメータが必要になる場合もあります。キーポリシー (PutKeyPolicy) を変更して、説明 や タグ などのオプショナルの要素をいつでも追加できます。また、インポートしたキーマテリアル (p. 156) の CMK またはカスタムキーストア (p. 182)の CMK を作成する場合は、Origin パラメータが必要です。

次の例では、パラメータを指定せずに CreateKey オペレーションを呼び出します。このコマンドでは、すべてのデフォルト値が使用されます。AWS KMS によって生成されたキーマテリアルを使用して暗号化および復号するための対称 CMK を作成します。

$ aws kms create-key{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1502910355.475, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333" "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

新規の CMK にキーポリシーを指定しない場合、CreateKey によって適用されるデフォルトのキーポリシー (p. 56)は、コンソールを使用して新規の CMK を作成するときにコンソールが適用するデフォルトのキーポリシーとは異なります。

たとえば、GetKeyPolicy オペレーションへの呼び出しは、CreateKey が適用するキーポリシーを返します。これによって CMK に AWS アカウントのルートアクセスが付与され、CMK に AWS Identity and

22

Page 31: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド非対称 CMK の作成

Access Management (IAM) ポリシーを作成することができます。IAM ポリシーと CMK のキーポリシーについての詳細は、「AWS KMS の認証とアクセスコントロール (p. 51)」を参照してください。

$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default --output text{ "Version" : "2012-10-17", "Id" : "key-default-1", "Statement" : [ { "Sid" : "Enable IAM User Permissions", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ]}

非対称 CMK の作成非対称 CMK (p. 139) は、AWS マネジメントコンソール で、または AWS KMS API を使用して、作成できます。非対称 CMK は、暗号化または署名に使用できるパブリックキーとプライベートキーのペアを表します。

AWS のサービスに保存または管理するデータを暗号化する CMK を作成する場合は、対称 CMK を使用します。AWS KMS と統合されている AWS のサービスは、非対称 CMK をサポートしていません。対称 CMK と非対称 CMK のどちらを作成するかを決定する方法については、「CMK 設定の選択方法 (p. 140)」を参照してください。

非対称 CMK の作成 (コンソール)

AWS マネジメントコンソール を使用して非対称カスタマーマスターキー (CMK) を作成できます。非対称の CMK のそれぞれは、パブリックキーとプライベートキーのペアを表します。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. [キーの作成] を選択します。5. 非対称 CMK を作成するには、[キータイプ] で [非対称] を選択します。

AWS KMS コンソールで対称 CMK を作成する方法については、「対称 CMK の作成 (コンソール) (p. 20)」を参照してください。

6. パブリックキー暗号化用の非対称 CMK を作成するには、[Key usage (キーの使用方法)]で [暗号化と復号] を選択します。または、メッセージに署名して署名を検証するための非対称 CMK を作成するには、[Key usage (キーの使用方法)] で [署名と検証] を選択します。

キーの使用方法の値の選択については、「キー使用法の選択 (p. 141)」を参照してください。7. 非対称 CMK の仕様([キー仕様])を選択します。

選択する主要な仕様は、多くの場合、規制、セキュリティ、またはビジネス要件によって決定されます。また、暗号化または署名する必要があるメッセージのサイズによっても影響を受ける可能性があります。一般に、長い暗号化キーは、ブルートフォース攻撃に対してより耐性があります。

キー仕様を選択する方法については、「キー仕様の選択 (p. 142)」を参照してください。

23

Page 32: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド非対称 CMK の作成

8. [Next] を選択します。9. CMK のエイリアスを入力します。エイリアス名の先頭を aws/ にすることはできません。aws/ プレ

フィックスは、アカウントの AWS 管理 CMK を表すために Amazon Web Services によって予約されています。

エイリアスは CMK を識別するために使用できる表示名です。保護する予定のデータのタイプ、または CMK で使用する予定のアプリケーションを示すエイリアスを選択することをお勧めします。

エイリアスは、AWS マネジメントコンソールで CMK を作成するときに必要です。CreateKey オペレーションを使用する場合はオプションです。

10. (オプション) CMK の説明を入力します。

保護する予定のデータのタイプ、または CMK で使用する予定のアプリケーションを表す説明を入力します。AWS 管理 CMK (p. 4) に使用される説明形式は使用しないでください。他にキーが定義されていない場合に ... を保護するデフォルトのマスターキーという説明形式は、AWS 管理の CMK 用に予約されています。

キーの状態 (p. 236)が Pending Deletion でない限り、今すぐ説明を追加するか、後でいつでも更新できます。既存のカスタマー管理 CMK の説明を追加、変更、または削除するには、AWS マネジメントコンソール で CMK を編集 (p. 40)するか、UpdateKeyDescription オペレーションを使用します。

11. (オプション) タグキーとオプションのタグ値を入力します。CMK に複数のタグを追加するには、[Addtag] を選択します。

AWS リソースにタグを追加すると、使用量とコストがタグごとに集計されたコスト配分レポートが AWS によって生成されます。CMK にタグ付けする方法の詳細については、「キーのタグ付け (p. 44)」を参照してください。

12. [次へ] を選択します。13. CMK を管理できる IAM ユーザーとロールを選択します。

Note

IAM ポリシーによって、CMK を管理するアクセス許可を他の IAM ユーザーおよびロールに付与できます。

14. (オプション) 選択した IAM ユーザーおよびロールがこの CMK を削除できないようにするには、ページの下部にある [Key deletion (キーの削除)] セクションで [Allow key administrators to delete this key(キーの管理者がこのキーを削除できるようにします。)] チェックボックスをオフにします。

15. [次へ] を選択します。16. 暗号化オペレーション (p. 10)で CMK を使用できる IAM ユーザーおよびロールを選択します。

Note

AWS アカウント (root ユーザー) には、デフォルトで完全なアクセス権限があります。そのため、IAM ポリシーによって、暗号化オペレーションに CMK を使用するアクセス許可をユーザーとロールに付与することもできます。

17. (オプション) 他の AWS アカウントが暗号化オペレーションにこの CMK を使用するようにできます。これを行うには、ページの下部にある [Other AWS accounts (別の AWS アカウント)] セクションで[Add another AWS account (別の AWS アカウントを追加する)] を選択し、外部アカウントの AWS アカウント ID 番号を入力します。複数の外部アカウントを追加するには、この手順を繰り返します。

Note

外部アカウントのプリンシパルが CMK を使用できるようにするには、外部アカウントの管理者が、これらのアクセス許可を提供する IAM ポリシーを作成する必要があります。詳細については、「他のアカウントのユーザーに CMK の使用を許可する (p. 79)」を参照してください。

18. [次へ] を選択します。

24

Page 33: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド非対称 CMK の作成

19. 選択した内容で作成されたキーポリシードキュメントを確認します。これを編集することもできます。

20. [Finish] を選択し、CMK を作成します。

非対称 CMK の作成 (AWS KMS API)CreateKey オペレーションを使用して、非対称顧客マスターキー (CMK) を作成できます。これらの例ではAWS Command Line Interface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用できます。

非対称 CMK を作成する場合は、作成するキーのタイプを決定する CustomerMasterKeySpec パラメータを指定する必要があります。また、ENCRYPT_DECRYPT または SIGN_VERIFY の KeyUsage 値も指定する必要があります。CMK の作成後にこれらのプロパティを変更することはできません。

次の例では、CreateKey オペレーションを使用して、パブリックキー暗号化用に設計された 4096 ビットRSA キーの非対称 CMK を作成します。

$ aws kms create-key --customer-master-key-spec RSA_4096 --key-usage ENCRYPT_DECRYPT{ "KeyMetadata": { "KeyState": "Enabled", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "CustomerMasterKeySpec": "RSA_4096", "KeyManager": "CUSTOMER", "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1569973196.214, "EncryptionAlgorithms": [ "RSAES_OAEP_SHA_1", "RSAES_OAEP_SHA_256" ], "AWSAccountId": "111122223333", "Origin": "AWS_KMS", "Enabled": true }}

次のコマンド例では、署名と検証に使用される ECDSA キーのペアを表す非対称 CMK を作成します。暗号化と復号のために楕円曲線キーペアを作成することはできません。

$ aws kms create-key --customer-master-key-spec ECC_NIST_P521 --key-usage SIGN_VERIFY{ "KeyMetadata": { "KeyState": "Enabled", "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1570824817.837, "Origin": "AWS_KMS", "SigningAlgorithms": [ "ECDSA_SHA_512" ], "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "AWSAccountId": "111122223333", "CustomerMasterKeySpec": "ECC_NIST_P521", "KeyManager": "CUSTOMER", "Description": "", "Enabled": true, "KeyUsage": "SIGN_VERIFY" }

25

Page 34: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの表示

}

キーの表示AWS マネジメントコンソールまたは AWS Key Management Service (AWS KMS) API を使用すると、カスタマーマスターキー (CMK) を表示できます。これにはカスタマー管理の CMK と AWS が管理する CMKが含まれます。

トピック• コンソールでの CMK の表示 (p. 26)• API を使用した CMK の表示 (p. 33)• キー ID と ARN を検索する (p. 36)• 対称 CMK と非対称 CMK の識別 (p. 37)

コンソールでの CMK の表示AWS マネジメントコンソール では、CMK のリストと各 CMK の詳細を表示できます。

トピック• キーテーブルへの移動 (p. 26)• CMK の並べ替えとフィルタリング (p. 26)• CMK の詳細の表示 (p. 29)• CMK テーブルのカスタマイズ (p. 32)

キーテーブルへの移動各アカウントとリージョンの AWS KMS カスタマーマスターキー (CMK) がテーブルに表示されます。作成する CMK と、AWS サービスで作成される CMK には別々のテーブルがあります。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで

[Customer managed keys (カスタマー管理型のキー)] を選択します。 AWS により自動的に作成および管理されているアカウント内のキーを表示するには、ナビゲーションペインで [AWS managed keys(AWS で管理されたキー)] を選択します。 さまざまな種類の CMK については、「カスタマーマスターキー (p. 3)」を参照してください。

Tip

エイリアスのない AWS 管理の CMK (p. 4) を表示するには、[Customer managed keys (カスタマー管理型のキー)] ページを使用します。AWS KMS コンソールには、アカウントとリージョンのカスタムキーストアも表示されます。カスタムキーストアで作成した CMK は、[カスタマー管理のキー] ページに表示されます。カスタムキーストアの詳細については、「カスタムキーストアの使用 (p. 182)」を参照してください。

CMK の並べ替えとフィルタリングコンソールで CMK を見つけやすくするために、CMK を並べ替えてフィルタリングできます。

26

Page 35: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドコンソールでの CMK の表示

Note

[キーのタイプ] 列はオプションで表示され (p. 32)、AWS KMS が非対称 CMK をサポートしている AWS リージョンにのみ表示されます。

Sort

カスタマー管理の CMK を列の値で昇順または降順に並べ替えることができます。この機能は、テーブル内のすべての CMK を、現在のテーブルページに表示されていない場合でも並べ替えます。

ソート可能な列は、列名の横の矢印で示されます。[AWS マネージドキー] ページでは、[エイリアス] または [キー ID] で並べ替えることができます。[Customer managed keys (カスタマーマネージドキー)] ページでは、[エイリアス]、[キー ID] 、または [キータイプ] で並べ替えることができます。

昇順で並べ替えるには、矢印が上を向くまで列見出しを選択します。降順で並べ替えるには、矢印が下を向くまで列見出しを選択します。一度に 1 つの列のみでソートすることができます。

たとえば、デフォルトであるエイリアスではなく、キー ID により昇順で CMK を並べ替えることができます。

カスタマーマスターキー ページの CMK を [キーのタイプ] で昇順でソートすると、すべての非対称キーがすべての対称キーの前に表示されます。

フィルター

CMK を列の値でフィルタリングできます。フィルターは、テーブル内のすべての CMK に、現在のテーブルページに表示されていない場合でも、適用されます。フィルターでは、大文字と小文字は区別されません。

フィルタリング可能な列がフィルターボックスに一覧表示されます。[AWS マネージドキー] ページでは、[エイリアス] および [キー ID] でフィルタリングできます。[Customer managed keys (カスタマーマネージドキー)] ページでは、[エイリアス]、[キー ID] 、または [キータイプ] でフィルタリングできます。

特定の列の値でフィルタリングするには、フィルターを選択し、列名を選択して、実際の列値のリストから選択します。列を選択した後、列値のすべてまたは一部を入力することもできます。選択を行う前に、結果のプレビューが表示されます。

たとえば、aws/e を含むエイリアス名で CMK を表示するには、フィルターボックスを選択し、[エイリアス]を選択して aws/e と入力し、Enter または Return キーを押してフィルターを追加します。

27

Page 36: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドコンソールでの CMK の表示

カスタマーマスターキー ページに非対称 CMK のみを表示するには、フィルターボックスをクリックし、[キーのタイプ] を選択して、[キーのタイプ: 非対称] を選択します。非対称 オプションは、テーブルに非対称 CMK がある場合にのみ表示されます。

フィルター可能なすべての列のテキストを検索するには、フィルターボックスに、列の値のすべてまたは一部を入力します。選択を行う前に、結果のプレビューが表示されます。

たとえば、任意の列値で test のある CMK を表示するには、フィルターボックスに test と入力します。プレビューには、フィルターが選択する CMK が表示されます。この場合、test は [エイリアス] 列にのみ 表示されます。

複数のフィルターを同時に持つことができます。フィルターを追加する場合は、論理演算子を選択することもできます。

28

Page 37: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドコンソールでの CMK の表示

CMK の詳細の表示各 CMK の詳細ページには、CMK のプロパティが表示されます。CMK の種類によってわずかに異なります。

CMK に関する詳細情報を表示するには:

1. CMK の詳細ページを表示するには、[AWS マネージド キー] または [Customer managed keys (カスタマーマネージド キー)] ページで、CMK のエイリアスまたはキー ID を選択します。

2. すべての詳細を表示するには、ページの [General configuration (一般設定)] セクションと[Cryptographic configuration (暗号化設定)] セクションを展開します。CMK がインポートされたキーマテリアル用に設定されている場合、ページには、展開できる [キーマテリアル] セクションも表示されます。

29

Page 38: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドコンソールでの CMK の表示

CMK の詳細ページには、CMK の基本プロパティを表示する [General configuration (一般設定)] セクションと CMK の暗号化プロパティを表示する [Cryptographic configuration (暗号化設定)] セクション、およびキーポリシー、タグ、キーローテーション(対称 CMK の場合)、パブリックキー(非対称 CMK の場合)を含むタブ表示があります。

次のリストは、詳細表示のフィールドについて説明しています。これらのフィールドの一部は、テーブル表示の列としても使用できます。

エイリアス

CMK のわかりやすい名前。コンソールの [エイリアス] フィールドには、1 つのエイリアスだけがリストされます。CMK のすべてのエイリアスを検索するには、ListAliases オペレーションを使用します。

ARN

CMK の Amazon リソースネーム (ARN)。この値は CMK を一意に識別します。これを使用して、AWS KMS API オペレーションで CMK を識別できます。

作成日

CMK が作成された日時。この値は、デバイスの現地時間で表示されます。タイムゾーンはリージョンに依存しません。

[有効期限] とは異なり、作成は CMK のみを参照し、キーマテリアルは参照しません。CloudHSM クラスター ID

CMK のキーマテリアルを含む AWS CloudHSM クラスターのクラスター ID。このフィールドは、CMK が AWS KMS カスタムキーストア (p. 182)で作成された場合にのみ表示されます。

CloudHSM クラスター ID をクリックすると、AWS CloudHSM コンソールの [クラスター] ページが開きます。

カスタムキーストア ID

CMK を含む カスタムキーストア (p. 182) の ID。このフィールドは、CMK が AWS KMS カスタムキーストアで作成された場合にのみ表示されます。

30

Page 39: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドコンソールでの CMK の表示

カスタムキーストア ID をクリックすると、AWS KMS コンソールの [カスタムキーストア] ページが開きます。

カスタムキーストア名

CMK を含む カスタムキーストア (p. 182)の名前。このフィールドは、CMK が AWS KMS カスタムキーストアで作成された場合にのみ表示されます。

説明

CMK の簡単な、オプションの説明。カスタマー管理の CMK の説明を追加または更新するには、[General Configuration (一般設定)] で [編集] を選択します。

暗号化アルゴリズム

AWS KMS で CMK と使用できる暗号化アルゴリズムを一覧表示します。このフィールドは、[キーのタイプ] が [非対称] で、[Key usage (キーの使用方法)] が [暗号化と復号] の場合にのみ表示されます。AWS KMS がサポートする暗号化アルゴリズムについては、「SYMMETRIC_DEFAULT キー仕様 (p. 143)」および「暗号化および復号の RSA キー仕様 (p. 144)」を参照してください。

有効期限日

CMK のキーマテリアルの有効期限が切れる日時。このフィールドは、インポートされたキーマテリアル (p. 156)を持つ CMK に対してのみ表示されます。つまり、[オリジン] が [External] で、CMK に有効期限があるキーマテリアルがある場合です。

キーポリシー

CMK へのアクセスを IAM ポリシー (p. 74)および許可 (p. 123)とともに制御します。すべてのCMK には 1 つのキーポリシーがあります。これは、唯一の必須認証要素です。カスタマー管理のCMK のキーポリシーを変更するには、[キーポリシー] タブで [編集] を選択します。詳細については、「the section called “キーポリシーの使用” (p. 55)」を参照してください。

キーローテーション

毎年自動キーローテーション (p. 151)を有効または無効にします。

カスタマー管理の CMK (p. 4) のキーローテーションステータスを変更するには、[キーローテーション] タブのチェックボックスを使用します。すべての AWS 管理の CMK (p. 4) は 3 年ごとに自動的にローテーションされます。

キー仕様

CMK のキーマテリアルのタイプ。AWS KMS は、対称 CMK (SYMMETRIC_DEFAULT)、異なる長さの RSA キーの CMK、および異なる曲線の楕円曲線キーをサポートします。詳細については、「キー仕様 (p. 13)」を参照してください。

キーのタイプ

CMK が [対称] か [非対称] かを示します。キーの使用方法

CMK を [暗号化と復号] または [署名と検証] に使用できるかどうかを示します。非対称 CMK だけが署名と検証に使用できます。詳細については、「キーの使用方法 (p. 14)」を参照してください。

Origin

CMK のキーマテリアルのソース。有効な値は、AWS KMS により生成されるキーマテリアル用の[AWS_KMS]、インポートされたキーマテリアル (p. 156)用の [EXTERNAL]、カスタムキーストア (p. 182)内の CMK 用の [AWS_CloudHSM] です。

パブリックキー

非対称 CMK のパブリックキーを表示します。承認されたユーザーは、このタブを使用してパブリックキーをコピーおよびダウンロード (p. 48)できます。

31

Page 40: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドコンソールでの CMK の表示

署名アルゴリズム

AWS KMS で CMK により使用できる署名アルゴリズムを一覧表示します。このフィールドは、[キーのタイプ] が [非対称] で、[Key usage (キーの使用方法)] が [署名と検証] の場合にのみ表示されます。AWS KMS がサポートする署名アルゴリズムについては、「署名および検証用の RSA キー仕様 (p. 145)」および「楕円曲線のキー仕様 (p. 146)」を参照してください。

ステータス

CMK のキーの状態。CMK は、ステータスが [有効] の場合にのみ暗号化オペレーション (p. 10)で使用できます。各 CMK ステータスと CMK で実行できるオペレーションへの影響の詳細については、「キー状態: CMK への影響 (p. 236)」を参照してください。

タグ

CMK を記述するオプションのキーと値のペア。CMK のタグを追加または変更するには、[タグ] タブで [編集] を選択します。

AWS リソースにタグを追加すると、使用量とコストがタグごとに集計されたコスト配分レポートが AWS によって生成されます。CMK にタグ付けする方法の詳細については、「キーのタグ付け (p. 44)」を参照してください。

CMK テーブルのカスタマイズ[AWS マネージド キー] の管理キーページおよび AWS マネジメントコンソール の [Customer managedkeys (カスタマーマネージドキー)] ページに表示されるテーブルは、ニーズに合わせてカスタマイズできます。表の列、各ページのカスタマーマスターキー (CMK) の数([ページサイズ])、およびテキストの折り返しを選択できます。選択した設定は、確認すると保存され、ページを開くたびに再適用されます。

CMK テーブルをカスタマイズするには

1. [AWS managed keys (AWS マネージドキー)] または [Customer managed keys (カスタマーマネージ

ドキー)] ページで、ページの右上隅にある設定アイコン ( ) を選択します。2. [Preferences (設定)] ページで、必要な設定を選択してから [Confirm (確認)] を選択します。

[ページサイズ] の設定を使用して、特に、スクロールしやすいデバイスを使用する場合、各ページに表示される CMK の数を増やすことを検討してください。

表示されるデータ列は、テーブル、ジョブロール、アカウントとリージョンでの CMK のタイプによって異なります。次の表に、推奨される設定を示します。コラムの説明については、「CMK の詳細の表示 (p. 29)」を参照してください。

推奨される CMK テーブル設定CMK テーブルに表示される列をカスタマイズして、CMK に関する必要な情報を表示できます。

AWS マネージドキー

デフォルトでは、[AWS マネージドキー] テーブルには [エイリアス]、[キー ID]、[ステータス] の各列が表示されます。これらの列は、ほとんどのユースケースに最適です。

対称カスタマー管理キー

AWS KMS によって生成されたキーマテリアルを持つ対称 CMK のみを使用する場合、[エイリアス]、[キー ID]、[ステータス]、[作成日] の各列が最も有用な可能性があります。

非対称カスタマー管理キー

非対称 CMK を使用する場合は、[エイリアス]、[キー ID]、[ステータス] 列に加えて、[キータイプ]、[キー仕様]、[Key usage (キーの使用方法)] 列を追加することを検討してください。これらの列に

32

Page 41: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAPI を使用した CMK の表示

は、CMK が対称か非対称か、キーマテリアルのタイプ、CMK を暗号化または署名に使用できるかが示されます。

インポートしたキーマテリアル

インポートされたキーマテリアル (p. 156)を持つ CMK がある場合、[エイリアス]、[キー ID]、および [ステータス] 列に加えて、[オリジン] と [有効期限] 列を追加することを検討してください。これらの列には、CMK のキーマテリアルが AWS KMS によってインポートまたは生成されたかどうか、およびキーマテリアルの有効期限が切れる場合、そのタイミングが表示されます。[作成日] フィールドには、CMK が(キーマテリアルなしで)作成された日付が表示されます。キーマテリアルの特性を反映していません。

カスタムキーストアのキー

カスタムキーストア (p. 182)に CMK がある場合は、[エイリアス]、[キー ID]、および [ステータス]列に加えて、[カスタムキーストア ID] 列を追加することを検討してください。この列の値は、CMK がカスタムキーストア内にあること、および CMK がどのカスタムキーストアにあるかを示します。

API を使用した CMK の表示AWS Key Management Service(AWS KMS) API を使用して、CMK を表示できます。このセクションでは、既存の CMK に関する詳細を返すいくつかのオペレーションを示します。例では AWS Command LineInterface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用できます。

トピック• ListKeys: すべての CMK の ID と ARN の取得 (p. 33)• DescribeKey: CMK の詳細情報の取得 (p. 34)• GetKeyPolicy: CMK にアタッチされたキーポリシーの取得 (p. 35)• ListAliases: エイリアス名で CMK を表示する (p. 35)

ListKeys: すべての CMK の ID と ARN の取得ListKeys オペレーションは、アカウントとリージョンのすべての CMK の ID と Amazon リソースネーム(ARN) を返します。

たとえば、ListKeys オペレーションに対するこの呼び出しでは、この架空のアカウントの各 CMK の IDと ARN が返されます。

$ aws kms list-keys { "Keys": [ { "KeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" }, { "KeyArn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321" }, { "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "KeyId": "1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" }

33

Page 42: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAPI を使用した CMK の表示

}

DescribeKey: CMK の詳細情報の取得DescribeKey オペレーションは、指定された CMK の詳細を返します。CMK を識別するには、そのキーID (p. 12)、キー ARN (p. 12)、エイリアス名 (p. 12)、またはエイリアス ARN (p. 12) を使用します。

たとえば、この DescribeKey の呼び出しでは、対称 CMK に関する情報が返されます。レスポンスのフィールドは、カスタマーマスターキーの仕様 (p. 13)、キーの状態 (p. 236)、キーマテリアルのオリジン (p. 13)によって異なります。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1499988169.234, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333" "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

この例では、署名と検証に使用される非対称 CMK で DescribeKey オペレーションを呼び出します。レスポンスには、この CMK に対して AWS KMS がサポートする署名アルゴリズムが含まれます。

$ aws kms describe-key --key-id 0987dcba-09fe-87dc-65ba-ab0987654321

{ "KeyMetadata": { "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "Origin": "AWS_KMS", "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "KeyState": "Enabled", "KeyUsage": "SIGN_VERIFY", "CreationDate": 1569973196.214, "Description": "", "CustomerMasterKeySpec": "ECC_NIST_P521", "AWSAccountId": "111122223333", "Enabled": true, "KeyManager": "CUSTOMER" "SigningAlgorithms": [ "ECDSA_SHA_512" ] }}

事前定義済み AWS エイリアス (キー ID がない AWS エイリアス) で DescribeKey オペレーションを使用できます。この操作を行うと、AWS KMS は AWS 管理の CMK (p. 3) にエイリアスを関連付け、レスポンスで KeyId および Arn を返します。

34

Page 43: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAPI を使用した CMK の表示

GetKeyPolicy: CMK にアタッチされたキーポリシーの取得GetKeyPolicy オペレーションは、CMK にアタッチされたキーポリシーを取得します。CMK を識別するには、そのキー ID またはキー ARN を使用します。ポリシー名も指定する必要があり、これは、常にdefault になります。(出力の読み込みが困難な場合には、コマンドに --output text オプションを追加します)。

$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default

{ "Version" : "2012-10-17", "Id" : "key-default-1", "Statement" : [ { "Sid" : "Enable IAM User Permissions", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ]}

ListAliases: エイリアス名で CMK を表示するListAliases オペレーションは、アカウントとリージョンのエイリアスを返します。レスポンスのTargetKeyId は、エイリアスが参照している CMK のキー ID (存在する場合) を表示します。

デフォルトでは、ListAliases コマンドはアカウントとリージョンのすべてのエイリアスを返します。これには、お客様が作成してカスタマー管理の CMK (p. 3) に関連付けたエイリアスと、AWS が作成してアカウントの AWS 管理の CMK (p. 3) に関連付けたエイリアスが含まれます。AWS のエイリアスは aws/dynamodb のような aws/<service-name> 形式を使用するので認識できます。

また、このレスポンスには、TargetKeyId フィールドがないエイリアスが含まれます。(この例の aws/redshift エイリアスなど)。これらは、AWS が作成したが、まだ CMK と関連付けられていない事前定義されたエイリアスです。

$ aws kms list-aliases

{ "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ImportedKey", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "AliasName": "alias/ExampleKey" }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/test-key", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "AliasName": "alias/test-key" }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/financeKey", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "AliasName": "alias/financeKey" }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/dynamodb", "TargetKeyId": "1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d",

35

Page 44: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー ID と ARN を検索する

"AliasName": "alias/aws/dynamodb" }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/redshift", "AliasName": "alias/aws/redshift" }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/s3", "TargetKeyId": "0987ab65-43cd-21ef-09ab-87654321cdef", "AliasName": "alias/aws/s3" } ]}

特定の CMK を参照するエイリアスを取得するには、KeyId パラメータを使用します。パラメータ値には、キー ID (p. 12) または キー ARN (p. 12) を指定できます。エイリアス名 (p. 12)またはエイリアスARN (p. 12) を指定することはできません。

以下の例のコマンドは、カスタマー管理の CMK (p. 4) を参照するエイリアスを取得します。ただし、このようなコマンドを使用して、AWS 管理の CMK (p. 4) を参照するエイリアスを検索することもできます。

$ aws kms list-aliases --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

{ "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/test-key", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "AliasName": "alias/test-key" }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/financeKey", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "AliasName": "alias/financeKey" }, ]}

キー ID と ARN を検索するプログラム、スクリプト、コマンドラインインターフェイス (CLI) コマンドで AWS KMS CMK を識別するには、CMK のキー ID (p. 12)、またはその Amazon リソースネーム (キー ARN (p. 12)) を使用します。暗号化オペレーション (p. 10)では、エイリアス名 (p. 12)またはエイリアス ARN (p. 12) を使用することもできます。

AWS KMS がサポートする CMK 識別子の詳細については、「キー識別子 (KeyId) (p. 11)」を参照してください。

キー ID と ARN を検索するには (コンソール)1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. 左のナビゲーションペインで、暗号化キーを選択します。3. フィルタ で、AWS の該当するリージョンを選択します。4. ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで

[Customer managed keys (カスタマー管理型のキー)] を選択します。 AWS により自動的に作成および管理されているアカウント内のキーを表示するには、ナビゲーションペインで [AWS managed keys(AWS で管理されたキー)] を選択します。

36

Page 45: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK と非対称 CMK の識別

5. CMK のキー ID (p. 12) を検索するには、CMK のエイリアスで始まる行を参照します。

デフォルトでは、[キー ID] 列がテーブルに表示されます。[キー ID] 列がテーブルに表示されない場合は、「the section called “CMK テーブルのカスタマイズ” (p. 32)」で説明されている手順に従って復元します。CMK の詳細ページで CMK のキー ID を表示することもできます。

6. CMK の Amazon リソースネーム (ARN) を検索するには、キー ID またはエイリアスを選択します。キー ARN (p. 12) が [General configuration] セクションに表示されます。

キー ID と ARN を検索するには (AWS KMS API)ListKeys API オペレーションを使用する

• カスタマーマスターキー (CMK) のキー ID (p. 12) とキー ARN (p. 12) を検索するには、ListKeys (p. 33) オペレーションを使用します。

対称 CMK と非対称 CMK の識別特定の CMK が対称か非対称 (p. 138)かを判断するには、そのキータイプかキー仕様 (p. 13)を見つけます。AWS KMS コンソールまたは AWS KMS API を使用できます。

これらの方法の中には、キー使用法、CMK がサポートする暗号化アルゴリズムまたは署名アルゴリズムなど、CMK の暗号化設定のその他の側面も表示されます。既存の CMK の暗号化設定を表示できますが、変更することはできません。

コンソールディスプレイの並べ替え、フィルタリング、コラムの選択など、CMK の表示に関する一般的な情報については、「コンソールでの CMK の表示 (p. 26)」を参照してください。

トピック• CMK テーブルでのキータイプの検索 (p. 38)• [詳細] ページでのキータイプの検索 (p. 38)• AWS KMS API を使用したキー仕様の検索 (p. 39)

37

Page 46: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK と非対称 CMK の識別

CMK テーブルでのキータイプの検索AWS KMS コンソールの [Key Type (キータイプ)] 列には、各 CMK が対称か非対称かが表示されます。コンソールの [Customer managed keys (カスタマー管理キー)] ページまたは [AWS managed keys (AWS 管理キー)] ページの CMK テーブルに [Key type (キータイプ)] 列を追加できます。

CMK テーブルで対称 CMK と非対称 CMK を識別するには、以下の手順に従います。

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. 左のナビゲーションペインで、暗号化キーを選択します。3. フィルタ で、AWS の該当するリージョンを選択します。4. ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで

[Customer managed keys (カスタマー管理型のキー)] を選択します。 AWS により自動的に作成および管理されているアカウント内のキーを表示するには、ナビゲーションペインで [AWS managed keys(AWS で管理されたキー)] を選択します。

5. [Key type (キータイプ)] 列には、各 CMK が対称か非対称かが表示されます。また、[Key type (キータイプ)] の値で、ソートおよびフィルタリング (p. 26)することもできます。

CMK テーブルに [Key type (キータイプ)] 列が表示されない場合は、ページの右上隅にある歯車アイコンを選択し、[Key type (キータイプ)] を選択して、[Confirm (確認)] を選択します。[Key spec (キー仕様)] 列と [Key usage (キー使用法)] 列を追加することもできます。

[詳細] ページでのキータイプの検索AWS KMS コンソールでは、各 CMK の詳細ページには、キータイプ(対称または非対称)と CMK に関するその他の暗号化の詳細を表示する [暗号化設定] セクションがあります。

CMK の詳細ページで対称 CMK と非対称 CMK を識別するには、以下の手順に従います。

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. 左のナビゲーションペインで、暗号化キーを選択します。3. フィルタ で、AWS の該当するリージョンを選択します。4. ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで

[Customer managed keys (カスタマー管理型のキー)] を選択します。 AWS により自動的に作成および管理されているアカウント内のキーを表示するには、ナビゲーションペインで [AWS managed keys(AWS で管理されたキー)] を選択します。

5. CMK のエイリアスまたは キー ID を選択します。6. [Cryptographic configuration (暗号化設定)] を選択します。

38

Page 47: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK と非対称 CMK の識別

[Cryptographic configuration (暗号化設定)] セクションには、対称か非対称かを示す [Key Type (キーの種類)] が含まれています。また、CMK の暗号化と復号化、または署名と検証に使用できるかどうかを示す、[Key Usage (キー使用法)] など、CMK に関するその他の詳細も表示されます。非対称 CMK の場合は、CMK がサポートする暗号化アルゴリズムまたは署名アルゴリズムが表示されます。

たとえば、以下は対称 CMK の [Cryptographic configuration (暗号化設定)] セクションの例です。

次に、署名と検証に使用される非対称の RSA CMK の [Cryptographic configuration (暗号化設定)] セクションの例を示します。

AWS KMS API を使用したキー仕様の検索CMK が対称か非対称かを判断するには、DescribeKey オペレーションを使用します。レスポンスのCustomerMasterKeySpec フィールドには、CMK のキー仕様 (p. 13)が含まれています。対称 CMK の場合、CustomerMasterKeySpec の値は SYMMETRIC_DEFAULT です。他のすべての値は、非対称の CMKを示します。

たとえば、DescribeKey は、対称 CMK に対して次のレスポンスを返します。CustomerMasterKeySpec 値は SYMMETRIC_DEFAULT です。

{ "KeyMetadata": { "AWSAccountId": "111122223333", "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1496966810.831, "Enabled": true, "Description": "", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

39

Page 48: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの編集

署名および検証に使用される非対称の RSA CMK に対する DescribeKey 応答は、この例のようになります。CustomerMasterKeySpec 値に示すように、キー仕様は RSA_2048 (p. 143)です。KeyUsageは SIGN_VERIFY で、SigningAlgorithms エレメントは CMK の有効な署名アルゴリズムをリストします。

{ "KeyMetadata": { "AWSAccountId": "111122223333", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1571767572.317, "Enabled": false, "Description": "", "KeyState": "Disabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "RSA_2048", "KeyUsage": "SIGN_VERIFY", "SigningAlgorithms": [ "RSASSA_PKCS1_V1_5_SHA_256", "RSASSA_PKCS1_V1_5_SHA_384", "RSASSA_PKCS1_V1_5_SHA_512", "RSASSA_PSS_SHA_256", "RSASSA_PSS_SHA_384", "RSASSA_PSS_SHA_512" ] }}

キーの編集AWS KMS API、および AWS マネジメントコンソールのキー詳細ページを使用して、カスタマー管理のカスタマーマスターキー (p. 3) (CMK) のプロパティの一部を編集することができます。説明の変更、管理者およびユーザーの追加あるいは削除、タグの管理、およびキーローテーションの有効化と無効化ができます。

AWS が管理する CMK (p. 3) のプロパティを変更することはできません。

トピック• CMK を編集する (コンソール) (p. 40)• CMK を編集する (AWS KMS API) (p. 43)

CMK を編集する (コンソール)必要なアクセス許可を持っているユーザーは、カスタマー管理の CMK のプロパティを AWS マネジメントコンソールで変更できます。これには、説明、タグ、ポリシーと許可、およびローテーションステータスが含まれます。

AWS が管理する CMK のプロパティを表示する (p. 26)ことはできますが、編集することはできません。AWS が管理する CMK のキーポリシーを表示するには、GetKeyPolicy オペレーションを使用します。

CMK の詳細ページに移動する

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

40

Page 49: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK を編集する (コンソール)

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。

(AWS 管理型のキーのプロパティを編集することはできません)4. 編集する CMK のエイリアスまたはキー ID を選択します。キー詳細ページのコントロールを使用

して、CMK のプロパティを表示および変更します。

CMK の説明を変更する

キーの状態 (p. 236)が Pending Deletion でない限り、CMK の説明を追加、変更、または削除できます。説明はオプションです。

1. 右上隅の [Edit (編集)] を選択します。2. [Description (説明)] に、CMK の簡単な説明を入力します。既存の説明を削除することもできま

す。

保護する予定のデータのタイプ、または CMK で使用する予定のアプリケーションを表す説明を入力します。他にキーが定義されていない場合に ... を保護するデフォルトのマスターキーという説明形式は、AWS 管理の CMK (p. 4)用に予約されています。

3. 変更を保存するには [保存] を選択します。

CMK の管理者とユーザーを変更する

CMK のキーポリシーを変更することができます。キーポリシーは、CMK を管理して暗号化オペレーション (p. 10)で使用できる IAM ユーザー、グループ、およびロールを定義します。

AWS アカウント (root ユーザー) には、デフォルトで完全なアクセス権限があります。したがって、アタッチされたポリシーによって適切なアクセス権限が付与されている IAM ユーザーとロールも、CMK を管理できます。キーポリシーと IAM ポリシーの設定の詳細については、「AWS KMS の認証とアクセスコントロール (p. 51)」を参照してください。

1. CMK の詳細ページで、[キーポリシー] タブを選択します。

CMK のキーポリシーがデフォルトポリシーの場合、[Key policy (キーポリシー)] タブにデフォルトビューが [Key administrators (キー管理者)]、[Key deletion (キーの削除)]、[Key users (キーユーザー)]、および [Other AWS accounts (別の AWS アカウント)] のセクションと共に表示されます。それ以外の場合、このタブにはキーポリシードキュメントが表示されます。

キーポリシードキュメントを直接編集するには、[Switch to policy view (ポリシービューへの切り替え)] (該当する場合)、[Edit (編集)] の順に選択し、ドキュメントを編集してから [Save (保存)] を選択します。

この手順の残りのステップでは、デフォルトビューを使用してキーポリシーを編集する方法について説明します。

2. CMK を管理できるユーザーとロールを変更するには、[Key administrators (キー管理者)] セクションを使用します。• キー管理者を追加するには、[Add (追加)] を選択し、ユーザーまたはロールを選択するか入力し

てから [Add (追加)] を選択します。• キー管理者を削除するには、ユーザーまたはロールのチェックボックスをオンにしてから

[Remove (削除)] を選択します。3. キー管理者がこの CMK の削除をスケジュールできないようにするには、[Key deletion (キーの削

除)] セクションで [Allow key administrators to delete this key (キーの管理者がこのキーを削除できるようにします。)] チェックボックスをオフにします。

4. 暗号化オペレーション (p. 10)で CMK を使用できるユーザーやロールを変更するには、[キーユーザー] セクションを使用します。

41

Page 50: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK を編集する (コンソール)

• キーユーザーを追加するには、[Add (追加)] を選択し、ユーザーまたはロールを選択してから[Add (追加)] を選択します。

• キーユーザーを削除するには、ユーザーまたはロールのチェックボックスをオンにしてから[Remove (削除)] を選択します。

5. 暗号化オペレーションで CMK を使用できる他の AWS アカウントを変更するには、[Other AWSaccounts (他の AWS アカウント)] セクションで [Add other AWS accounts (別の AWS アカウントを追加)] を選択します。

Note

外部アカウントを追加しても、そのアカウントのユーザーおよびロールが CMK を使用することは許可されません。外部アカウントのユーザーおよびロールが CMK を使用できるようにするには、外部アカウントの管理者が、これらのアクセス許可を提供するIAM ポリシーを追加する必要があります。詳細については、「他のアカウントのユーザーに CMK の使用を許可する (p. 79)」を参照してください。

• アカウントを追加するには、[Add another AWS account (別の AWS アカウントを追加する)] を選択してアカウント番号を入力します。

• アカウントを削除するには、そのアカウント番号の行で [Remove (削除)] を選択します。

終了したら、[変更の保存] を選択してから X をクリックしてウィンドウを閉じます。

タグを追加、編集、削除する

CMK のタグを変更することができます。各タグは名前と値のペアです。タグ名はアカウントとリージョンで一意であることが必要です。

タグを使用して、CMK を識別および分類することができます。AWS リソースにタグを追加すると、使用量とコストがタグごとに集計されたコスト配分レポートが AWS によって生成されます。CMK タグの詳細については、「キーのタグ付け (p. 44)」を参照してください。

• CMK の詳細ページで、[Tags (タグ)] タブを選択します。• 最初のタグを作成するには、[Create tag (タグの作成)] を選択し、タグ名とタグ値を入力してか

ら [Save (保存)] を選択します。• タグを追加するには、[Edit (編集)]、[Add tag (タグの追加)] の順に選択し、タグ名とタグ値を入

力してから [Save (保存)] を選択します。• タグの名前または値を変更するには、[Edit (編集)] を選択して変更を加えた後、[Save (保存)] を

選択します。• タグを削除するには、[Edit (編集)] を選択します。そのタグの行で、[Remove (削除)] を選択し

てから [Save (保存)] を選択します。

ローテーションを有効または無効にする

対称カスタマー管理の CMK (p. 3) で暗号化マテリアルの自動ローテーション (p. 151)を有効および無効にすることができます。この機能は、非対称 CMK またはインポートされたキーマテリアルを持つ CMK ではサポートされません。

AWS 管理の CMK (p. 3) は 3 年ごとに自動的にローテーションされます。この機能を有効化および無効化することはできません。

1. CMK の詳細ページで、[キーローテーション] タブを選択します。2. 自動キーローテーションを有効にするには、[Automatically rotate this CMK every year (この CMK

を毎年自動的にローテーションします。)] チェックボックスをオンにします。自動キーローテーションを無効にするには、チェックボックスをオフにします。

3. 変更を保存するには [保存] を選択します。

42

Page 51: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK を編集する (AWS KMS API)

CMK を編集する (AWS KMS API)AWS Key Management Service (AWS KMS) API を使用して、カスタマー管理の CMK (p. 3) のプロパティを編集できます。以下の例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用することができます。このセクションでは、既存の CMK に関する詳細を返すいくつかのオペレーションを示します。

AWS が管理する CMK (p. 3) のプロパティを編集することはできません。

トピック• UpdateKeyDescription: CMK の説明を変更する (p. 43)• PutKeyPolicy: CMK のキーポリシーを変更する (p. 44)• キーローテーションの有効化と無効化 (p. 44)

Tip

タグを追加、削除、編集する方法については、「キーのタグ付け (p. 44)」を参照してください。

UpdateKeyDescription: CMK の説明を変更するUpdateKeyDescription オペレーションは、CMK の説明を、指定した説明に置き換えます。これを使用して、CMK の説明を追加、変更、または削除できます。説明を表示するには、DescribeKey オペレーションを使用します。

たとえば、UpdateKeyDescription オペレーションへの呼び出しは、指定する CMK の説明を変更します。

$ aws kms update-key-description --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --description "Example key"

キーの説明を取得するには、次の例に示すように、DescribeKey オペレーションを使用します。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "Example key", "KeyManager": "CUSTOMER", "Enabled": true, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1499988169.234, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333" "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

43

Page 52: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーのタグ付け

PutKeyPolicy: CMK のキーポリシーを変更するPutKeyPolicy オペレーションは、CMK のキーポリシーを指定するポリシーに変更します。このポリシーには、管理者、ユーザー、およびロールへのアクセス権限が含まれています。詳しい例については、PutKeyPolicy Examples を参照してください。

キーローテーションの有効化と無効化EnableKeyRotation オペレーションは、対称 CMK の暗号化マテリアルの 自動ローテーション (p. 151)を有効化します。DisableKeyRotation オペレーションは、上記を無効化します。GetKeyRotationStatus オペレーションはブール値を返し、自動キーローテーションが有効であるか (true)、あるいは無効であるか(false) を示します。

例については、「カスタマーマスターキーのローテーション (p. 151)」を参照してください。

キーのタグ付け多くの AWS サービスは、リソースタグをサポートしています。タグを使用して、AWS サービス間でリソースのラベル付け、識別、分類を行うことができます。

AWS KMS は、カスタマーマスターキー (p. 3) (CMK) のリソースタグをサポートします。カスタマー管理 CMK (p. 3)のリソースタグを追加、変更、削除できます。AWS KMS はエイリアスのリソースタグをサポートしていないため、AWS 管理 CMK (p. 3) でタグを作成または管理することはできません。

各リソースタグは 1 つのタグキーと 1 つのタグ値で構成されており、いずれもお客様が定義します。たとえば、タグキーは「Cost Center」、タグ値は「87654」などです。 同じタグキーとタグ値を持つ同じタグを複数の CMK にアタッチできます。ただし、CMK 上のすべてのタグには、異なるタグキーが必要です。たとえば、同じ CMK に複数の「Cost Center」タグキーを持つことはできません。リソースタグの詳細については、AWS General Referenceの「AWS リソースのタグ付け」を参照してください。

AWS リソースにタグを追加すると、使用量とコストがタグごとに集計されたコスト配分レポートが AWSによって生成されます。この機能を使用して、プロジェクト、アプリケーション、またはコストセンターの AWS KMS コストを追跡できます。タグを使ったコスト配分の詳細については、AWS Billing and CostManagement ユーザーガイド のコスト配分タグの使用を参照してください。タグキーとタグ値に適用されるルールの詳細については、『AWS Billing and Cost Management ユーザーガイド』の「ユーザー定義タグの制限」を参照してください。

トピック• CMK タグを管理する (コンソール) (p. 44)• CMK タグを管理する (AWS KMS API) (p. 45)

CMK タグを管理する (コンソール)カスタマー管理 CMK のタグは、AWS マネジメントコンソールでお客様が追加、編集、削除できます。タグは CMK の作成 (p. 20)時に追加でき、いつでも編集できます。削除保留中の CMK のタグは編集できません。詳細については、「キーの作成 (p. 20)」および「キーの編集 (p. 40)」を参照してください。

次の手順は、「カスタマー管理のキー」ページのチェックボックスを使用してタグを管理する方法を示しています。カスタマー管理 CMK の詳細ページ (p. 29)の [タグ] タブを使用できます。

既存の CMK のタグを追加、編集、または削除するには

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

44

Page 53: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK タグを管理する (AWS KMS API)

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。

(AWS 管理 CMK のタグを管理することはできません)4. CMK のエイリアスの横にあるチェックボックスをオンにします。5. [Key actions]、[Add or edit tags] の順に選択します。6. コントロールを使用してタグを追加、編集、または削除します。7. 変更を保存するには、[変更の保存] を選択します。

CMK タグを管理する (AWS KMS API)AWS Key Management Service (AWS KMS) API を使用して、管理する CMK に対してタグを追加、削除、およびリスト取得できます。これらの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用できます。

AWS 管理の CMK (p. 4) にタグを付けることはできません。

トピック• CreateKey: 新しい CMK にタグを追加する (p. 45)• TagResource: CMK のタグを追加または変更する (p. 45)• ListResourceTags: CMK のタグを取得する (p. 46)• UntagResource: CMK からタグを削除する (p. 46)

CreateKey: 新しい CMK にタグを追加するカスタマー管理の CMK (p. 4) を作成するときに、タグを追加できます。タグを指定するには、CreateKeyオペレーションの Tags パラメータを使用します。Tags パラメータの値は、タグのキーと値のペアのコレクションです。

たとえば、次の AWS CLI コマンドは、Project:Alpha タグを持つ対称 CMK を作成します。複数のキーと値のペアを指定する場合は、スペースを使用して各ペアを区切ります。

$ aws kms create-key --tags TagKey=Project,TagValue=Alpha

このコマンドが成功すると、新しい CMK に関する情報を含む KeyMetadata オブジェクトが返されます。ただし、KeyMetadata にはタグは含まれません。タグを取得するには、ListResourceTags (p. 46)オペレーションを使用します。

TagResource: CMK のタグを追加または変更するTagResource オペレーションは CMK に 1 つまたは複数のタグを追加します。

また、TagResource を使用して既存のタグの値を変更することもできます。タグを置き換えるには、同じタグキーを別の値で指定します。タグに値を追加するには、新規と既存の値の両方をタグキーに指定します。

たとえば、次のコマンドは、サンプルの CMK に Purpose タグおよび Department タグを追加します。

$ aws kms tag-resource \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --tags TagKey=Purpose,TagValue=Test TagKey=Department,TagValue=Finance

45

Page 54: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの有効化と無効化

このコマンドが成功した場合、出力を返しません。タグを CMK で表示するには、ListResourceTags オペレーションを使用します。

ListResourceTags: CMK のタグを取得するListResourceTags オペレーションは、CMK にタグを取得します。key-id パラメーターが必要です。

たとえば、次のコマンドはサンプルの CMK にタグを取得します。

$ aws kms list-resource-tags --key-id 1234abcd-12ab-34cd-56ef-1234567890ab "Truncated": false, "Tags": [ { "TagKey": "Project", "TagValue": "Alpha" } { "TagKey": "Purpose", "TagValue": "Test" }, { "TagKey": "Department", "TagValue": "Finance" } ]}

UntagResource: CMK からタグを削除するUntagResource オペレーションは CMK からタグを削除します。key-id および tag-keys パラメータが必要です。

たとえば、このコマンドは、指定された CMK から Purpose タグとそのすべての値を削除します。

$ aws kms untag-resource --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --tag-keys Purpose

このコマンドが成功した場合、出力を返しません。

キーの有効化と無効化管理するの カスタマーマスターキー (p. 3) (CMK) を無効化し、再度有効化できます。AWS 管理 の CMKを有効化および無効化することはできません。

CMK を作成すると、そのキーはデフォルトで有効になります。CMK を無効にした場合、再度有効化するまではデータの暗号化または復号化に使用することはできません。AWS が管理する CMK は、AWS KMSを使用するサービス (p. 241)が使用できるように永続的に有効になっています。これを無効にすることはできません。

CMK を削除することもできます。詳細については、「カスタマーマスターキーを削除する (p. 170)」を参照してください。

Note

AWS KMS は無効になっているカスタマー管理の CMK のバッキングキーをローテーションしません。詳細については、「キーの自動ローテーションの仕組み (p. 152)」を参照してください。

トピック

46

Page 55: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の有効化と無効化 (コンソール)

• CMK の有効化と無効化 (コンソール) (p. 47)• CMK の有効化と無効化 (AWS KMS API) (p. 47)

CMK の有効化と無効化 (コンソール)AWS マネジメントコンソール の IAM セクションからカスタマー管理の CMK を有効化または無効化できます。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. 有効化または無効化する CMK のチェックボックスをオンにします。5. CMK を有効にするには、[Key actions]、[Enable] の順に選択します。CMK を無効にするには、[Key

actions]、[Disable] の順に選択します。

CMK の有効化と無効化 (AWS KMS API)EnableKey オペレーションは、AWS KMS カスタマー管理キー (CMK) を有効化します。以下の例ではAWS Command Line Interface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用することができます。key-id パラメーターが必要です。

このオペレーションはどのような出力も返しません。キーステータスを表示するには、DescribeKey オペレーションを使用します。

$ aws kms enable-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

DisableKey オペレーションは有効化された CMK を無効化します。key-id パラメーターが必要です。

$ aws kms disable-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

このオペレーションはどのような出力も返しません。キーステータスを表示するには、DescribeKey オペレーションを使用し、Enabled フィールドを参照してください。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab{ "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": false, "KeyState": "Disabled", "KeyUsage": "ENCRYPT_DECRYPT", "CreationDate": 1502910355.475, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333" "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

47

Page 56: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドパブリックキーのダウンロード

パブリックキーのダウンロードAWS マネジメントコンソール または AWS KMS API を使用して、非対称 CMK ペアからパブリックキーを表示、コピー、ダウンロードできます。非対称 CMK に対する kms:GetPublicKey アクセス許可が必要です。

各非対称の CMK ペアは、AWS KMS が暗号化されていないままにすることがないプライベートキーと、ダウンロードして共有できるパブリックキーで構成されます。

パブリックキーを共有して、プライベートキーでのみ復号できる AWS KMS 外部のデータを他のユーザーが暗号化できるようにすることもできます。または、プライベートキーを使用して生成した AWS KMS の外部にあるデジタル署名を他のユーザーが確認できるようにすることができます。

AWS KMS 内の非対称 CMK でパブリックキーを使用すると、すべての AWS KMS オペレーションの一部である認証、承認、およびロギングの恩恵を受けることができます。また、復号できないデータを暗号化するリスクも軽減します。これらの機能は、AWS KMS の外部では有効ではありません。詳細については、「パブリックキーのダウンロードに関する特別な考慮事項 (p. 48)」を参照してください。

トピック• パブリックキーのダウンロードに関する特別な考慮事項 (p. 48)• パブリックキーのダウンロード (コンソール) (p. 49)• パブリックキーのダウンロード (AWS KMS API) (p. 49)

パブリックキーのダウンロードに関する特別な考慮事項CMK を保護するために、AWS KMS は、アクセス制御、認証された暗号化、およびすべてのオペレーションの詳細なログを提供します。AWS KMS では、CMK の使用を一時的または永続的に防止することもできます。最後に、AWS KMS オペレーションは、復号できないデータを暗号化するリスクを最小限に抑えるように設計されています。これらの機能は、ダウンロードしたパブリックキーを AWS KMS の外部で使用する場合には使用できません。

承認

AWS KMS 内で CMK へのアクセスを制御するキーポリシー (p. 55) と IAM ポリシー (p. 74)は、AWS の外部で実行されるオペレーションには影響しません。パブリックキーを取得できるユーザーは、データを暗号化、または CMK で署名を検証するアクセス許可がない場合でも、AWS KMS の外部でパブリックキーを使用できます。

キー使用法の制限

キー使用法の制限は、AWS KMS 外では有効ではありません。SIGN_VERIFY の KeyUsage がある CMK で Encrypt オペレーションを呼び出すと、AWS KMS オペレーションは失敗します。ただし、SIGN_VERIFY の KeyUsage で CMK からパブリックキーを使用して AWS KMS の外部でデータを暗号化する場合、データを復号することはできません。

アルゴリズムの制限

AWS KMS がサポートする暗号化および署名アルゴリズムの制限は、AWS KMS 以外では有効ではありません。AWS KMS 以外の CMK からのパブリックキーを使用してデータを暗号化し、AWS KMSがサポートしていない暗号化アルゴリズムを使用すると、データを復号できません。

CMK の無効化と削除

AWS KMS 内の暗号化オペレーションで CMK が使用されないようにするために実行できるアクションは、AWS KMS の外部でパブリックキーを使用することを妨げません。たとえば、CMK の無効化、CMK の削除のスケジューリング、CMK の削除、CMK からのキーマテリアルの削除は、AWS

48

Page 57: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドパブリックキーのダウンロード (コンソール)

KMS 外部のパブリックキーには影響しません。非対称 CMK を削除、またはそのキーマテリアルを削除したり紛失したりすると、AWS KMS の外部にあるパブリックキーで暗号化したデータは回復できなくなります。

ログ記録

リクエスト、レスポンス、日付、時刻、許可されたユーザーなど、すべての AWS KMS オペレーションを記録する AWS CloudTrail ログには、AWS KMS の外でのパブリックキーの使用は記録されません。

パブリックキーのダウンロード (コンソール)AWS マネジメントコンソール を使用して、AWS アカウントの非対称 CMK からパブリックキーを表示、コピー、ダウンロードできます。異なる AWS アカウントで非対称 CMK からパブリックキーをダウンロードするには、AWS KMS API を使用します。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. 非対称 CMK のエイリアスまたはキー ID を選択します。5. [暗号化設定] セクションで、[キー仕様]、[Key usage (キーの使用方法)]、[暗号化アルゴリズム] または

[署名アルゴリズム] フィールドの値を記録します。AWS KMS の外部でパブリックキーを使用するには、これらの値を使用する必要があります。パブリックキーを共有するときは、必ずこの情報を共有してください。

6. [パブリックキー] タブを選択します。7. パブリックキーをクリップボードにコピーするには、[コピー] を選択します。パブリックキーをファ

イルにダウンロードするには、[ダウンロード] を選択します。

パブリックキーのダウンロード (AWS KMS API)GetPublicKey オペレーションは、非対称 CMK でパブリックキーを返します。また、キーの使用方法や暗号化アルゴリズムなど、AWS KMS の外部でパブリックキーを正しく使用するために必要な重要な情報も返されます。これらの値を保存し、パブリックキーを共有する場合は必ず共有してください。

このセクションの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされているすべてのプログラミング言語を使用できます。

CMK を指定するには、そのキー ID (p. 12)、キー ARN (p. 12)、エイリアス名 (p. 12)、またはエイリアスARN (p. 12) を使用します。エイリアス名を使用する場合は、接頭辞として alias/ を付けます。別の AWSアカウントで CMK を指定するには、そのキー ARN またはエイリアス ARN を使用する必要があります。

このコマンドを実行する前に、サンプルのエイリアス名を CMK の有効な識別子に置き換えます。このコマンドを実行するには、CMK に対する kms:GetPublicKey アクセス許可が必要です。

$ aws kms get-public-key --key-id alias/example_RSA_3072

{ "CustomerMasterKeySpec": "RSA_3072", "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "KeyUsage": "ENCRYPT_DECRYPT", "EncryptionAlgorithms": [ "RSAES_OAEP_SHA_1", "RSAES_OAEP_SHA_256" ],

49

Page 58: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドパブリックキーのダウンロード (AWS KMS API)

"PublicKey": "MIIBojANBgkqhkiG..."}

50

Page 59: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド認証

AWS KMS の認証とアクセスコントロール

AWS KMS へのアクセスには、AWS によってリクエストの認証に使用される認証情報が必要です。認証情報には、AWS KMS カスタマーマスターキー (CMK) などの AWS リソースへのアクセス権限が必要です。以下のセクションでは、AWS Identity and Access Management (IAM) と AWS KMS を使用して、リソースにアクセスできるユーザーを制御することで、リソースをセキュリティで保護する方法について詳しく説明します。

トピック

• 認証 (p. 51)• アクセスコントロール (p. 52)

認証AWS には、次のタイプのアイデンティティでアクセスできます。

• AWS アカウントのルートユーザー – AWS にサインアップするときは、AWS アカウントの E メールアドレスとパスワードを指定します。これらはルート認証情報であり、これらの情報を使用すると、すべての AWS リソースへの完全なアクセスが可能になります。

Important

セキュリティ上の理由から、AWS アカウントへの完全なアクセス権限を持つ管理者ユーザー(IAM ユーザー) を作成するためにのみ、ルート認証情報を使用することをお勧めします。その後、この管理者ユーザーを使用して、制限されたアクセス権限を持つ他の IAM ユーザーとロールを作成できます。詳細については、『IAM ユーザーガイド』の「個別の IAM ユーザーの作成(IAM のベストプラクティス)」および「管理者のユーザーおよびグループの作成」を参照してください。

• IAM ユーザー – IAM ユーザーは、特定のアクセス権限 (KMS CMK を使用するなど) を持つ、AWS アカウント内のアイデンティティです。IAM のユーザー名とパスワードを使用して、AWS マネジメントコンソール、AWS ディスカッションフォーラム、AWS Support Center などのセキュリティ保護されたAWS ウェブページにサインインできます。

ユーザー名とパスワードに加えて、アクセスキーを各ユーザーに作成し、ユーザーがいずれかの AWSSDK またはコマンドラインツールを通じて、AWS のサービスにプログラムでアクセスするようにできます。SDK やコマンドラインツールは、アクセスキーを使って API リクエストに暗号により署名します。AWS ツールを使用しない場合は、API リクエストを自分で署名する必要があります。AWS KMS では、署名バージョン 4 がサポートされています。これは API リクエストを認証するための AWS プロトコルです。API リクエストの認証の詳細については、『AWS General Reference』の「署名バージョン4 の署名プロセス」を参照してください。

• IAM ロール – IAM ロールは、特定のアクセス権限を持ち、アカウントで作成できるもう 1 つの IAM アイデンティティです。これは IAM ユーザーに似ていますが、特定のユーザーに関連付けられていません。IAM ロールでは、AWS サービスおよびリソースにプログラムでアクセスする一時的なアクセスキーを取得することができます。IAM ロールは、次のような状況で役立ちます。• フェデレーティッドユーザーアクセス – IAM ユーザーを作成するのではなく、AWS Directory

Service、エンタープライズユーザーディレクトリ、またはウェブアイデンティティプロバイダーの既存のユーザーアイデンティティを使用することもできます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。フェデレーティッドユーザーは ID プロバイダーを介して IAM ロールを使

51

Page 60: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドアクセスコントロール

用します。フェデレーティッドユーザーの詳細については、『IAM ユーザーガイド』の「フェデレーティッドユーザーとロール」を参照してください。

• クロスアカウントアクセス – AWS アカウントで IAM ロールを使って、お客様のアカウントのリソースへのアクセス権を別の AWS アカウントに許可できます。この例については、『IAM ユーザーガイド』の「チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任」を参照してください。

• AWS サービスアカウント – アカウントで IAM ロールを使って、お客様のアカウントのリソースにアクセスする AWS サービスのアクセス権限を許可できます。たとえば、Amazon Redshift がお客様に代わって S3 バケットにアクセスし、S3 バケットに保存されたデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。詳細については、『IAM ユーザーガイド』の「AWS のサービスにアクセス権限を委任するロールの作成」を参照してください。

• EC2 インスタンスで実行されるアプリケーション – インスタンスで実行し、AWS API リクエストを作成するアプリケーションで使用されるアクセスキーを EC2 インスタンスに保存する代わりに、IAMロールを使用して、これらのアプリケーション用の一時アクセスキーを提供できます。EC2 インスタンスに IAM ロールを割り当てるには、インスタンスプロファイルを作成し、インスタンスを起動するときにそれをアタッチします。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるアプリケーションは一時アクセスキーを取得することができます。詳細については、『IAM ユーザーガイド』の「Amazon EC2 上のアプリケーションに対するロールの使用」を参照してください。

アクセスコントロールリクエストを認証する有効な認証情報を持つことができますが、AWS KMS リソースを作成、管理、または使用する AWS KMS API リクエストを作成するアクセス権限も必要です。たとえば、暗号化オペレーション (p. 10)で KMS CMK の作成、CMK の管理、および CMK の使用を行うためのアクセス許可が必要です。

以下のページでは、AWS KMS のアクセス権限を管理する方法について説明します。最初に概要のセクションを読むことをお勧めします。

• アクセス管理の概要 (p. 52)• キーポリシーの使用 (p. 55)• IAM ポリシーの使用 (p. 74)• AWS KMS API アクセス許可のリファレンス (p. 84)• ポリシー条件の使用 (p. 94)• 許可の使用 (p. 123)• サービスにリンクされたロールの使用 (p. 126)• アクセスの確認 (p. 127)

AWS KMS リソースへのアクセスの管理の概要すべての AWS リソースは AWS アカウントに属し、リソースの作成またはアクセスの権限はそのアカウントのアクセス権限ポリシーで定義されます。アカウント管理者は、アクセス権限ポリシーを IAM アイデンティティ (ユーザー、グループ、ロール) にアタッチできます。一部のサービス (AWS KMS を含む) もその他の種類のリソースにアクセス権限ポリシーをアタッチすることができます。

Note

アカウント管理者 (または管理者ユーザー) は、管理者権限を持つユーザーです。詳細については、IAM ユーザーガイドの「管理者のユーザーおよびグループの作成」を参照してください。

アクセス権限を管理する場合、アクセス権限を取得するユーザー、そのユーザーがアクセス権限を取得するリソース、および許可される具体的なアクションを決定します。

52

Page 61: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS リソースおよびオペレーション

トピック• AWS KMS リソースおよびオペレーション (p. 53)• AWS KMS CMK へのアクセスの管理 (p. 53)• ポリシーでのアクセス許可の指定 (p. 54)• ポリシーでの条件を指定する (p. 54)

AWS KMS リソースおよびオペレーションAWS KMS では、プライマリリソースは カスタマーマスターキー (p. 3) (CMK) です。AWS KMS では、エイリアス (p. 367)もサポートしています。エイリアスは、CMK とは独立していますが、CMK と関連付けることができるフレンドリ名を提供します。一部の AWS KMS オペレーションでは、エイリアスを使用して CMK を識別できます。

CMK またはエイリアスの各インスタンスには、標準形式の一意の Amazon リソースネーム (ARN) があります。AWS KMS リソースの場合、AWS のサービス名は kms です。

• カスタマーマスターキー (CMK)

ARN 形式:

arn:AWS partition name:AWS service name:AWS Region:AWS account ID:key/CMK keyID

ARN の例:

arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

• エイリアス

ARN 形式:

arn:AWS partition name:AWS service name:AWS region:AWS account ID:alias/aliasname

ARN の例:

arn:aws:kms:us-west-2:111122223333:alias/example-alias

AWS KMS には、AWS KMS リソースを操作するための一連の API オペレーションが用意されています。AWS マネジメントコンソール および AWS KMS API オペレーションでの CMK の識別の詳細については、「キー識別子 (KeyId) (p. 11)」を参照してください。AWS KMS オペレーションのリストについては、AWS Key Management Service API Referenceを参照してください。

AWS KMS CMK へのアクセスの管理AWS KMS CMK へのアクセスを管理する主な手段は、ポリシーです。ポリシーは、誰が何にアクセスできるかを説明するドキュメントです。IAM アイデンティティにアタッチされたポリシーはアイデンティティベースのポリシー (または IAM ポリシー) と呼ばれ、その他の種類のリソースにアタッチされたポリシーはリソースベースのポリシーと呼ばれます。AWS KMS では、カスタマーマスターキー (CMK) にリソースベースのポリシーをアタッチする必要があります。これをキーポリシーと呼びます。すべての KMS CMKにはキーポリシーがあります。

以下の方法で KMS CMK へのアクセスを制御できます。

• キーポリシーを使用 – キーポリシーを使用して、CMK へのアクセスを制御する必要があります。キーポリシーを単独で使用してアクセスを制御できます。この場合、CMK へのアクセスの完全な範囲が 1 つのドキュメント (キーポリシー) で定義されます。

53

Page 62: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドポリシーでのアクセス許可の指定

• IAM ポリシーをキーポリシーと組み合わせて使用 – IAM ポリシーをキーポリシーと組み合わせて、CMKへのアクセスを制御することができます。この方法でアクセスを制御すると、IAM で IAM アイデンティティのすべてのアクセス権限を管理できます。

• 許可をキーポリシーと組み合わせて使用 – 許可をキーポリシーと組み合わせて使用して、CMK へのアクセスを許可することができます。この方法でアクセスを制御すると、キーポリシーで CMK へのアクセスを許可し、ユーザーが他のユーザーにアクセスを委任できるようになります。

ほとんどの AWS サービスで、IAM ポリシーはサービスのリソースへのアクセスを制御する唯一の方法です。一部のサービスでは、IAM ポリシーを補完するために、リソースベースのポリシーやその他のアクセスコントロールメカニズムを提供していますが、これらは通常オプションであり、IAM ポリシーでのみ、これらのサービスのリソースへのアクセスを制御できます。ただし、AWS KMS については該当しません。KMS CMK にアクセスを許可するには、キーポリシーを単独で、または IAM ポリシーや許可と組み合わせて使用する必要があります。IAM ポリシー単独では、CMK へのアクセスを許可するのに十分ではありませんが、CMK のキーポリシーと組み合わせて使用することができます。

キーポリシーの使用の詳細については、「キーポリシーの使用 (p. 55)」を参照してください。

IAM ポリシーの使用の詳細については、「IAM ポリシーの使用 (p. 74)」を参照してください。

許可の使用の詳細については、「許可の使用 (p. 123)」を参照してください。

ポリシーでのアクセス許可の指定AWS KMS は一連の API オペレーションを提供します。これらの API オペレーションへのアクセスを制御するために、AWS KMS ではポリシーで指定できる一連のアクションが用意されています。詳細については、「AWS KMS API アクセス許可のリファレンス (p. 84)」を参照してください。

ポリシーは、一連のアクセス権限を記述したドキュメントです。以下に、ポリシーの基本的な要素を示します。

• リソース – IAM ポリシーで Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを指定します。詳細については、「AWS KMS リソースおよびオペレーション (p. 53)」を参照してください。キーポリシーでは、リソースに "*" を使用します (実質的に「この CMK」を意味します)。キーポリシーは、それがアタッチされた CMK にのみ適用されます。

• アクション – アクションを使用して、許可または拒否する API オペレーションを指定します。たとえば、kms:Encrypt アクションは AWS KMS の暗号化 オペレーションに対応します。

• 効果 – 効果を使用して、アクセス権限を許可するか拒否するかを指定します。リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒否されます。また、明示的にリソースへのアクセスを拒否すると、別のポリシーによってアクセスが許可されている場合でも、ユーザーはそのリソースにアクセスできなくなります。

• プリンシパル – IAM ポリシーでは、AWS プリンシパルを指定しません。代わりに、ポリシーがアタッチされたアイデンティティ (IAM ユーザー、グループ、またはロール) が、暗黙的なプリンシパルになります。キーポリシーでは、アクセス権限を適用するプリンシパル (アイデンティティ) を指定する必要があります。プリンシパルとして、AWS アカウント (ルート)、IAM ユーザー、IAM ロール、および一部のAWS サービスをキーポリシーで指定できます。IAM グループは、キーポリシーで有効なプリンシパルではありません。

詳細については、「キーポリシーの使用 (p. 55)」および「IAM ポリシーの使用 (p. 74)」を参照してください。

ポリシーでの条件を指定する条件という別のポリシー要素を使用して、ポリシーが有効になる状況を指定できます。たとえば、特定の日付の後にのみ適用されるポリシーステートメントが必要になる場合があります。または、特定の値が

54

Page 63: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの使用

API リクエストに存在するかどうかに基づいて、ポリシーステートメントによるアクセスコントロールが必要になる場合があります。

条件を指定するには、あらかじめ定義された条件キーを使用します。通常、一部の条件キーは AWS に適用され、一部は AWS KMS に固有です。詳細については、「ポリシー条件の使用 (p. 94)」を参照してください。

AWS KMS でのキーポリシーの使用キーポリシーは AWS KMS でカスタマーマスターキー (CMK) へのアクセスを制御するための主要な方法です。キーポリシーだけが、アクセスを制御する方法ではありませんが、キーポリシーを使用しないと、アクセスを制御することはできません。詳細については、「AWS KMS CMK へのアクセスの管理 (p. 53)」を参照してください。

トピック

• キーポリシーの概要 (p. 55)• デフォルトのキーポリシー (p. 56)• キーポリシーの例 (p. 63)

キーポリシーの概要キーポリシーは、JSON (JavaScript Object Notation) を使用してアクセス権限を指定するドキュメントです。JSON ドキュメントは、直接操作するか、AWS マネジメントコンソール のデフォルトビューというグラフィカルインターフェイスを使用して操作できます。コンソールのキーポリシー用デフォルトビューの詳細については、「デフォルトのキーポリシー (p. 56)」と「キーポリシーの変更 (p. 70)」を参照してください。

キーポリシードキュメントは 32 KB (32,768 バイト) を超えることはできません。キーポリシードキュメントは AWS の他のアクセス許可ポリシーと同じ JSON 構文を使用し、その基本構造は以下のようになっています。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "statement identifier", "Effect": "effect", "Principal": "principal", "Action": "action", "Resource": "resource", "Condition": {"condition operator": {"condition context key": "context key value"}} }]}

キーポリシードキュメントには Version 要素が必要です。バージョンを 2012-10-17 (最新バージョン)に設定することをお勧めします。さらに、キーポリシードキュメントには 1 つ以上のステートメントが必要で、各ステートメントには最大 6 つの要素が必要です。

• Sid – (オプション) Sid はステートメント識別子で、ステートメントの識別に使用できる任意の文字列です。

• Effect – (必須) この効果には、ポリシーステートメントのアクセス権限を許可するか拒否するかを指定します。効果は、Allow または Deny にする必要があります。CMK へのアクセスを明示的に許可しない場合、アクセスは暗黙的に拒否されます。CMK へのアクセスを明示的に拒否できます。これは、別のポリ

55

Page 64: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデフォルトのキーポリシー

シーがアクセスを許可している場合でも、ユーザーが CMK にアクセスできないようにするために行うことができます。

• プリンシパル – (必須) プリンシパルは、ポリシーステートメントで指定されたアクセス権限を取得するアイデンティティです。プリンシパルとして、AWS アカウント (ルート)、IAM ユーザー、IAM ロール、AWS サービスをキーポリシーで指定できます。IAM グループは有効なプリンシパルではありません。

Note

アクセス権限を許可するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクに設定すると、別のポリシーステートメントで明示的に拒否しない限り、すべての AWS アカウントの各 ID に、CMK を使用するアクセス権限が付与されます。他の AWS アカウントのユーザーは、各自のアカウントで CMK を使用する、該当のIAM アクセス権限を必要としているのみです。

• Action – (必須) このアクションには、許可または拒否する API オペレーションを指定します。たとえば、kms:Encrypt アクションは AWS KMS の暗号化 オペレーションに対応します。ポリシーステートメントに複数のアクションのリストを指定できます。詳細については、「AWS KMS API アクセス許可のリファレンス (p. 84)」を参照してください。

• Resource – (必須) キーポリシーでリソースとして、"この CMK" を意味する "*" を使用します。 キーポリシーは、それがアタッチされた CMK にのみ適用されます。

• Condition – (オプション) この条件には、キーポリシーが有効になるために満たす必要のある要件を指定します。条件により、AWS は、API リクエストのコンテキストを評価し、ポリシーステートメントが適用されるかどうかを判断できます。詳細については、「ポリシー条件の使用 (p. 94)」を参照してください。

AWS ポリシー構文の詳細については、『IAM ユーザーガイド』の「AWS IAM ポリシーリファレンス」を参照してください。

デフォルトのキーポリシーCMK をプログラムにより作成した場合のデフォルトキーポリシー

CMK をプログラムで作成する、つまり AWS SDK またはコマンドラインツールから AWS KMS API を使用して作成する場合は、新しい CMK のキーポリシーを指定するオプションもあります。指定しない場合、このポリシーは AWS KMS によって作成されます。このデフォルトのキーポリシーには、CMK へのフルアクセス権を所有する AWS アカウント (root ユーザー) を指定する 1 つのポリシーステートメントがあり、CMK へのアクセスを許可するアカウントの IAM ポリシーを有効にします。このポリシーステートメントの詳細については、「AWS アカウントへのアクセスを許可し、IAM ポリシーを有効にする (p. 57)」を参照してください。

AWS マネジメントコンソール を使用して CMK を作成した場合のデフォルトキーポリシー

AWS マネジメントコンソール で CMK を作成する (p. 20)ときに、CMK へのアクセスが許可される IAMユーザー、IAM ロール、AWS アカウントを選択できます。選択したユーザー、ロール、アカウントは、コンソールで作成されるデフォルトキーポリシーに追加されます。コンソールのデフォルトビューを使用して、このキーポリシーを表示または変更したり、キーポリシードキュメントを直接操作したりできます。コンソールで作成されたデフォルトキーポリシーにより、以下のアクセス権限が付与されます。各アクセス権限については、該当するセクションで説明しています。

アクセス許可

• AWS アカウントへのアクセスを許可し、IAM ポリシーを有効にする (p. 57)• CMK の管理をキー管理者に許可する (p. 57)• CMK の使用をキーユーザーに許可する (p. 60)

• 暗号化オペレーションで CMK を使用することをキーユーザーに許可する (p. 61)

56

Page 65: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデフォルトのキーポリシー

• AWS サービスで CMK を使用することをキーユーザーに許可する (p. 63)

AWS アカウントへのアクセスを許可し、IAM ポリシーを有効にするデフォルトキーポリシーでは、CMK を所有する AWS アカウント (ルートユーザー) に CMK へのフルアクセスを許可します。これにより、以下の 2 つのことが可能になります。

1.CMK を管理できなくなるリスクを減らす.

AWS アカウントのルートユーザーは削除できないため、このユーザーに CMK へのアクセスを許可すれば、だれも CMK を管理できなくなるリスクが減ります。次のシナリオを考えてみます。1. CMK のキーポリシーにより、1 人の IAM ユーザー (Alice) のみが CMK を管理できる。このキーポ

リシーでは、ルートユーザーに CMK へのアクセスは許可しない。2. だれかが IAM ユーザー (Alice) を削除した。

このシナリオでは、CMK は管理できなくなり、CMK へのアクセスを回復するには、AWS サポートに連絡する必要があります。ルートユーザーは、キーポリシーにより明示的に許可されている場合のみCMK にアクセスできるため、CMK にアクセスできません。これは、ルートユーザーへのアクセスを暗黙的に許可する AWS の他のほとんどのリソースとは異なります。

2.IAM ポリシーで CMK へのアクセスを許可する。

IAM ポリシー単独では、CMK へのアクセスを許可するには十分ではありません。ただし、キーポリシーによって CMK のキーポリシーが有効になっている場合は、CMK のキーポリシーと組み合わせて使用することができます。これは、AWS アカウントに CMK へのフルアクセスを許可することで行われ、IAM ポリシーを使用してそのアカウントの IAM ユーザーおよびロールに CMK へのアクセスを許可できます。CMK のキーポリシーだけでは、IAM ユーザーまたはロールに CMK へのアクセスを許可しませんが、IAM ポリシーも使用すれば、許可できます。詳細については、「AWS KMS CMK へのアクセスの管理 (p. 53)」を参照してください。

次の例は、AWS アカウントへのアクセスを許可し、その結果 IAM ポリシーが有効になるポリシーステートメントを示しています。

{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*"}

CMK の管理をキー管理者に許可するコンソールによって作成されたデフォルトキーポリシーでは、アカウントの IAM ユーザーおよびロールを選択し、キー管理者とすることができます。キー管理者には、CMK を管理するためのアクセス許可はありますが、暗号化オペレーション (p. 10)で CMK を使用するためのアクセス許可はありません。

Warning

キー管理者には、データの暗号化と復号化に CMK を使用するためのアクセス許可がなくても、キーポリシーを変更するためのアクセス許可があります。つまり、自らに任意の AWS KMS アクセス許可を付与できます。

CMK を作成するとき、IAM ユーザーおよびロールをキー管理者のリストに追加できます。次の図に示すように、キーポリシーのコンソールのデフォルトビューを使用してリストを編集することもできます。キーポリシーのデフォルトビューは、各 CMK のキーの詳細ページで使用できます。

57

Page 66: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデフォルトのキーポリシー

コンソールのデフォルトビューを使用して、キー管理者のリストを変更すると、コンソールによって、キーポリシーの特定のステートメントで Principal 要素が変更されます。このステートメントは、キー管理者ステートメントと呼ばれます。以下に示しているのは、キー管理者ステートメントの例です。

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KMSAdminUser", "arn:aws:iam::111122223333:role/KMSAdminRole" ]}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*"}

キー管理者ステートメントでは、以下のアクセス権限が付与されます。

58

Page 67: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデフォルトのキーポリシー

• kms:Create* – キー管理者がこの CMK のエイリアスと許可 (p. 123)を作成できるようにします。• kms:Describe* – キー管理者がこの CMK に関する情報(識別子、作成日、状態など)を取得できるよう

にします。このアクセス権限は、AWS マネジメントコンソールでキーの詳細ページを表示するために必要です。

• kms:Enable* – キー管理者がこの CMK の状態を有効に設定できるようにします。対称 CMK の場合、キー管理者は CMK のキーマテリアルの年ごとのローテーション (p. 151)を指定できます。

• kms:List* – キー管理者がこの CMK のエイリアス、許可、キーポリシー、タグのリストを取得できるようにします。このアクセス権限は、AWS マネジメントコンソールで CMK のリストを表示するために必要です。

• kms:Put* – キー管理者がこの CMK のキーポリシーを変更できるようにします。• kms:Update* – キー管理者がエイリアスの参照先をこの CMK に変更したり、この CMK の定義を変更し

たりできるようにします。• kms:Revoke* – キー管理者が、許可 (p. 123)によって付与されたこの CMK に対するアクセス権限を取

り消せるようにします。• kms: Disable* – キー管理者がこの CMK のキー状態を無効にできるようにします。対称 CMK の場合、

キー管理者は この CMK のキーマテリアルの年ごとのローテーション (p. 151)を無効にできます。• kms:Get* – キー管理者がこの CMK のキーポリシーを取得し、この CMK キーマテリアルの 1 年ごとの

更新が行われているかどうか確認できるようにします。インポートされたキーマテリアル (p. 156)を持つ対称 CMK (p. 139) の場合、キー管理者は CMK にキーマテリアルをインポートするために必要なインポートトークンとパブリックキーをダウンロードできます。非対称 CMK (p. 139)の場合、キー管理者は CMK のパブリックキーをダウンロード (p. 48)できます。

• kms:Delete* – キー管理者が、この CMK を参照するエイリアスを削除できるようにします。インポートされたキーマテリアル (p. 156)を持つ対称 CMK の場合、キー管理者はインポートされたキーマテリアルを削除できます。このアクセス権限により、キー管理者が CMK を削除 (p. 170)できるようにはなりません。

• kms:ImportKeyMaterial – キー管理者が CMK にキーマテリアルをインポートできるようにします。このアクセス許可は、キーマテリアルのない CMK を作成 (p. 159)する場合にのみキーポリシーに含まれます。

Note

このアクセス権限は、前のサンプルポリシーステートメントには表示されません。• kms:TagResource – キー管理者がこの CMK のタグを追加および更新できるようにします。• kms:UntagResource – キー管理者がこの CMK からタグを削除できるようにします。• kms:ScheduleKeyDeletion – キー管理者がこの CMK を削除 (p. 170)できるようにします。• kms:CancelKeyDeletion – キー管理者がこの CMK の保留中の削除をキャンセルできるようにします。

前述のリストの最後の 2 つのアクセス権限 (kms:ScheduleKeyDeletion およびkms:CancelKeyDeletion) は、CMK を作成 (p. 20)するとデフォルトで追加されます。ただし、CMK を作成するとき、[Allow key administrators to delete this key] チェックボックスをオフにすることによりキーポリシーからオプションで削除することができます。同様に、キーの詳細ページを使用して既存の CMKのデフォルトキーポリシーから削除することができます。詳細については、「キーの編集 (p. 40)」を参照してください。

これらのアクセス権限の多くには、ワイルドカード文字 (*) が含まれています。つまり、AWS KMS が今後新しい API オペレーションを追加した場合、キー管理者は、Create、Describe、Enable、List、Put、Update、Revoke、Disable、Get、または Delete で始まるすべての新しい API オペレーションを自動的に実行することができます。

Note

前のセクションで説明したキー管理者ステートメントは、デフォルトキーポリシーの最新バージョンです。デフォルトキーポリシーの以前のバージョンについては、「キーポリシーを最新の状態に保つ (p. 72)」を参照してください。

59

Page 68: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデフォルトのキーポリシー

CMK の使用をキーユーザーに許可する対称 CMK にコンソールが作成するデフォルトキーポリシーを使用すると、アカウントの IAM ユーザーおよびロール、外部 AWS アカウントを選択し、キーユーザーとすることができます。

コンソールは、キーユーザーのキーポリシーに 2 つのポリシーステートメントを追加します。

• CMK を直接使用 (p. 61) — 最初のキーポリシーステートメントは、該当するタイプの CMK でサポートされているすべての暗号化オペレーション (p. 10)で CMK を直接使用するためのアクセス許可をキーユーザーに付与します。

• AWS のサービスで CMK を使用する (p. 63) — 2 番目のポリシーステートメントは、キーユーザーに、AWS KMS と統合された AWS サービスが自分の代わりに CMK を使用してリソースを保護できるようにするアクセス許可を付与し、Amazon Simple Storage Service バケット (p. 279)や AmazonDynamoDB テーブル (p. 246)で参照できます。

CMK を作成するとき、IAM ユーザー、IAM ロール、および他の AWS アカウントをキーユーザーのリストに追加できます。次の図に示すように、キーポリシーのコンソールのデフォルトビューを使用してリストを編集することもできます。キーポリシー用デフォルトビューは、キーの詳細ページにあります。他のAWS アカウントのユーザーに CMK の使用を許可する方法の詳細については、「他のアカウントのユーザーに CMK の使用を許可する (p. 79)」を参照してください 。

コンソールのデフォルトビューを使用して、キーユーザーのリストを変更すると、コンソールによって、キーポリシーの 2 つのステートメントで Principal 要素が変更されます。これらのステートメントはキーユーザーステートメントと呼ばれます。以下に示しているのは、対称 CMK のキーユーザーステートメントの例です。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/CMKUser", "arn:aws:iam::111122223333:role/CMKRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:Encrypt",

60

Page 69: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデフォルトのキーポリシー

"kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*"},{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/CMKUser", "arn:aws:iam::111122223333:role/CMKRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}}

暗号化オペレーションで CMK を使用することをキーユーザーに許可するキーユーザーには、CMK でサポートされているすべての暗号化オペレーション (p. 10)で CMK を直接使用するためのアクセス許可があります。また、DescribeKey オペレーションを使用して、AWS KMS コンソールで、または AWS KMS API オペレーションを使用し、CMK に関する詳細情報を取得することもできます。

デフォルトでは、AWS KMS コンソールはデフォルトのキーポリシーに次の例のようなキーユーザーのステートメントを追加します。異なる API オペレーションをサポートするため、対称 CMK のポリシーステートメント、パブリックキー暗号化の非対称 CMK、署名と検証用の非対称 CMK のアクションはわずかに異なります。

対称 CMK

コンソールは、シンメトリック CMK のキーポリシーに次のステートメントを追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/CMKUser"}, "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*" ], "Resource": "*"}

パブリックキー暗号化用の非対称 CMK

コンソールは、[暗号化と復号] のキーの使用方法を使用して、非対称 CMK のキーポリシーに次のステートメントを追加します。

{

61

Page 70: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデフォルトのキーポリシー

"Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/CMKUser"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey", "kms:GetPublicKey" ], "Resource": "*"}

署名および検証用の非対称 CMK

コンソールは、[署名と検証] のキーの使用方法を使用して、非対称 CMK のキーポリシーに次のステートメントを追加します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/CMKUser"}, "Action": [ "kms:DescribeKey", "kms:GetPublicKey", "kms:Sign", "kms:Verify" ], "Resource": "*"}

これらのステートメントのアクションは、キーユーザーに以下のアクセス許可の一部を与えます。

• kms:Encrypt – キーユーザーがこの CMK でデータを暗号化できるようにします。• kms:Decrypt – キーユーザーがこの CMK でデータを復号できるようにします。• kms:DescribeKey – キーユーザーがこの CMK に関する詳細情報(その識別子、作成日、キーの状態な

ど)を取得できるようにする。また、キーユーザーは CMK の詳細を AWS KMS コンソールに表示できます。

• km:GenerateDataKey* – キーユーザーは、クライアント側の暗号化オペレーションのために、対称データキーまたは非対称データキーペアを要求できます。コンソールでは、* ワイルドカード文字を使用して、以下の API オペレーションに対するアクセス許可を表します。GenerateDataKey、GenerateDataKeyWithoutPlaintext、GenerateDataKeyPair、およびGenerateDataKeyPairWithoutPlaintext。

• kms:GetPublicKey – キーユーザーが非対称 CMK のパブリックキーをダウンロードできるようにします。このパブリックキーを共有する当事者は、AWS KMS の外部のデータを暗号化できます。ただし、これらの暗号文は、AWS KMS で Decrypt オペレーションを呼び出すことによってのみ復号できます。

• kms:ReEncrypt* – この CMK でもともと暗号化されたデータを再暗号化すること、以前に暗号化されたデータをこの CMK で再暗号化することを、キーユーザーに許可します。ReEncrypt オペレーションでは、ソース CMK と宛先 CMK の両方にアクセスする必要があります。これを行うには、ソース CMK のkms:ReEncryptFrom アクセス許可と宛先 CMK の kms:ReEncryptTo アクセス許可を許可します。ただし、わかりやすいように、コンソールは両方の CMK で kms:ReEncrypt* を(* ワイルドカード文字で)許可します。

• kms: Sign – キーユーザーがこの CMK でメッセージに署名できるようにします。• kms:Verify – キーユーザーがこの CMK で署名を検証できるようにします。

62

Page 71: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの例

AWS サービスで CMK を使用することをキーユーザーに許可するコンソールのデフォルトのキーポリシーでは、AWS KMS と統合された AWS サービス (p. 241)(特に許可を使用するサービス)に CMK を使用できるようにするアクセス許可もキーユーザーに付与されます。

キーユーザーは、制限された特定の方法でこれらのサービスに CMK を使用するためのアクセス権限を暗黙的に付与できます。アクセス権限のこの暗黙の委任は、許可 (p. 123)を使用して行われます。これらの許可により、統合 AWS サービスは CMK を使用してアカウント内のリソースを保護できます。

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/CMKUser"}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}}

たとえば、キーユーザーは以下の方法で CMK でこれらのアクセス許可を使用できます。

• CMK を Amazon Elastic Block Store (Amazon EBS) と Amazon Elastic Compute Cloud (Amazon EC2)で使用して、暗号化された EBS ボリュームを EC2 インスタンスにアタッチします。キーユーザーは、CMK を使用して暗号化されたボリュームをインスタンスにアタッチするための Amazon EC2 権限を暗黙的に付与します。詳細については、「Amazon Elastic Block Store (Amazon EBS) で AWS KMSを使用する方法 (p. 256)」を参照してください。

• CMK を Amazon Redshift で使用して、暗号化クラスターを起動します。キーユーザーは、CMK を使用して暗号化されたクラスターを起動し、暗号化されたスナップショットを作成するための AmazonRedshift 権限を暗黙的に付与します。詳細については、「Amazon Redshift で AWS KMS を使用する方法 (p. 267)」を参照してください。

• この CMK を、 と統合される他の AWS サービスAWS KMS (p. 241) (特に、許可を使用するサービス)で使用して、暗号化されたリソースをそれらのサービスで作成、管理、または利用します。

kms:GrantIsForAWSResource (p. 112) 条件キーを使用すると、キーユーザーは許可を作成および管理できます。ただし、被付与者が許可を使用する AWS サービスである場合に限られます。この権限により、キーユーザーは、許可を使用するすべての統合サービスを使用できます。ただし、特定の AWS サービスがキーユーザーの代わりに CMK を使用できるようにするカスタムキーポリシーを作成できます。詳細については、「kms:ViaService (p. 119)」の条件キーを参照してください。

キーユーザーは、統合サービスで CMK を使用するには、これらのアクセス許可の付与が必要ですが、これらのアクセス許可では不十分です。キーユーザーには、統合されたサービスを使用するアクセス許可も必要です。AWS KMS と統合される AWS サービスへのアクセスをユーザーに許可する方法の詳細については、統合されるサービスのドキュメントを参照してください。

キーポリシーの例以下に示しているのは、対称 CMK の完全なキーポリシーの例です。このキーポリシーでは、先ほどのデフォルトキーポリシー (p. 56)のセクションからのポリシーステートメント例と、以下のことを行うための 1 つのキーポリシーを組み合わせています。

• AWS アカウント (ルートユーザー) 111122223333 に CMK へのフルアクセスを許可し、そのアカウントの IAM ポリシーで CMK へのアクセスを許可する。

63

Page 72: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの例

• IAM ユーザー KMSAdminUser と IAM ロール KMSAdminRole が CMK を管理できるようにする。• IAM ユーザー CMKUser、IAM ロール CMKRole、および AWS アカウント 444455556666 に CMK の使

用を許可します。

{ "Version": "2012-10-17", "Id": "key-consolepolicy-2", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KMSAdminUser", "arn:aws:iam::111122223333:role/KMSAdminRole" ]}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/CMKUser", "arn:aws:iam::111122223333:role/CMKRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/CMKUser", "arn:aws:iam::111122223333:role/CMKRole",

64

Page 73: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの例

"arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": "true"}} } ]}

以下の画像に示しているのは、コンソールのキーポリシー用デフォルトビューで、このキーポリシーがどのように表示されるかの例です。

65

Page 74: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの例

66

Page 75: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの表示

キーポリシーの表示AWS マネジメントコンソール または AWS KMS API で GetKeyPolicy オペレーションを使用して、アカウントで AWS KMS カスタマー管理の CMK (p. 4) または AWS 管理の CMK (p. 4) のキーポリシーを表示できます。これらの手法を使用して、別の AWS アカウントにある CMK のキーポリシーを表示することはできません。

AWS KMS キーポリシーの詳細については、「AWS KMS でのキーポリシーの使用 (p. 55)」を参照してください。CMK にアクセスできるユーザーとロールを特定する方法については、「the section called “アクセスの確認” (p. 127)」を参照してください。

トピック• キーポリシーの表示 (コンソール) (p. 67)• キーポリシーの表示 (AWS KMS API) (p. 69)

キーポリシーの表示 (コンソール)承認されたユーザーは、AWS マネジメントコンソール の [キーポリシー] タブで、AWS 管理の CMK (p. 4)または カスタマー管理の CMK (p. 4) のキーポリシーを表示できます。

AWS マネジメントコンソール で CMK のキーポリシーを表示するには、kms:ListAliases、kms:DescribeKey、および kms:GetKeyPolicy の各アクセス許可が必要です。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. AWS により自動的に作成および管理されているアカウント内のキーを表示するには、ナビゲーション

ペインで [AWS managed keys (AWS で管理されたキー)] を選択します。 ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで [Customer managed keys (カスタマー管理型のキー)] を選択します。

4. CMK のリストで、確認する CMK のエイリアスまたはキー ID を選択します。5. [キーポリシー] タブを選択します。

[キーポリシー] セクションに、キーポリシードキュメントが表示される場合があります。これはポリシービューです。キーポリシーステートメントでは、キーポリシーによって CMK へのアクセス許可を付与されたプリンシパルが表示され、それらが実行できるアクションを確認できます。

次の例は、デフォルトのキーポリシー (p. 56)のポリシービューを示しています。

67

Page 76: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの表示

また、AWS マネジメントコンソール で CMK を作成した場合は、[キー管理者]、[キーの削除]、および [キーユーザー] のセクションを含む デフォルトビュー が表示されます。キーポリシードキュメントを表示するには、[ポリシービューに切り替える] を選択します。

次の例は、デフォルトのキーポリシー (p. 56)のデフォルトのビューを示しています。

68

Page 77: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの表示

キーポリシーの表示 (AWS KMS API)AWS アカウントで AWS 管理の CMK (p. 4) またはカスタマー管理の CMK (p. 4) のキーポリシーを取得するには、AWS KMS API で GetKeyPolicy オペレーションを使用します。このオペレーションを使用して、別のアカウントのキーポリシーを表示することはできません。

次の例では、AWS Command Line Interface (AWS CLI) で get-key-policy コマンドを使用していますが、任意の AWS SDK を使用してこのリクエストを行うことができます。

69

Page 78: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの変更

default が唯一の有効な値であっても、PolicyName パラメータ は必須であることに注意してください。また、このコマンドは、表示を容易にするために、JSON ではなくテキストでの出力を要求します。

このコマンドを実行する前に、サンプルキー ID をアカウントの有効なキー ID に置き換えます。

$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default --output text

レスポンスは、デフォルトのキーポリシー (p. 56)を返す、次のようなものである必要があります。

{ "Version" : "2012-10-17", "Id" : "key-consolepolicy-3", "Statement" : [ { "Sid" : "Enable IAM User Permissions", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ]}

キーポリシーの変更AWS アカウント内のカスタマーマスターキー (CMK) のキーポリシーは、AWS マネジメントコンソールまたは PutKeyPolicy オペレーションを使用して変更できます。これらの手法を使用して、別の AWS アカウントの CMK のキーポリシーを変更することはできません。

キーポリシーを変更する場合は、以下のルールに注意してください。

• AWS 管理の CMK (p. 4) または カスタマー管理の CMK (p. 4) のキーポリシーを表示できますが、変更できるのは、カスタマー管理の CMK のキーポリシーのみです。AWS 管理の CMK のポリシーは、アカウントで CMK を作成した AWS サービスによって作成および管理されます。

• キーポリシーの IAM ユーザー、IAM ロール、AWS アカウント (ルートユーザー) を追加または削除したり、それらのプリンシパルに許可または拒否されるアクションを変更したりできます。キーポリシーでプリンシパルとアクセス権限を指定する方法については、「キーポリシーの使用 (p. 55)」を参照してください。

• キーポリシーに IAM グループを追加することはできませんが、複数の IAM ユーザーを追加することはできます。詳細については、「CMK へのアクセスを複数の IAM ユーザーに許可する (p. 72)」を参照してください。

• キーポリシーに外部 AWS アカウントを追加する場合は、外部アカウントの IAM ポリシーを使用して、それらのアカウントの IAM ユーザー、グループ、またはロールにアクセス許可を付与する必要もあります。詳細については、「他のアカウントのユーザーに CMK の使用を許可する (p. 79)」を参照してください。

• 結果として得られるキーポリシードキュメントは 32 KB (32,768 バイト) を超えることはできません。

トピック• キーポリシーを変更する方法 (p. 71)• CMK へのアクセスを複数の IAM ユーザーに許可する (p. 72)

70

Page 79: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの変更

キーポリシーを変更する方法キーポリシーは 3 つの異なる方法で変更できます。それぞれの方法について以下のセクションで説明します。

トピック• AWS マネジメントコンソール のデフォルトビューの使用 (p. 71)• AWS マネジメントコンソール のポリシービューの使用 (p. 71)• AWS KMS API の使用 (p. 71)

AWS マネジメントコンソール のデフォルトビューの使用

コンソールを使用して、デフォルトビューと呼ばれるグラフィカルインターフェイスで、キーポリシーを変更できます。

以下のステップがコンソールの表示と一致しない場合、このキーポリシーはコンソールで作成されなかった可能性があります。または、コンソールのデフォルトビューがサポートしていない方法でキーポリシーが変更されている可能性があります。その場合は、「AWS マネジメントコンソール のポリシービューの使用 (p. 71)」または「AWS KMS API の使用 (p. 71)」の手順に従ってください。

1. 「キーポリシーの表示 (コンソール) (p. 67)」での説明に従って、カスタマー管理の CMK のキーポリシーを表示します。(AWS 管理型のキーのキーポリシーを変更することはできません)

2. 変更する対象を決定します。

• キー管理者 (p. 57)を追加または削除し、キー管理者による CMK の削除 (p. 170)を許可または拒否するには、ページの [Key administrators (キー管理者)] セクションのコントロールを使用します。キー管理者は、CMK の有効化と無効化、キーポリシーの設定、およびキーローテーションの有効化 (p. 151)を含め、CMK を管理します。

• キーユーザー (p. 60)を追加または削除し、外部 AWS アカウントによる CMK の使用を許可または拒否するには、ページの [Key users (キーユーザー)] セクションのコントロールを使用します。キーユーザーは、データキーの暗号化、復号、再暗号化、および生成などの暗号化オペレーション (p. 10)で CMK を使用できます。

AWS マネジメントコンソール のポリシービューの使用

コンソールのポリシービューで、キーポリシードキュメントを変更できます。

1. 「キーポリシーの表示 (コンソール) (p. 67)」での説明に従って、カスタマー管理の CMK のキーポリシーを表示します。(AWS 管理型のキーのキーポリシーを変更することはできません)

2. [Key Policy (キーポリシー)] セクションで、[Switch to policy view (ポリシービューへの切り替え)] を選択します。

3. キーポリシードキュメントを編集し、[変更の保存] を選択します。

AWS KMS API の使用

PutKeyPolicy オペレーションを使用して、AWS アカウントの CMK のキーポリシーを変更できます。このAPI を別の AWS アカウントの CMK で使用することはできません。

1. GetKeyPolicy オペレーションを使用して既存のキーポリシードキュメントを取得し、キーポリシードキュメントをファイルに保存します。複数のプログラミング言語のサンプルコードについては、「キーポリシーの取得 (p. 352)」を参照してください。

2. 任意のテキストエディタでキーポリシードキュメントを開き、キーポリシードキュメントを編集してファイルを保存します。

71

Page 80: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーを最新の状態に保つ

3. PutKeyPolicy オペレーションを使用して、更新されたキーポリシードキュメントを CMK に適用します。複数のプログラミング言語のサンプルコードについては、「キーポリシーの設定 (p. 354)」を参照してください。

CMK 間でキーポリシーをコピーする例については、AWS CLI Command Reference の GetKeyPolicy の例を参照してください。

CMK へのアクセスを複数の IAM ユーザーに許可するIAM グループは、キーポリシーで有効なプリンシパルではありません。CMK に複数の IAM ユーザーのアクセスを許可するには、次のいずれかを実行します。

• 各 IAM ユーザーをキーポリシーに追加します。この手法では、承認されたユーザーのリストが変更されるたびに、キーポリシーを更新する必要があります。

• キーポリシーには、IAM ポリシーで CMK キーへのアクセスを許可する (p. 57)ステートメントが含まれている必要があります。次に、CMK へのアクセスを許可する IAM ポリシーを作成し、承認されたIAM ユーザーを含む IAM グループにそのポリシーをアタッチします。このアプローチを使用すると、承認されたユーザーのリストが変更されたときにポリシーを変更する必要はありません。代わりに、該当する IAM グループに対してそれらのユーザーを追加または削除する必要があります。

AWS KMS キーポリシーと IAM のポリシーの動作の詳細については、「キーアクセスのトラブルシューティング (p. 131)」を参照してください。

キーポリシーを最新の状態に保つAWS マネジメントコンソール を使用してカスタマーマスターキー (CMK) を作成する際 (p. 20)、CMK にアクセスできるようにする IAM ユーザー、IAM ロール、AWS アカウントを選択できます。これらのユーザー、ロール、アカウントは、CMK へのアクセスをコンソールするデフォルトキーポリシー (p. 56)に追加されます。新しい CMK のデフォルトキーポリシーは、ときどき更新されます。通常、これらの更新は新しい AWS KMS 機能に対応しています。

新しい CMK を作成するときは、最新バージョンのデフォルトキーポリシーが CMK に追加されます。ただし、既存の CMK は既存のキーポリシー — を使用し続けます。つまり、新しいバージョンのデフォルトキーポリシーが既存の CMK に自動的に適用されるわけポリシーではありません。代わりに、新しいバージョンが利用可能であることを示すアラートがコンソールに表示され、アップグレードするよう求められます。

Note

コンソールには、CMK を作成したときに適用されたデフォルトキーポリシーを使用している場合にのみアラートが表示されます。コンソールのポリシービューまたは PutKeyPolicy オペレーションを使用してキーポリシードキュメントを手動で変更した場合、新しいアクセス許可が使用可能になったときにコンソールにアラートが表示されません。

アップグレード時にキーポリシーに追加されたアクセス権限については、「デフォルトキーポリシーの変更点 (p. 73)」を参照してください。最新バージョンのキーポリシーにアップグレードすると、アクセス権限のみ追加され、何も削除されないため問題が発生しません。特別な理由がなければ、キーポリシーは最新の状態に保つことをお勧めします。

デフォルトキーポリシーの新しいバージョンが利用可能かどうかを調べるAWS マネジメントコンソールを使用して、デフォルトキーポリシーの新しいバージョンが利用可能かどうかを調べることができます。

72

Page 81: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーを最新の状態に保つ

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. デフォルトキーポリシーを使用する CMK のエイリアスまたはキー ID を選択します。5. ページの [Key policy (キーポリシー)] セクションまで下にスクロールします。

デフォルトキーポリシーの新しいバージョンが利用可能な場合、コンソールに次のアラートが表示されます。

A newer version of the default key policy is available. (新しいバージョンのデフォルトキーポリシーを利用できます。)Preview and upgrade to the new key policy. (新しいキーポリシーをプレビューし、このキーポリシーにアップグレードします。)

デフォルトキーポリシーの最新バージョンにアップグレードする新しいデフォルトキーポリシーが利用可能な場合、コンソールページの [Key Policy (キーポリシー)] セクションに次のアラートが表示されます。

A newer version of the default key policy is available. (新しいバージョンのデフォルトキーポリシーを利用できます。)Preview and upgrade to the new key policy. (新しいキーポリシーをプレビューし、このキーポリシーにアップグレードします。)

デフォルトキーポリシーの最新バージョンにアップグレードするには

1. 新しいバージョンのデフォルトキーポリシーを知らせるアラートが表示された場合は、[Preview andupgrade to the new key policy (新しいキーポリシーをプレビューし、このキーポリシーにアップグレードします)] を選択します。

2. デフォルトキーポリシーの最新バージョンのキーポリシードキュメントを確認します。最新バージョンと以前のバージョンの違いの詳細については、「デフォルトキーポリシーの変更点 (p. 73)」を参照してください。キーポリシーを確認したら、[Upgrade key policy] を選択します。

デフォルトキーポリシーの変更点現行バージョンのデフォルトキーポリシー (p. 56)では、キー管理者ステートメントに以前のバージョンより多くのアクセス権限が含まれています。これらの追加のアクセス権限は、新しい AWS KMS 機能に対応しています。

以前のバージョンのデフォルトキーポリシーを使用する CMK には、以下のアクセス権限がない可能性があります。最新バージョンのデフォルトキーポリシーにアップグレードすると、キー管理者ステートメントに追加されます。

kms:TagResource および kms:UntagResource

これらのアクセス権限では、キー管理者が CMK にタグを追加、更新、削除することができます。これらは、AWS KMS がタグ機能 (p. 44)をリリースしたときに、デフォルトキーポリシーに追加されました。

kms:ScheduleKeyDeletion および kms:CancelKeyDeletion

これらのアクセス権限では、キー管理者が CMK の削除をスケジュールおよびキャンセルできます。これらは、AWS KMS が CMK 削除機能 (p. 170)をリリースしたときに、デフォルトキーポリシーに追加されました。

Note

kms:ScheduleKeyDeletion アクセス権限と kms:CancelKeyDeletion アクセス権限は、CMK を作成 (p. 20)したときと、最新バージョンのデフォルトキーポリシーにアップグ

73

Page 82: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドIAM ポリシーの使用

レードしたときにデフォルトで追加されます。ただし、CMK を作成するとき、[Allow keyadministrators to delete this key] チェックボックスをオフにすることによりデフォルトキーポリシーからオプションで削除することができます。同様に、キーの詳細ページを使用して既存の CMK のデフォルトキーポリシーから削除することができます。これには、最新バージョンにアップグレードしたキーポリシーを持つ CMK が含まれます。

AWS KMS での IAM ポリシーの使用IAM ポリシーをキーポリシー (p. 55)とともに使用すると、AWS KMS でカスタマーマスターキー(CMK) へのアクセスをコントロールできます。

すべての CMK にキーポリシーが必要です。IAM ポリシーはオプションです。IAM ポリシーを使用してCMK へのアクセスを制御するには、CMK のキーポリシーが、IAM ポリシーを使用するアクセス許可をアカウントに付与する必要があります。具体的には、キーポリシーには、IAM ポリシーを有効にするポリシーステートメント (p. 57)を含める必要があります。

IAM ポリシーは、任意の AWS KMS オペレーションへのアクセスを制御できます。キーポリシーとは異なり、IAM ポリシーは複数の CMK へのアクセスを制御し、複数の関連 AWS サービスのオペレーションに対するアクセス権限を付与できます。ただし、IAM ポリシーは、特定の CMK を含まないため、キーポリシーで制御できないオペレーション (CreateKey など) へのアクセスを制御する場合に特に便利です。

Note

このセクションでは、IAM ポリシーを使用して AWS KMS オペレーションへのアクセスを制御する方法について説明します。IAM に関する一般的な情報については、「IAM ユーザーガイド」を参照してください。

トピック• IAM ポリシーの概要 (p. 74)• IAM ポリシーステートメントでの CMK の指定 (p. 75)• AWS KMS コンソールを使用するために必要なアクセス許可 (p. 76)• AWS KMS に関する AWS 管理 (事前定義) ポリシー (p. 76)• カスタマー管理ポリシーの例 (p. 77)

IAM ポリシーの概要以下の方法で IAM ポリシーを使用できます。

• ユーザーまたはグループにアクセス権限ポリシーをアタッチする – IAM ユーザーまたはユーザーのグループに AWS KMS オペレーションの呼び出しを許可するポリシーをアタッチできます。

• フェデレーションまたはクロスアカウントのアクセス権限のためのアクセス権限ポリシーをロールにアタッチする – ID フェデレーションを有効にしたり、クロスアカウントのアクセス権限を付与したり、EC2 インスタンスで実行中のアプリケーションにアクセス権限を付与したりする IAM ポリシーを、IAM ロールにアタッチできます。IAM ロールのさまざまなユースケースの詳細については、『IAMユーザーガイド』の「IAM ロール」を参照してください。

以下に示しているのは、AWS KMS のアクセス権限を使用する IAM ポリシーの例です。このポリシーにより、アタッチ先の IAM アイデンティティで、すべての CMK とエイリアスを取得できるようになります。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow",

74

Page 83: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドIAM ポリシーステートメントでの CMK の指定

"Action": [ "kms:ListKeys", "kms:ListAliases" ], "Resource": "*" }}

すべての IAM ポリシーと同様、このポリシーには Principal 要素がありません。IAM ユーザーまたはIAM ロールに IAM ポリシーをアタッチすると、ユーザーまたは ロールを引き受けたユーザーは、ポリシーに指定されているクセス許可を取得します。

すべての AWS KMS API アクションとそれらが適用されるリソースの表については、「AWS KMS API アクセス許可のリファレンス (p. 84)」を参照してください。

IAM ポリシーステートメントでの CMK の指定一部の IAM ポリシーは、CreateKey などの特定のカスタマーマスターキー (CMK) を伴わない AWS KMSオペレーションへのアクセスを制御します。ただし、IAM ポリシーステートメントのリソースとして 1 つ以上の CMK を指定できます。

Note

IAM ポリシーを使用して CMK へのアクセスを制御するには、CMK のキーポリシーが、IAM ポリシーを使用するアクセス許可をアカウントに付与する必要があります。具体的には、キーポリシーには、IAM ポリシーを有効にするポリシーステートメント (p. 57)を含める必要があります。

IAM ポリシーで特定の CMK を指定するには、CMK の キー ARN (p. 12) 、つまり CMK の Amazon リソースネーム (ARN) を使用します。IAM ポリシーステートメントで CMK を識別するために、キーID (p. 12)、エイリアス名 (p. 12)、またはエイリアス ARN (p. 12) を使用することはできません。

たとえば、次の IAM ポリシーステートメントでは、プリンシパルはポリシーステートメントの Resourceエレメントにリストされている CMK に対して DescribeKey、GenerateDataKey、および Decrypt の各オペレーションを呼び出すことができます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" ] }}

複数の CMK を指定するには、ワイルドカード文字 (*) を使用します。たとえば、次のポリシーステートメントでは、プリンシパルはサンプルアカウントの任意の CMK で指定されたオペレーションを呼び出すことができます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow",

75

Page 84: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS コンソールを使用するために必要なアクセス許可

"Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ ""arn:aws:kms:*:111122223333:key/*"" ] }}

AWS KMS オペレーションが特定の CMK に関係しているかどうかを判断するには、「the section called“AWS KMS API アクセス許可のリファレンス” (p. 84)」の表の「リソース」列で CMK という値を探します。

AWS KMS コンソールを使用するために必要なアクセス許可AWS KMS コンソールを使用して作業するユーザーには、AWS アカウントの AWS KMS リソースの使用を許可する最小限のアクセス権限が必要です。これらの AWS KMS アクセス権限に加えて、ユーザーには、IAM ユーザーおよびロールを一覧表示するためのアクセス権限が必要です。これらの最小限必要なアクセス権限よりも制限された IAM ポリシーを作成している場合、その IAM ポリシーを使用するユーザーに対して AWS KMS コンソールは意図したとおりには機能しません。

AWS KMS コンソールへの読み取り専用アクセスをユーザーに許可するために必要な最小限のアクセス権限については、「AWS KMS コンソールですべての CMK への読み取り専用アクセスをユーザーに許可する (p. 77)」を参照してください。

ユーザーが AWS KMS コンソールを使用して CMK の生成と管理ができるようにするには、次のセクションで説明しているように、AWSKeyManagementServicePowerUser 管理ポリシーをユーザーにアタッチします。

AWS SDK またはコマンドラインツールから AWS KMS API を使用するユーザーに、最小限のコンソールアクセス権限を付与する必要はありません。ただし、これらのユーザーには、API を使用するためのアクセス権限を付与する必要はあります。詳細については、「AWS KMS API アクセス許可のリファレンス (p. 84)」を参照してください。

AWS KMS に関する AWS 管理 (事前定義) ポリシーAWS には、多くの一般的ユースケースに対応するために、AWS によって作成されて管理されるスタンドアロンの IAM ポリシーが用意されています。これらは AWS 管理ポリシーと呼ばれており、AWS 管理ポリシーには一般的ユースケースに必要なアクセス権限が用意されているため、必要なアクセス権限を調べる必要はありません。詳細については、『IAM ユーザーガイド』の「AWS 管理ポリシー」を参照してください。

AWS には、AWSKeyManagementServicePowerUser という、AWS KMS 用の AWS 管理ポリシーが用意されています。このポリシーでは、以下のアクセス権限が付与されます。

• すべての CMK とエイリアスをユーザーが一覧表示できるようにします。• 各 CMK に関する情報 (識別子、作成日、更新ステータス、キーポリシーなど) をユーザーが取得できる

ようにします。• 管理または使用可能な CMK をユーザーが作成できるようにします。ユーザーは CMK を作成する

とき、CMK のキーポリシー (p. 55)でアクセス権限を設定できます。つまり、ユーザーは CMKを作成できるとともに、その CMK を管理したり使用したりするためのアクセス権限を設定できます。AWSKeyManagementServicePowerUser ポリシーでは、ユーザーは自分で作成した CMK のみを管理したり使用したりできます。

76

Page 85: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマー管理ポリシーの例

カスタマー管理ポリシーの例このセクションでは、さまざまな AWS KMS アクションのためのアクセス権限を付与する IAM ポリシーの例を示しています。

Important

以下のポリシーのアクセス権限の一部は、CMK のキーポリシーによっても同じアクセス権限が付与されるときにのみ、付与されます。詳細については、「AWS KMS API アクセス許可のリファレンス (p. 84)」を参照してください。

例• AWS KMS コンソールですべての CMK への読み取り専用アクセスをユーザーに許可する (p. 77)• 特定の AWS アカウントで CMK により暗号化および復号化することをユーザーに許可する (p. 77)• 特定の AWS アカウントおよびリージョンで CMK により暗号化および復号化することをユーザーに許

可する (p. 78)• 特定の CMK により暗号化および復号化することをユーザーに許可する (p. 78)• CMK の無効化または削除をユーザーに禁止する (p. 78)

AWS KMS コンソールですべての CMK への読み取り専用アクセスをユーザーに許可する以下のポリシーでは、ユーザーに AWS KMS コンソールへの読み取り専用アクセスを許可します。つまり、ユーザーはコンソールを使用して CMK を表示できますが、CMK を変更したり新規に作成したりすることはできません。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GetKeyPolicy", "kms:GetKeyRotationStatus", "kms:GetPublicKey", "kms:ListKeys", "kms:ListAliases", "kms:ListKeyPolicies", "iam:ListUsers", "iam:ListRoles" ], "Resource": "*" }}

特定の AWS アカウントで CMK により暗号化および復号化することをユーザーに許可する以下のポリシーでは、AWS アカウント 111122223333 で、AWS KMS での CMK によるデータの暗号化と復号化をユーザーが正常にリクエストできるようになります。

{ "Version": "2012-10-17", "Statement": {

77

Page 86: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマー管理ポリシーの例

"Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:*:111122223333:key/*" ] }}

特定の AWS アカウントおよびリージョンで CMK により暗号化および復号化することをユーザーに許可する以下のポリシーでは、米国西部 (オレゴン) リージョンの AWS アカウント 111122223333 で、AWS KMSでの CMK によるデータの暗号化と復号化をユーザーが正常にリクエストできるようになります。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:111122223333:key/*" ] }}

特定の CMK により暗号化および復号化することをユーザーに許可する次のポリシーでは、ユーザーは Resource エレメントで指定された 2 つの CMK を使用してデータを暗号化および復号できます。IAM ポリシーステートメントで CMK を指定 (p. 75)する場合は、CMK のキーARN を使用します。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" ] }}

CMK の無効化または削除をユーザーに禁止する以下のポリシーでは、CMK の無効化や削除をユーザーができないようにします。これは、別の IAM ポリシーまたはキーポリシーでこれらのアクセス権限を付与されていても同様です。アクセス権限を明示的に

78

Page 87: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK へのクロスアカウントアクセスを許可する

拒否するポリシーは、同じアクセス権限を明示的に付与するポリシーを含め、他のすべてのポリシーを上書きします。詳細については、『IAM ユーザーガイド』の「リクエストの許可または拒否を決定する」を参照してください。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "kms:DisableKey", "kms:ScheduleKeyDeletion" ], "Resource": "*" }}

他のアカウントのユーザーに CMK の使用を許可する

1 つの AWS アカウントの IAM ユーザーまたはロールが、別の AWS アカウントのカスタマーマスターキー (CMK) を使用することを許可できます。CMK を作成するとき、または既存の CMK のアクセス許可を変更するときに、これらのアクセス許可を追加できます。

別のアカウントのユーザーとロールに CMK を使用するアクセス許可を付与するには、2 つの異なるタイプのポリシーを使用する必要があります。

• CMK のキーポリシーは 、CMK を使用するアクセス許可を外部アカウント(または外部アカウントのユーザーとロール)に付与する必要があります。キーポリシーは、CMK を所有するアカウントにあります。

• 外部アカウントの IAM ユーザーとロールに IAM ポリシーをアタッチする必要があります 。IAM これらのポリシーは、キーポリシーで指定されたアクセス許可を委任します。

このシナリオでは、キーポリシーによって CMK にアクセスできるユーザーを決定します 。IAM ポリシーは、CMK にアクセスできるユーザーを決定します。キーポリシーも IAM ポリシーも単独でも十分ではありません。両方を変更する必要があります。

キーポリシーを編集するには、でポリシービューを使用するか (p. 71) 、CreateKey AWS マネジメントコンソール または PutKeyPolicy オペレーションを使用できます。CMK の作成時にキーポリシーを設定する方法については、「他のアカウントで使用できる CMK の作成 (p. 82)」を参照してください 。

IAM ポリシーの編集については、「AWS KMS での IAM ポリシーの使用 (p. 74)」を参照してください 。

別のアカウントで CMK IAM の使用を許可するためにキーポリシーとポリシーがどのように連携するかを示す例については、「例 2: ユーザーが別の AWS アカウントの CMK を使用するためのアクセス許可を持つロールを引き受ける (p. 134)」を参照してください 。

トピック• ステップ 1: ローカルアカウントにキーポリシーステートメントを追加する (p. 80)• ステップ 2: 外部アカウントに IAM ポリシーを追加する (p. 81)• 他のアカウントで使用できる CMK の作成 (p. 82)• AWS のサービスによる外部 CMK の使用 (p. 84)

79

Page 88: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドステップ 1: ローカルアカウントにキー

ポリシーステートメントを追加する

ステップ 1: ローカルアカウントにキーポリシーステートメントを追加するCMK のキーポリシーは、CMK にアクセスできるユーザーと、実行できるオペレーションの主要な決定要因です。キーポリシーは、常に、CMK を所有する アカウントにあります。IAM ポリシーとは異なり、キーポリシーはリソースを指定しません。リソースは、キーポリシーに関連付けられている CMK です。

CMK を使用するアクセス権限を外部アカウントに付与するには、外部アカウントを指定するステートメントをキーポリシーに追加します。キーポリシーの Principal 要素に、外部アカウントの Amazon リソースネーム (ARN) を入力します。

キーポリシーで外部アカウントを指定すると、 IAM 外部アカウントの管理者は IAM ポリシーを使用して、それらのアクセス許可を外部アカウントのユーザーおよびロールに委任できます。また、ユーザーおよびロールが実行できるキーポリシーで指定されたアクションを決定することもできます。

たとえば、アカウント 444455556666 にアカウント 111122223333 の対称 CMK の使用を許可するとします。これを行うには、次の例のようなポリシーステートメントを、アカウント 111122223333 の CMK のキーポリシーに追加します。このポリシーステートメントは、対称 CMK の暗号化オペレーションで CMKを使用するアクセス許可を外部アカウント 444455556666 に付与します。

{ "Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*"}

外部アカウントにアクセス許可を付与する代わりに、キーポリシーで特定の外部ユーザーとロールを指定できます。ただし、IAM 外部アカウントの管理者が ID IAM に適切なポリシーをアタッチするまで、これらのユーザーとロールは CMK を使用できません。ポリシーは、IAM キーポリシーで指定されている外部ユーザーおよびロールのすべてまたはサブセットにアクセス許可を付与できます。また、キーポリシーで指定されたアクションのすべてまたはサブセットを許可できます。

キーポリシーで ID を指定すると、IAM 外部アカウントの管理者が提供できるアクセス許可が制限されます。ただし、2 つのアカウントを使用したポリシー管理はより複雑になります。たとえば、ユーザーまたはロールを追加する必要があるとします。CMK を所有するアカウントのキーポリシーにそのアイデンティティを追加し、IAM アイデンティティのアカウントでポリシーを作成する必要があります。

キーポリシーで特定の外部ユーザーまたはロールを指定するには、Principal 要素に、外部アカウントのユーザーまたはロールの Amazon リソースネーム (ARN) を入力します。

たとえば、次のキーポリシーステートメントの例では、アカウント 444455556666 の ExampleRoleおよび ExampleUser にアカウント 111122223333 の CMK の使用を許可します。このキーポリシーステートメントは、対称 CMK の暗号化オペレーションで CMK を使用するアクセス許可を外部アカウント444455556666 に付与します。

{

80

Page 89: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドステップ 2: 外部アカウントに IAM ポリシーを追加する

"Sid": "Allow an external account to use this CMK", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/ExampleRole" "arn:aws:iam::444455556666:user/ExampleUser" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*"}

Note

アクセス権限を許可するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクに設定すると、別のポリシーステートメントで明示的に拒否しない限り、すべての AWS アカウントの各 ID に、CMK を使用するアクセス権限が付与されます。他の AWS アカウントのユーザーは、各自のアカウントで CMK を使用する、該当の IAM アクセス権限を必要としているのみです。

また、外部アカウントに付与するアクセス許可を決定する必要があります。CMK に対するアクセス権限のリストについては、「AWS KMS API のアクセス許可: アクションとリソースのリファレンス (p. 84)」を参照してください 。

暗号化オペレーション (p. 10)で CMK を使用したり、AWS KMS と統合された AWS のサービスで CMK を使用したりするためのアクセス許可を外部アカウントに付与できます。これを行うには、の Key Users セクションを使用します AWS マネジメントコンソール。詳細については、「他のアカウントで使用できるCMK の作成 (p. 82)」を参照してください。

キーポリシーで他のアクセス許可を指定するには、キーポリシードキュメントを編集します。たとえば、復号するが暗号化しないアクセス許可をユーザーに付与したり、CMK を表示しても使用しないアクセス許可を付与したりできます。キーポリシードキュメントを編集するには、 でポリシービューを使用するか (p. 71) 、 CreateKey AWS マネジメントコンソール または PutKeyPolicy オペレーションを使用できます。

ステップ 2: 外部アカウントに IAM ポリシーを追加するCMK を所有するアカウントのキーポリシーは、アクセス許可の有効範囲を設定します。ただし、外部アカウントのユーザーとロールは、 IAM これらのアクセス権限を委任するポリシーをアタッチするか、許可を使用して CMK へのアクセスを管理するまで、CMK を使用することはできません。IAM ポリシーは外部アカウントで設定されます。

キーポリシーが外部アカウントにアクセス許可を付与する場合、IAM アカウントの任意のユーザーまたはロールにポリシーをアタッチできます。ただし、キーポリシーが指定されたユーザーまたはロールにアクセス許可を付与する場合、 IAM ポリシーは、指定されたユーザーおよびロールのすべてまたはサブセットにのみそれらのアクセス許可を付与できます。IAM ポリシーが CMK アクセスを他の外部ユーザーまたはロールに付与する場合、効果はありません。

キーポリシーは、IAM ポリシー内のアクションも制限します。 ポリシーは、 IAM キーポリシーで指定されたアクションのすべてまたはサブセットを委任できます。IAM キーポリシーで指定されていないアクションがポリシーにリストされている場合、それらのアクセス許可は無効です。

81

Page 90: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド他のアカウントで使用できる CMK の作成

IAM 次のポリシー例では、プリンシパルが、111122223333 暗号化オペレーションのためにアカウントでCMK を使用することを許可します。このアクセス許可をアカウント 444455556666 のユーザーやロールに付与するには、アカウント 444455556666 のユーザーやロールにポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow Use Of CMK In Account 111122223333", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ]}

このポリシーに関する以下の詳細情報に注意してください。

• キーポリシーとは異なり、 IAM ポリシーステートメントには Principal 要素は含まれません。IAM ポリシーでは、プリンシパルは、ポリシーがアタッチされた ID です。

• IAM ポリシーの Resource 要素は、プリンシパルが使用できる CMK を識別します。CMK を指定するには、そのキー ARN (p. 12) を Resource 要素に追加します。

• Resource 要素には複数の CMK を指定できます。ただし、Resource 要素で特定の CMK を指定しないと、意図したよりも多くの CMK へのアクセス権限を付与する可能性があります。

• 外部ユーザーがAWS KMSと統合される AWS のサービスで CMK を使用できるようにするには、 キーポリシーまたは IAM ポリシーにアクセス許可を追加する必要がある場合があります。詳細については、「AWS のサービスによる外部 CMK の使用 (p. 84)」を参照してください。

IAM ポリシーの使用の詳細については、「IAM ポリシーの使用 (p. 74)」を参照してください。

他のアカウントで使用できる CMK の作成CreateKey オペレーションを使用して CMK を作成する場合、その Policy パラメータを使用して、外部アカウント、または外部ユーザーおよびロールに CMK を使用するアクセス許可を付与するキーポリシー (p. 80)を指定できます 。また、ユーザーとロールがキーポリシーで指定されている場合でも 、これらのアクセス許可をアカウントのユーザーとロールに委任する IAM ポリシー (p. 81)を外部アカウントに追加する必要があります。PutKeyPolicy オペレーションを使用して、いつでもキーポリシーを変更できます。

AWS マネジメントコンソール で CMK を作成するときは、そのキーポリシーも作成します。KeyAdministrators セクションと Key Users セクションでアイデンティティを選択すると、AWS KMS はこれらの ID のポリシーステートメントを CMK のキーポリシーに追加します。

Key Users セクションでは、外部アカウントをキーユーザーとして追加することもできます。

82

Page 91: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド他のアカウントで使用できる CMK の作成

外部アカウントのアカウント ID を入力すると、 AWS KMS はキーポリシーに 2 つのステートメントを追加します。このアクションは、キーポリシーにのみ影響します。外部アカウントのユーザーとロールは、IAM ポリシー (p. 81)をアタッチしてこれらのアクセス許可の一部またはすべてを付与するまで、CMK を使用できません。

最初のポリシーステートメントは、暗号化オペレーションで CMK を使用するアクセス許可を外部アカウントに付与します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*"}

2 番目のポリシーステートメントでは、外部アカウントが CMK で許可を作成、表示、 取り消すことを許可します。ただし、リクエストが AWS KMS と統合されている AWS サービスからのものである場合に限ります。これらのアクセス権限は、CMK を使用するためにユーザーデータを暗号化するなどの他の AWSサービスを許可します。

これらのアクセス許可は、Amazon WorkMail (p. 290)などの AWS サービスでユーザーデータを暗号化する CMK 用に設計されています。これらのサービスは、通常、ユーザーに代わって CMK を使用するために必要なアクセス許可を取得するために許可を使用します。詳細については、「AWS のサービスによる外部CMK の使用 (p. 84)」を参照してください。

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*",

83

Page 92: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS のサービスによる外部 CMK の使用

"Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } }}

これらのアクセス許可がニーズを満たさない場合は、コンソールのポリシービュー (p. 71)で 、またはPutKeyPolicy オペレーションを使用して編集できます。外部アカウントにアクセス許可を付与する代わりに、特定の外部ユーザーとロールを指定できます。ポリシーで指定するアクションを変更できます。また、グローバル条件と AWS KMS ポリシー条件を使用して、アクセス許可を絞り込むことができます。

AWS のサービスによる外部 CMK の使用別のアカウントのユーザーに、AWS KMSと統合されたサービスで CMK を使用するアクセス許可を付与できます。たとえば、外部アカウントのユーザーは、CMK を使用して Amazon S3 バケット内のオブジェクトを暗号化したり (p. 279)、AWS Secrets Manager に保存するシークレットを暗号化 (p. 269)したりできます。

キーポリシーは、CMK を使用するためのアクセス許可を外部ユーザーまたは外部ユーザーのアカウントに付与する必要があります。さらに、AWS サービスを使用するアクセス許可をユーザーに付与する IAM ポリシーを ID にアタッチする必要があります。

また、このサービスでは、ユーザーがキーポリシーで追加のアクセス許可を持っている必要がある場合があります。たとえば、CMK で許可を作成、一覧表示、および取り消すアクセス許可が必要になる場合があります。または、IAM 特定のポリシーが必要な場合があります。詳細については、サービスのドキュメントを参照してください。

最後に、統合サービスの AWS マネジメントコンソール に表示される CMK のリストには、外部アカウントの CMK は含まれません。これは、ユーザーまたはロールにそれらを使用するアクセス許可がある場合にも当てはまります。外部アカウントの CMK を使用するには、ユーザーは CMK の ID または ARN を入力する必要があります。詳細については、サービスのコンソールドキュメントを参照してください。

AWS KMS API のアクセス許可: アクションとリソースのリファレンス

アクションとリソーステーブルは、キーポリシー (p. 55)と IAM ポリシー (p. 74)のアクセスコントロール (p. 52)を定義します。行には以下の情報が示されます。

• API オペレーションとアクション (アクセス許可) には、各 AWS KMS API オペレーションおよびそのオペレーションを許可する関連アクション (アクセス許可) が一覧表示されます。ポリシーの Action 要素でアクションを指定します。

• ポリシータイプは、このアクセス許可をキーポリシーで使用できるか、IAM ポリシーで使用できるかを示します。そのタイプがキーポリシーの場合、キーポリシーでこの許可を明示的に指定できます。また、IAM ポリシーを有効にするポリシーステートメント (p. 57)がキーポリシーに含まれている場合には、IAM ポリシーで許可を指定できます。そのタイプが IAM ポリシーの場合、IAM ポリシーのみでこの許可を明示的に指定できます。

• リソースには、アクセス許可が適用される AWS リソースを示しています。IAM ポリシーでリソースを指定するには、Amazon リソースネーム (ARN) を Resource 要素に追加します。リソースにアタッチされているキーポリシーでは、Resource 要素の値は常に "*" です。CMK ARN

リソースがカスタマーマスターキー (CMK) の場合は、そのキー ARN (p. 12) を使用します。ヘルプについては、「the section called “キー ID と ARN を検索する” (p. 36)」を参照してください。

84

Page 93: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

arn:AWS_partition_name:kms:AWS_Region:AWS_account_ID:key/key_ID

例:

arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890abエイリアス ARN

リソースがエイリアスの場合は、そのエイリアス ARN (p. 12) を使用します。エイリアス ARN を取得するには、ListAliases オペレーションを使用します。

arn:AWS_partition_name:kms:AWS_region:AWS_account_ID:alias/alias_name

例:

arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias• AWS KMS 条件キーには、オペレーションへのアクセスを制御するために使用できる AWS KMS 条件

キーが一覧表示されます。ポリシーの Condition 要素で条件を指定します。詳細については、「AWSKMS 条件キー (p. 96)」を参照してください。また、この列には AWS KMS でサポートされる (ただし、すべての AWS サービスではなく) AWS グローバル条件キーも含まれています。

AWS KMS API オペレーションとアクセス許可

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

CancelKeyDeletion

kms:CancelKeyDeletion

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

ConnectCustomKeyStore

kms:ConnectCustomKeyStore

IAMポリシー * kms:CallerAccount

IAM ポリシー(エイリアス用)

エイリアス なし (エイリアスへのアクセスを制御する場合)

CreateAlias

kms:CreateAlias

このオペレーションを使用するには、発信者には 2 つのリソースでの kms:CreateAlias 許可が必要です。

• エイリアス (IAM ポリシーにおける)

• CMK (キーポリシーにおける)

キーポリシー(CMK 用)

CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:ViaService

CreateCustomKeyStore

kms:CreateCustomKeyStore

IAMポリシー * kms:CallerAccount

CreateGrant

kms:CreateGrant

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

85

Page 94: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:GrantConstraintType

kms:GranteePrincipal

kms:GrantIsForAWSResource

kms:GrantOperations

kms:RetiringPrincipal

kms:ViaService

CreateKey

kms:CreateKey

IAMポリシー * kms:BypassPolicyLockoutSafetyCheck

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

Decrypt

kms:Decrypt

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:EncryptionAlgorithm

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:ViaService

IAM ポリシー(エイリアス用)

エイリアス なし (エイリアスへのアクセスを制御する場合)

DeleteAlias

kms:DeleteAlias

このオペレーションを使用するには、発信者には 2 つのリソースでの kms:DeleteAlias 許可が必要です。

• エイリアス (IAM ポリシーにおける)

• CMK (キーポリシーにおける)

キーポリシー(CMK 用)

CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

86

Page 95: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

DeleteCustomKeyStore

kms:DeleteCustomKeyStore

IAMポリシー * kms:CallerAccount

DeleteImportedKeyMaterial

kms:DeleteImportedKeyMaterial

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

DescribeCustomKeyStores

kms:DescribeCustomKeyStores

IAMポリシー * kms:CallerAccount

DescribeKey

kms:DescribeKey

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

DisableKey

kms:DisableKey

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

DisableKeyRotation

kms:DisableKeyRotation

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

DisconnectCustomKeyStore

kms:DisconnectCustomKeyStore

IAMポリシー * kms:CallerAccount

87

Page 96: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

EnableKey

kms:EnableKey

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

EnableKeyRotation

kms:EnableKeyRotation

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

Encrypt

kms:Encrypt

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:EncryptionAlgorithm

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:ViaService

GenerateDataKey

kms:GenerateDataKey

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:EncryptionAlgorithm

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:ViaService

88

Page 97: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

GenerateDataKeyPair

kms:GenerateDataKeyPair

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:DataKeyPairSpec

kms:EncryptionAlgorithm

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:ViaService

GenerateDataKeyPairWithoutPlaintext

kms:GenerateDataKeyPairWithoutPlaintext

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:DataKeyPairSpec

kms:EncryptionAlgorithm

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:ViaService

GenerateDataKeyWithoutPlaintext

kms:GenerateDataKeyWithoutPlaintext

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:EncryptionAlgorithm

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:ViaService

GenerateRandom

kms:GenerateRandom

IAMポリシー * なし

89

Page 98: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

GetKeyPolicy

kms:GetKeyPolicy

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

GetKeyRotationStatus

kms:GetKeyRotationStatus

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

GetParametersForImport

kms:GetParametersForImport

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

kms:WrappingAlgorithm

kms:WrappingKeySpec

GetPublicKey

kms:GetPublicKey

キーポリシー CMK(非対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

ImportKeyMaterial

kms:ImportKeyMaterial

キーポリシー CMK(対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ExpirationModel

kms:ValidTo

kms:ViaService

90

Page 99: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

ListAliases

kms:ListAliases

IAMポリシー * なし

ListGrants

kms:ListGrants

キーポリシー CMK kms:CallerAccountkms:GrantIsForAWSResource

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:ViaService

ListKeyPolicies

kms:ListKeyPolicies

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

ListKeys

kms:ListKeys

IAMポリシー * なし

ListResourceTags

kms:ListResourceTags

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

ListRetirableGrants

kms:ListRetirableGrants

IAMポリシー * なし

PutKeyPolicy

kms:PutKeyPolicy

キーポリシー CMK kms:BypassPolicyLockoutSafetyCheck

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

91

Page 100: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

ReEncrypt

kms:ReEncryptFrom

kms:ReEncryptTo

このオペレーションを使用するには、発信者には 2 つの CMK での許可が必要です。

• 復号化するために使用される CMK のkms:ReEncryptFrom

• 暗号化するために使用されるCMK の kms:ReEncryptTo

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:EncryptionAlgorithm

kms:EncryptionContext:

kms:EncryptionContextKeys

kms:ReEncryptOnSameKey

kms:ViaService

RetireGrant

許可を無効にするアクセス権限が許可で指定されます。ポリシーで、このオペレーションへのアクセスを制御することはできません。詳細については、『AWS Key ManagementService API Reference』の「RetireGrant」を参照してください。

該当しません 該当しません 該当しません

RevokeGrant

kms:RevokeGrant

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:GrantIsForAWSResource

kms:ViaService

ScheduleKeyDeletion

kms:ScheduleKeyDeletion

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:ViaService

92

Page 101: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS API アクセス許可のリファレンス

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

Sign

kms:Sign

キーポリシー CMK(非対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOriginkms:MessageType

kms:SigningAlgorithm

kms:ViaService

TagResource

kms:TagResource

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

aws:RequestTag (AWS グローバル条件キー)

aws:TagKeys (AWS グローバル条件キー)

UntagResource

kms:UntagResource

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

aws:RequestTag (AWS グローバル条件キー)

aws:TagKeys (AWS グローバル条件キー)

93

Page 102: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドポリシー条件の使用

API オペレーションとアクション(アクセス許可)

ポリシータイプ リソース (IAMポリシー用)

AWS KMS 条件キー

IAM ポリシー(エイリアス用)

エイリアス なし (エイリアスへのアクセスを制御する場合)

UpdateAlias

kms:UpdateAlias

このオペレーションを使用するには、発信者には 3 つのリソースでの kms:UpdateAlias 許可が必要です。

• エイリアス• そのエイリアスが現在示して

いる CMK• UpdateAlias リクエストで指

定される CMK

キーポリシー(CMK 用)

CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

UpdateCustomKeyStore

kms:UpdateCustomKeyStore

IAMポリシー * kms:CallerAccount

UpdateKeyDescription

kms:UpdateKeyDescription

キーポリシー CMK kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:ViaService

検証

kms:Verify

キーポリシー CMK(非対称のみ)

kms:CallerAccount

kms:CustomerMasterKeySpec

kms:CustomerMasterKeyUsage

kms:KeyOrigin

kms:MessageType

kms:SigningAlgorithm

kms:ViaService

AWS KMS でのポリシー条件の使用キーポリシーおよび AWS Identity and Access Management ポリシー (IAM ポリシー (p. 74)) で、AWSKMS リソースへのアクセスをコントロールする条件を指定できます。ポリシーステートメントは、条件がtrue の場合にのみ有効です。たとえば、特定の日付の後にのみ適用されるポリシーステートメントが必要になる場合があります。また、特定の値が API リクエストに表示されているときにのみ、ポリシーステートメントによるアクセスコントロールが必要になる場合もあります。

条件を指定するには、IAM 条件ポリシー演算子を指定して、ポリシーステートメントの Condition 要素で事前定義された条件キーを使用します。条件キーは、AWS に一般的に適用されるものや、AWS KMS に固有のものがあります。

94

Page 103: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS グローバル条件キー

トピック• AWS グローバル条件キー (p. 95)• AWS KMS 条件キー (p. 96)

AWS グローバル条件キーAWS は、グローバル条件キーを定義します。これは、アクセスコントロールのために AWS を使用するすべての IAM サービスを対象とした一連のポリシー条件キーです。AWS KMS キーポリシーおよび IAM ポリシーでグローバル条件キーを使用できます。たとえば、aw: PrincipalArn 条件キーを使用して、リクエスト内のプリンシパルが条件キー値の Amazon リソースネーム (ARN) で表されている場合にのみ、カスタマーマスターキー (CMK) へのアクセスを許可できます。

AWS KMS は、次のものを除くすべての AWS グローバル条件キーをサポートします。

• aws:ResourceTag• aws:SourceAccount• aws:SourceArn

AWS グローバル条件キー (使用可能なリクエストのタイプなど) については、IAM ユーザーガイド の「AWS グローバル条件コンテキストキー」を参照してください。IAM ポリシーでグローバル条件キーを使用する例については、IAM ユーザーガイド の「リクエストへのアクセスの制御」および「タグキーの制御」を参照してください。

以下のトピックでは、IP アドレスと VPC エンドポイントに基づく条件キーを使用するための特別なガイダンスを提供します。

トピック• AWS KMS アクセス許可を持つポリシーでの IP アドレス条件の使用 (p. 95)• AWS KMS アクセス許可を持つポリシーでの VPC エンドポイント条件の使用 (p. 96)

AWS KMS アクセス許可を持つポリシーでの IP アドレス条件の使用AWS KMS を使用して、統合された AWS サービス (p. 241)でデータを保護できます。ただし、同じポリシーステートメントで、AWS KMS へのアクセスを許可または拒否する IP アドレス条件の演算子または aws:SourceIp 条件キーを指定するときは注意が必要です。たとえば、「AWS: 送信元 IP に基づいてAWS へのアクセスを拒否する」に示されているポリシーでは、AWS アクションが、指定された IP 範囲からのリクエストに制限されます。

次のシナリオを考えてみます。

1. 「AWS: 送信元 IP に基づいて AWS へのアクセスを拒否する」に示されているようなポリシーを、IAMユーザーにアタッチします。aws:SourceIp 条件キーの値は、ユーザーの会社の IP アドレス範囲に設定します。この IAM ユーザーには、Amazon EBS、Amazon EC2、および AWS KMS を使用できるようにする他のポリシーがアタッチされています。

2. ユーザーは、暗号化された EBS ボリュームを EC2 インスタンスにアタッチしようとします。このアクションは、関連するすべてのサービスを使用するためのアクセス権限がユーザーに付与されているにもかかわらず、承認エラーが発生して失敗します。

ステップ 2 が失敗するのは、AWS KMS に対する、ボリュームの暗号化されたデータキーの復号化リクエストは、Amazon EC2 インフラストラクチャに関連付けられた IP アドレスから送信されるためです。成功させるには、リクエストは、元のユーザーの IP アドレスからリクエストが送られてこなければなりませ

95

Page 104: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

ん。ステップ 1 のポリシーは、指定された IP アドレスからのものではないすべてのリクエストを明示的に拒否するため、Amazon EC2 は、EBS ボリュームの暗号化されたデータキーを復号化するアクセス許可を拒否されます。

また、リクエストが Amazon VPC エンドポイントから送信されている場合、aws:sourceIP 条件キーは無効です。リクエストを AWS KMS VPC エンドポイント (p. 223)などの VPC エンドポイントに制限するには、aws:sourceVpce または aws:sourceVpc 条件キーを使用します。詳細については、AmazonVPC ユーザーガイドの「VPC エンドポイント - エンドポイントの使用の管理」を参照してください。

AWS KMS アクセス許可を持つポリシーでの VPC エンドポイント条件の使用AWS KMS では、Amazon Virtual Private Cloud (Amazon VPC) エンドポイント (p. 223)がサポートされています。このエンドポイントは、AWS PrivateLink を使用します。特定の VPC または VPC エンドポイントへのアクセスを許可または拒否するには、IAM ポリシーで次のグローバル条件キーを使用します。また、こうしたグローバル条件キーを AWS KMS キーポリシー (p. 227)で使用して、AWS KMS CMK へのアクセスを、VPC または VPC エンドポイントからのリクエストに制限することもできます。

• aws:SourceVpc は、指定した VPC からのリクエストにアクセスを制限します。• aws:SourceVpce は、指定した VPC エンドポイントからのリクエストにアクセスを制限します。

これらの条件キーをキーポリシーステートメントで使用して、AWS KMS CMK へのアクセスを許可または拒否すると、ユーザーに代わって AWS KMS を使用するサービスへのアクセスを意図せず拒否してしまう可能性があります。

IP アドレス条件キー (p. 95)の例のような状況にならないように注意してください。CMK のリクエストを VPC または VPC エンドポイントに制限すると、AWS KMS、Amazon S3 などの統合サービスからのAmazon EBS 呼び出しが失敗する可能性があります。ソースリクエストの最初の送信元が VPC 内またはVPC エンドポイントであっても、これは発生することがあります。

AWS KMS 条件キーAWS KMS には、キーポリシーと IAM ポリシーで使用できる、事前に定義された追加の条件キーのセットが用意されています。これらの条件キーは AWS KMS に固有です。たとえば、kms:EncryptionContext 条件キーを使用して、AWS KMS 対称カスタマーマスターキー (CMK) へのアクセスを制御するときに特定の暗号化コンテキスト (p. 15)を要求できます。

API オペレーションリクエストの条件

AWS KMS 条件キーの多くは、API オペレーションのリクエスト内のパラメータの値に基づいて CMK へのアクセスを制御します。たとえば、IAM ポリシーで kms:CustomerMasterKeySpec (p. 99) 条件キーを使用すると、CreateKey リクエスト内の CustomerMasterKeySpec パラメータの値が RSA_4096 である場合にのみ CreateKey オペレーションの使用を許可できます。

このタイプの条件は、パラメータのデフォルト値を使用する場合など、リクエストにパラメータが表示されない場合でも機能します。たとえば、kms:CustomerMasterKeySpec (p. 99) 条件キーを使用すると、CustomerMasterKeySpec パラメータの値が SYMMETRIC_DEFAULT(デフォルト値)の場合にのみCreateKey オペレーションを使用できるようになります。この条件では、SYMMETRIC_DEFAULT 値を持つ CustomerMasterKeySpec パラメータを持つリクエストと、CustomerMasterKeySpec パラメータを持たないリクエストが許可されます。

API オペレーションで使用される CMK の条件

一部の AWS KMS 条件キーは、オペレーションで使用される CMK のプロパティに基づいてオペレーションへのアクセスを制御します。たとえば、kms:KeyOrigin (p. 114) 条件を使用すると、CMK の Originが AWS_KMS である場合にのみ、プリンシパルが CMK で GenerateDataKey を呼び出すことができます。この方法で条件キーを使用できるかどうかを確認するには、条件キーの説明を参照してください。

96

Page 105: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表 (p. 85)で、オペレーションの Resources 列で 値 CMK を探します。ListKeys などの特定の CMK リソースに対して許可されていないオペレーションでこのタイプの条件キーを使用すると、条件が満たされないため、アクセス許可は有効になりません。ListKeys オペレーションの承認に関与する CMK リソースはなく、CustomerMasterKeySpec プロパティもありません。

次のトピックでは、ポリシー構文を示すポリシーステートメントの例を含む各 AWS KMS の条件キーを説明します。

トピック• kms:BypassPolicyLockoutSafetyCheck (p. 97)• kms:CallerAccount (p. 98)• kms:CustomerMasterKeySpec (p. 99)• kms:CustomerMasterKeyUsage (p. 100)• kms:DataKeyPairSpec (p. 101)• kms:EncryptionAlgorithm (p. 102)• kms:EncryptionContext: (p. 104)• kms:EncryptionContextKeys (p. 108)• kms:ExpirationModel (p. 110)• kms:GrantConstraintType (p. 111)• kms:GrantIsForAWSResource (p. 112)• kms:GrantOperations (p. 113)• kms:GranteePrincipal (p. 113)• kms:KeyOrigin (p. 114)• kms:MessageType (p. 115)• kms:ReEncryptOnSameKey (p. 116)• kms:RetiringPrincipal (p. 116)• kms:SigningAlgorithm (p. 117)• kms:ValidTo (p. 118)• kms:ViaService (p. 119)• kms:WrappingAlgorithm (p. 121)• kms:WrappingKeySpec (p. 122)

kms:BypassPolicyLockoutSafetyCheck

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:BypassPolicyLockoutSafetyCheckBoolean CreateKey

PutKeyPolicy

IAM ポリシーのみ

キーポリシーと IAM ポリシー

kms:BypassPolicyLockoutSafetyCheck 条件キーは、リクエストのBypassPolicyLockoutSafetyCheck パラメータの値に基づき、CreateKey オペレーションおよびPutKeyPolicy オペレーションへのアクセスを制御します。

次の IAM ポリシーステートメントの例では、BypassPolicyLockoutSafetyCheck リクエストのCreateKey パラメータの値が true. の場合に CMK を作成するアクセス権限を拒否することで、ユーザーがポリシーのロックアウト安全チェックを回避できないようにします。

97

Page 106: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "Bool": { "kms:BypassPolicyLockoutSafetyCheck": true } } }}

kms:BypassPolicyLockoutSafetyCheck ポリシーまたはキーポリシーで IAM 条件キーを使用して、PutKeyPolicy オペレーションへのアクセスを制御することもできます。次のキーポリシーのポリシーステートメントの例では、CMK のポリシーを変更する際にユーザーがポリシーのロックアウト安全チェックを回避できないようにします。

このポリシーステートメントでは、明示的に Deny を使用せずに、Allow を指定した Null conditionoperator を使用し、リクエストに BypassPolicyLockoutSafetyCheck パラメータが含まれていない場合にのみアクセスを許可します。パラメータが使用されていない場合、デフォルト値は false です。バイパスが必要な限定された状況では、ポリシーステートメントの強度がわずかに弱くなると上書きされる場合があります。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "kms:PutKeyPolicy", "Resource": "*", "Condition": { "Null": { "kms:BypassPolicyLockoutSafetyCheck": true } } }}

以下の資料も参照してください。

• kms:CustomerMasterKeySpec (p. 99)• kms:KeyOrigin (p. 114)• kms:CustomerMasterKeyUsage (p. 100)

kms:CallerAccount

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:CallerAccount 文字列 CreateKey、GenerateRandom、ListAliases、ListKeys、ListRetirableGrants、および RetireGrantを除くすべての AWSKMS オペレーション。

キーポリシーのみ

この条件キーを使用して、IAM アカウントのすべての ID (AWS ユーザーおよびロール) へのアクセスを許可または拒否できます。キーポリシーでは、Principal 要素を使って、ポリシーステートメントが適用

98

Page 107: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

される ID を指定できます。Principal 要素の構文では、AWS アカウントのすべての ID を指定することはできません。しかし、この条件キーを、すべての Principal ID を指定する AWS 要素と組み合わせることによって、これを実現することができます。

たとえば、次のポリシーステートメントは、kms:CallerAccount 条件キーを使用する方法を示しています。このポリシーステートメントは、Amazon EBS 用に AWS によって管理される CMK のキーポリシー内にあります。すべての Principal ID を指定する AWS 要素を kms:CallerAccount 条件キーと組み合わせて、AWS アカウント 111122223333 のすべての ID へのアクセスが許可されます。これには、AWSKMS を通じたリクエストのみを許可して、さらにアクセス権限を制限する追加の kms:ViaService 条件キー (Amazon EBS) が含まれます。詳細については、「kms:ViaService (p. 119)」を参照してください。

{ "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": {"AWS": "*"}, "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "ec2.us-west-2.amazonaws.com" } }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*"}

kms:CustomerMasterKeySpec

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:CustomerMasterKeySpec文字列 CreateKey

CMK リソースオペレーション

IAM ポリシー

キーポリシーと IAM ポリシー

kms:CustomerMasterKeySpec 条件キーは、オペレーションによって作成される、またはオペレーションで使用される CMK CustomerMasterKeySpec のプロパティの値に基づいて、オペレーションへのアクセスを制御します。

この条件キーを IAM ポリシーで使用すると、CreateKey リクエストの CustomerMasterKeySpec パラメータの値に基づいて CreateKey オペレーションへのアクセスを制御できます。たとえば、この条件を使用すると、ユーザーが対称 CMK のみを作成、または RSA キーを持つ CMK のみを作成することを許可できます。

以下の IAM ポリシーステートメント例では、kms:CustomerMasterKeySpec 条件キーを使用して、リクエストの CustomerMasterKeySpec が RSA_4096 である場合にのみ、プリンシパルが CMK を作成できるようにします。

{ "Effect": "Allow", "Action": "kms:CreateKey",

99

Page 108: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

"Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "RSA_4096" } }}

kms:CustomerMasterKeySpec 条件キーを使用して、オペレーションに使用される CMK のCustomerMasterKeySpec プロパティに基づいて CMK を使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表 (p. 85)で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次の IAM ポリシーでは、プリンシパルが指定された CMK リソースオペレーションを実行することを許可しますが、アカウント内の対称 CMK でのみ許可します。

{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:DescribeKey" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringEquals": { "kms:CustomerMasterKeySpec": "SYMMETRIC_DEFAULT" } }}

以下の資料も参照してください。

• kms:BypassPolicyLockoutSafetyCheck (p. 97)• kms:CustomerMasterKeyUsage (p. 100)• kms:DataKeyPairSpec (p. 101)• kms:KeyOrigin (p. 114)

kms:CustomerMasterKeyUsage

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:CusomterMasterKeyUsage文字列 CreateKey

CMK リソースオペレーション

IAM ポリシー

キーポリシーと IAM ポリシー

kms:CustomerMasterKeyUsage 条件キーは、オペレーションによって作成される、またはオペレーションで使用される CMK KeyUsage のプロパティの値に基づいて、オペレーションへのアクセスを制御します。

この条件キーを使用して、リクエストの KeyUsage パラメータの値に基づき、CreateKey オペレーションへのアクセスを制御できます。KeyUsage の有効値は、ENCRYPT_DECRYPT と SIGN_VERIFY です。

100

Page 109: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

たとえば、KeyUsage が ENCRYPT_DECRYPT である場合のみユーザーに CMK の作成を許可し、KeyUsage が SIGN_VERIFY の場合に、ユーザーアクセス許可を拒否できます。

次の IAM ポリシーステートメントの例では、kms:CustomerMasterKeyUsage 条件キーを使用して、KeyUsage が ENCRYPT_DECRYPT の場合にのみユーザーが CMK を作成できるようにしています。

{ "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "ENCRYPT_DECRYPT" } }}

kms:CustomerMasterKeyUsage 条件キーを使用して、オペレーションに使用される CMK のKeyUsage プロパティに基づいて CMK を使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表 (p. 85)で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次の IAM ポリシーでは、プリンシパルが特定の CMK リソースオペレーションを実行することを許可しますが、署名と検証に使用されるアカウント内の CMK に対してのみ許可します。

{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:DescribeKey", "kms:GetPublicKey", "kms:ScheduleKeyDeletion" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringEquals": { "kms:CustomerMasterKeyUsage": "SIGN_VERIFY" } }}

以下の資料も参照してください。

• kms:BypassPolicyLockoutSafetyCheck (p. 97)• kms:CustomerMasterKeySpec (p. 99)• kms:KeyOrigin (p. 114)

kms:DataKeyPairSpec

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:DataKeySpec 文字列 GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

キーポリシーと IAM ポリシー

101

Page 110: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

この条件キーを使用して、リクエスト内の KeyPairSpec パラメータの値に基づいて、GenerateDataKeyPair および GenerateDataKeyPairWithoutPlaintext オペレーションへのアクセスを制御できます。たとえば、特定のタイプのデータキーペアのみを生成することをユーザーに許可できます。

次のキーポリシーステートメントの例では、kms:DataKeyPairSpec 条件キーを使用して、ユーザーがCMK を使用して RSA データキーペアのみを生成できるようにしています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext" ], "Resource": "*", "Condition": { "StringLike": { "kms:DataKeyPairSpec": "RSA*" } }}

以下の資料も参照してください。

• kms:CustomerMasterKeySpec (p. 99)• the section called “kms:EncryptionAlgorithm” (p. 102)• the section called “kms:EncryptionContext:” (p. 104)• the section called “kms:EncryptionContextKeys” (p. 108)

kms:EncryptionAlgorithm

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:EncryptionAlgorithm文字列 Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

キーポリシーと IAM ポリシー

kms:EncryptionAlgorithm 条件キーを使用して、オペレーションで使用される暗号化アルゴリズムに基づいて暗号化オペレーションへのアクセスを制御できます。Encrypt、Decrypt、および ReEncrypt オペレーションでは、リクエストの EncryptionAlgorithm パラメータの値に基づいてアクセスを制御します。データキーとデータキーペアを生成するオペレーションでは、データキーの暗号化に使用される暗号化アルゴリズムに基づいてアクセスを制御します。

この条件キーは、AWS KMS 外の非対称 CMK ペアでパブリックキーを使用した暗号化など、AWS KMSの外部で実行されるオペレーションには影響しません。

102

Page 111: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

リクエスト内の暗号化アルゴリズムパラメータ

ユーザーが CMK で特定の暗号化アルゴリズムのみを使用できるようにするには、Deny 効果とStringNotEquals 条件演算子を含むポリシーステートメントを使用します。たとえば、次のキーポリシーステートメントの例では、リクエストの暗号化アルゴリズムが RSAES_OAEP_SHA_256 でない限り、ExampleRole ロールを引き受けるプリンシパルが、指定された暗号化オペレーションでこの対称CMK を使用することを禁止しています。

ユーザーが特定の暗号化アルゴリズムを使用できるようにするポリシーステートメントとは異なり、このような二重否定を持つポリシーステートメントは、この CMK に対する他のポリシーおよび許可によって、このロールが他の暗号化アルゴリズムを使用することを防止します。このポリシーステートメントのDeny は、キーポリシーまたは Allow 効果のある IAM ポリシーよりも優先され、この CMK とそのプリンシパルに対するすべての許可よりも優先されます。

{ "Sid": "Allow only one encryption algorithm with this asymmetric CMK", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ExampleRole" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "*", "Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "RSAES_OAEP_SHA_256" } }}

オペレーションに使用される暗号化アルゴリズム

kms:EncryptionAlgorithm 条件キーを使用して、データキーとデータキーペアを生成するオペレーションへのアクセスを制御することもできます。これらのオペレーションでは、対称 CMK とSYMMETRIC_DEFAULT アルゴリズムのみが使用されます。

たとえば、この IAM ポリシーは、プリンシパルを対称暗号化に制限します。リクエストで指定された、またはオペレーションで使用されている暗号化アルゴリズムが SYMMETRIC_DEFAULTでない限り、暗号化オペレーションのサンプルアカウントにある CMK へのアクセスを拒否します。非対称のCMK または非対称暗号化アルゴリズムを使用して、データキーペアのデータキーを暗号化する、またはデータキーペアのプライベートキーを暗号化できないため、GenerateDataKey、GenerateDataKeyWithoutPlaintext、GenerateDataKeyPair、およびGenerateDataKeyPairWithoutPlaintext の追加による即時の実際的な影響はありません。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:GenerateDataKeyPair*" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" },

103

Page 112: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

"Condition": { "StringNotEquals": { "kms:EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } }}

以下の資料も参照してください。

• kms:SigningAlgorithm (p. 117)

kms:EncryptionContext:

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:EncryptionContext:文字列 CreateGrant

Encrypt

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

キーポリシーと IAM ポリシー

kms:EncryptionContext: 条件キープレフィックスを使用し、暗号化オペレーションのリクエストで暗号化コンテキストに基づいて対称 CMK (p. 139) へのアクセスを制御できます。暗号化コンテキストペアのキーと値の両方を評価するには、この条件キープレフィックスを使用します。暗号化コンテキストキーのみを評価するには、kms:EncryptionContextKeys (p. 108) 条件キーを使用します。

暗号化コンテキスト (p. 15)は、対称 CMK を使用する任意の AWS KMS 暗号化オペレーション(Encrypt、Decrypt、GenerateDataKey、GenerateDataKeyWithoutPlaintext、ReEncrypt) と、CreateGrantオペレーションのリクエストに含めることができる、シークレットでないキーと値の一連のペアです。暗号化オペレーションに暗号化コンテキストを指定するときに、復号オペレーションと同じ暗号化コンテキストを指定する必要があります。それ以外の場合、復号リクエストは失敗します。

非対称 CMK (p. 139) を使用して、暗号化オペレーションの暗号化コンテキストを指定することはできません。AWS KMS が使用する標準の非対称暗号化アルゴリズムは、暗号化コンテキストをサポートしていません。

kms:EncryptionContext: 条件キープレフィックスを使用するには、encryption_context_key プレースホルダーを暗号化コンテキストキーで置き換えます。encryption_context_value プレースホルダーを暗号化コンテキスト値で置き換えます。

"kms:EncryptionContext:encryption_context_key": "encryption_context_value"

たとえば、次の条件キーでは、キーが AppName、値が ExampleApp である暗号化コンテキストを指定します。

"kms:EncryptionContext:AppName": "ExampleApp"

104

Page 113: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

次の例のキーポリシーステートメントでは、この条件キーが使用されます。リクエストでは複数の暗号化コンテキストペアを使用できるため、条件演算子には ForAnyValue または ForAllValues が含まれている必要があります。

このポリシーでは、リクエストの暗号化コンテキストペアの少なくとも 1 つが "AppName":"ExampleApp" である場合のみ、GenerateDataKey リクエストで CMK の使用がプリンシパルに許可されます。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp" } }}

複数の暗号化コンテキストペアの要求

複数の暗号化コンテキストペアを要求するには、kms:EncryptionContext: 条件の複数のインスタンスを含めることができます。たとえば、次のポリシーステートメントの例では、ForAllValues 演算子を使用して、次の両方の暗号化コンテキストペアを要求しています (それ以外は要求していません)。ペアが指定される順序は重要ではありません。

• "AppName": "ExampleApp"

• "FilePath": "/var/opt/secrets/"

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp", "kms:EncryptionContext:FilePath": "/var/opt/secrets/" } }}

暗号化コンテキスト条件での大文字と小文字の区別

復号オペレーションで指定される暗号化コンテキストは、暗号化オペレーションで指定される暗号化コンテキストに大文字と小文字を区別して完全に一致する必要があります。複数のペアの暗号化コンテキストのペアの順序のみを変更できます。

ただし、ポリシー条件では、条件キーの大文字と小文字は区別されません。条件値の大文字と小文字の区別は、ポリシー条件演算子 (StringEquals、StringEqualsIgnoreCase など) によって決まります。

したがって、kms:EncryptionContext: プレフィックスと encryption_context_key の置換で構成される条件キーでは、大文字と小文字は区別されません。この条件を使用するポリシーでは、条件キーの

105

Page 114: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

いずれの要素もチェックされません。値の大文字と小文字の区別 (encryption_context_value の置換)は、ポリシー条件演算子によって決まります。

たとえば、次のポリシーステートメントでは、大文字と小文字に関係なく暗号化コンテキストに Appnameキーが含まれている場合にオペレーションが許可されます。この StringEquals 条件では、指定時にExampleApp を大文字にする必要があります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:Appname": "ExampleApp" } }}

大文字と小文字を区別する暗号化コンテキストキーを要求するには、kms:EncryptionContextKeys (p. 108) ポリシー条件と、大文字と小文字が区別される条件演算子(StringEquals など) を使用します。このポリシー条件では、暗号化コンテキストキーがポリシー条件値であるため、大文字と小文字の区別は条件演算子によって決まります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKey": "AppName" } }}

暗号化コンテキストのキーと値の両方について大文字と小文字を区別する評価を要求するには、同じポリシーステートメントで kms:EncryptionContextKeys と kms:EncryptionContext: のポリシー条件を一緒に使用します。たとえば、次のポリシーステートメントの例では、StringEquals 演算子で大文字と小文字が区別されるため、暗号化コンテキストキーと暗号化コンテキスト値の両方で大文字と小文字が区別されます。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName", "kms:EncryptionContext:AppName": "ExampleApp" } }}

106

Page 115: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

暗号化コンテキスト条件での変数の使用

暗号化コンテキストペアのキーと値はシンプルなリテラル文字列であることが必要です。整数やオブジェクトなど完全に解決されない型のキーと値は使用できません。整数や浮動小数点数など別の型を使用する場合、AWS KMS ではリテラル文字列として解釈されます。

"encryptionContext": { "department": "10103.0"}

ただし、kms:EncryptionContext: 条件キーペアの値は IAM ポリシー変数にすることができます。これらのポリシー変数はリクエストの値に基づいて実行時に解決されます。たとえば、aws:CurrentTime はリクエストの時間に解決され、aws:username は呼び出し元のフレンドリ名に解決されます。

これらのポリシー変数を使用し、ポリシーステートメントを作成して、暗号化コンテキストに限定的な情報 (呼び出し元のユーザー名など) を必要とする条件を指定できます。ポリシーステートメントに変数を含めるため、ロールを引き受けることができるすべてのユーザーに同じポリシーステートメントを使用できます。ユーザー別にポリシーステートメントを記述する必要はありません。

ロールを引き受けることができるすべてのユーザーが同じ CMK を使用してデータを暗号化および復号する状況を考えます。ただし、それらのユーザーに自分が暗号化したデータのみの復号を許可するとします。まず、AWS KMS へのすべてのリクエストに、キーが user であり、値が呼び出し元の AWS ユーザー名である暗号化コンテキストを含めることを要件とします。

"encryptionContext": { "user": "bob"}

次に、この要件を定義するために、以下の例のようなポリシーステートメントを使用できます。このポリシーステートメントは、TestTeam ロールに、CMK を使用してデータを暗号化および復号するためのアクセス許可を付与します。ただし、そのアクセス許可は、"user": "<username>" ペアがリクエストの暗号化コンテキストに含まれる場合にのみ有効です。ユーザー名を表すために、条件で aws:username ポリシー変数を使用します。

リクエストが評価されるとき、条件の変数が呼び出し元のユーザー名に置き換えられます。そのため条件では、「bob」には "user": "bob"、「alice」には "user": "alice" の暗号化コンテキストを必須とします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ] "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:user": "${aws:username}" } }}

IAM ポリシー変数は、kms:EncryptionContext: 条件のキーペアの値でのみ使用できます。キーで変数を使用することはできません。

107

Page 116: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

変数でプロバイダー固有のコンテキストキーを使用することもできます。これらのコンテキストキーにより、Web ID フェデレーションを使用して AWS にログインしたユーザーが一意に識別されます。

すべての変数と同様に、これらの変数は、実際の暗号化コンテキストではなくkms:EncryptionContext: ポリシー条件でのみ使用できます。また、条件のキーではなく値でのみ使用できます。

たとえば、以下のキーポリシーステートメントは前のものと似ています。ただし、この条件では、暗号化コンテキストのキーが sub であり、値が、Amazon Cognito ユーザープールにログインしたユーザーを一意に識別する必要があります。Amazon Cognito でのユーザーおよびロールの識別の詳細については、Amazon Cognito 開発者ガイド の「IAM ロール」を参照してください。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/TestTeam" }, "Action": [ "kms:Decrypt", "kms:Encrypt" ] "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContext:sub": "${cognito-identity.amazonaws.com:sub}" } }}

以下の資料も参照してください。

• the section called “kms:EncryptionContextKeys” (p. 108)• the section called “kms:GrantConstraintType” (p. 111)

kms:EncryptionContextKeys

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:EncryptionContextKeys文字列 (リスト) CreateGrant

Decrypt

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

ReEncrypt

キーポリシーと IAM ポリシー

kms:EncryptionContextKeys 条件キーを使用し、暗号化オペレーションのリクエストで暗号化コンテキストに基づいて対称 CMK (p. 139) へのアクセスを制御できます。各暗号化コンテキストペアのキーのみを評価するには、この条件キープレフィックスを使用します。キーと値の両方を評価するには、kms:EncryptionContext: (p. 104) 条件キープレフィックスを使用します。

108

Page 117: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

非対称 CMK (p. 139) を使用して、暗号化オペレーションの暗号化コンテキストを指定することはできません。AWS KMS が使用する標準の非対称暗号化アルゴリズムは、暗号化コンテキストをサポートしていません。

この条件キーを使用して、AWS KMS API リクエストで暗号化コンテキスト (p. 15)に基づいてアクセスを制御できます。暗号化コンテキストは、対称 CMK を使用する AWS KMS 暗号化オペレーション (Encrypt、Decrypt、GenerateDataKey、GenerateDataKeyWithoutPlaintext、ReEncrypt)、およびCreateGrant オペレーションに含めることができる一連のキーと値のペアです。リクエストでは複数の暗号化コンテキストペアを使用できるため、条件演算子には ForAnyValue または ForAllValues が含まれている必要があります。

次のポリシーステートメントの例では、kms:EncryptionContextKeys 条件キーを使用して、値にかかわらず、リクエストの暗号化コンテキストペアの少なくとも 1 つに AppName キーが含まれる場合にのみ、指定されたオペレーションでの CMK の使用を許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "kms:EncryptionContextKeys": "AppName" } }}

StringEquals 条件演算子では大文字と小文字が区別されるため、前のポリシーステートメントでは、暗号化コンテキストキーのスペルおよび大文字と小文字の区別が必要になります。ただし、キーの大文字と小文字の区別を無視する条件演算子 (StringEqualsIgnoreCase など) を使用できます。

各条件では、複数の暗号化コンテキストキーを指定できます。たとえば、次のポリシーステートメントでは、ForAllValues および StringEquals 条件演算子を使用して、値にかかわらず、リクエストの暗号化テキストに AppName および FilePath キーの両方が含まれる場合にのみ (それ以外は含まれません)、指定されたオペレーションが許可されます。暗号化コンテキストのキーの順序は重要ではありません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:EncryptionContextKeys": [ "AppName", "FilePath" ] } }}

109

Page 118: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

kms:EncryptionContextKeys 条件キーを使用して、CMK を使用する暗号化オペレーションで暗号化テキストを要求することもできます。

以下のキーポリシーステートメントの例では、kms:EncryptionContextKeys を指定した Null conditionoperator 条件キーを使用して、kms:EncryptionContextKeys 条件キーが API リクエストに含まれている (null でない) 場合にのみ CMK へのアクセスを許可します。暗号化コンテキストのキーまたは値はチェックされず、暗号化コンテキストが存在することだけが確認されます。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContextKeys": false } }}

以下の資料も参照してください。

• kms:EncryptionContext: (p. 104)• kms:GrantConstraintType (p. 111)

kms:ExpirationModel

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:ExpirationModel 文字列 ImportKeyMaterial キーポリシーと IAM ポリシー

kms:ExpirationModel 条件キーは、リクエストの ExpirationModel パラメータの値に基づき、ImportKeyMaterial オペレーションへのアクセスを制御します。

ExpirationModel は、インポートされたキーマテリアルの有効期限が切れているかどうかを判断するオプションのパラメータです。有効な値は、KEY_MATERIAL_EXPIRES およびKEY_MATERIAL_DOES_NOT_EXPIRE です。KEY_MATERIAL_EXPIRES はデフォルト値です。

有効期限の日時は、ValidTo パラメータの値で決まります。ValidTo パラメータの値がExpirationModel である場合を除き、KEY_MATERIAL_DOES_NOT_EXPIRE パラメータが必要です。また、kms:ValidTo (p. 118) 条件キーを使用して、アクセス条件として特定の有効期限を設定することもできます。

次のポリシーステートメントの例では、kms:ExpirationModel 条件キーを使用して、リクエストにExpirationModel パラメータが含まれており、その値が KEY_MATERIAL_DOES_NOT_EXPIRE の場合にのみ、ユーザーによる CMK へのキーマテリアルのインポートを許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser"

110

Page 119: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

}, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "StringEquals": { "kms:ExpirationModel": "KEY_MATERIAL_DOES_NOT_EXPIRE" } }}

また、kms:ExpirationModel 条件キーを使用して、キーマテリアルの有効期限が切れている場合にのみ、ユーザーによるキーマテリアルのインポートを許可できます。条件に有効期限 (p. 118)を指定する必要はありません。次のポリシーステートメントの例では、kms:ExpirationModel を指定した Nullcondition operator 条件キーを使用して、リクエストに ExpirationModel パラメータが含まれていない場合にのみ、ユーザーによるキーマテリアルのインポートを許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "Null": { "kms:ExpirationModel": true } }}

以下の資料も参照してください。

• kms:ValidTo (p. 118)• kms:WrappingAlgorithm (p. 121)• kms:WrappingKeySpec (p. 122)

kms:GrantConstraintType

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:GrantConstraintType文字列 CreateGrant キーポリシーと IAM ポリシー

この条件キーを使用して、リクエストの許可制約のタイプに基づいて、CreateGrant オペレーションへのアクセスを制御できます。

許可の作成では、オプションで許可の制約を指定して、特定の暗号化コンテキスト (p. 15)が存在する場合のみ、許可によってオペレーションを実行できます。許可の制約には、EncryptionContextEquals またはEncryptionContextSubset の 2 つのタイプがあります。この条件キーを使用して、リクエストにどちらのタイプが含まれているか確認できます。

次のポリシーステートメントの例では、kms:GrantConstraintType 条件キーを使用して、リクエストに EncryptionContextEquals 許可の制約が含まれている場合のみ、ユーザーによる許可の作成を可能にします。この例は、キーポリシーのポリシーステートメントを示しています。

{

111

Page 120: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

"Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GrantConstraintType": "EncryptionContextEquals" } }}

以下の資料も参照してください。

• kms:EncryptionContext: (p. 104)• kms:EncryptionContextKeys (p. 108)• kms:GrantIsForAWSResource (p. 112)• kms:GrantOperations (p. 113)• kms:GranteePrincipal (p. 113)• kms:RetiringPrincipal (p. 116)

kms:GrantIsForAWSResource

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:GrantIsForAWSResourceBoolean CreateGrant

ListGrants

RevokeGrant

キーポリシーと IAM ポリシー

AWS KMS と統合されている AWS サービスがユーザーに代わって許可オペレーションを実行している場合に、CreateGrant、ListGrants、または RevokeGrant オペレーションへのアクセスを許可または拒否します。この条件キーは、ユーザーが持つ、許可オペレーションを直接実行するためのアクセス権限には影響しません。

たとえば、次のキーポリシーステートメントは、kms:GrantIsForAWSResource 条件キーを使用しています。これにより、ユーザーは、統合されているいずれかのサービスがユーザーに代わって許可を作成した場合のみ、この CMK で許可を作成することを許可されます。ユーザーが許可を直接作成することはできません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } }}

112

Page 121: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

以下の資料も参照してください。

• kms:GrantConstraintType (p. 111)• kms:GrantOperations (p. 113)• kms:GranteePrincipal (p. 113)• kms:RetiringPrincipal (p. 116)

kms:GrantOperations

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:GrantOperations 文字列 CreateGrant キーポリシーと IAM ポリシー

この条件キーを使用して、リクエストの許可オペレーションに基づいて CreateGrant オペレーションへのアクセスを制御できます。たとえば、暗号化へのアクセス権限は委任するが、復号化へのアクセス権限は委任しない許可をユーザーが作成するようにできます。

次のポリシーステートメント例では、kms:GrantOperations 条件キーを使用して、この CMK が対象のCMK である場合に、暗号化および再暗号化のアクセス権限を委任する許可をユーザーが作成できるようにします。この例は、キーポリシーのポリシーステートメントを示しています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Encrypt", "ReEncryptTo" ] } }}

以下の資料も参照してください。

• kms:GrantConstraintType (p. 111)• kms:GrantIsForAWSResource (p. 112)• kms:GranteePrincipal (p. 113)• kms:RetiringPrincipal (p. 116)

kms:GranteePrincipal

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:GranteePrincipal文字列 CreateGrant IAM およびキーポリシー

113

Page 122: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

この条件キーを使用して、リクエストの CreateGrant パラメータの値に基づき、GranteePrincipal オペレーションへのアクセスを制御できます。たとえば、CreateGrant リクエストの被付与者プリンシパルが、条件ステートメントで指定されているプリンシパルと一致した場合にのみ、ユーザーによる CMK を使用する許可の作成を許可します。

次のポリシーステートメントの例では、kms:GranteePrincipal 条件キーを使用して、許可の被付与者プリンシパルが LimitedAdminRole の場合にのみ、ユーザーによる CMK の許可の作成を許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:GranteePrincipal": "arn:aws:iam::111122223333:role/LimitedAdminRole" } }}

以下の資料も参照してください。

• kms:GrantConstraintType (p. 111)• kms:GrantIsForAWSResource (p. 112)• kms:GrantOperations (p. 113)• kms:RetiringPrincipal (p. 116)

kms:KeyOrigin

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:KeyOrigin 文字列 CreateKey

CMK リソースオペレーション

IAM ポリシー

キーポリシーと IAM ポリシー

kms:KeyOrigin 条件キーは、オペレーションによって作成される、またはオペレーションで使用されるCMK Origin のプロパティの値に基づいて、オペレーションへのアクセスを制御します。

この条件キーを使用して、リクエストの Origin パラメータの値に基づき、CreateKey オペレーションへのアクセスを制御できます。Origin の有効値は、AWS_KMS、AWS_CLOUDHSM、および EXTERNAL です。

たとえば、キーマテリアルが KMS で生成される場合のみ (AWS_KMS)、キーマテリアルがカスタムキーストア (p. 182) に関連付けられている AWS CloudHSM クラスターで生成される場合のみ(AWS_CLOUDHSM)、または外部ソースからキーマテリアルがインポートされる (p. 156)場合のみ(EXTERNAL)、ユーザーによる CMK の作成を許可できます。

以下のポリシーステートメント例では、kms:KeyOrigin 条件キーを使用して、AWS KMS がキーマテリアルを作成したときにのみ CMK を作成することをユーザーに許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser"

114

Page 123: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

}, "Action": "kms:CreateKey", "Resource": "*", "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_KMS" } }}

kms:KeyOrigin 条件キーを使用して、オペレーションに使用される CMK の Origin プロパティに基づいて CMK を使用または管理するオペレーションへのアクセスを制御することもできます。このオペレーションは CMK リソースオペレーションである必要があります。つまり、特定の CMK に許可されるオペレーションです。CMK リソースオペレーションを識別するには、アクションとリソースの表 (p. 85)で、オペレーションの Resources 列で 値 CMK を探します。

たとえば、次の IAM ポリシーでは、プリンシパルが指定された CMK リソースオペレーションの実行を許可しますが、カスタムキーストアで作成されたアカウントの CMK に対してのみ許可します。

{ "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:GenerateDataKeyPair", "kms:GenerateDataKeyPairWithoutPlaintext", "kms:ReEncrypt*" ], "Resource": { "arn:aws:kms:us-west-2:111122223333:key/*" }, "Condition": { "StringEquals": { "kms:KeyOrigin": "AWS_CLOUDHSM" } }}

以下の資料も参照してください。

• kms:BypassPolicyLockoutSafetyCheck (p. 97)• kms:CustomerMasterKeySpec (p. 99)• kms:CustomerMasterKeyUsage (p. 100)

kms:MessageType

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:MessageType 文字列 Sign

Verify

キーポリシーと IAM ポリシー

kms:MessageType 条件キーは、リクエストの MessageType パラメータの値に基づき、Sign オペレーションおよび Verify オペレーションへのアクセスを制御します。MessageType の有効値は、RAW とDIGEST です。

115

Page 124: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

たとえば、次のキーポリシーステートメントでは、kms:MessageType 条件キーを使用して、ユーザーが非対称 CMK を使用してメッセージに署名できますが、メッセージダイジェストは許可しません。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringEquals": { "kms:MessageType": "RAW" } }}

以下の資料も参照してください。

• the section called “kms:SigningAlgorithm” (p. 117)

kms:ReEncryptOnSameKey

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:ReEncryptOnSameKeyBoolean ReEncrypt キーポリシーと IAM ポリシー

この条件キーを使用して、リクエストで指定される対象の CMK が、元の暗号化で使用されたものと同じであるかどうかに基づいて、ReEncrypt オペレーションへのアクセスを制御します。たとえば、次のポリシーステートメントでは、kms:ReEncryptOnSameKey 条件キーを使用して、対象の CMK が元の暗号化に使用されたものと同じである場合にのみ、ユーザーによる再暗号化を許可します。この例は、キーポリシーのポリシーステートメントを示しています。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ReEncrypt*", "Resource": "*", "Condition": { "Bool": { "kms:ReEncryptOnSameKey": true } }}

kms:RetiringPrincipal

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:RetiringPrincipal文字列 (リスト) CreateGrant キーポリシーと IAM ポリシー

116

Page 125: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

この条件キーを使用して、リクエストの RetiringPrincipal パラメータの値に基づき、CreateGrant オペレーションへのアクセスを制御できます。たとえば、CreateGrant リクエストの RetiringPrincipal が、条件ステートメントの RetiringPrincipal と一致した場合にのみ、ユーザーによる CMK の使用許可の作成を許可します。

次のポリシーステートメントの例では、CMK の許可の作成をユーザーに許可します。kms:RetiringPrincipal 条件キーでは、CreateGrant リクエストへのアクセス権限が制限されます。許可の削除プリンシパルは LimitedAdminRole または OpsAdmin ユーザーのどちらかとなります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:RetiringPrincipal": [ "arn:aws:iam::111122223333:role/LimitedAdminRole", "arn:aws:iam::111122223333:user/OpsAdmin" ] } }}

以下の資料も参照してください。

• kms:GrantConstraintType (p. 111)• kms:GrantIsForAWSResource (p. 112)• kms:GrantOperations (p. 113)• kms:GranteePrincipal (p. 113)

kms:SigningAlgorithm

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:SigningAlgorithm文字列 Sign

Verify

キーポリシーと IAM ポリシー

kms:SigningAlgorithm 条件キーを使用して、リクエストの SigningAlgorithm パラメータの値に基づいて、Sign オペレーションおよび Verify オペレーションへのアクセスを制御できます。この条件キーは、AWS KMS 以外の非対称 CMK ペアでパブリックキーを使用して署名を検証するなど、AWS KMS 外部で実行されるオペレーションには影響しません 。

次のキーポリシーの例では、リクエストに使用される署名アルゴリズムが RSASSA_PSS アルゴリズム(RSASSA_PSS_SHA512 など)である場合にのみ、testers ロールを引き受けることができるユーザーが CMK を使用してメッセージに署名できるようにします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/testers"

117

Page 126: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

}, "Action": "kms:Sign", "Resource": "*", "Condition": { "StringLike": { "kms:SigningAlgorithm": "RSASSA_PSS*" } }}

以下の資料も参照してください。

• kms:EncryptionAlgorithm (p. 102)• the section called “kms:MessageType” (p. 115)

kms:ValidTo

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:ValidTo タイムスタンプ ImportKeyMaterial キーポリシーと IAM ポリシー

kms:ValidTo 条件キーは、リクエストの ValidTo パラメータの値に基づき、ImportKeyMaterial オペレーションへのアクセスを制御します。これにより、インポートされたキーマテリアルが失効するタイミングが決まります。この値は、Unix 時間で表現されます。

デフォルトでは、ValidTo パラメータは ImportKeyMaterial リクエストで必要です。ただし、ExpirationModel パラメータの値が KEY_MATERIAL_DOES_NOT_EXPIRE の場合、ValidTo パラメータは無効です。また、kms:ExpirationModel (p. 110) 条件キーを使用して、ExpirationModel パラメータまたは特定のパラメータの値を要求することもできます。

次のポリシーステートメントの例では、キーマテリアルの CMK へのインポートをユーザーに許可します。kms:ValidTo 条件キーは、ImportKeyMaterial リクエストへのアクセス権限を制限します。ここで、ValidTo の値は 1546257599.0 (2018 年 12 月 31 日 午後 11:59:59) 以下となります。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:ImportKeyMaterial", "Resource": "*", "Condition": { "NumericLessThanEquals": { "kms:ValidTo": "1546257599.0" } }}

以下の資料も参照してください。

• kms:ExpirationModel (p. 110)• kms:WrappingAlgorithm (p. 121)• kms:WrappingKeySpec (p. 122)

118

Page 127: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

kms:ViaService

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:ViaService 文字列 kms:ViaService条件キーは、すべての AWS KMS オペレーション (except:CreateKey、GenerateRandom、ListAliases、ListKeys、ListRetirableGrants、RetireGrant)、およびカスタムキーストア (p. 182)を作成および管理する API オペレーションで有効です。

キーポリシーと IAM ポリシー

kms:ViaService 条件キーは、AWS KMS カスタマーマスターキー (p. 3) (CMK) の使用を、指定の AWSサービスからのリクエストだけに制限します。各 kms:ViaService 条件キーに 1 つ以上のサービスを指定できます。

たとえば、キーポリシーの以下のステートメントは、kms:ViaService 条件キーを使って、米国西部 (オレゴン) リージョンの Amazon EC2 または Amazon RDS から ExampleUser に代わってリクエストされた場合のみ、カスタマー管理の CMK (p. 4) を指定のアクションに使用することを許可します。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:ListGrants", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "ec2.us-west-2.amazonaws.com", "rds.us-west-2.amazonaws.com" ] } }}

kms:ViaService 条件キーを使用して、特定のサービスからリクエストされた場合の CMK の使用を拒否することもできます。たとえば、キーポリシーの以下のステートメントは、kms:ViaService 条件キーを使って、AWS Lambda から ExampleUser に代わってリクエストされた場合にカスタマー管理 CMK がEncrypt オペレーションに使用させるのを防ぎます。

{ "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" },

119

Page 128: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

"Action": [ "kms:Encrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": [ "lambda.us-west-2.amazonaws.com" ] } }}

Important

kms:ViaService 条件キーを使用する場合は、サービスが、AWS アカウントのプリンシパルに代わってリクエストを行います。これらのプリンシパルは、次のアクセス許可が必要です。

• CMK を使用するアクセス権限。プリンシパルの代わりにサービスがカスタマー管理の CMK を使用できるようにするため、プリンシパルは統合されたサービスに権限を付与する必要があります。詳細については、「AWS のサービスで AWS KMS を使用する方法 (p. 241)」を参照してください。

• 統合されたサービスを使用するアクセス権限。AWS KMS と統合される AWS サービスへのアクセスをユーザーに許可する方法の詳細については、統合されるサービスのドキュメントを参照してください。

AWS 管理の CMK (p. 4) は、すべてそのキーポリシードキュメントにある kms:ViaService 条件キーを使用します。この条件は、その CMK を作成したサービスからリクエストされた場合のみ、CMK の使用を許可します。AWS 管理の CMK のキーポリシーを表示するには、GetKeyPolicy オペレーションを使用します。

kms:ViaService 条件キーは IAM とキーポリシーのステートメントで有効です。指定するサービスは、AWS KMS と統合されていて、kms:ViaService 条件キーをサポートしている必要があります。

次の表は、AWS KMS と統合されていて、カスタマー管理 CMK をサポートし、カスタマー管理 CMK でのkms:ViaService 条件キーの使用をサポートしている AWS サービスの一覧です。この表にあるサービスの中には、一部のリージョンで使用できないものもあります。

カスタマー管理 CMK で kms:ViaService 条件キーをサポートするサービス

サービス名 KMS ViaService 名

AWS Backup backup.AWS_region.amazonaws.com

Amazon Connect connect.AWS_region.amazonaws.com

AWS Database Migration Service (AWS DMS) dms.AWS_region.amazonaws.com

AWS Directory Service directoryservice.AWS_region.amazonaws.com

Amazon EC2 Systems Manager ssm.AWS_region.amazonaws.com

Amazon Elastic Block Store (Amazon EBS) ec2.AWS_region.amazonaws.com (EBS のみ)

Amazon Elastic File System elasticfilesystem.AWS_region.amazonaws.com

Amazon Elasticsearch Service es.AWS_region.amazonaws.com

Amazon FSx fsx.AWS_region.amazonaws.com

120

Page 129: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

サービス名 KMS ViaService 名

AWS Glue glue.AWS_region.amazonaws.com

Amazon Kinesis kinesis.AWS_region.amazonaws.com

Amazon Kinesis ビデオストリーム kinesisvideo.AWS_region.amazonaws.com

AWS Lambda lambda.AWS_region.amazonaws.com

Amazon Lex lex.AWS_region.amazonaws.com

Amazon Managed Streaming for Apache Kafka kafka.AWS_region.amazonaws.com

Amazon Neptune rds.AWS_region.amazonaws.com

Amazon Redshift redshift.AWS_region.amazonaws.com

Amazon Relational Database Service (AmazonRDS)

rds.AWS_region.amazonaws.com

Amazon RDS パフォーマンスインサイト rds.AWS_region.amazonaws.com

AWS Secrets Manager (Secrets Manager) secretsmanager.AWS_region.amazonaws.com

Amazon Simple Email Service (Amazon SES) ses.AWS_region.amazonaws.com

Amazon Simple Notification Service (Amazon SNS) sns.AWS_region.amazonaws.com

Amazon Simple Storage Service (Amazon S3) s3.AWS_region.amazonaws.com

AWS Snowball importexport.AWS_region.amazonaws.com

Amazon SQS sqs.AWS_region.amazonaws.com

Amazon WorkMail workmail.AWS_region.amazonaws.com

Amazon WorkSpaces workspaces.AWS_region.amazonaws.com

AWS X-Ray xray.AWS_region.amazonaws.com

kms:WrappingAlgorithm

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:WrappingAlgorithm文字列 GetParametersForImportキーポリシーと IAM ポリシー

この条件キーは、リクエストの WrappingAlgorithm パラメータの値に基づき、GetParametersForImport オペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のアルゴリズムを使用してキーマテリアルを暗号化するよう要求できます。異なるラップアルゴリズムを指定すると必要なパブリックキーとインポートトークンのリクエストが失敗します。

次のポリシーステートメント例では、GetParametersForImport 条件キーを使用して、RSAES_OAEP_SHA_1 オペレーションを呼び出すアクセス許可をユーザーに与えていますが、kms:WrappingAlgorithm ラップアルゴリズムを使用することはできません。GetParametersForImport リクエストの WrappingAlgorithm が RSAES_OAEP_SHA_1 の場合、オペレーションは失敗します。

121

Page 130: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS 条件キー

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringNotEquals": { "kms:WrappingAlgorithm": "RSAES_OAEP_SHA_1" } }}

以下の資料も参照してください。

• kms:ExpirationModel (p. 110)• kms:ValidTo (p. 118)• kms:WrappingKeySpec (p. 122)

kms:WrappingKeySpec

AWS KMS 条件キー 条件の種類 API オペレーション ポリシータイプ

kms:WrappingKeySpec 文字列 GetParametersForImportキーポリシーと IAM ポリシー

この条件キーは、リクエストの WrappingKeySpec パラメータの値に基づき、GetParametersForImport オペレーションへのアクセスを制御します。この条件を使用して、インポートプロセス時にプリンシパルが特定のタイプのパブリックキーを使用するよう要求できます。リクエストで別のキータイプを指定すると、エラーになります。

WrappingKeySpec パラメータ値の有効な値は RSA_2048 のみであるため、ユーザーによるこの値の使用を無効にすることで、GetParametersForImport オペレーションを効率的に無効にすることができます。

次のポリシーステートメントの例では、kms:WrappingAlgorithm 条件キーを使用してリクエストのWrappingKeySpec が RSA_2048 になるようにします。

{ "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": "kms:GetParametersForImport", "Resource": "*", "Condition": { "StringEquals": { "kms:WrappingKeySpec": "RSA_2048" } }}

以下の資料も参照してください。

• kms:ExpirationModel (p. 110)

122

Page 131: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の使用

• kms:ValidTo (p. 118)• kms:WrappingAlgorithm (p. 121)

許可の使用AWS KMS では、キーポリシー (p. 55)および許可という 2 つのアクセスコントロールメカニズムをサポートしています。許可を利用すると、KMS カスタマーマスターキー (CMK) の使用を他の AWS プリンシパルにプログラムにより委任できます。これらを使用してアクセスを許可できますが、拒否することはできません。許可は限定的であり、作成と取り消しが容易であるため、一時的なアクセス許可やより詳細なアクセス許可を付与するためによく使用されます。

また、キーポリシーを使用して他の AWS プリンシパルに CMK へのアクセスを許可することもできます。ただし、キーポリシーが最適に機能するのは、比較的に静的なアクセス許可を割り当てる場合です。また、キーポリシーでは、AWS ポリシーに標準のアクセス許可モデルを使用します。この場合、ユーザーはリソースを使用してアクションを実行する権限を持つ場合と、持たない場合があります。たとえば、CMKの kms:PutKeyPolicy アクセス権限を持っているユーザーは、CMK のキーポリシーを別の任意のキーポリシーと完全に置き換えることができます。より詳細なアクセス権限の管理を利用するには、許可を使用します。

許可を操作する方法を示すコード例については、「許可の使用 (p. 358)」を参照してください。

許可を作成する許可を作成するには、CreateGrant オペレーションを呼び出します。CMK、CMK の使用を許可する被付与者プリンシパル、および許可されるオペレーションのリストを指定します。CreateGrant オペレーションは、後で実行するオペレーションで許可を識別する際に使用できる許可 ID を返します。許可をカスタマイズするには、オプションの Constraints パラメータを使用して許可の制約を定義します。

たとえば、次の CreateGrant コマンドは、指定された対称 CMK (p. 139) で Decrypt オペレーションを exampleUser が呼び出せる許可を作成します。許可では、RetiringPrincipal パラメータを使用して、許可を無効にできるプリンシパルを指定します。また、リクエスト内の 暗号化コンテキスト (p. 15)に"Department": "IT" が含まれている場合にのみアクセス許可を許可する許可制約も含まれます。

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:user/exampleUser \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextSubset={Department=IT}

許可を表示するには、ListGrants オペレーションを使用します。

Note

通常、ListGrants レスポンスの GranteePrincipal フィールドには、許可の被付与者プリンシパルが含まれます。ただし、許可の被付与者プリンシパルが AWS サービスの場合、GranteePrincipal フィールドにはサービスプリンシパルが含まれます。サービスプリンシパルは、複数の異なる被付与者プリンシパルを表す場合があります。

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab{ "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572216195.0,

123

Page 132: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK および非対称 CMK の許可

"GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Operations": [ "Decrypt" ] } ]}

許可は、CMK で kms:RevokeGrant アクセス許可を持っているすべてのユーザーが取り消す(削除する)ことができます。

許可は以下のプリンシパルによって削除することができます。

• 許可が作成された AWS アカウント (ルートユーザー)• 許可の削除プリンシパル (存在する場合)• 被付与者プリンシパル (RetireGrant オペレーションが許可される場合)。

対称 CMK および非対称 CMK の許可対称 CMK または非対称 CMK へのアクセスを制御する許可を作成できます。ただし、プリンシパルがCMK でサポートされていないオペレーションを実行できるようにする許可を作成することはできません。試した場合、AWS KMS は ValidationError 例外を返します。

対称 CMK

対称 CMK の許可では、Sign、Verify、または GetPublicKey の各オペレーションを許可できません(レガシーオペレーションの場合、この規則には限定的な例外がありますが、AWS KMS がサポートしないオペレーションには許可を作成しないでください)。

非対称 CMK

非対称 CMK の許可では、データキーまたはデータキーペアを生成するオペレーションは許可されません。また、自動キーローテーション (p. 151)、インポートされたキーマテリアル (p. 156)、またはカスタムキーストア (p. 182)内の CMK に関連するオペレーションも許可できません。

キーの使用方法が SIGN_VERIFY である CMK の許可では、暗号化オペレーションを許可できません。キーの使用方法が ENCRYPT_DECRYPT である CMK の許可では、Sign または Verify オペレーションを許可できません。

制約の付与制約の付与は、被付与者プリンシパルが実行できる権限の条件を設定します。AWS KMS は、2 つのサポートされている制約をサポートしています。どちらの制約も、暗号化オペレーションのリクエストにも暗号化コンテキスト (p. 15)が関係しています。

Note

非対称 CMK の許可では、暗号化コンテキスト許可制約を使用できません。AWS KMS が使用する非対称暗号化アルゴリズムは、暗号化コンテキストをサポートしていません。

124

Page 133: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーでの CreateGrant の許可

• EncryptionContextEquals は、リクエストの暗号化コンテキストペアが、許可の制約の暗号化コンテキストペアに大文字と小文字を区別して完全に一致する場合にのみ、許可が適用されることを指定します。このペアは任意の順序で表示できますが、各ペアのキーと値を変更することはできません。

• EncryptionContextSubset は、リクエストの暗号化コンテキストが、許可の制約に指定された暗号化コンテキストを含む場合にのみ、許可が適用されることを指定します。リクエストの暗号化コンテキストは、制約の暗号化コンテキストに大文字と小文字を区別して完全に一致する必要がありますが、追加の暗号化コンテキストペアを含むこともできます。このペアは任意の順序で表示できますが、含まれている各ペアのキーと値を変更することはできません。

たとえば、GenerateDataKey および Decrypt オペレーションを使用する許可について考えてみます。これには、次の値を持つ EncryptionContextSubset 制約が含まれています。

{"Department":"Finance","Classification":"Public"}

この例では、次のいずれかの暗号化コンテキスト値は、EncryptionContextSubset 制約を満たします。

• {"Department":"Finance","Classification":"Public"}

• {"Classification":"Public","Department":"Finance"}

• {"Customer":"12345","Department":"Finance","Classification":"Public","Purpose":"Test"}

ただし、次の暗号化コンテキスト値は制約を満たしません。これは、値が不完全であるか、指定されたペアの大文字と小文字を区別する完全一致を含まないためです。

• {"Department":"Finance"}

• {"department":"finance","classification":"public"}

• {"Classification":"Public","Customer":"12345"}

キーポリシーでの CreateGrant の許可CreateGrant オペレーションへのアクセスを制御するキーポリシーを作成するときは、1 つ以上のポリシー条件を使用してアクセス許可を制限できます。AWS KMS は、許可に関連する次のすべての条件キーをサポートしています。これらの条件キーの詳細については、「AWS KMS 条件キー (p. 96)」を参照してください。

• kms:GrantConstraintType (p. 111)• kms:GrantIsForAWSResource (p. 112)• kms:GrantOperations (p. 113)• kms:GranteePrincipal (p. 113)• kms:RetiringPrincipal (p. 116)

CreateGrant アクセス許可の付与CreateGrant オペレーションを呼び出すアクセス権限が許可に含まれている場合、その許可では、同様の制限またはさらに制限の高い許可を作成する被付与者プリンシパルのみが許可されます。

たとえば、被付与者プリンシパルが GenerateDataKey、Decrypt、および CreateGrant オペレーションを呼び出せるようにする許可について考えてみます。被付与者プリンシパルは、このアクセス許可を使用して、GenerateDataKey や Decrypt などの親許可で指定されたオペレーションのサブセットを含む

125

Page 134: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドサービスにリンクされたロールの使用

許可を作成できます。ただし、ScheduleKeyDeletion や ReEncrypt など、他のオペレーションを含めることはできません。

また、子許可の許可の制約は、親許可と同様であるか、それよりも制限が高い必要があります。たとえば、子許可は親許可の EncryptionContextSubset 制約にペアを追加できますが、削除することはできません。子許可は EncryptionContextSubset 制約を EncryptionContextEquals 制約に変更することはできますが、その逆はできません。

AWS KMS のサービスにリンクされたロールの使用AWS Key Management Service は、AWS Identity and Access Management (IAM)サービスにリンクされたロールを使用します。サービスにリンクされたロールは、AWS KMS に直接リンクされた一意のタイプのIAM ロールです。サービスにリンクされたロールは、AWS KMS によって定義されたロールであり、ユーザーに代わってサービスから AWS の他のサービスを呼び出すために必要なすべてのアクセス許可を備えています。

サービスにリンクされたロールを使用すると、必要なアクセス許可を手動で追加する必要がなくなるため、AWS KMS の設定が簡単になります。AWS KMS はこのサービスにリンクされたロールのアクセス許可を定義し、特に定義されている場合を除き、AWS KMS のみがそのロールを引き受けます。定義されるアクセス権限には、信頼ポリシーやアクセス権限ポリシーなどがあり、そのアクセス権限ポリシーをその他の IAM エンティティにアタッチすることはできません。

サービスにリンクされたロールを削除するには、まずその関連リソースを削除します。これにより、リソースへの意図しないアクセスによるアクセス許可の削除が防止され、AWS KMS リソースは保護されます。

サービスにリンクされたロールをサポートする他のサービスについては、「IAM と連携する AWS サービス」を参照の上、「サービスにリンクされたロール」列が「はい」になっているサービスを検索してください。サービスにリンクされたロールに関するドキュメントをサービスで表示するには、[はい] リンクを選択します。

AWS KMS カスタムキーストア用のサービスにリンクされたロールのアクセス許可AWS KMS はサービスにリンクされたロールAWSServiceRoleForKeyManagementServiceCustomKeyStores を使用してカスタムキーストア (p. 182)をサポートします。このサービスにリンクされたロールにより AWS CloudHSM クラスターを表示し、カスタムキーストアとその AWS CloudHSM クラスターとの間の接続をサポートするネットワークインフラストラクチャを作成する AWS KMS アクセス許可が付与されます。このロールは、カスタムキーストア (p. 182)を作成した場合にのみ、AWS KMS によって作成されます。このサービスにリンクされたロールを直接作成することはできません。

サービスにリンクされたロール AWSServiceRoleForKeyManagementServiceCustomKeyStores は、このロールを引き受けるために cks.kms.amazonaws.com を信頼します。その結果、AWS KMS だけがこのサービスにリンクされたロールを引き受けることができます。

ロールのアクセス許可は、カスタムキーストアを AWS CloudHSM クラスターに接続するために AWSKMS が実行するアクションに限定されます。AWS KMS に対して追加のアクセス許可は付与されません。たとえば、AWS KMS に、AWS CloudHSM クラスター、HSM、またはバックアップを作成、管理、または削除するためのアクセス許可はありません。

AWSServiceRoleForKeyManagementServiceCustomKeyStores ロールの詳細とアクセス許可のリスト、およびロールの表示、ロールの説明の編集、ロールの削除、AWS KMS によるロールの再作成の手順については、「AWS CloudHSM リソースおよび Amazon EC2 リソースを管理することを AWS KMS に許可する (p. 187)」を参照してください。

126

Page 135: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドアクセスの確認

AWS KMS カスタマーマスターキーへのアクセスの確認

AWS KMS でカスタマーマスターキー (CMK) に現在アクセスできるユーザーやアプリケーションを明らかにするには、CMK のキーポリシーと CMK に適用されるすべての許可 (p. 123)を確認する必要があります。また、すべての AWS Identity and Access Management (IAM) ポリシーを確認することが必要な場合もあります。これらを確認することで、潜在的な CMK の使用範囲を明らかにしたり、コンプライアンスや監査の要件を満たしたりできます。次のトピックは、現在 CMK にアクセスできる AWS プリンシパル (ID)の完全なリストを作成するのに役立ちます。

トピック• キーポリシーを確認する (p. 127)• IAM ポリシーの確認 (p. 129)• 許可の確認 (p. 130)• キーアクセスのトラブルシューティング (p. 131)

キーポリシーを確認するキーポリシー (p. 55)は、AWS KMS カスタマーマスターキー (CMK) へのアクセスを制御するための主要な方法です。

キーポリシーがデフォルトキーポリシー (p. 57)で構成されている場合、またはデフォルトキーポリシーを含む場合、キーポリシーにより、アカウントの IAM 管理者は IAM ポリシーを使用して CMK へのアクセスを制御できます。また、キーポリシーによって 別の AWS アカウント (p. 79)に CMK を使用するためのアクセス許可が与えられている場合、外部アカウントの IAM 管理者は IAM ポリシーを使用してそれらのアクセス許可を委任できます。CMK にアクセスできるプリンシパルの完全なリストを確認するには、IAM ポリシーを調べます (p. 129)。

アカウント内の AWS KMS カスタマー管理の CMK (p. 4) または AWS 管理の CMK (p. 4) のキーポリシーを表示するには、AWS KMS API で AWS マネジメントコンソール または GetKeyPolicy オペレーションを使用します。キーポリシーを表示するには、CMK の kms:GetKeyPolicy アクセス許可が必要です。CMK のキーポリシーを表示する手順については、「the section called “キーポリシーの表示” (p. 67)」を参照してください。

キーポリシードキュメントを確認し、各ポリシーステートメントの Principal 要素で指定されているすべてのプリンシパルを書き留めます。Principal 要素の IAM ユーザー、IAM ロール、AWS アカウントは、この CMK にアクセスできます。

Note

アクセス権限を許可するキーポリシーステートメントで、プリンシパルをアスタリスク (*) に設定しないでください。アスタリスクに設定すると、別のポリシーステートメントで明示的に拒否しない限り、すべての AWS アカウントの各 ID に、CMK を使用するアクセス権限が付与されます。他の AWS アカウントのユーザーは、各自のアカウントで CMK を使用する、該当の IAM アクセス権限を必要としているのみです。

次の例では、デフォルトのキーポリシー (p. 56)で見つかったポリシーステートメントを使用してこれを行う方法を示します。

Example ポリシーステートメント 1

{ "Sid": "Enable IAM User Permissions", "Effect": "Allow",

127

Page 136: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーを確認する

"Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*"}

前述のポリシーのステートメントでは、arn:aws:iam::111122223333:root は、AWS アカウント111122223333 を表します。デフォルトでは、このようなポリシーステートメントは、コンソールで新しい CMK を作成するときにキーポリシードキュメントに存在します。これは、新しい CMK をプログラムで作成するがキーポリシーは提供しないときにも存在します。

AWS アカウント (ルートユーザー) へのアクセスを許可するステートメントを持つキーポリシードキュメントでは、アカウントの IAM ポリシーで CMK へのアクセスが許可 (p. 57)されます。つまり、アカウントの IAM ユーザーとロールは、キーポリシードキュメントでプリンシパルとして明示的にリストされていない場合でも、CMK にアクセスできる可能性があります。プリンシパルとしてリストされたすべてのAWS アカウントのすべての IAMのポリシーを確認 (p. 129)して、これらのアカウントが CMK にアクセスできるかどうか注意深く調べてください。

Example ポリシーステートメント 2

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSKeyAdmin"}, "Action": [ "kms:Describe*", "kms:Put*", "kms:Create*", "kms:Update*", "kms:Enable*", "kms:Revoke*", "kms:List*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*"}

前述のポリシーのステートメントでは、arn:aws:iam::111122223333:user/KMSKeyAdmin は、AWSアカウント 111122223333 の KMSKeyAdmin という名前の IAM ユーザーを表します。このユーザーは、CMK を管理するための管理アクションである、ポリシーステートメントにリストされたアクションを実行できます。

Example ポリシーステートメント 3

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"}, "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": "*"}

128

Page 137: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドIAM ポリシーの確認

前述のポリシーステートメントでは、arn:aws:iam::111122223333:role/EncryptionAppは、AWS アカウント 111122223333 の EncryptionApp という名前の IAM ロールを表します。このロールを引き受けることができるポリシーは、CMK によるデータの暗号化および復号のための暗号化アクションである、ポリシーステートメントにリストされたアクションを実行できます。

Example ポリシーステートメント 4

{ "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:role/EncryptionApp"}, "Action": [ "kms:ListGrants", "kms:CreateGrant", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}}

前述のポリシーステートメントでは、arn:aws:iam::111122223333:role/EncryptionAppは、AWS アカウント 111122223333 の EncryptionApp という名前の IAM ロールを表します。このロールを引き受けることができるプリンシパルは、ポリシーステートメントにリストされたアクションを実行できます。これらのアクションは、ポリシーステートメント 3 の例で許可されたアクションと連動することで、CMK の使用を、AWS KMS と統合されたほとんどの (p. 241)AWS サービス (特に、許可 (p. 123)を使用するサービス) に移譲するために必要なアクションになります。Condition 要素により、AWS KMS と統合され、かつ認証に許可を使用する AWS サービスが移譲対象である場合にのみ移譲が許可されるようになります。

『IAM ユーザーガイド』の「プリンシパルの指定」で、キーポリシードキュメントでプリンシパルを指定する方法をすべて確認できます。

AWS KMS キーポリシーの詳細については、「AWS KMS でのキーポリシーの使用 (p. 55)」を参照してください。

IAM ポリシーの確認キーポリシーと許可に加え、CMK のキーポリシーと組み合わせて IAM ポリシーを使用して、CMK へのアクセスを許可することもできます。IAM ポリシーとキーポリシーの動作の詳細については、「キーアクセスのトラブルシューティング (p. 131)」を参照してください。

ブラウザーベースの IAM Policy Simulator を使用する、または IAM API へのリクエストを実行することで、IAM のポリシーから CMK に現在アクセスできるプリンシパルを明らかにできます。

IAM ポリシーを確認する方法• IAM Policy Simulator による IAM ポリシーの確認 (p. 129)• IAM API による IAM ポリシーの確認 (p. 130)

IAM Policy Simulator による IAM ポリシーの確認IAM Policy Simulator により、IAM のポリシーから KMS CMK にアクセスできるプリンシパルを容易に確認できます。

IAM Policy Simulator を使用して KMS CMK へのアクセスを確認するには

1. AWS マネジメントコンソール にサインインした後、https://policysim.aws.amazon.com/ で IAM PolicySimulator を開きます。

129

Page 138: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の確認

2. [Users, Groups, and Roles] ペインで、ポリシーをシミュレートするユーザー、グループ、またはロールを選択します。

3. (オプション) シミュレーションから除外するポリシーの横のチェックボックスをオフにします。すべてのポリシーをシミュレートする場合は、すべてのポリシーが選択された状態にします。

4. [Policy Simulator] ペインで、以下の操作を行います。

a. [Select service] で、[Key Management Service] を選択します。b. 特定の AWS KMS アクションをシミュレートするには、[Select actions] でシミュレートするアク

ションを選択します。すべての AWS KMS アクションをシミュレートする場合は、[Select All] を選択します。

5. オプション) Policy Simulator は、デフォルトですべての KMS CMK にアクセスします。特定の KMSCMK へのアクセスをシミュレートするには、[Simulation Settings (シミュレーション設定)] を選択した後、シミュレートする KMS CMK の Amazon リソースネーム (ARN) を入力します。

6. [Run Simulation (シミュレーションの実行)] を選択します。

シミュレーションの結果は、[Results] セクションに表示されます。AWS アカウントのすべての IAM ユーザー、グループ、ロールについて、ステップ 2 ~ 6 を繰り返します。

IAM API による IAM ポリシーの確認IAM API を使用すると、IAM のポリシーをプログラムで確認できます。次のステップは、API でユーザーベースのポリシーを確認する方法の概要を示します。

1. CMK のキーポリシーにプリンシパルとしてリストされた AWS アカウント("Principal": {"AWS":"arn:aws:iam::111122223333:root"} の形式でリストされている各ルートアカウント)について、IAM API で ListUsers および ListRoles オペレーションを使用して、アカウントの各 IAM ユーザーおよびロールのリストを取得します。

2. リスト内の各 IAM ユーザーとロールについて、IAM API の SimulatePrincipalPolicy オペレーションを使用して以下のパラメータを渡します。• PolicySourceArn について、リストのユーザーやロールから Amazon リソースネーム (ARN) を指

定します。各 SimulatePrincipalPolicy リクエストで指定できる PolicySourceArn は 1 つだけです。そのため、オペレーションを複数回呼び出す必要があります(リストの 各 IAM ユーザーとロールで 1 回ずつ)。

• ActionNames のリストについて、シミュレートするすべての AWS KMS API アクションを指定します。すべての AWS KMS API アクションをシミュレートするには、kms:* を使用します。AWS KMS API アクションを個別にテストするには、各 API アクションを「kms:", for example"kms:ListKeys」で実行します。すべての AWS KMS の API アクションの詳細なリストについては、『AWS Key Management Service API Reference』の「アクション」を参照してください。

• (オプション) IAM ユーザーやロールが特定の KMS CMK にアクセスできるかどうかを判断するため、ResourceArns パラメータを使用して CMK の Amazon リソースネーム (ARN) のリストを指定します。IAM ユーザーやロールが CMK にアクセスできるかどうかを判断するために ResourceArnsパラメータを使用しないでください。

IAM は、各 SimulatePrincipalPolicy リクエストに評価決定として allowed、explicitDeny、または implicitDeny を返します。allowed の評価決定を含む各応答には、許可された特定の AWS KMSAPI オペレーションの名前が含まれます。評価に使用された CMK の ARN がある場合にはこれも含まれます。

許可の確認許可は、CMK をいつどのように使用できるかを指定するアクセス権限をユーザーや、AWS KMS と統合されている AWS サービスに与えるための高度なメカニズムです。許可は CMK にアタッチされ、各許可には

130

Page 139: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーアクセスのトラブルシューティング

CMK を使用するための権限を受け取るプリンシパルと許可されるオペレーションのリストが含まれます。許可は、キーポリシーに代わる手段であり、特定のユースケースで役立ちます。詳細については、「許可の使用 (p. 123)」を参照してください。

CMK の許可のリストを取得するには、AWS KMS ListGrants オペレーションを使用します。CMK の許可を確認することで、これらの許可によって CMK を使用するためのアクセス権限を現在持っているユーザーやアプリケーションを明らかにできます。たとえば、AWS CLI の list-grants コマンドで取得された許可の JSON 形式を次に示します。

{"Grants": [{ "Operations": ["Decrypt"], "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Name": "0d8aa621-43ef-4657-b29c-3752c41dc132", "RetiringPrincipal": "arn:aws:iam::123456789012:root", "GranteePrincipal": "arn:aws:sts::111122223333:assumed-role/aws:ec2-infrastructure/i-5d476fab", "GrantId": "dc716f53c93acacf291b1540de3e5a232b76256c83b2ecb22cdefa26576a2d3e", "IssuingAccount": "arn:aws:iam::111122223333:root", "CreationDate": 1.444151834E9, "Constraints": {"EncryptionContextSubset": {"aws:ebs:id": "vol-5cccfb4e"}}}]}

CMK にアクセスできるユーザーやアプリケーションを見つけるには、"GranteePrincipal" 要素を確認します。前述の例では、被付与者のプリンシパルは、EC2 インスタンス i-5d476fab に関連して割り当てられたロールユーザーです。EC2 インフラストラクチャはこのロールを使用して、暗号化された EBSボリューム vol-5cccfb4e をインスタンスにアタッチします。この場合、EC2 インフラストラクチャロールは、CMK を使用する権限を持ちます。これは以前に、この CMK で保護された、暗号化された EBS ボリュームを作成したためです。その後、ボリュームを EC2 インスタンスにアタッチしました。

AWS CLI の list-grants コマンドで取得された許可の JSON 形式の別の例を次に示します。次の例では、被付与者のプリンシパルは別の AWS アカウントです。

{"Grants": [{ "Operations": ["Encrypt"], "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Name": "", "GranteePrincipal": "arn:aws:iam::444455556666:root", "GrantId": "f271e8328717f8bde5d03f4981f06a6b3fc18bcae2da12ac38bd9186e7925d11", "IssuingAccount": "arn:aws:iam::111122223333:root", "CreationDate": 1.444151269E9}]}

キーアクセスのトラブルシューティングカスタマーマスターキー (CMK) へのアクセスを許可するとき、AWS KMS は以下を評価します。

• CMK にアタッチされているキーポリシーキーポリシーは、常に、CMK を所有する AWS アカウントで定義されます。

• そのリクエストを行っている IAM ユーザーまたはロールにアタッチされているすべての IAM ポリシー。プリンシパルの CMK の使用を規定する IAM ポリシーは常にプリンシパルの AWS アカウントで定義されています。

• CMK に適用されるすべての許可。

AWS KMS は CMK の キーポリシー (p. 127)、IAM ポリシー (p. 129)、許可 (p. 130)を一緒に評価して、CMK へのアクセスを許可するか拒否するかを決定します。そのために、AWS KMS は以下のフローチャートに示されているようなプロセスを使用します。以下のフローチャートは、ポリシーの評価プロセスを視覚的に表したものです。

131

Page 140: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーアクセスのトラブルシューティング

このフローチャートは 2 つの部分に分かれています。これらの部分には順序があるように見えますが、一般的に同時に評価されます。

• 承認の使用により、そのキーポリシー、IAM ポリシー、許可に基づいて、CMK の使用が許可されるかどうかが決まります。

• キーの信頼により、使用が許可されている CMK を信頼すべきかどうかが決まります。通常、お客様はAWS アカウントのリソースを信頼します。ただし、お客様のアカウントの許可または IAM ポリシーでCMK の使用が許可される場合は、別の AWS アカウントでその CMK を信頼して使用できます。

このフローチャートを使用すると、呼び出し元がなぜ CMK の使用を許可または拒否されたかがわかります。また、ポリシーと許可を評価することもできます。たとえば、フローチャートでは、キーポリシー、IAM ポリシー、または許可で、明示的な DENY ステートメントがあることより、または明示的なALLOW ステートメントがないことにより、呼び出し元がアクセスを拒否される可能性があることを示しています。

フローチャートでは、いくつかの一般的なアクセス許可のシナリオについて説明しています。

アクセス許可の例• 例 1: ユーザーが自分の AWS アカウントで CMK へのアクセスが拒否された (p. 133)• 例 2: ユーザーが別の AWS アカウントの CMK を使用するためのアクセス許可を持つロールを引き受

ける (p. 134)

132

Page 141: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーアクセスのトラブルシューティング

例 1: ユーザーが自分の AWS アカウントで CMK へのアクセスが拒否されたAlice は 111122223333 AWS アカウントの IAM ユーザーです。同じ AWS アカウントの CMK へのアクセスが拒否されました。Alice が CMK を使用できないのはなぜでしょうか。

この場合、Alice が CMK へのアクセスを拒否されたのは、必要なアクセス許可を付与するキーポリシー、IAM ポリシー、または許可がないためです。CMK のキーポリシーでは、AWS アカウントに CMKへのアクセスをコントロールする IAM ポリシーの使用を許可していますが、Alice に CMK を使用するためのアクセス許可を付与する IAM ポリシーはありません。

この例に関連するポリシーを考えてみます。

• Alice が使用する CMK には、デフォルトキーポリシー (p. 56)があります。このポリシーでは、IAMポリシーを使用して CMK へのアクセスをコントロールすることを、その CMK を所有する AWS アカウントに許可 (p. 57)しています。フローチャートでは、このキーポリシーによってキーポリシーが呼び出し元のアカウントに IAM ポリシーを使用してキーへのアクセスをコントロールすることを許可しているか? という条件が満たされます。

133

Page 142: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーアクセスのトラブルシューティング

{ "Version" : "2012-10-17", "Id" : "key-test-1", "Statement" : [ { "Sid" : "Delegate to IAM policies", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ]}

• ただし、Alice に CMK を使用するためのアクセス許可を付与するキーポリシー、IAM ポリシー、または許可がありません。したがって、Alice は CMK の使用を拒否されます。

例 2: ユーザーが別の AWS アカウントの CMK を使用するためのアクセス許可を持つロールを引き受けるBob はアカウント 1 (111122223333) のユーザーです。彼は、アカウント 2 (444455556666) の CMK を暗号化オペレーション (p. 10)で使用することを許可されています。これはどのようにすれば可能になるのでしょうか。

Tip

クロスアカウントのアクセス許可を評価するときは、キーポリシーが CMK のアカウントで指定されていることを忘れないでください。呼び出し元が別のアカウントを使用していても、IAM ポリシーは呼び出し元のアカウントで指定されています。

• アカウント 2 の CMK のキーポリシーは、アカウント 2 が IAM ポリシーを使用して CMK へのアクセスをコントロールすることを許可します。

• アカウント 2 の CMK のキーポリシーは、アカウント 1 が暗号化オペレーションで CMK を使用することを許可します。ただし、アカウント 1 は IAM ポリシーを使用してそのプリンシパルに CMK へのアクセス権限を付与する必要があります。

• アカウント 1 の IAM ポリシーは、ExampleRole ロールに、アカウント 2 の CMK を暗号化オペレーションで使用することを許可します。

• アカウント 1 のユーザーである Bob には、ExampleRole ロールを引き受けるアクセス権限があります。

• Bob はこの CMK を信頼できます。この CMK は Bob のアカウントにはありませんが、アカウントのIAM ポリシーにより、この CMK を使用する明示的なアクセス許可が Bob に付与されるためです。

134

Page 143: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーアクセスのトラブルシューティング

アカウント 1 のユーザーである Bob がアカウント 2 の CMK を使用することを許可するポリシーを考えてみます。

• CMK のキーポリシーは、アカウント 2 (CMK を所有するアカウント、444455556666) に、IAM ポリシーを使用して CMK へのアクセスをコントロールすることを許可します。このキーポリシーはまた、アカウント 1 (111122223333) に暗号化オペレーションで CMK を使用することを許可します (ポリシーステートメントの Action 要素で指定)。ただし、アカウント 1 でプリンシパルに CMK へのアクセスを許可する IAM ポリシーが定義されるまでは、アカウント 1 のだれもアカウント 2 の CMK を使用できません。

フローチャートでは、このアカウント 2 のキーポリシーによってキーポリシーが呼び出し元のアカウントに IAM ポリシーを使用してキーへのアクセスをコントロールすることを許可しているか? という条件が満たされます。

{ "Id": "key-policy-acct-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Permission to use IAM policies",

135

Page 144: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーアクセスのトラブルシューティング

"Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow account 1 to use this CMK", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": "*" } ]}

• 呼び出し元の AWS アカウント (アカウント 1、111122223333) の IAM ポリシーは、アカウント 1 のExampleRole ロールに、アカウント 2 (444455556666) の CMK を使用して暗号化オペレーションを実行するためのアクセス許可を付与します。Action 要素は、アカウント 2 のキーポリシーがアカウント1 に付与したのと同じアクセス権限をロールに付与します。

このようなクロスアカウント IAM ポリシーは、アカウント 2 の CMK のキーポリシーがアカウント 1に、CMK を使用するアクセス権限を付与している場合にのみ有効です。また、アカウント 1 がプリンシパルに付与できるのは、キーポリシーがそのアカウントに付与しているアクションの実行アクセス許可のみです。

フローチャートでは、これによって IAM ポリシーが呼び出し元にこのアクションの実行を許可しているか? という条件が満たされます。

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "arn:aws:iam::111122223333:role/ExampleRole" } "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncryptFrom", "kms:ReEncryptTo", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab" ] } ]}

136

Page 145: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーアクセスのトラブルシューティング

• 最後に必要な要素は、アカウント 1 での ExampleRole ロールの定義です。ロールのAssumeRolePolicyDocument により、Bob は ExampleRole ロールを引き受けることができます。

{ "Role": { "Arn": "arn:aws:iam::111122223333:role/ExampleRole", "CreateDate": "2019-05-16T00:09:25Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": { "Principal": { "AWS": "arn:aws:iam::111122223333:user/bob" }, "Effect": "Allow", "Action": "sts:AssumeRole" } }, "Path": "/", "RoleName": "ExampleRole", "RoleId": "AROA4KJY2TU23Y7NK62MV" }}

137

Page 146: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

対称キーと非対称キーの使用AWS KMS は、データとデータキーの保護に使用する カスタマーマスターキー (p. 3) (CMK) を保護します。シークレットキーは、AWS 従業員を含め、誰もプレーンテキストのキーマテリアルにアクセスできないように設計されたハードウェアセキュリティモジュールでのみ生成され、使用されます。

CMK へのアクセスを制御する キーポリシー (p. 55)、IAM ポリシー (p. 74)、および 許可 (p. 123)の設定、CMK の有効化および無効化、タグとエイリアスの作成、CMK の削除を含め、AWS アカウントでCMK を作成および管理できます。CMK を使用して、AWS KMS に統合された AWS サービス (p. 241)でリソースを保護できます。また、AWS CloudTrail ログ (p. 309)で CMK を使用または管理するすべてのオペレーションを監査できます。

AWS KMS は、対称 CMK と非対称 CMK をサポートします。

• 対称 CMK (p. 139): AWS KMS が暗号化されないままにすることがない 1 つの 256 ビットのシークレット暗号化キーを表します。対称 CMK を使用するには、AWS KMS を呼び出す必要があります。

• 非対称 CMK (p. 139): 暗号化か復号、または署名か検証には使用できますが、両方は使用できない、数学的に関連するパブリックキーとプライベートキーのペアを表します。プライベートキーが暗号化されないまま AWS KMS から出ていくことはありません。AWS KMS API オペレーションを呼び出すことによって、AWS KMS 内でパブリックキーを使用することも、パブリックキーをダウンロードして AWSKMS の外部で使用することもできます。

Note

非対称 CMK と非対称データキーペアは、中国 (北京) および 中国 (寧夏) を除く、AWS KMS がサポートされるすべての AWS リージョンでサポートされます。

AWS KMS では、AWS KMS 外部のクライアント側の暗号化に使用するように設計されている、対称データキー (p. 5)と非対称データキーペア (p. 7) も提供します。非対称データキーペアの対称データキーとプライベートキーは、AWS KMS の対称 CMK によって保護されます。

• 対称データキー — AWS KMS 外部でのデータの暗号化に使用できる対称暗号化キー。このキーは、AWS KMS の対称 CMK によって保護されます。

• 非対称データキーペア — パブリックキーとプライベートキーで構成される RSA キーまたは楕円曲線(ECC) キーペア。AWS KMS 以外のデータキーペアを使用して、データの暗号化と復号を行う、またはメッセージに署名して署名を検証することができます。プライベートキーは、AWS KMS の対称 CMKによって保護されます。

データキーとデータキーペアを作成および使用する方法については、「データキー (p. 5)」および「データキーペア (p. 7)」を参照してください。アカウントのプリンシパルが生成できるデータキーペアの種類を制限する方法については、km:DataKeyPairSpec (p. 101) 条件キーを使用します。

このトピックでは、対称 CMK と非対称 CMK が動作する仕組み、それらの違い、およびデータを保護するために必要な CMK のタイプを決定する方法について説明します。また、対称データキーと非対称データキーのペアがどのように機能するか、および AWS KMS の外部でそれらを使用する方法についても説明します。

詳細はこちら

• 各タイプの CMK に適用される AWS KMS API オペレーションを比較する表については、「the sectioncalled “対称 CMK と非対称 CMK の比較” (p. 148)」を参照してください。

138

Page 147: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK と非対称 CMK について

• CMK が対称か非対称かを調べるには、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

• AWS KMS コンソールが対称 CMK と非対称 CMK に対して設定するデフォルトのキーポリシーの違いを調べるには、「the section called “AWS サービスで CMK を使用することをキーユーザーに許可する” (p. 63)」を参照してください。

• アカウントのプリンシパルが CMK に使用できるキー仕様、キーの使用方法、暗号化アルゴリズム、および署名アルゴリズムを指定するには、「the section called “AWS KMS 条件キー” (p. 96)」を参照してください。

• さまざまなタイプの CMK に適用される クォータのリクエスト については、「the section called“クォータのリクエスト” (p. 380)」を参照してください。

• 非対称 CMK を使用してメッセージに署名する方法については、AWS セキュリティブログの「AWSKMS の新しい非対称キー機能を使用したデジタル署名」を参照してください。

トピック• 対称 CMK と非対称 CMK について (p. 139)• CMK 設定の選択方法 (p. 140)• CMK の暗号化設定の表示 (p. 147)• 対称 CMK と非対称 CMK の比較 (p. 148)

対称 CMK と非対称 CMK についてAWS KMS では、対称および非対称 CMK を作成できます。

対称カスタマーマスターキーKMS でカスタマーマスターキー (CMK) を作成すると、デフォルトでは、対称 CMK が得られます。

AWS KMS では、対称 CMK は、AWS KMS を暗号化されないままにすることのない 256 ビットの暗号化キーを表します。対称 CMK を使用するには、AWS KMS を呼び出す必要があります。対称キーは対称暗号化で使用され、同じキーが暗号化と復号に使用されます。

タスクで非対称暗号化が明示的に必要でない限り、AWS KMS を暗号化されないままにしておくことが決してない対称型 CMK は優れた選択です。対称 CMK の暗号化設定またはキー仕様については、「SYMMETRIC_DEFAULT キー仕様 (p. 143)」を参照してください。対称 CMK の作成については、「対称 CMK の作成 (p. 20)」を参照してください。

AWS KMS と統合された AWS のサービスは、対称 CMK を使用してデータを暗号化します。これらのサービスは、非対称 CMK を使用した暗号化をサポートしていません。 CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。 CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

AWS KMS で対称 CMK を使用して、データの暗号化、復号化、再暗号化、データキーとデータキーペアの生成、およびランダムバイト文字列の生成を行うことができます。対称 CMK に独自のキーマテリアルをインポート (p. 156)し、カスタムキーストア (p. 182)で対称 CMK を作成できます。対称 CMKと非対称 CMK で実行できるオペレーションを比較した表は、「Comparing Symmetric and AsymmetricCMKs (p. 148)」を参照してください。

非対称カスタマーマスターキーNote

非対称 CMK と非対称データキーペアは、中国 (北京) および 中国 (寧夏) を除く、AWS KMS がサポートされるすべての AWS リージョンでサポートされます。

139

Page 148: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK 設定の選択方法

AWS KMS で非対称 CMK を作成できます。非対称 CMK は、数学的に関連するパブリックキーとプライベートキーのペアを表します。パブリックキーは、たとえ信頼されていなくても、誰にでも渡すことができますが、シークレットキーは秘密にしておく必要があります。

非対称 CMK では、プライベートキーが AWS KMS で作成され、AWS KMS が暗号化されないままになることはありません。プライベートキーを使用するには、AWS KMS を呼び出す必要があります。AWSKMS API オペレーションを呼び出すことによって、AWS KMS 内でパブリックキーを使用できます。または、パブリックキーをダウンロード (p. 48)し、AWS KMS の外部で使用することもできます。

AWS KMS を呼び出しできないユーザーによって AWS 外部で暗号化が必要なユースケースの場合は、非対称 CMK が適しています。ただし、AWS のサービスで保存または管理するデータを暗号化するためのCMK を作成する場合は、対称 CMK を使用します。AWS KMS と統合された AWS のサービスは、対称CMK を使用してデータを暗号化します。これらのサービスは、非対称 CMK を使用した暗号化をサポートしていません。

AWS KMS では、2 種類の非対称 CMK がサポートされます。

• RSA CMK: 暗号化と復号、または署名と検証用(両方ではない)の RSA キーペアを持つ CMK。KMSでは、さまざまなセキュリティ要件に対応して、複数のキーの長さがサポートされています。

• 楕円曲線 (ECC) CMK: 署名と検証のための楕円曲線キーペアを持つ CMK。KMS では、一般的に使用される複数の曲線がサポートされています。

RSA CMK に AWS KMS でサポートされる暗号化および署名アルゴリズムの技術的な詳細については、「RSA キー仕様 (p. 143)」を参照してください。ECC CMK に AWS KMS でサポートされる署名アルゴリズムの技術的な詳細については、「楕円曲線キーの仕様 (p. 146)」を参照してください。

対称 CMK と非対称 CMK で実行できるオペレーションを比較した表は、「Comparing Symmetric andAsymmetric CMKs (p. 148)」を参照してください。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

CMK 設定の選択方法作成する CMK のタイプは、CMK の使用計画、セキュリティ要件、および認証要件によって大きく依存します。CMK を作成するときは、CMK の暗号化設定(キー仕様やキーの使用方法を含む)は、CMK の作成時に設定され、変更できないことに注意してください。対称 CMK および非対称 CMK の作成については、「the section called “キーの作成” (p. 20)」を参照してください。

AWS KMS は、[対称]と [非対称型] の 2 つの CMK キータイプをサポートします。各キータイプには、特定のキーの使用方法 (p. 141)とキー仕様 (p. 142)オプションが関連付けられています。

以下のガイダンスを使用し、ユースケースに基づいて必要な CMK のタイプを決定します。

データの暗号化と復号

データの暗号化と復号を必要とするほとんどのユースケースには、対称 CMK (p. 139) を使用します。AWS KMS が使用する対称暗号化アルゴリズムは、高速かつ効率的で、データの機密性と信頼性を保証します。これは、暗号化コンテキスト (p. 15)として定義された追加の認証データ (AAD) による認証された暗号化をサポートします。このタイプの CMK では、暗号化されたデータの送信者と受信者の両方が AWS KMS を呼び出す有効な AWS 認証情報を持っている必要があります。

AWS KMS を呼び出しできないユーザーによって AWS 外部で暗号化が必要なユースケースの場合は、非対称 CMK (p. 139) が適しています。非対称 CMK のパブリック部分を配布して、これらのユーザーがデータを暗号化できるようにすることができます。また、そのデータを復号する必要があるアプリケーションは、AWS KMS 内で非対称 CMK のプライベート部分を使用できます。

メッセージの署名および署名の検証

メッセージに署名して署名を検証するには、非対称 CMK (p. 139) を使用する必要があります。RSAキーペアまたは楕円曲線 (ECC) キーペアを表すキー仕様 (p. 142)で CMK を使用できます。選択す

140

Page 149: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー使用法の選択

るキー仕様は、使用する署名アルゴリズムによって決まります。場合によっては、署名を検証するユーザーが AWS の外側にあり、Verify オペレーションを呼び出せないことがあります。その場合は、これらのユーザーがローカルアプリケーションでサポートできる署名アルゴリズムに関連付けられたキー仕様を選択します (p. 142)。

パブリックキー暗号化の実行

パブリックキー暗号化を実行するには、RSA キー仕様 (p. 144)で非対称 CMK (p. 139) を使用する必要があります。楕円曲線 (ECC) キー仕様 (p. 146)は、パブリックキーの暗号化には使用できません。RSA CMK のパブリックキーを使用して AWS KMS でデータを暗号化するには、Encrypt オペレーションを使用します。パブリックキーをダウンロードして (p. 48)、AWS KMS 外部でデータを暗号化する必要がある当事者と共有することもできます。

非対称 CMK のパブリックキーをダウンロードする場合は、AWS KMS の外部で使用できます。ただし、AWS KMS の CMK を保護するセキュリティ管理の対象ではなくなりました。たとえば、KMSキーポリシーまたは許可を使用して、パブリックキーの使用を制御することはできません。また、AWS KMS がサポートする RSA 暗号化アルゴリズムを使用して、キーを暗号化および復号にのみ使用するかどうかを制御することもできません。詳細については、「パブリックキーのダウンロードに関する特別な考慮事項 (p. 48)」を参照してください。

AWS KMS の外部のパブリックキーで暗号化されたデータを復号するには、Decrypt オペレーションを呼び出します。SIGN_VERIFY のキーの使用方法 (p. 141)の CMK からのパブリックキーでデータが暗号化された場合、Decrypt オペレーションは失敗します。また、KMS が RSA CMK をサポートしていないアルゴリズムを使用して暗号化されている場合も失敗します。

これらのエラーを回避するには、AWS KMS 外部でパブリックキーを使用するすべてのユーザーがキー設定を保存する必要があります。AWS KMS コンソールと GetPublicKey レスポンスは、パブリックキーを共有するときに含める必要がある情報を提供します。

統合された AWS のサービスでの使用

AWS KMS と統合された AWS のサービス (p. 241)で使用する CMK を作成するには、サービスのドキュメントを参照してください。ユーザーに代わってデータを暗号化するすべての AWS サービスには、対称 CMK (p. 139) が必要です。

これらの考慮事項に加えて、キー仕様が異なる CMK では、価格と クォータのリクエスト が異なります。AWS KMS の価格設定については、「AWS Key Management Service の料金」を参照してください。クォータのリクエスト の詳細については、「クォータのリクエスト (p. 380)」を参照してください。

キー使用法の選択CMK の キー使用法 (p. 14)によって、CMK が暗号化および復号に使用されるか、署名および検証に使用されるかが決まります。両方を選択することはできません。CMK を複数のタイプのオペレーションに使用すると、両方のオペレーションの製品が攻撃に対して脆弱になります。

次の表に示すように、対称 CMK は暗号化と復号にのみ使用できます。楕円曲線 (ECC) CMK は、署名と検証にのみ使用できます。キーの使用方法の決定は、実際に RSA CMK に対してのみ行われます。

CMK タイプの有効なキーの使用方法

CMK タイプ 暗号化と復号 署名と検証

対称 CMK

RSA キーペアを使用した非対称CMK

141

Page 150: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー仕様の選択

CMK タイプ 暗号化と復号 署名と検証

ECC キーペアを使用した非対称CMK

AWS KMS コンソールでは、まずキータイプ(対称または非対称)を選択し、次に非対称 CMK の場合はキーの使用方法を選択します。対称キータイプを選択した場合、キーの使用方法オプションは表示されません。対称 CMK では暗号化と復号のみがサポートされるためです。選択するキーの使用方法によって、表示されるキー仕様 (p. 142)が決まります。

AWS KMS コンソールでキーの使用方法を選択するには:

• 楕円曲線 (ECC) キーマテリアルを持つ CMK の場合は、[署名と検証] を選択します。• RSA キーマテリアルを使用する CMK の場合は、[暗号化と復号] または [署名と検証] を選択します。

アカウントのプリンシパルが CMK に使用できるキーの使用方法を決定するには、km:CustomerMasterKeyUsage (p. 100) 条件キーを使用します。

キー仕様の選択非対称 CMK を作成するときは、そのキー仕様 (p. 13)を選択します。すべてのカスタマーマスターキー(CMK) のプロパティであるキー仕様は、CMK の暗号化設定を表します。CMK を作成するときにキー仕様を選択することはできず、変更することもできません。間違ったキー仕様を選択した場合は、CMK を削除し (p. 170)、新しいキー仕様を作成します。

Note

AWS KMS API オペレーションでは、CMK のキー仕様は CustomerMasterKeySpec と呼ばれます。これにより、データキー (KeySpec) およびデータキーペア (KeyPairSpec) のキー仕様や、インポート用のキーマテリアル (WrappingKeySpec) のラップ時に使用されるキー仕様とは区別されます。各キー仕様のタイプには、異なる値があります。

キー仕様によって、CMK が対称か非対称か、CMK のキーマテリアルのタイプ、および AWS KMS がCMK でサポートする暗号化アルゴリズムまたは署名アルゴリズムが決まります。選択するキー仕様は、通常、ユースケースと規制要件によって決まります。

アカウントのプリンシパルが CMK に使用できるキー仕様を決定するには、kms:CustomerMasterKeySpec (p. 99) 条件キーを使用します。

AWS KMS は、CMK の次の主要な仕様をサポートしています。

• 対称 CMK (p. 143)(デフォルト、暗号化と復号)• SYMMETRIC_DEFAULT

• RSA キー仕様 (p. 143)(暗号化と復号、または署名と検証)• RSA_2048• RSA_3072• RSA_4096

• 楕円曲線のキー仕様 (p. 146)• 非対称 NIST 推奨楕円曲線キーペア(署名と検証)

• ECC_NIST_P256 (secp256r1)• ECC_NIST_P384 (secp384r1)• ECC_NIST_P521 (secp521r1)

142

Page 151: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー仕様の選択

• その他の非対称楕円曲線キーペア(署名と検証)• ECC_SECG_P256K1 (secp256k1)、暗号化に一般的に使用されます。

トピック

以下のトピックでは、キー仕様に関する技術情報を提供します。

• SYMMETRIC_DEFAULT キー仕様 (p. 143)• RSA キー仕様 (p. 143)• 楕円曲線のキー仕様 (p. 146)

SYMMETRIC_DEFAULT キー仕様デフォルトのキー仕様である SYMMETRIC_DEFAULT は、対称 CMK のキー仕様です。AWS KMS コンソールで [対称] キータイプを選択すると、SYMMETRIC_DEFAULTキー仕様が選択されます。CreateKey オペレーションで CustomerMasterKeySpec 値を指定しない場合、SYMMETRIC_DEFAULT が選択されます。別のキー仕様を使用する理由がない場合は、SYMMETRIC_DEFAULT を選択することをお勧めします。

対称 CMK の暗号化アルゴリズムは、SYMMETRIC_DEFAULT とも呼ばれます。現在、これは、安全な暗号化の業界標準である 256 ビットキーを持つガロワカウンタモード (GCM) の高度暗号化標準 (AES)に基づく対称アルゴリズムを表しています。このアルゴリズムが生成する暗号文は、暗号化コンテキスト (p. 15)などの追加の認証データ (AAD) をサポートし、GCM は暗号文での追加の整合性チェックを提供します。技術的な詳細については、AWS Key Management Service Cryptographic Details ホワイトペーパーを参照してください。

AES-256-GCMで暗号化されたデータは、現在も将来も保護されています。暗号作成者は、このアルゴリズムには量子耐性があると考えています。理論上の将来、256 ビット AES-GCM キーで作成された暗号文に対する大規模な量子コンピューティング攻撃は、キーの効果的なセキュリティを 128 ビットに低下させます。ただし、このセキュリティレベルは、AWS KMS 暗号文に対するブルートフォース攻撃を実行不可能にするのに十分です。

AWS KMS で対称 CMK を使用して、データの暗号化、復号、再暗号化、データキーとデータキーペアの生成を行うことができます。AWS KMS と統合された AWS のサービスは、対称 CMK を使用して保管中のデータを暗号化します。対称 CMK に独自のキーマテリアルをインポート (p. 156)し、カスタムキーストア (p. 182)で対称 CMK を作成できます。対称 CMK と非対称 CMK で実行できるオペレーションを比較した表は、「Comparing Symmetric and Asymmetric CMKs (p. 148)」を参照してください。

RSA キー仕様RSA キー仕様を使用する場合、AWS KMS は RSA キーペアを持つ非対称 CMK を作成します。プライベートキーが暗号化されないまま AWS KMS から出ていくことはありません。AWS KMS 内でパブリックキーを使用することも、AWS KMS の外部で使用するためにパブリックキーをダウンロードすることもできます。

Warning

AWS KMS 外部でデータを暗号化する場合は、暗号化テキストを復号できることを確認してください。AWS KMS から削除された CMK のパブリックキー、署名と検証用に設定された CMK のパブリックキー、または CMK でサポートされていない暗号化アルゴリズムを使用する場合、データは回復できません。

AWS KMS では、非対称 CMK を RSA キーペアとともに暗号化と復号、または署名と検証に使用できますが、両方には使用できません。このプロパティは、キーの使用方法 (p. 141)と呼ばれ、キー仕様とは別に決定されますが、キー仕様を選択する前に決定する必要があります。

143

Page 152: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー仕様の選択

AWS KMS は、暗号化と復号、署名と検証について、次の RSA キー仕様をサポートしています。

• RSA_2048• RSA_3072• RSA_4096

RSA キー仕様は、RSA キーの長さ(ビット単位)によって異なります。選択する RSA キー仕様は、セキュリティ標準またはタスクの要件によって決定される場合があります。一般的に、タスクに実用的で手頃な価格の、最大のキーを使用します。RSA キー仕様が異なる CMK は価格設定も異なり、クォータのリクエスト も異なります。AWS KMS の価格設定については、「AWS Key Management Service の料金」を参照してください。クォータのリクエスト の詳細については、「クォータのリクエスト (p. 380)」を参照してください。

暗号化および復号の RSA キー仕様

RSA 非対称 CMK を暗号化および復号に使用する場合、パブリックキーで暗号化し、プライベートキーで復号します。RSA CMK の AWS KMS で Encrypt オペレーションを呼び出すとき、AWS KMS は RSAキーペアのパブリックキーと、指定した暗号化アルゴリズムを使用してデータを暗号化します。暗号テキストを復号するには、Decrypt オペレーションを呼び出し、同じ CMK と暗号化アルゴリズムを指定します。AWS KMS は、RSA キーペアのプライベートキーを使用してデータを復号します。

パブリックキーをダウンロードして、AWS KMS 外部のデータを暗号化するために使用することもできます。AWS KMS が RSA CMK でサポートされる暗号化アルゴリズムを必ず使用してください。暗号テキストを復号するには、同じ CMK と暗号化アルゴリズムを使用して Decrypt 関数を呼び出します。

AWS KMS は、RSA キー仕様を持つ CMK の 2 つの暗号化アルゴリズムをサポートします。PKCS #1 v2.2で定義されるこれらのアルゴリズムは、内部的に使用するハッシュ関数によって異なります。AWS KMSでは、RSAES_OAEP アルゴリズムは、ハッシュと マスク生成関数 (MGF1) の両方に常に同じハッシュ関数を使用します。 Encrypt および Decrypt オペレーションを呼び出すときは、暗号化アルゴリズムを指定する必要があります。リクエストごとに異なるアルゴリズムを選択できます。

RSA キー仕様にサポートされる暗号化アルゴリズム

暗号化アルゴリズム アルゴリズムの説明

RSAES_OAEP_SHA_1 PKCS #1 v2.2、セクション 7.1。ハッシュとMGF1 マスク生成機能の両方に空のラベルとともに SHA-1 を使用した OAEP パディングによるRSA暗号化。

RSAES_OAEP_SHA_256 PKCS #1、セクション 7.1.ハッシュと MGF1 マスク生成機能の両方に空のラベルとともに SHA-256を使用した OAEP パディングによるRSA暗号化。

特定の暗号化アルゴリズムを使用するように CMK を設定することはできません。ただし、km:EncryptionAlgorithm (p. 102) ポリシー条件を使用して、プリンシパルが CMK で使用できる暗号化アルゴリズムを指定できます。

CMK の暗号化アルゴリズムを取得するには、AWS KMS コンソールで CMK の暗号化設定を表示 (p. 29)するか、DescribeKey オペレーションを使用します。AWS KMS では、AWS KMS コンソールまたはGetPublicKey オペレーションを使用してパブリックキーをダウンロードするときに、キー仕様と暗号化アルゴリズムも提供されます。

各要求で暗号化できるプレーンテキストデータの長さに基づいて、RSA 鍵仕様を選択することもできます。次の表に、Encrypt オペレーションの 1 回の呼び出しで暗号化できるプレーンテキストの最大サイズ

144

Page 153: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー仕様の選択

(バイト単位)を示します。値は、キー仕様と暗号化アルゴリズムによって異なります。比較するには、対称 CMK を使用して、一度に最大 4096 バイトを暗号化できます。

これらのアルゴリズムのプレーンテキストの最大長(バイト単位)を計算するには、次の式を使用します。(key_size_in_bits / 8) - (2 * hash_length_in_bits/8) - 2。たとえば、RSA_2048 と SHA-256の場合、バイト単位のプレーンテキストの最大サイズは、(2048/8) - (2 * 256/8) -2 = 190 です。

暗号化オペレーションの最大プレーンテキストサイズ(バイト単位)

  暗号化アルゴリズム

RSA_2048 214 190

RSA_3072 342 318

RSA_4096 470 446

署名および検証用の RSA キー仕様署名と検証に RSA 非対称 CMK を使用する場合、プライベートキーを持つメッセージの署名を生成し、パブリックキーで署名を検証します。

非対称 CMK の AWS KMS で Sign オペレーションを呼び出すと、AWS KMS は RSA キーペアのプライベートキー、メッセージ、および指定した署名アルゴリズムを使用して、署名を生成します。署名を確認するには、Verify オペレーションを呼び出します。署名、および同じ CMK、メッセージ、署名アルゴリズムを指定します。AWS KMS は、RSA キーペアのパブリックキーを使用して署名を検証します。また、パブリックキーをダウンロードして、AWS KMS 外部で署名を検証するために使用することもできます。

AWS KMS は、RSA キー仕様の CMK に対して次の署名アルゴリズムをサポートします。Sign オペレーションと Verify オペレーションを呼び出すときは、署名アルゴリズムを指定する必要があります。リクエストごとに異なるアルゴリズムを選択できます。

RSA キー仕様でサポートされる署名アルゴリズム

署名アルゴリズム アルゴリズムの説明

RSASSA_PKCS1_V1_5_SHA_256 PKCS #1 v2.2、セクション 8.2、PKCS #1v1 .5 パディングおよび SHA-256 を使用した RSA 署名

RSASSA_PKCS1_V1_5_SHA_384 PKCS #1 v2.2、セクション 8.2、PKCS #1v1 .5 パディングおよび SHA-384 を使用した RSA 署名

RSASSA_PKCS1_V1_5_SHA_512 PKCS #1 v2.2、セクション 8.2、PKCS #1v1 .5 パディングおよび SHA-512 を使用した RSA 署名

RSASSA_PSS_SHA_256 PKCS #1 v2.2、セクション 8.1、メッセージダイジェストと MGF1 マスク生成機能の両方にSHA-256 とともに 256 ビットソルトを使用するPSS パディング付きの RSA 署名

RSASSA_PSS_SHA_384 PKCS #1 v2.2、セクション 8.1、メッセージダイジェストと MGF1 マスク生成機能の両方にSHA-384 とともに 384 ビットソルトを使用するPSS パディング付きの RSA 署名

RSASSA_PSS_SHA_512 PKCS #1 v2.2、セクション 8.1、メッセージダイジェストと MGF1 マスク生成機能の両方にSHA-512 とともに 512 ビットソルトを使用するPSS パディング付きの RSA 署名

145

Page 154: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキー仕様の選択

特定の署名アルゴリズムを使用するように CMK を設定することはできません。ただし、km:SigningAlgorithm (p. 117) ポリシー条件を使用して、プリンシパルが CMK で使用できる署名アルゴリズムを指定できます。

CMK の署名アルゴリズムを取得するには、AWS KMS コンソールで CMK の暗号化設定を表示 (p. 29)するか、DescribeKey オペレーションを使用します。AWS KMS では、AWS KMS コンソールまたはGetPublicKey オペレーションを使用してパブリックキーをダウンロードするときに、キー仕様と署名アルゴリズムも提供されます。

楕円曲線のキー仕様

楕円曲線 (ECC) キー仕様を使用すると、AWS KMS では署名と検証のために ECC キーペアを持つ非対称CMK が作成されます。署名を生成するプライベートキーでは、AWS KMS が暗号化されないままになることはありません。AWS KMS 内で署名を検証するためにパブリックキーを使用することも、AWS KMS の外部で使用するためにパブリックキーをダウンロード (p. 161)することもできます。

AWS KMS は、非対称 CMK の次の ECC キー仕様をサポートしています。

• 非対称 NIST 推奨楕円曲線キーペア(署名と検証)• ECC_NIST_P256 (secp256r1)• ECC_NIST_P384 (secp384r1)• ECC_NIST_P521 (secp521r1)

• その他の非対称楕円曲線キーペア(署名と検証)• ECC_SECG_P256K1 (secp256k1)、暗号通貨によく使用されます。

選択する ECC キー仕様は、セキュリティ標準またはタスクの要件によって決定される場合があります。一般的に、タスクに実用的で手頃な価格の、最も多くのポイントがある曲線を使用します。

暗号化通貨で使用する非対称 CMK を作成する場合は、ECC_SECG_P256K1 キー仕様を使用します。このキー仕様を他の目的に使用することもできますが、Bitcoin やその他の暗号化通貨には必要です。

ECC キー仕様が異なる CMK は価格設定も異なり、クォータのリクエスト も異なります。AWS KMS の価格設定については、「AWS Key Management Service の料金」を参照してください。クォータのリクエスト の詳細については、「クォータのリクエスト (p. 380)」を参照してください。

次の表に、ECC キー仕様ごとに AWS KMS がサポートする署名アルゴリズムを示します。特定の署名アルゴリズムを使用するように CMK を設定することはできません。ただし、km: SigningAlgorithm (p. 117)ポリシー条件を使用して、プリンシパルが CMK で使用できる署名アルゴリズムを指定できます。

ECC キー仕様でサポートされる署名アルゴリズム

キー仕様 署名アルゴリズム アルゴリズムの説明

ECC_NIST_P256 ECDSA_SHA_256 メッセージダイジェストのためにキーおよび SHA-256 で指定された曲線を使用する、NIST FIPS186-4、セクション 6.4、ECDSA署名。

ECC_NIST_P384 ECDSA_SHA_384 メッセージダイジェストのためにキーおよび SHA-384 で指定された曲線を使用する、NIST FIPS186-4、セクション 6.4、ECDSA署名。

146

Page 155: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の暗号化設定の表示

キー仕様 署名アルゴリズム アルゴリズムの説明

ECC_NIST_P521 ECDSA_SHA_512 メッセージダイジェストのためにキーおよび SHA-512 で指定された曲線を使用する、NIST FIPS186-4、セクション 6.4、ECDSA署名。

ECC_SECG_P256K1 ECDSA_SHA_256 メッセージダイジェストのためにキーおよび SHA-256 で指定された曲線を使用する、NIST FIPS186-4、セクション 6.4、ECDSA署名。

CMK の暗号化設定の表示CMK を作成したら、その暗号化設定を表示できます。CMK の作成後に設定を変更することはできません。別の設定を使用する場合は、CMK を削除して再度作成します。

AWS KMS コンソールで、または AWS KMS API を使用して、CMK の暗号化設定を確認、またはキー仕様、キーの使用方法、サポートされている暗号化アルゴリズムまたは署名アルゴリズムを含めることができます。詳細については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

AWS KMS コンソールでは、各 CMK の詳細ページに、CMK に関する暗号化の詳細を表示する[Cryptographic Configuration] セクションがあります。たとえば、次の図は、署名と検証に使用される RSACMK の暗号化設定セクションを示しています。

AWS KMS API で、DescribeKey オペレーションを使用します。レスポンスの KeyMetadata 構造には、CMK の暗号化設定が含まれます。たとえば、DescribeKey は、署名と検証に使用される RSA CMKに対して次のレスポンスを返します。

{ "KeyMetadata": { "AWSAccountId": "111122223333", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1571767572.317, "Enabled": false, "Description": "", "KeyUsage": "SIGN_VERIFY", "KeyState": "Disabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "RSA_2048", "SigningAlgorithms": [ "RSASSA_PKCS1_V1_5_SHA_256", "RSASSA_PKCS1_V1_5_SHA_384", "RSASSA_PKCS1_V1_5_SHA_512",

147

Page 156: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK と非対称 CMK の比較

"RSASSA_PSS_SHA_256", "RSASSA_PSS_SHA_384", "RSASSA_PSS_SHA_512" ] }}

対称 CMK と非対称 CMK の比較AWS KMS コンソールと AWS KMS API を使用して、対称 CMK と非対称 CMK を作成および管理できます。ただし、AWS KMS では、異なるタイプの CMK に対して異なる機能がサポートされます。

たとえば、対称データキーの生成および非対称データキーペアには、対称 CMK のみを使用できます。また、キーマテリアルのインポート (p. 156)と自動キーローテーション (p. 151)は、対称 CMK でのみサポートされ、カスタムキーストア (p. 182)では対称 CMK のみを作成できます。

次の表に、各タイプの CMK を作成および管理するために使用できる AWS KMS オペレーションを示します。オペレーションをサポートしていない CMK でオペレーションを使用すると、オペレーションは失敗します。

対称 CMK と非対称 CMK による AWS KMS オペレーション

AWS KMS API オペレーション 対称 CMK 非対称 CMK(ENCRYPT_DECRYPT)

非対称 CMK (SIGN_VERIFY)

CancelKeyDeletion

CreateAlias

CreateGrant

CreateKey

- キーマテリアルなし(原点 =EXTERNAL)。

- カスタムキーストア(オリジン= AWS_CLOUSDHSM)

Decrypt

DeleteAlias

DeleteImportedKeyMaterial

DescribeKey

DisableKey

148

Page 157: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド対称 CMK と非対称 CMK の比較

AWS KMS API オペレーション 対称 CMK 非対称 CMK(ENCRYPT_DECRYPT)

非対称 CMK (SIGN_VERIFY)

DisableKeyRotation

EnableKey

EnableKeyRotation

Encrypt

GenerateDataKey

GenerateDataKeyPair

GenerateDataKeyPairWithoutPlaintext

GenerateDataKeyWithoutPlaintext

GetKeyPolicy

GetKeyRotationStatus

(KeyRotationEnabledは常にfalseになります。)

(KeyRotationEnabled は常にfalse になります。)

GetParametersForImport

GetPublicKey

ImportKeyMaterial

ListAliases

ListGrants

ListKeyPolicies

ListResourceTags

149

Page 159: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

カスタマーマスターキーのローテーション

暗号化のベストプラクティスでは、暗号化キーの広範な再利用を推奨していません。AWS KeyManagement Service (AWS KMS) のカスタマーマスターキー (CMK) の新しい暗号化マテリアルを作成するために、新しい CMK を作成した後、アプリケーションまたはエイリアスを変更して新しい CMK を使用できます。または、既存の カスタマー管理の CMK (p. 4) の自動キーローテーションを有効にすることができます。

カスタマー管理 CMK の自動キーローテーションを有効にすると、AWS KMS は CMK の新しい暗号化マテリアルを毎年生成します。また、AWS KMS は CMK の古い暗号化マテリアルを永続的に保存するため、暗号化されたデータの復号に使用できます。AWS KMS は CMK を削除 (p. 170)するまでローテーションされたキーマテリアルを削除しません。

キーローテーションでは、CMK のバッキングキーのみが変更されます。バッキングキーとは、暗号化オペレーションで使用される暗号化マテリアルです。CMK は、バッキングキーの変更の有無や回数にかかわりなく、同じ論理リソースのままです。次の図に示すとおり、CMK のプロパティは変更されまません。

自動キーローテーションには次の利点があります。

• キー ID、キー ARN、リージョン、ポリシー、アクセス許可などの CMK のプロパティは、キーがローテーションされても変更されません。

• CMK ID または ARN を参照するアプリケーションまたはエイリアスを変更する必要はありません。• キーローテーションを有効にすると、AWS KMS により CMK が毎年自動的にローテーションされま

す。更新を覚えている、またはスケジュールする必要はありません。

ただし、自動キーローテーションは、CMK で保護されるデータには効果がありません。CMK で生成されたデータキーの更新や、CMK で保護されているデータの再暗号化は行われず、データキーの侵害による影響は軽減されません。

新しい CMK を作成し、元の CMK の代わりに使用することを決める場合があります。これには、既存のCMK のキーマテリアルをローテーションするのと同じ効果があり、多くの場合、手動キーローテーション (p. 154)とみなされます。キーローテーションのスケジュールを制御する場合は、手動ローテーションすることをお勧めします。また、非対称の CMK (p. 138)、カスタムキーストア (p. 182)内の CMK、インポートされたキーマテリアル (p. 151)を持つ CMK など、自動キーローテーションの対象にならないCMK をローテーションする方法も利用できます。

151

Page 160: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの自動ローテーションの仕組み

キーローテーションと料金

顧客管理の CMK のローテーションには、追加の月額料金が発生する可能性があります。詳細については、「AWS Key Management Service 料金表」を参照してください。バッキングキーと更新の詳細については、「KMS 暗号化の詳細」ホワイトペーパーを参照してください。

トピック• キーの自動ローテーションの仕組み (p. 152)• キーの自動ローテーションを有効または無効にする方法 (p. 153)• 手動でのキーローテーション (p. 154)

キーの自動ローテーションの仕組みAWS KMS のキーローテーションは、透過的で使いやすいように設計された暗号化のベストプラクティスです。AWS KMS は、カスタマー管理の CMK (p. 4) に対してのみ、オプションの自動キーローテーションをサポートします。

• バッキングキー管理。AWS KMS はキーローテーションが無効になっている状態でも、CMK のすべてのバッキングキーを保持します。CMK を削除した場合に限り、バッキングキーが削除されます。CMK を使用して暗号化する場合、AWS KMS は現在のバッキングキーを使用します。復号に CMK を使用すると、AWS KMS は暗号化に使用したバッキングキーを使用します。

• キーローテーションの有効化と無効化カスタマー管理の CMK で、自動キーローテーションはデフォルトで無効になっています。キーローテーションを有効化 (または再有効化) にすると、AWS KMS は自動的に有効にした日から CMK を 365 日ローテーションし、その後は 365 日ごとに実行します。

• 無効化した CMK。 CMK が無効になっていると AWS KMS はローテーションを実行しません。ただし、キーローテーションのステータスが変更することはなく、CMK を無効にしている場合に変更することもできません。バッキングキーが 365 日以上のもので、CMK が再び有効になると、AWS KMS はそれをすぐにローテーションし、その後は 365 日ごとに実行します。バッキングキーが 365 日以内のものである場合、AWS KMS は元のキーローテーションのスケジュールで再開します。

• CMK の削除を保留中。 CMK の削除が保留になっていると、AWS KMS はローテーションを実行しません。キーローテーションのステータスは false に設定されています。削除が保留中の場合は変更することができません。削除をキャンセルすると、以前のキーローテーションのステータスが元に戻ります。バッキングキーが 365 日以上のものである場合、AWS KMS はそれをすぐにローテーションし、その後は 365 日ごとに実行します。バッキングキーが 365 日以内のものである場合、AWS KMS は元のキーローテーションのスケジュールで再開します。

• AWS 管理の CMK AWS 管理の CMK (p. 4) のキーローテーションを管理することはできません。AWSKMS は AWS 管理の CMK を 3 年ごと (1095 日) に自動的にローテーションします。

• AWS 所有の CMK AWS 所有の CMK のキーローテーションを管理することはできません。AWS が所有する CMK のキーローテーション (p. 151)戦略は、CMK を作成および管理する AWS サービスによって決まります。詳細については、サービスのユーザーガイドまたは開発者ガイドの「保存時の暗号化」トピックを参照してください。

• AWS のサービス。AWS のサービスでサーバー側の暗号化に使用するカスタマー管理の CMK (p. 4) で、キーの自動ローテーションを有効にすることができます。年間ローテーションは透過的で、AWS のサービスと互換性があります。

• キーローテーションのモニタリング。 AWS KMS は、AWS 管理の CMK (p. 4) またはカスタマー管理のCMK (p. 4) のキーマテリアルを自動的にローテーションするときに、KMS CMK ローテーションイベントを Amazon CloudWatch Events に書き込みます。このイベントを使用して、CMK がローテーションされたことを確認できます。

• サポートされていない CMK タイプ。 自動キーローテーションは次のタイプの CMK ではサポートされていませんが、これらの CMK は手動でローテーション (p. 154)できます。• 非対称 CMK (p. 139)• カスタムキーストア (p. 182)の CMK

152

Page 161: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの自動ローテーションを有効または無効にする方法

• キーマテリアルをインポート (p. 156)した CMK

キーの自動ローテーションを有効または無効にする方法

AWS KMS コンソールまたは AWS KMS API を使用して、キーの自動ローテーションを有効または無効にすることができます。また、カスタマー管理 CMK のローテーションステータスを確認できます。

キーの自動ローテーションを有効にすると、AWS KMS は有効にした日から CMK を 365 日ローテーションし、その後は 365 日ごとにローテーションします。

トピック• キーローテーションの有効化と無効化 (コンソール) (p. 153)• キーローテーションの有効化と無効化 (AWS KMS API) (p. 153)

キーローテーションの有効化と無効化 (コンソール)1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コン

ソール (https://console.aws.amazon.com/kms) を開きます。2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。

(AWS 管理型のキーのローテーションを有効または無効にすることはできません。3 年ごとに自動的にローテーションされます)

4. CMK のエイリアスまたは キー ID を選択します。5. [キーローテーション] タブを選択します。

[キーローテーション] タブは、AWS KMS により生成されたキー素材([オリジン] は [AWS_KMS])を持つ対称 CMK の詳細ページにのみ表示されます。非対称の CMK、インポートされたキーマテリアル (p. 156)を持つ CMK、またはカスタムキーストア (p. 182)内の CMK を自動的にローテーションすることはできません。ただし、手動でローテーション (p. 154)することはできます。

6. [この CMK を毎年自動的にローテーションします] チェックボックスをオンまたはオフにします。

Note

CMK が無効になっている場合や削除が保留中の場合は [この CMK を毎年自動的にローテーションします] のチェックボックスがオフになっています。これを変更することはできません。CMK を有効にしたり削除をキャンセルすると、キーローテーションのステータスが元に戻ります。詳細については、「キーの自動ローテーションの仕組み (p. 152)」および「キー状態: CMK への影響 (p. 236)」を参照してください。

7. [Save] を選択します。

キーローテーションの有効化と無効化 (AWS KMSAPI)AWS Key Management Service (AWS KMS) API を使用して自動キーローテーションを有効および無効にすることができ、すべてのカスタマー管理 CMK の現在のローテーションのステータスを確認できます。これらの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用できます。

153

Page 162: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド手動でのキーローテーション

EnableKeyRotation オペレーションは、指定した CMK の自動キーローテーションを有効にします。DisableKeyRotation オペレーションは、上記を無効化します。これらのオペレーションで CMK を識別するには、そのキー ID (p. 12) またはキー ARN (p. 12) を使用します。デフォルトでは、顧客管理のCMK でのキーローテーションは無効になっています。

次の例では、指定した対称 CMK のキーローテーションを有効にし、GetKeyRotationStatus オペレーションを使用して、結果を確認します。それから、キーローテーションを無効にし、再度、GetKeyRotationStatus を使用して変更を確認します。

$ aws kms enable-key-rotation --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

$ aws kms get-key-rotation-status --key-id 1234abcd-12ab-34cd-56ef-1234567890ab{ "KeyRotationEnabled": true}

$ aws kms disable-key-rotation --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

$ aws kms get-key-rotation-status --key-id 1234abcd-12ab-34cd-56ef-1234567890ab{ "KeyRotationEnabled": false}

手動でのキーローテーション自動キーローテーションを有効にする代わりに、新しい CMK を作成して現在の CMK の代わりに使用する場合があるかもしれません。新しい CMK に現在の CMK とは異なる暗号化マテリアルがある場合、新しいCMK を使用すると、既存の CMK でバッキングキーを変更するのと同じ効果があります。1 つの CMK を別のものと置き換えるプロセスは、手動キーローテーションと呼ばれます。

ローテーションの頻度をコントロールできるように、手動でキーをローテーションする方がよい場合があります。また、非対称 CMK、カスタムキーストア (p. 182)の CMK、インポートされたキーマテリア

154

Page 163: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド手動でのキーローテーション

ル (p. 156)を使用する CMK など、自動キーローテーションに適さない CMK のための優れたソリューションです。

Note

新しい CMK の使用を開始するときに、元の CMK を有効なままにすれば、AWS KMS は元のCMK により暗号化されたデータを復号できます。データを復号するとき、KMS はデータの暗号化に使用された CMK を識別し、同じ CMK を使用して復号します。元の CMK と新しいものの両方が有効である限り、AWS KMS はどちらの CMK によって暗号化されたデータでも復号できます。

新しい CMK は現在の CMK とは別のリソースであるため、異なるキー ID と ARN を持っています。CMKを変更すると、アプリケーションの CMK ID または ARN への参照を更新する必要があります。エイリアスは、CMK とわかりやすい名前を関連付けるので、このプロセスを容易にします。エイリアスを使用して、アプリケーションの CMK を参照します。それから、アプリケーションが使用する CMK を変更するには、エイリアスのターゲット CMK を変更します。

エイリアスのターゲット CMK を更新するには、UpdateAlias オペレーションを AWS KMS API で使用します。たとえば、このコマンドは、新しい CMK を指すように TestCMK エイリアスを更新します。オペレーションは出力を返さないため、この例では、ListAliases オペレーションを使用してエイリアスが異なる CMK と関連付けられたことを示しています。

$ aws kms list-aliases{ "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestCMK", "AliasName": "alias/TestCMK", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" }, ]}

$ aws kms update-alias --alias-name alias/TestCMK --target-key-id 0987dcba-09fe-87dc-65ba-ab0987654321 $ aws kms list-aliases{ "Aliases": [ { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/TestCMK", "AliasName": "alias/TestCMK", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321" }, ]}

155

Page 164: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドインポートしたキーマテリアルについて

AWS Key Management Service(AWS KMS) にキーマテリアルをインポートする

AWS KMS カスタマーマスターキー (p. 3) (CMK) は、マスターキーの論理的な表現です。CMK には、CMK 識別子 (p. 11)やその他のメタデータに加えて、データの暗号化と復号に使用されるキーマテリアルが含まれています。CMK を作成 (p. 20)すると、デフォルトでは AWS KMS がその CMK のキーマテリアルを生成します。ただし、キーマテリアルを使用せずに CMK を作成し、独自のキーマテリアルをその CMK にインポートできます。この機能は、「自分のキーを使用」(BYOK) とも呼ばれます。

インポートされたキーマテリアルは、AWS KMS キーストアにある対称 CMK でのみサポートされます。カスタムキーストア (p. 182)の非対称 CMK (p. 139) や CMK ではサポートされません。

インポートされたキーマテリアルを使用する場合、AWS KMS がそのコピーを使用できるようにしている間、キーマテリアルに対して責任を負います。そうする場合の理由として次のものが考えられます (複数が組み合わさる場合もあります)。

• 要件を満たすエントロピーのソースを使用してキーマテリアルを生成したことを証明するため。• AWS サービスを使用してインフラストラクチャのキーマテリアルを使用する、および AWS KMS を使

用して AWS 内のキーマテリアルのライフサイクルを管理するため。• AWS のキーマテリアルの有効期限を設定し、手動で削除しながらも (p. 167)、将来的に再び利用でき

るようにするため。これに対して、キーの削除のスケジュール (p. 170)は、7 日から 30 日の待機時間が必要となり、その後、削除された CMK は復元できません。

• キーマテリアルのオリジナルコピーを所有し、キーマテリアルの全ライフサイクルでの耐久性を高めるためおよび災害対策としてオリジナルコピーを AWS の外部に保持するため。

インポートされたキーマテリアルを含む CMK と、AWS KMS で生成されるキーマテリアルを含む CMK の重要な違いについては、「インポートしたキーマテリアルについて (p. 156)」を参照してください。

インポートするキーマテリアルは 256 ビット対称暗号化キーである必要があります。

トピック

• インポートしたキーマテリアルについて (p. 156)• キーマテリアルのインポート方法 (p. 157)• キーマテリアルの再インポート方法 (p. 157)• インポートされたキーマテリアルを使用する CMK を特定する方法 (p. 158)

インポートしたキーマテリアルについてキーマテリアルを AWS KMS にインポートする前に、インポートされたキーマテリアルの以下の特性を理解する必要があります。

キー生成をセキュリティで保護

お客様の責任において、セキュリティ要件を満たすランダムのソースを使用して、キーマテリアルを生成する必要があります。

CMK ごとに 1 つのキー

156

Page 165: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーマテリアルのインポート方法

CMK にキーマテリアルをインポートする場合、CMK は、キーマテリアルに永続的に関連付けられます。同じキーマテリアルを再インポート (p. 157)することができますが、別のキーマテリアルをそのCMK にインポートすることはできません。また、インポートされたキーマテリアルを使用して、CMK に対して自動キーローテーションを有効にする (p. 151)ことはできません。ただし、インポートされたキーマテリアルを使用して、手動で CMK をローテーション (p. 154)することはできます。

暗号化テキストあたり 1 つの CMK

KMS CMK でデータを暗号化すると、暗号化テキストを他の CMK を使用して復号化することはできません。これは、同じキーマテリアルを異なる CMK にインポートする場合でも同じです。

可用性と耐久性

お客様は、キーマテリアルの全体的な可用性と耐久性に対して責任があります。AWS KMS は、インポートされたキーマテリアルの可用性を高めるために設計されています。ただし、このサービスでは、インポートされたキーマテリアルの耐久性は、ユーザーに代わって生成されたキーマテリアルと同じレベルでは維持されません。この差は、次の場合に有意義です。

• インポートされたキーマテリアルの有効期限を設定すると、AWS KMS は、有効期限が切れた後キーマテリアルを削除します。AWS KMS は CMK やそのメタデータを削除しません。AWS KMS により生成されたキーマテリアルの有効期限を設定することはできません。

• 手動でインポートされたキーマテリアルを削除する (p. 167)場合、AWS KMS は、キーマテリアルを削除しますが、CMK またはそのメタデータは削除しません。これに対して、キーの削除のスケジュール (p. 170)は、7 日から 30 日間の待機時間を必要とし、その後 AWS KMS はキーマテリアルおよびCMK のメタデータすべてを削除します。

• 万一サービスに影響する特定のリージョン全体の障害が発生した場合には (全体の停電など)、AWSKMS は、インポートされたキーマテリアルを自動的に復元できません。ただし、AWS KMS は、CMKおよびそのメタデータを復元できます。

このようなイベント後にキーマテリアルを復元するには、制御するシステムにキーマテリアルのコピーを保存する必要があります。次に、CMK に再インポートできます。

キーマテリアルのインポート方法次に、AWS KMS にキーマテリアルをインポートする手順の概要を説明します。この手順の各ステップの詳細については、該当するトピックを参照してください。

1. キーデータなしで対称 CMK を作成する (p. 159) – キーマテリアルのインポートを開始するには、まず、オリジンが EXTERNAL である対称 CMK を作成します。これは、キーマテリアルが AWS KMS 外で生成されたことを示し、AWS KMS が CMK のキーマテリアルを生成しないようにします。後の手順で、この CMK に独自のキーマテリアルをインポートします。

2. パブリックキーおよびインポートトークンをダウンロード (p. 161) – ステップ 1 を完了した後、パブリックキーとインポートトークンをダウンロードします。これらの項目は、AWS KMS へのキーマテリアルのインポートを保護します。

3. キーマテリアルの暗号化 (p. 165) – ステップ 2 でダウンロードしたパブリックキーを使用して、独自のシステムで作成したキーマテリアルを暗号化します。

4. キーマテリアルのインポート (p. 166) – ステップ 3 で作成した暗号化されたキーマテリアル、およびステップ 2 でダウンロードしたインポートトークンをアップロードします。

キーマテリアルの再インポート方法インポートされたキーマテリアルを使用して CMK を管理する場合、キーマテリアルの有効期限が切れているか、またはキーマテリアルが誤って削除または失われたために、キーマテリアルを再インポートする必要があります。

157

Page 166: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドインポートされたキーマテリアルを使用する CMK を特定する方法

もともと CMK にインポートされたのと同じキーマテリアルを再インポートする必要があります。別のキーマテリアルを CMK にインポートすることはできません。また、AWS KMS はキーマテリアルを使用せずに作成された CMK のキーマテリアルを作成することはできません。

キーマテリアルを再インポートするには、次のような例外を除いて、最初にキーマテリアルのインポート (p. 157)に使用したのと同じ手順を使用します。

• 新しい CMK を作成する代わりに、既存の CMK を使用します。インポートの手順のステップ1 (p. 159) はスキップできます。

• CMK キーマテリアルが含まれている場合、キーマテリアルを再インポートする前に、既存のキーマテリアルを削除する (p. 167)必要があります。

CMK にキーマテリアルをインポートするたびに、CMK の新しいラップキーおよびインポートトークンをダウンロードして使用する (p. 161)必要があります。このラップの手順は、キーマテリアルの内容には影響しません。異なるラップキー (および異なるインポートトークン) を使用して同じキーマテリアルをインポートすることができます。

インポートされたキーマテリアルを使用する CMKを特定する方法

キーマテリアルなしで CMK を作成する場合、CMK の Origin プロパティの値は EXTERNAL で、変更することはできません。インポートされたキーマテリアルを使用するように設計されたキーは、AWS KMSが提供するキーマテリアルを使用するキーに変換することはできません。

AWS KMS コンソールまたは AWS KMS API を使用して、インポートされたキーマテリアルを必要とするCMK を特定できます。

CMK の Origin プロパティの値を特定するには (コンソール)1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. 左のナビゲーションペインで、暗号化キーを選択します。3. フィルタ で、AWS の該当するリージョンを選択します。4. 次のいずれかのテクニックを使用して、CMK の Origin プロパティを表示します。

• CMK テーブルに Origin 列を追加するには、右上隅の、[Settings (設定)] アイコンを選択します。[Origin]、[Confirm (確認)] の順に選択します。Origin 列によって、EXTERNAL オリジンプロパティ値のある CMK を簡単に特定できます。

• 特定の CMK の Origin プロパティの値を検索するには、CMK のキー ID またはエイリアスを選択します。[General configuration (一般設定)] セクションに Origin プロパティ値が表示されます。

CMK の Origin プロパティの値を特定するには(AWS KMS API)DescribeKey オペレーションを使用します。以下の例に示すように、レスポンスには、CMK の Origin プロパティが含まれています。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab{

158

Page 167: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドステップ 1: キーマテリアルなしで CMK を作成する

"KeyMetadata": { "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Origin": "EXTERNAL", "ExpirationModel": "KEY_MATERIAL_EXPIRES" "ValidTo": 1568894400.0, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333", "CreationDate": 1568289600.0, "Enabled": false, "Description": "", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "PendingImport", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

キーマテリアルのインポート ステップ 1: キーマテリアルなしで AWS KMS カスタマーマスターキー(CMK) を作成する

デフォルトでは、カスタマーマスターキー (CMK) の作成時に AWS KMS はキーマテリアルを作成します。独自のキーマテリアルをインポートする代わりに、最初にキーデータなしで CMK を作成します。CMK のオリジンで、この 2 つのタイプの CMK を区別します。AWS KMS がキーマテリアルを作成する場合、CMK のオリジンは AWS_KMS です。キーデータなしで CMK を作成する場合、CMK のオリジンは、キーマテリアルが AWS KMS 外で生成されたことを示す EXTERNAL です。

キーデータなしの CMK は [インポートの保留中] の状態で、使用することはできません。これを使用するには、後で説明するとおり、キーマテリアルをインポートする必要があります。CMK にキーマテリアルをインポートする場合、CMK のキーステータスが [有効] に変わります。有効なキーステータスの詳細については、「キー状態: CMK への影響 (p. 236)」を参照してください。

AWS マネジメントコンソール または AWS KMS API を使用して、キーデータなしで CMK を作成します。HTTP リクエストを作成することにより、または、AWS SDK かコマンドラインツールのいずれかを通して、API を直接使用することができます。

トピック• キーマテリアルなしで CMK を作成する (コンソール) (p. 159)• キーマテリアルなしで CMK を作成する (AWS KMS API) (p. 161)

キーマテリアルなしで CMK を作成する (コンソール)AWS マネジメントコンソール を使用して、キーデータなしで CMK を作成します。これを行う前に、CMK のリストの [オリジン] 列を表示するようコンソールを設定できます。インポートされたキーには、[外部] の [オリジン] の値が付加されます。

インポートされたキーマテリアルの CMK を 1 度だけ作成する必要があります。既存の CMK に同じキーマテリアルをインポートする場合は、「ステップ 2: パブリックキーおよびインポートトークンのダウンロード (p. 161)」を参照してください。

159

Page 168: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーマテリアルなしで CMK を作成する (コンソール)

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. [キーの作成] を選択します。5. [対称] を選択します。キーマテリアルを非対称 CMK に読み込むことはできません。6. [Advanced options (詳細オプション)] を展開します。7. [キーマテリアルのオリジン] に [外部] を選択します。

インポートされたキーマテリアルの使用による影響について理解したことを示すため、[インポートされたキーの使用によるセキュリティ、可用性、および耐久性への影響について理解しています] の隣にあるチェックボックスをオンにします。これらの影響については、「インポートしたキーマテリアルについて (p. 156)」を参照してください。

[Next] を選択します。8. エイリアスと CMK の説明 (オプション) を入力します。

[Next] を選択します。9. (オプション).[タグの追加] ページで、CMK を識別または分類するタグを追加します。

[次へ] を選択します。10. [キー管理者] セクションで、CMK を管理できる IAM ユーザーとロールを選択します。詳細について

は、「CMK の管理をキー管理者に許可する (p. 57)」を参照してください。

Note

IAM ポリシーによって、CMK を管理するアクセス許可を他の IAM ユーザーおよびロールに付与できます。

11. (オプション) 選択した IAM ユーザーおよびロールがこの CMK を削除できないようにするには、ページの下部にある [Key deletion (キーの削除)] セクションで [Allow key administrators to delete this key(キーの管理者がこのキーを削除できるようにします。)] チェックボックスをオフにします。

[次へ] を選択します。12. [このアカウント] セクションで、暗号化オペレーション (p. 10)で CMK を使用できる、この AWS ア

カウント内の IAM ユーザーおよびロールを選択します。詳細については、「CMK の使用をキーユーザーに許可する (p. 60)」を参照してください。

Note

IAM ポリシーによって、CMK を使用するアクセス許可を他の IAM ユーザーおよびロールに付与できます。

13. (オプション) 他の AWS アカウントが暗号化オペレーションにこの CMK を使用するようにできます。これを行うには、ページの下部にある [Other AWS accounts (別の AWS アカウント)] セクションで[Add another AWS account (別の AWS アカウントを追加する)] を選択し、外部アカウントの AWS アカウント ID 番号を入力します。複数の外部アカウントを追加するには、この手順を繰り返します。

Note

外部アカウントのプリンシパルが CMK を使用できるようにするには、外部アカウントの管理者が、これらのアクセス許可を提供する IAM ポリシーを作成する必要があります。詳細については、「他のアカウントのユーザーに CMK の使用を許可する (p. 79)」を参照してください。

[次へ] を選択します。14. [Review and edit key policy (キーポリシーの表示と編集)] ページで、新しい CMK のポリシードキュメ

ントを確認して編集します。完了したら、[完了] を選択します。

160

Page 169: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーマテリアルなしで CMK を作成する (AWS KMS API)

オペレーションが成功すると、キーマテリアルなしで CMK が作成されます。ステータスは [インポート保留中] となっています。 今すぐプロセスを続行する場合は、「パブリックキーとインポートトークンのダウンロード (コンソール) (p. 163)」を参照してください。後でプロセスを続行する場合は、[キャンセル] を選択します。

次の手順: ステップ 2: パブリックキーおよびインポートトークンのダウンロード (p. 161)

キーマテリアルなしで CMK を作成する (AWS KMSAPI)キーデータなしで対称 CMK を作成するために AWS KMS API を使用するには、Origin パラメータをEXTERNAL に設定して、CreateKey リクエストを送信します。次の例では、AWS Command Line Interface(AWS CLI) を使用してこの操作を行う方法を示します。

$ aws kms create-key --origin EXTERNAL

コマンドが成功した場合は、以下のような出力が表示されます。CMK の Origin は EXTERNALで、KeyState は PendingImport です。

{ "KeyMetadata": { "Origin": "EXTERNAL", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "Enabled": false, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "PendingImport", "CreationDate": 1568289600.0, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333" "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

後のステップで使用するために、コマンド出力から CMK のキー ID をコピーして、ステップ 2: パブリックキーおよびインポートトークンのダウンロード (p. 161) に進みます。

キーマテリアルのインポート ステップ 2: パブリックキーおよびインポートトークンのダウンロード

キーマテリアルなしで対称カスタマーマスターキー (CMK) を作成 (p. 159)した後、CMK のパブリックキーとインポートトークンをダウンロードします。キーマテリアルをインポートするためにはこれらの項目が必要です。AWS マネジメントコンソール または AWS KMS API を使用して両方の項目を 1 ステップでダウンロードできます。

CMK に同じキーマテリアルを再インポートする場合も、これらの項目をダウンロードできます。この操作は、キーマテリアルの有効期限を変更したり、期限切れまたは削除されたキーマテリアルを復元したりする場合に実行します。

161

Page 170: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドステップ 2: パブリックキーおよびインポートトークンのダウンロード

パブリックキーの使用

キーマテリアルをインポートする場合は、raw キーマテリアルを AWS KMS にアップロードしません。最初に、このステップでダウンロードしたパブリックキーでキーマテリアルを暗号化してから、AWS KMS にキーマテリアルをアップロードする必要があります。AWS KMS が暗号化されたキーマテリアルを受け取ると、対応するプライベートキーを使用して復号を行います。AWS KMS から受け取ったパブリックキーは 2048 ビットの RSA パブリックキーで、常に AWS アカウントに固有です。

インポートトークンの使用

インポートトークンには、キーマテリアルが正しくインポートされたことを確認するメタデータが含まれています。AWS KMS に暗号化されたキーマテリアルをアップロードする場合、このステップでダウンロードした同じインポートトークンをアップロードする必要があります。

ラップアルゴリズムの選択

インポート中にキーマテリアルを保護するには、ラップキーとラップアルゴリズムを使用してキーマテリアル暗号化します。通常、ハードウェアセキュリティモジュール (HSM) がサポートするアルゴリズム、またはキーマテリアルを保護するキー管理システムを選択します。以下で選択して指定される、3 つのうち 1 つのパディングオプションを使用した RSA PKCS #1 暗号化スキームを使用する必要があります。これらの選択肢は AWS で指定した順に一覧表示されます。これらの選択肢によって表されるスキームの技術的な詳細については、「PKCS #1 バージョン 2.1 標準」のセクション 7 で説明されています。• RSAES_OAEP_SHA_256 – SHA-256 ハッシュ関数を使用する OAEP (Optimal Asymmetric

Encryption Padding) を使用した RSA 暗号化アルゴリズム。• RSAES_OAEP_SHA_1 – SHA-1 ハッシュ関数を使用する OAEP (Optimal Asymmetric Encryption

Padding) を使用した RSA 暗号化アルゴリズム。• RSAES_PKCS1_V1_5 – PKCS #1 バージョン 1.5 で定義されているパディング形式を使用した

RSA 暗号化アルゴリズム。

Note

OpenSSL でキーマテリアルを暗号化する (p. 165)顧客概念実証の例をステップ 3 (p. 165)で試す場合には、RSAES_OAEP_SHA_1 を使用します。

HSM またはキー管理システムがサポートしている場合は、RSAES_OAEP_SHA_256 をキーマテリアルの暗号化に使用することをお勧めします。このオプションが使用できない場合、RSAES_OAEP_SHA_1 を使用する必要があります。OAEP オプションのいずれも使用できない場合、RSAES_PKCS1_V1_5 を使用する必要があります。キーマテリアルを暗号化する方法については、ハードウェアセキュリティモジュールまたはキーマテリアルを保護するキー管理システムのドキュメントを参照してください。

パブリックキーとインポートトークンは 24 時間有効です。それらを 24 時間以内にキーマテリアルのインポートに使用しなかった場合、新しいパブリックキーとインポートトークンをダウンロードする必要があります。

パブリックキーとインポートトークンのダウンロードには、AWS マネジメントコンソール または AWSKMS API を使用できます。HTTP リクエストを作成することにより、または、AWS SDK かコマンドラインツールのいずれかを通して、API を直接使用することができます。

トピック• パブリックキーとインポートトークンのダウンロード (コンソール) (p. 163)• パブリックキーとインポートトークンのダウンロード (AWS KMS API) (p. 164)

162

Page 171: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドパブリックキーとインポートトークンのダウンロード (コンソール)

パブリックキーとインポートトークンのダウンロード(コンソール)AWS マネジメントコンソール を使用してパブリックキーとインポートトークンをダウンロードできます。

1. キーマテリアルなしで CMK を作成するステップ (p. 159)を完了したとき、[ラップキーとインポートトークンのダウンロード] ページが開いている場合は、「Step 8」に進みます。

2. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

3. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。4. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。

Tip

キーマテリアルは、[オリジン] が [EXTERNAL] の対称 CMK にのみインポートできます。これは、キーマテリアルなしで CMK が作成されたことを示します。テーブルに [オリジン] 列

を追加するには、右上隅の設定アイコン ( ) を選択します。[オリジン] をオンにして、[確認] を選択します。

5. インポートを保留している CMK のエイリアスまたはキー ID を選択します。6. [Cryptographic configuration (暗号化設定)] セクションを展開し、その値を表示します。

キーマテリアルは、[対称] の [キータイプ] と [EXTERNAL] の [オリジン] でのみ CMK にインポートできます。インポートしたキーマテリアルを使用した CMK の作成の詳細については、「AWS KeyManagement Service (AWS KMS) にキーマテリアルをインポートする (p. 156)」を参照してください。

7. [キーマテリアル] セクションを展開し、[ラップキーとインポートトークンのダウンロード] を選択します。

[キーマテリアル] セクションは、[オリジン] 値が [EXTERNAL] の対称 CMK に対してのみ表示されます。

8. [ラップアルゴリズムの選択] で、キーマテリアルの暗号化に使用するオプションを選択します。オプションの詳細については、「ラップアルゴリズムの選択 (p. 162)」を参照してください。

OpenSSL でキーマテリアルを暗号化する (p. 165)顧客概念実証の例をステップ 3 (p. 165) で試す場合には、RSAES_OAEP_SHA_1 を選択します。

9. [ラップキーとインポートトークンのダウンロード] を選択して、ファイルを保存します。

[次へ] オプションがある場合、今すぐプロセスを続行するには、[次へ] を選択します。後で続行するには、[キャンセル] を選択します。それ以外の場合は、ウィンドウを閉じるため、[キャンセル] を選択するか、または [X] をクリックします。

10. 前のステップ (ImportParameters.zip) で保存した .zip ファイルを解凍します。

フォルダには以下のファイルが含まれています。

• ファイル名が wrappingKey_CMK_key_ID_timestamp のラップキー (パブリックキー) (たとえば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909) 。これは、2048 ビットの RSA パブリックキーです。

• ファイル名が importToken_CMK_key_ID_timestamp インポートトークン (たとえば、importToken_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909) 。

• テキストファイル名が README_CMK_key_ID_timestamp.txt (たとえば、README_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909.txt) 。このファイルには、ラップキー (パブ

163

Page 172: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドパブリックキーとインポートトークンのダウンロード (AWS KMS API)

リックキー) に関する情報、キーマテリアルの暗号化に使用するラップアルゴリズム、およびラップキー (パブリックキー) とインポートトークンの有効期限が切れる日時が含まれます。

11. プロセスを続行する場合は、「キーマテリアルの暗号化 (p. 165)」を参照してください。

パブリックキーとインポートトークンのダウンロード(AWS KMS API)AWS KMS API をパブリックキーとインポートトークンのダウンロードに使用するには、これらの項目をダウンロードする CMK を指定する GetParametersForImport リクエストを送信します。次の例では、AWS CLI を使用してこの操作を行う方法を示します。

この例では、暗号化オプションとして RSAES_OAEP_SHA_1 を指定します。別のオプションを指定するには、RSAES_OAEP_SHA_1 を RSAES_OAEP_SHA_256 または RSAES_PKCS1_V1_5 に置き換えます。1234abcd-12ab-34cd-56ef-1234567890ab をパブリックキーとインポートトークンをダウンロードする CMK のキー ID と置き換えます。CMK のキー ID または Amazon リソースネーム (ARN) を使用できますが、この操作に対して、エイリアスを使用することはできません。

Note

OpenSSL でキーマテリアルを暗号化する (p. 165)顧客概念実証の例をステップ 3 (p. 165) で試す場合には、RSAES_OAEP_SHA_1 を指定します。

$ aws kms get-parameters-for-import --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --wrapping-algorithm RSAES_OAEP_SHA_1 \ --wrapping-key-spec RSA_2048

コマンドが成功した場合は、以下のような出力が表示されます。

{ "ParametersValidTo": 1568290320.0, "PublicKey": "public key base64 encoded data", "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "ImportToken": "import token base64 encoded data"}

この出力を受け取る場合、base64 エンコードされたパブリックキーを保存し、個々のファイルにおいてトークンをインポートします。次に、各ファイルをバイナリデータに base64 デコードして、バイナリデータを新しいファイルに保存します。こうして後の手順のために項目を準備します。次の例を参照してください。

後の手順のためにパブリックキーとインポートトークンを準備するには

1. パブリックキーの base64 エンコードされたデータ (この例の出力では パパパパパパパパ base64 パパパパパパパパパパパ) をコピーして、新しいファイルに貼り付けて、ファイルを保存します。PublicKey.b64 など、ファイルにわかりやすい名前を付けます。

2. ファイル内容の base64 デコード、およびデコードされたデータの新しいファイルへの保存に、OpenSSL を使用します。次の例では、前のステップ (PublicKey.b64) で保存したファイルのデータをデコードして、PublicKey.bin という名前の新しいファイルに出力を保存します。

$ openssl enc -d -base64 -A -in PublicKey.b64 -out PublicKey.bin

インポートトークンにこれらの 2 つの手順を繰り返し、「ステップ 3: キーマテリアルを暗号化する (p. 165)」に進みます。

164

Page 173: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドステップ 3: キーマテリアルを暗号化する

キーマテリアルのインポート ステップ 3: キーマテリアルを暗号化する

パブリックキーをダウンロードし、トークンをインポート (p. 161)した後、パブリックキーを使用して、キーマテリアルを暗号化します。キーマテリアルはバイナリ形式である必要があります。

通常、ハードウェアセキュリティモジュール (HSM) またはキー管理システムからエクスポートする場合、キーマテリアルを暗号化します。バイナリ形式でキーマテリアルをエクスポートする方法については、HSM またはキー管理システムに関するドキュメントを参照してください。OpenSSL を使用して、概念実証デモを提供する、次のセクションを参照できます。

キーマテリアルを暗号化する場合、パブリックキーとインポートトークンをダウンロード (p. 161)(RSAES_OAEP_SHA_256、RSAES_OAEP_SHA_、RSAES_PKCS1_V1_5) したときに指定した、パディングオプションを使用した #1 暗号化スキームを使用します。

例: OpenSSL でキーマテリアルを暗号化する次の例は、256 ビット対称キーを生成してから KMS カスタマーマスターキー (CMK) にインポートするためにこのキーマテリアルを暗号化する OpenSSL の使用方法を示します。

Important

この例では、概念実証デモのみです。本稼働システムの場合、より安全な方法 (商用 HSM またはキー管理システムなど) を使用して、キーマテリアルを生成し、保存します。RSAES_OAEP_SHA_1 暗号化アルゴリズムは、この例に最適です。この例を実行する前に、 ステップ 2 (p. 161) でラップアルゴリズムに RSAES_OAEP_SHA_1 を使用したことを確認します。必要な場合には、ステップを繰り返してパブリックキーとトークンをダウンロードします。

バイナリキーマテリアルを生成し、AWS KMS へのインポート用に暗号化するために OpenSSLを使用するには

1. 次のコマンドを使用して、256 ビット対称キーを生成し、PlaintextKeyMaterial.bin という名前のファイルに保存します。

$ openssl rand -out PlaintextKeyMaterial.bin 32

2. 次のコマンドを使用して、前にダウンロードしたパブリックキーでキーマテリアルを暗号化して (パブリックキーとインポートトークンのダウンロード (AWS KMS API) (p. 164) を参照)「EncryptedKeyMaterial.bin」という名前のファイルに保存します。PublicKey.bin> を、パブリックキーを含むファイル名に置き換えます。コンソールからパブリックキーをダウンロードした場合は、このファイル名は wrappingKey_CMK_key_ID_timestamp となります (たとえば、wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909)。

$ openssl rsautl -encrypt \ -in PlaintextKeyMaterial.bin \ -oaep \ -inkey PublicKey.bin \ -keyform DER \ -pubin \ -out EncryptedKeyMaterial.bin

ステップ 4: キーマテリアルのインポート (p. 166) に進みます。

165

Page 174: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドステップ 4: キーマテリアルのインポート

キーマテリアルのインポート ステップ 4: キーマテリアルのインポート

キーマテリアルを暗号化 (p. 165)すると、AWS KMS カスタマーマスターキー (CMK) に使用するキーマテリアルをインポートできます。キーマテリアルをインポートするには、ステップ 3: キーマテリアルを暗号化する (p. 165) から暗号化されたキーマテリアルと、ステップ 2: パブリックキーおよびインポートトークンのダウンロード (p. 161) でダウンロードしたインポートトークンをアップロードします。パブリックキーとインポートトークンをダウンロードしたときに指定したのと同じ CMK にキーマテリアルをインポートする必要があります。

キーマテリアルをインポートする場合、オプションでキーマテリアルが有効期限切れになる時間を指定することができます。キーマテリアルが有効期限切れになると、AWS KMS はキーマテリアルを削除し、CMK は使用不可能になります。CMK を再び使用するには、キーマテリアルを再インポートする必要があります。

キーマテリアルが正常にインポートされると、CMK のキーステータスが有効に変更され、CMK を使用できます。

AWS マネジメントコンソール または AWS KMS API を使用して、キーマテリアルをインポートできます。HTTP リクエストを作成することにより、または、AWS SDK かコマンドラインツールのいずれかを通して、API を直接使用することができます。

トピック• キーマテリアルのインポート (コンソール) (p. 166)• キーマテリアルのインポート (AWS KMS API) (p. 167)

キーマテリアルのインポート (コンソール)AWS マネジメントコンソール を使用して、キーマテリアルをインポートできます。

1. [ラップキーとインポートトークンのダウンロード] ページが表示されている場合は、「Step 8」に進みます。

2. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

3. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。4. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。5. パブリックキーとインポートトークンをダウンロードした CMK のキー ID またはエイリアスを選択し

ます。6. [Cryptographic configuration (暗号化設定)] セクションを展開し、その値を表示します。

キーマテリアルは、[対称] の [キータイプ] と [EXTERNAL] の [オリジン] でのみ CMK にインポートできます。インポートしたキーマテリアルを使用した CMK の作成の詳細については、「AWS KeyManagement Service (AWS KMS) にキーマテリアルをインポートする (p. 156)」を参照してください。

7. [キーマテリアル] セクションを展開し、[キーマテリアルのアップロード] を選択します。

[キーマテリアル] セクションは、[キータイプ] が [対称] で、[オリジン] 値が[EXTERNAL] の CMK に対してのみ表示されます。

8. [Encrypted key material and import token (暗号化されたキーマテリアルとインポートトークン)] セクションの [Wrapped key material (ラップされたキーマテリアル)] で、[ファイルの選択] を選択します。次に、ラップされた (暗号化された) キーマテリアルを含むファイルをアップロードします。

166

Page 175: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーマテリアルのインポート (AWS KMS API)

9. [Encrypted key material and import token (暗号化されたキーマテリアルとインポートトークン)] セクションの [インポートトークン] で、[ファイルの選択] を選択します。ダウンロード (p. 163)したインポートトークンを含むファイルをアップロードします。

10. [有効期限オプション] セクションで、キーマテリアルの有効期限が切れているかどうかを判断します。有効期限の日時を設定するには、[キーマテリアルの有効期限] を選択し、カレンダーを使用して日付と時刻を選択します。

11. [完了] または [キーマテリアルのアップロード] を選択します。

キーマテリアルのインポート (AWS KMS API)AWS KMS API を使用してキーマテリアルをインポートするには、ImportKeyMaterial リクエストを送信します。次の例では、AWS CLI を使用してこの操作を行う方法を示します。

この例では、キーマテリアルの有効期限を指定しています。有効期限のないキーマテリアルをインポートするには、KEY_MATERIAL_EXPIRES を KEY_MATERIAL_DOES_NOT_EXPIRE と置き換え、--valid-toパラメータを除外します。

この例を使用するには:

1. 1234abcd-12ab-34cd-56ef-1234567890ab をパブリックキーとインポートトークンをダウンロードしたときに使用した CMK のキー ID と置き換えます。CMK を識別するには、そのキー ID またはARN を使用します。このオペレーションにエイリアスを使用することはできません。

2. EncryptedKeyMaterial.bin を、暗号化されたキーマテリアルを含むファイル名に置き換えます。3. ImportToken.bin を、インポートトークンを含むファイル名に置き換えます。

$ aws kms import-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --encrypted-key-material fileb://EncryptedKeyMaterial.bin \ --import-token fileb://ImportToken.bin \ --expiration-model KEY_MATERIAL_EXPIRES \ --valid-to 2019-09-17T12:00:00-08:00

インポートされたキーマテリアルの削除キーマテリアルをインポートするときに、有効期限を指定することができます。キーマテリアルが有効期限切れになると、AWS KMS は、キーマテリアルを削除し、カスタマーマスターキー (CMK) は使用不可能になります。またキーマテリアルをオンデマンドで削除できます。キーマテリアルの有効期限が切れるのを待っても、それを手動で削除しても、効果は同じです。AWS KMS が、キーマテリアルを削除すると、CMK のキーステータス (p. 236)が [インポート保留中] に変更され、CMK は使用できません。CMKを再び使用するには、同じキーマテリアルを再インポートする必要があります。

キーマテリアルを削除すると、即時に CMK に影響しますが、同じキーマテリアルを CMK に再インポートすることにより、キーマテリアルの削除をリバースできます。反対に、CMK の削除は元に戻すことはできません。キーの削除をスケジュール (p. 170)し、期限切れまでに必要な待機期間が終了すると、AWSKMS はキーマテリアルと CMK に関連付けられるすべてのメタデータを削除します。

キーマテリアルを削除するには、AWS マネジメントコンソール または AWS KMS API を使用できます。HTTP リクエストを作成することにより、または、AWS SDK かコマンドラインツールのいずれかを通して、API を直接使用することができます。

トピック• キーマテリアルの削除が、AWS KMS と統合された AWS のサービスに与える影響 (p. 168)

167

Page 176: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーマテリアルの削除が、AWS KMS と統合された AWS のサービスに与える影響

• キーマテリアルの削除 (コンソール) (p. 168)• キーマテリアルの削除 (AWS KMS API) (p. 169)

キーマテリアルの削除が、AWS KMS と統合されたAWS のサービスに与える影響キーマテリアルを削除すると、CMK はすぐに使用不可能になります。ただし、AWS サービスで使用されているあらゆるデータキー (p. 5)は、すぐには影響を受けません。つまり、キーマテリアルの削除は、CMK の下で保護されているデータおよび AWS リソースすべてに、すぐには影響を与えない可能性がありますが、最終的にはそれらは影響を受けます。

AWS KMS と統合された複数の AWS サービスがデータを保護しています。Amazon EBS や AmazonRedshift などの一部のサービスでは、カスタマーマスターキー (p. 3) (CMK) を AWS KMS で使用してデータキー (p. 5)を生成し、このデータキーを使用してデータを暗号化します。これらのプレーンテキストデータキーは、保護対象のデータが使用されている限り、メモリ内に残ります。

たとえば、次のシナリオが考えられます。

1. 暗号化された EBS ボリュームを作成し、インポートされたキーマテリアルを使用して CMK を指定します。Amazon EBS は CMK を使用してボリュームに暗号化されたデータキーを生成するよう AWS KMSに求めます。Amazon EBS は暗号化されたデータキーをボリュームに保存します。

2. EBS ボリュームを EC2 インスタンスにアタッチすると、Amazon EC2 は AWS KMS に CMK を使用するように要求し、EBS ボリュームの暗号化されたデータキーを復号します。メモリハイパーバイザーでAmazon EC2 によってプレーンテキストのデータキーが保存され、そのデータキーを使用して、ディスク I/O を EBS ボリュームに暗号化します。データキーは、EBS ボリュームが EC2 インスタンスにアタッチされる限り、メモリ内で維持されます。

3. インポートされたキーマテリアルを CMK から削除すると、使用できなくなります。これによって EC2インスタンスまたは EBS ボリュームにただちに影響が出ることはありません。これは、Amazon EC2が — CMK ではなく — プレーンテキストのデータキーを使用して、ボリュームがインスタンスにアタッチされている間に、すべてのディスク I/O を暗号化するためです。

4. ただし、暗号化された EBS ボリュームが EC2 インスタンスからデタッチされると、Amazon EBS はメモリからプレーンテキストのキーを削除します。次回に暗号化された EBS ボリュームを EC2 インスタンスにアタッチすると、このアタッチは失敗します。これは、Amazon EBS がボリュームの暗号化データキーの復号化に CMK を使用できないためです。EBS ボリュームを再度使用するには、CMK に同じキーマテリアルを再インポートする必要があります。

キーマテリアルの削除 (コンソール)AWS マネジメントコンソール を使用して、キーマテリアルを削除できます。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. 次のいずれかを行ってください。

• インポートされたキーマテリアルを使用して、CMK のチェックボックスをオンにします。[キーのアクション]、[キーマテリアルの削除] を選択します。

• インポートされたキーマテリアルを使用して、CMK のエイリアスまたはキー ID を選択します。ページの [キーマテリアル] セクションで、[キーマテリアルの削除] を選択します。

5. キーマテリアルを削除することを確認してから、[キーマテリアルの削除] を選択します。そのキーステータス (p. 236)に対応する CMK のステータスは、[インポート保留中] に変わります。

168

Page 177: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーマテリアルの削除 (AWS KMS API)

キーマテリアルの削除 (AWS KMS API)AWS KMS API を使用して、キーマテリアルを削除するには、DeleteImportedKeyMaterial リクエストを送信します。次の例では、AWS CLI を使用してこの操作を行う方法を示します。

1234abcd-12ab-34cd-56ef-1234567890ab を、削除するキーマテリアルのある CMK のアクセスキー ID で置き換えます。CMK のキー ID または ARN を使用できますが、この操作に対して、エイリアスを使用することはできません。

$ aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

169

Page 178: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の削除の仕組み

カスタマーマスターキーを削除するAWS Key Management Service (AWS KMS) でのカスタマーマスターキーの削除は、有害な操作であり、リスクが伴います。これは、キーマテリアルと、CMK に関連付けられるすべてのメタデータを削除し、元に戻すことはできません。CMK を削除すると、その CMK で暗号化されたデータを復号できなくなります。これは、そのデータが回復不能になることを意味します。CMK の削除は、そのキーをもう使用しないことが確実である場合にのみ行ってください。キーを使用しないことが確実でない場合は、削除ではなく、CMK の無効化 (p. 46)を検討します。無効化した CMK は、後から使用する必要があった場合に再度有効化できますが、削除した CMK は復元できません。

CMK を削除する前に、その CMK で暗号化された暗号化テキストの数を確認することが必要な場合があります。AWS KMS は、この情報や暗号化テキストを保存しません。この情報を取得するには、CMK の過去の使用を自身で判断する必要があります。この判断に役立つガイダンスについては、「カスタマーマスターキーの過去の使用状況を確認する (p. 179)」を参照してください。

明示的に削除をスケジュールし、必須の待機期間が終了しない限り、AWS KMS は CMK を削除しません。

ただし、CMK を削除する理由には次のものが考えられます (複数が組み合わさる場合もあります)。

• 不要になった CMK のキーライフサイクルを完了する• 使用しない CMK の維持に関連する管理オーバーヘッドやコストの発生を回避する• CMK リソースクォータ (p. 379)に対してカウントされる CMK の数を減らすには

Note

AWS アカウントを終了または削除した場合、CMK にはアクセスできなくなり、それらに対して課金されることはなくなります。アカウントを終了した場合は CMK を削除するようにスケジュールする必要はありません。

トピック• カスタマーマスターキーの削除の仕組み (p. 170)• キーの削除のスケジュールとキャンセル (p. 172)• キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する (p. 174)• Amazon CloudWatch アラームを作成し、削除保留中のカスタマーマスターキーの使用を検出す

る (p. 176)• カスタマーマスターキーの過去の使用状況を確認する (p. 179)

カスタマーマスターキーの削除の仕組み承認されたユーザーは、対称および非対称のカスタマーマスターキー (CMK) を削除します。手順はどちらのタイプの CMK でも同じです。

CMK の削除は有害でリスクを伴う操作であるため、AWS KMS は待機期間を設けています。AWS KMSで CMK を削除するには、キーの削除をスケジュールします。待機期間は、7 ~ 30 日の範囲で設定できます。デフォルトの待機時間は、30 日です。

削除を待機中は CMK ステータスおよびキーの状態が削除保留中になります。

170

Page 179: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド非対称 CMK の削除

• 削除が保留中の状態にある CMK を暗号化オペレーション (p. 10)で使用することはできません。• AWS KMS は削除が保留されている CMK のバッキングキーをローテーション (p. 152)しません。

待機期間の終了後、AWS KMS は CMK と関連するすべての AWS KMS データ (キーをポイントするエイリアスなど) を削除します。

キーの削除をスケジュールすると、AWS KMS は待機期間が終了する日時をレポートします。この日時は、最も早い場合でキーの削除をスケジュールした日から指定した日数が経過した時点、最も遅い場合は指定した日数が経過した時点から 24 時間後になります。たとえば、キーの削除をスケジュールして待機期間を 7 日に指定するとします。この場合、待機期間の終了は、リクエストした日時から 7~8 日後になります。待機期間の正確な終了日時は、AWS マネジメントコンソール、AWS CLI、または AWS KMS APIで確認できます。

待機期間を使用して、CMK が不要であり、今後も使用することがないことを確認します。AmazonCloudWatch アラーム (p. 176)を設定すると、待機期間中にユーザーまたはアプリケーションが CMK を使用しようとした場合に警告するようにできます。CMK を復元するには、待機期間の終了前にキーの削除をキャンセルします。待機期間の終了後は、キーの削除はキャンセルできず、AWS KMS は CMK を削除します。

非対称 CMK の削除承認された (p. 174)ユーザーは、対称または非対称 CMK を削除できます。これらの CMK の削除をスケジュールする手順は、両方のタイプのキーで同じです。ただし、非対称 CMK のパブリックキーは、AWSKMS の外部でダウンロード (p. 48) および使用できるため、特に暗号化に使用される非対称 CMK の場合(キーの使用方法は ENCRYPT_DECRYPT)、オペレーションによりさらに大きなリスクが生じます。

• CMK の削除をスケジュールすると、CMK のキー状態は [削除保留中] に変わり、CMK を暗号化オペレーション (p. 10)で使用できなくなります。ただし、削除をスケジュールしても、AWS KMS の外部にあるパブリックキーには影響しません。パブリックキーを持つユーザーは、引き続きそのパブリックキーを使ってメッセージを暗号化できます。キーの状態が変更されたという通知は受信しません。削除がキャンセルされない限り、パブリックキーで作成された暗号文は復号できません。

• 削除が保留中の CMK を使用しようとする試行を検出するアラーム、ログ、およびその他の戦略では、AWS KMS 外部でのパブリックキーの使用を検出できません。

• CMK が削除されると、その CMK に関連するすべての AWS KMS アクションが失敗します。ただし、パブリックキーを持つユーザーは、引き続きそのパブリックキーを使ってメッセージを暗号化できます。これらの暗号文は復号できません。

キー使用法が ENCRYPT_DECRYPT である非対称 CMK を削除する必要がある場合は、CloudTrail ログエントリを使用して、パブリックキーのダウンロードと共有が完了しているかどうかを確認します。完了している場合は、パブリックキーが AWS KMS の外部で使用されていないことを確認します。次に、CMK を無効にする (p. 46)(削除するのではなく)ことを検討してください。

カスタマーマスターキーの削除が AWS と統合されたAWS KMS のサービスに与える影響AWS KMS と統合された複数の AWS サービスがデータを保護しています。Amazon EBS や AmazonRedshift などの一部のサービスでは、カスタマーマスターキー (p. 3) (CMK) を AWS KMS で使用してデータキー (p. 5)を生成し、このデータキーを使用してデータを暗号化します。これらのプレーンテキストデータキーは、保護対象のデータが使用されている限り、メモリ内に残ります。

CMK を削除用にスケジュールすると使用不可になりますが、これによって AWS サービスでメモリ内のデータキーを使用したデータの暗号化および復号化ができなくなることはありません。このサービスは、削除保留中あるいは削除済みの CMK の使用が必要となるまで、影響を受けません。

171

Page 180: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの削除のスケジュールとキャンセル

たとえば、次のシナリオが考えられます。

1. 暗号化された EBS ボリュームを作成し、CMK を指定します。Amazon EBS は CMK を使用してボリュームに暗号化されたデータキーを生成するよう AWS KMS に求めます。Amazon EBS は暗号化されたデータキーをボリュームに保存します。

2. EBS ボリュームを EC2 インスタンスにアタッチすると、Amazon EC2 は AWS KMS に CMK を使用するように要求し、EBS ボリュームの暗号化されたデータキーを復号します。メモリハイパーバイザーでAmazon EC2 によってプレーンテキストのデータキーが保存され、そのデータキーを使用して、ディスク I/O を EBS ボリュームに暗号化します。データキーは、EBS ボリュームが EC2 インスタンスにアタッチされる限り、メモリ内で維持されます。

3. CMK の削除をスケジュールすると、使用不可となります。これによって EC2 インスタンスまたは EBSボリュームに直ちに影響が出ることはありません。これは、Amazon EC2 が — CMK ではなく — 平文のデータキーを使用してディスク I/O を EBS ボリュームに暗号化しているためです。

スケジュールされた時間が経過して AWS KMS が CMK を削除した場合でも、EC2 インスタンスあるいは EBS ボリュームに直ちに影響があるわけではありません。これは、Amazon EC2 が CMK ではなく、プレーンテキストデータキーを使用するためです。

4. ただし、暗号化された EBS ボリュームが EC2 インスタンスからデタッチされると、Amazon EBS はメモリからプレーンテキストのキーを削除します。次回に暗号化された EBS ボリュームを EC2 インスタンスにアタッチすると、このアタッチは失敗します。これは、Amazon EBS がボリュームの暗号化データキーの復号化に CMK を使用できないためです。

キーの削除のスケジュールとキャンセル次の手順は、AWS KMS で AWS マネジメントコンソール、AWS CLI、および AWS SDK for Java を使用してキーの削除をスケジュールしてキャンセルする方法を説明しています。

Warning

AWS KMS でのカスタマーマスターキーの削除は、有害な操作であり、リスクが伴います。CMKが不要であり、今後も使用しないことが確実である場合以外は、削除を実行しないでください。使用しないことが確実でない場合は、削除するのではなく CMK を無効化 (p. 46)する必要があります。

CMK を削除する前に、削除するための権限を得る必要があります。キーポリシーのみで AWS KMS 権限を指定している場合は、CMK を削除するために新しい権限を追加することが必要な場合があります。これらの権限の追加については、「キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する (p. 174)」を参照してください。

キーの削除をスケジュールし、キャンセルする方法• キーの削除のスケジュールとキャンセル (コンソール) (p. 172)• キーの削除のスケジュールとキャンセル (AWS CLI) (p. 173)• キーの削除のスケジュールとキャンセル (AWS SDK for Java) (p. 174)

キーの削除のスケジュールとキャンセル (コンソール)キーの削除のスケジュールとキャンセルは、AWS マネジメントコンソール で実行できます。

キーの削除をスケジュールするには

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

172

Page 181: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS CLI の使用

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. 削除する CMK の横にあるチェックボックスをオンにします。5. [Key actions (キーのアクション)]、[Schedule key deletion(キーの削除をスケジュール)] の順に選択し

ます。6. 待機中に、警告、および削除のキャンセルに関する情報を読み、検討してください。削除をキャンセ

ルする場合は、[キャンセル] を選択します。7. [Waiting period (in days) (待機期間 (日数))] に、日数として 7~30 の値を入力します。8. [Confirm you want to schedule this key for deletion in <number of days> days. (<日日> 日でこのキー

の削除をスケジュールしてもよろしいですか?)] の横にあるチェックボックスをオンにします。9. [Schedule deletion] を選択します。

CMK ステータスが [Pending deletion (削除保留中)] に変わります。

キーの削除をキャンセルするには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. 左のナビゲーションペインで、暗号化キーを選択します。3. フィルタ で、AWS の該当するリージョンを選択します。4. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。5. 復旧する CMK の横にあるチェックボックスをオンにします。6. [Key actions (キーのアクション)]、[Cancel key deletion (キーの削除をキャンセル)] の順に選択しま

す。

CMK ステータスが [Pending deletion (削除保留中)] から [Disabled (無効)] に変わります。CMK を使用するには、有効化する (p. 46)必要があります。

キーの削除のスケジュールとキャンセル (AWS CLI)次の例のように、aws kms schedule-key-deletion コマンドを使用して AWS CLI からキーの削除をスケジュールします。

$ aws kms schedule-key-deletion --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --pending-window-in-days 10

正しく使用すると、AWS CLI は以下の例に示す出力のような出力を返します。

{ "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "DeletionDate": 1442102400.0}

次の例のように、aws kms cancel-key-deletion コマンドを使用して AWS CLI からキーの削除をキャンセルします。

$ aws kms cancel-key-deletion --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

正しく使用すると、AWS CLI は以下の例に示す出力のような出力を返します。

{

173

Page 182: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS SDK for Java の使用

"KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"}

CMK のステータスが [Pending Deletion] から [Disabled] に変わります。CMK を使用するには、有効化する (p. 46)必要があります。

キーの削除のスケジュールとキャンセル (AWS SDKfor Java)次の例では、AWS SDK for Java で CMK の削除をスケジュールする方法を示します。この例では、事前にAWSKMSClient を kms としてインスタンス化している必要があります。

String KeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

int PendingWindowInDays = 10;

ScheduleKeyDeletionRequest scheduleKeyDeletionRequest =new ScheduleKeyDeletionRequest().withKeyId(KeyId).withPendingWindowInDays(PendingWindowInDays);kms.scheduleKeyDeletion(scheduleKeyDeletionRequest);

次の例では、AWS SDK for Java でキーの削除をキャンセルする方法を示します。この例では、事前にAWSKMSClient を kms としてインスタンス化している必要があります。

String KeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

CancelKeyDeletionRequest cancelKeyDeletionRequest =new CancelKeyDeletionRequest().withKeyId(KeyId);kms.cancelKeyDeletion(cancelKeyDeletionRequest);

CMK のステータスが [Pending Deletion] から [Disabled] に変わります。CMK を使用するには、有効化する (p. 46)必要があります。

キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する

IAM ポリシーを使用して AWS KMS 権限を許可している場合、IAM 管理者アクセス (AWS) または"Action": "*" フルアクセス (AWS KMS) を持つすべての "Action": "kms:*" ユーザーとロールは、すでに AWS KMS CMK のキー削除をスケジュールおよびキャンセルすることができます。キーポリシーのみで AWS KMS 権限を許可している場合は、IAM ユーザーとロールに CMK の削除を許可するために新しい権限を追加することが必要な場合があります。これらの権限を追加する方法については、次のステップを参照してください。

次の手順では、AWS マネジメントコンソール または AWS CLI を使用してキーポリシーに権限を追加する方法を説明します。

キーの削除をスケジュールおよびキャンセルする権限を追加する方法• キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する (コンソー

ル) (p. 175)• キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する (AWS CLI) (p. 175)

174

Page 183: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS マネジメントコンソール の使用

キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する (コンソール)AWS マネジメントコンソール を使用すると、キーの削除をスケジュールおよびキャンセルする権限を追加できます。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. 権限を変更する CMK のエイリアスまたはキー ID を選択します。5. [Key policy (キーポリシー)] セクションの [Key deletion (キーの削除)] で、[Allow key administrators to

delete this key (キーの管理者がこのキーを削除できるようにします。)] をオンにして、[変更の保存]を選択します。

Note

[Allow key administrators to delete this key (キーの管理者がこのキーを削除できるようにします。)] オプションが表示されない場合は、通常、AWS KMS API を使用してこのキーポリシーを変更したことを意味します。この場合は、キーポリシードキュメントを手動で更新する必要があります。kms:ScheduleKeyDeletion アクセス許可およびkms:CancelKeyDeletion アクセス許可をキーポリシーのキー管理者ステートメント("Sid": "Allow access for Key Administrators") に追加した後、[変更の保存] を選択します。

キーの削除をスケジュールおよびキャンセルするためのアクセス許可を追加する (AWS CLI)AWS Command Line Interface を使用すると、キーの削除をスケジュールおよびキャンセルする権限を追加できます。

キーの削除をスケジュールおよびキャンセルする権限を追加するには

1. aws kms get-key-policy コマンドを使用して既存のキーポリシーを再取得し、ポリシードキュメントをファイルに保存します。

2. 任意のテキストエディタでポリシードキュメントを開き、キー管理者にアクセス許可を追加するポリシーステートメント ("Sid": "Allow access for Key Administrators" を使用するポリシーステートメントなど) に kms:ScheduleKeyDeletion アクセス許可およびkms:CancelKeyDeletion アクセス許可を追加します。その後、ファイルを保存します。次の例は、これらの 2 つの権限を持つポリシーステートメントを示しています。

{ "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/KMSKeyAdmin"}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*",

175

Page 184: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon CloudWatch アラームを作成する

"kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*"}

3. aws kms put-key-policy コマンドを使用してキーポリシーを CMK に適用します。

Amazon CloudWatch アラームを作成し、削除保留中のカスタマーマスターキーの使用を検出する

暗号化オペレーションで削除を保留中の CMK をアカウントのユーザーが使用しようとしたときに通知する、AWS CloudTrail、Amazon CloudWatch Logs および Amazon Simple Notification Service(AmazonSNS) の機能を組み合わせることができます。この通知を受け取った場合は、CMK の削除をキャンセルし、削除する決定を検討し直す必要があります。

次の手順は、「Key ARN is pending deletion」エラーメッセージを生成する AWS KMS API リクエストが CloudTrail ログファイルに書き込まれた場合に通知を受け取る方法を説明します。このエラーメッセージは、暗号化オペレーション(Encrypt、Decrypt、GenerateDataKey、GenerateDataKeyWithoutPlaintext、およびReEncrypt) で、ユーザーまたはアプリケーションが CMK の使用を試みたことを示します。この通知はエラーメッセージにリンクされているため、ListKeys、CancelKeyDeletion、PutKeyPolicy など、削除を保留中の CMK で許可される API オペレーションを使用するときはトリガーされません。このエラーメッセージを返す AWS KMS API オペレーションのリストを表示するには、「キー状態: CMK への影響 (p. 236)」を参照してください。

受信した E メール通知には、CMK や暗号化オペレーションは示されません。その情報は CloudTrail ログ (p. 309)で確認できます。その代わりに、アラームの状態が [OK] から [アラーム] に変わったことが Eメールで報告されます。CloudWatch アラームと状態変更の詳細については、Amazon CloudWatch ユーザーガイドの「Amazon CloudWatch アラームの作成」を参照してください。

Warning

この Amazon CloudWatch アラームは、AWS KMS 外部の非対称 CMK のパブリックキーの使用を検出できません。復号できない暗号テキストの作成など、パブリックキー暗号化に使用される非対称 CMK を削除する特別なリスクの詳細については、「非対称 CMK の削除 (p. 171)」を参照してください。

トピック• CloudWatch アラームの要件 (p. 176)• CloudWatch アラームの作成 (p. 177)

CloudWatch アラームの要件CloudWatch アラームを作成する前に、AWS CloudTrail 証跡を作成し、CloudTrail ログファイルをAmazon CloudWatch Logs に配信するように CloudTrail を設定する必要があります。

1. CloudTrail 証跡を作成します。

CloudTrail は、AWS アカウントを作成すると、そのアカウントで自動的に有効になります。ただし、AWS KMS のイベントなど、アカウントのイベントの継続的な記録を取得するには、証跡を作成します。

176

Page 185: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCloudWatch アラームの作成

2. ログファイルを CloudWatch Logs に送信するように CloudTrail を設定します。

CloudTrail ログファイルを CloudWatch Logs に送信するように設定します。これにより、CloudWatchLogs は、削除を保留中の CMK の使用を試みる AWS KMS API リクエストのログをモニタリングできます。

CloudWatch アラームの作成暗号化オペレーションで削除が保留中の CMK を AWS KMS API リクエストが使用しようとした場合に通知を受け取るには、CloudWatch アラームを作成し、通知を設定する必要があります。

削除が保留中の KMS CMK の使用しようとする試みをモニタリングする CloudWatch アラームを作成するには

1. AWS マネジメントコンソール にサインインした後、https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

2. 右上のリージョンの選択を使用して、モニタリングする AWS リージョンを選択します。3. 左のナビゲーションペインで [Logs] を選択します。4. [ロググループ] の一覧で、ロググループの横にあるオプションボタンを選択します。その後、[Create

Metric Filter] を選択します。5. [Filter Pattern] に、以下を入力するか貼り付けます。

{ $.eventSource = kms* && $.errorMessage = "* is pending deletion."}

[Assign Metric] を選択します。6. [Create Metric Filter and Assign a Metric] ページで、次の操作を実行します。

a. [メトリクス名前空間] に「CloudTrailLogMetrics」と入力します。b. [メトリクス名] に「KMSKeyPendingDeletionErrorCount」と入力します。c. [メトリクスの詳細設定の表示] を選択した後、最新の値でない場合は、[メトリクス値] に「1」と

入力します。d. [Create Filter] を選択します。

7. フィルタボックスで、[Create Alarm] を選択します。8. [Create Alarm] ウィンドウで、以下の操作を行います。

a. [アラームのしきい値] セクションで、[名前] に「KMSKeyPendingDeletionErrorAlarm」と入力します。オプションとして説明を追加することもできます。

b. [次の時:] の後の [が:] で [>=] を選択し、「1」と入力します。c. 必要に応じて、[1 out of n datapoints (n のデータポイントにつき 1 つ)] に「1」と入力します。d. [追加設定] セクションで、[欠落データの処理方法] で、[適性 (しきい値を超えていない)] を選択し

ます。e. [アクション] セクションの [通知の送信先] で、次のいずれかの操作を行います。

• 新しい Amazon SNS トピックを使用するには、[新しいリスト] を選択して新しいトピック名(KMSAlert など) を入力します。[メールリスト] に、E メールアドレスを少なくとも 1 つ入力します。カンマで区切って、複数の E メールアドレスを入力できます。

• 既存の Amazon SNS トピックを使用するには、使用するトピックの名前を選択します。f. [Create Alarm] を選択します。

177

Page 186: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCloudWatch アラームの作成

9. メールアドレスに通知を送信することを選択した場合、[email protected] から受信した「AWS Notification - Subscription Confirmation」という件名の E メールメッセージを開きます。 Eメールメッセージ内の [Confirm subscription] リンクを選択し、E メールアドレスを確認します。

Note

E メールアドレスを確認しない限り、E メール通知は受け取れません。

この手順を完了すると、CloudWatch アラームが ALARM 状態になる度に通知が送られます。このアラームについての通知を受信した場合、いずれかのユーザーやアプリケーションがまだこの CMK を使用する必要があることを意味します。その場合は、削除が必要かどうかを時間をかけて判断するために、CMK の削除をキャンセル (p. 172)する必要があります。

178

Page 187: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の過去の使用状況を確認する

カスタマーマスターキーの過去の使用状況を確認する

カスタマーマスターキー (CMK) を削除する前に、そのキーでどの程度の数の暗号化テキストが暗号化されているかを確認することが必要な場合があります。AWS KMS には、この情報や暗号化テキストを保存しません。この情報を取得するには、CMK の過去の使用を自身で判断する必要があります。CMK の過去の使用状況を把握することで、今後その CMK が必要かどうかを容易に判断できる場合があります。CMK の過去の使用状況を明らかにするには、次のガイダンスが役に立ちます。

Warning

過去と実際の使用方法を決定するためのこれらの戦略は、AWS ユーザーと AWS KMS オペレーションに対してのみ有効です。AWS KMS の外部で非対称 CMK のパブリックキーの使用を検出することはできません。復号できない暗号テキストの作成など、パブリックキー暗号化に使用される非対称 CMK を削除する特別なリスクの詳細については、「非対称 CMK の削除 (p. 171)」を参照してください。

トピック• CMK のアクセス許可を確認し、潜在的な使用の範囲を判断する (p. 179)• AWS CloudTrail ログを確認して実際の使用状況を判断する (p. 179)

CMK のアクセス許可を確認し、潜在的な使用の範囲を判断するカスタマーマスターキー (CMK) に現在アクセスできるユーザーやアプリケーションを明らかにすることで、CMK が使用されている範囲や、今後必要かどうかを容易に判断できる場合があります。カスタマーマスターキー (CMK) に現在アクセスできるユーザーやアプリケーションを明らかにする方法については、「AWS KMS カスタマーマスターキーへのアクセスの確認 (p. 127)」を参照してください。

AWS CloudTrail ログを確認して実際の使用状況を判断するAWS KMS は AWS CloudTrail と統合されているため、すべての AWS KMS API アクティビティは、CloudTrail ログファイルに記録されます。カスタマーマスターキーのあるリージョンで CloudTrail をオンにしている場合、CloudTrail ログファイルを確認し、特定の CMK のすべての AWS KMS API アクティビティの履歴を表示して使用履歴を確認できます。CMK の使用履歴を使用することで、その CMK が今後必要かどうかを容易に判断できる場合があります。

次の例は、Amazon Simple Storage Service (Amazon S3) に保存されたオブジェクトを保護するために KMS CMK が使用されたときに生成された CloudTrail ログエントリを示しています。この例では、オブジェクトは AWS KMS管理型キー (SSE-KMS)による (p. 280) サーバー側の暗号化を使用したAmazon S3 にアップロードされています。SSE-KMS を Amazon S3 使用してオブジェクトをアップロードするときに、オブジェクトの保護に使用する KMS CMK を指定します。Amazon S3 が AWS KMSGenerateDataKey オペレーションを使用してオブジェクト固有のデータキーをリクエストすると、このリクエストイベントは次のようなエントリで CloudTrail にログインします。

{ "eventVersion": "1.02", "userIdentity": { "type": "AssumedRole", "principalId": "AROACKCEVSQ6C2EXAMPLE:example-user", "arn": "arn:aws:sts::111122223333:assumed-role/Admins/example-user",

179

Page 188: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS CloudTrail ログを確認して実際の使用状況を判断する

"accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2015-09-10T23:12:48Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admins", "accountId": "111122223333", "userName": "Admins" } }, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-09-10T23:58:18Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": {"aws:s3:arn": "arn:aws:s3:::example_bucket/example_object"}, "keySpec": "AES_256", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "requestID": "cea04450-5817-11e5-85aa-97ce46071236", "eventID": "80721262-21a5-49b9-8b63-28740e7ce9c9", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

後で Amazon S3 からこのオブジェクトをダウンロードすると、Amazon S3 は Decrypt リクエストをAWS KMS に送信し、指定された CMK を使用してオブジェクトのデータキーを復号します。この操作を行うとき、CloudTrail ログファイルには、次のようなエントリが含まれます。

{ "eventVersion": "1.02", "userIdentity": { "type": "AssumedRole", "principalId": "AROACKCEVSQ6C2EXAMPLE:example-user", "arn": "arn:aws:sts::111122223333:assumed-role/Admins/example-user", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2015-09-10T23:12:48Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admins", "accountId": "111122223333", "userName": "Admins" }

180

Page 189: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS CloudTrail ログを確認して実際の使用状況を判断する

}, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-09-10T23:58:39Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": {"aws:s3:arn": "arn:aws:s3:::example_bucket/example_object"}}, "responseElements": null, "requestID": "db750745-5817-11e5-93a6-5b87e27d91a0", "eventID": "ae551b19-8a09-4cfc-a249-205ddba330e3", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

AWS KMS API アクティビティは、すべて CloudTrail によって記録されます。これらのログエントリを評価すると、特定の CMK の過去の使用状況を明らかにでき、その CMK を削除する必要があるかどうかを容易に判断できる場合があります。

CloudTrail ログファイルに表示される AWS KMS API アクティビティのその他の例については、「AWSCloudTrail による AWS KMS API コールのログ記録 (p. 309)」を参照してください。CloudTrail の詳細については、「AWS CloudTrail User Guide」を参照してください。

181

Page 190: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

カスタムキーストアの使用AWS KMS は、AWS CloudHSM クラスターによってバックアップされるカスタムキーストア (p. 184)をサポートします。カスタムキーストアで AWS KMS カスタマーマスターキー (p. 3) (CMK) を作成すると、AWS KMS は所有し管理している AWS CloudHSM クラスターに CMK 用の抽出不可能なキーマテリアルを生成して格納します。カスタムキーストアで CMK を使用する場合、暗号化オペレーション (p. 208)はクラスター内の HSM で実行されます。この機能は、AWS KMS の利便性および広範囲な統合と、AWS アカウントの AWS CloudHSM クラスターの追加されたコントロールを結合します。

AWS KMS は、フルコンソールと API サポートを提供して、カスタムキーストアを作成、使用、および管理します。カスタムキーストアで CMK を作成すると、あらゆる CMK と同じように使用できます。たとえば、CMK を使用して、データキーの生成やデータの暗号化を実行できます。カスタマー管理の CMK をサポートする AWS サービスを使用して、カスタムキーストアの CMK を使用することもできます。

カスタムキーストアは必要ですか?

ほとんどの場合、FIPS 140-2 検証済み暗号化モジュールによって保護されるデフォルトの AWS KMS キーストアは、セキュリティ要求を満たします。メンテナンス責任や追加サービスへの依存の強化は必要ありません。

ただし、組織に次のいずれかの要件がある場合、カスタムキーストアの作成を検討してください。

• キーマテリアルは共有環境に保存できません。• キーマテリアルを複数の AWS リージョンにバックアップする必要があります。• キーマテリアルは、補助的な、独立した監査パスの対象とする必要があります。• キーマテリアルを生成して保存する HSM は、FIPS 140-2 レベル 3 で認定を受ける必要があります。

カスタムキーストアはどのように機能しますか?

それぞれのカスタムキーストアは、AWS アカウントの AWS CloudHSM クラスターに関連付けられます。カスタムキーストアをそのクラスターに接続すると、AWS KMS が、接続をサポートするためにネットワークインフラストラクチャを作成します。次に、クラスターの専用暗号化ユーザー (p. 185)の認証情報を使用して、クラスターのキー AWS CloudHSM クライアントにログインします。

AWS KMS でカスタムキーストアを作成して管理し、AWS CloudHSM で HSM クラスターを作成して管理します。AWS KMS カスタムキーストアでカスタマーマスターキー (CMK) を作成するとき、AWSKMS で CMK を表示して管理します。ただし、クラスターの他のキーに実行するのと同じように、AWSCloudHSM でキーマテリアルを表示して管理することもできます。

182

Page 191: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

カスタムキーストアで、AWS KMS によって生成されたキーマテリアルを使用して対称 CMK を作成 (p. 203)できます。同じ手法を使って、AWS KMS キーストアの CMK に使用するカスタムキーストアで CMK を表示して管理することができます。IAM とキーポリシーを使用してアクセスをコントロールしたり、タグやエイリアスを作成したり、CMK を有効および無効にしたり、キーの削除をスケジュールしたりできます。CMK を暗号化オペレーション (p. 208)で使用したり、AWS KMS と統合された AWS のサービスで使用したりできます。

さらに、HSM の作成や削除やバックアップの管理など、AWS CloudHSM クラスターを完全制御できます。AWS CloudHSM クライアントとサポートされているソフトウェアライブラリを使用して、CMK のキーマテリアルを表示、監査、管理できます。カスタムキーストアが切断されている間は、AWS KMS はカスタムキーストアにアクセスできません。また、ユーザーは、暗号化オペレーションのカスタムキーストアで CMK を使用できません。こうした制御の強化により、カスタムキーストアがそれを必要とする組織のための強力なソリューションとなります。

開始方法

カスタムキーストアを作成および管理するには、AWS KMS と AWS CloudHSM の機能を使用します。

1. AWS CloudHSM で開始します。アクティブな AWS CloudHSM クラスターを作成するか、既存のクラスターを選択します。クラスターには、少なくとも 2 つの異なるアベイラビリティーゾーンのアクティブな HSM が必要です。次に、AWS KMS のそのクラスターで専用の暗号化ユーザー (CU) アカウント (p. 185)を作成します。

2. AWS KMS で、選択した AWS CloudHSM クラスターに関連するカスタムキーストアを作成します (p. 188)。AWS KMS は、カスタムキーストアを作成、表示、編集、削除できる完全な管理インターフェイス (p. 192)を提供します。

3. カスタムキーストアを使用する準備ができると、その関連付けられた AWS CloudHSM クラスター (p. 196)に接続されます。AWS KMS が、接続をサポートするのに必要なネットワークインフラストラクチャを作成します。次に、専用の暗号化ユーザーアカウント認証情報を使用してクラスターへのログインが行われ、クラスターでキーマテリアルを生成して管理できるようになります。

4. これで、カスタムキーストアで対称 CMK を作成 (p. 203)できます。カスタムキーストアを指定するだけで、CMK を作成できます。

どの時点で問題が発生しても、「カスタムキーストアのトラブルシューティング (p. 214)」トピックでヘルプを見つけることができます。回答が見つからない場合は、このガイドの各ページの下部にあるフィードバックリンクを使用するか、AWS Key Management Service ディスカッションフォーラム に質問を投稿してください。

クォータ

183

Page 192: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアとは

AWS アカウントまたはリージョンのカスタムキーストアの数に対するリソースクォータはありません。ただし、各 AWS リージョンでの AWS CloudHSM クラスター数のクォータと、各カスタムキーストアのCMK を使用する暗号化オペレーションのレートの クォータのリクエスト (p. 380) はあります。

リージョン

AWS KMS は、AWS KMS と AWS CloudHSM の両方が利用可能なすべての AWS リージョンでカスタムキーストアをサポートします。各サービスがサポートする AWS リージョンのリストは、「AWS KeyManagement Service エンドポイントとクォータ」と『アマゾン ウェブ サービス全般のリファレンス』の「AWS CloudHSM エンドポイントとクォータ」を参照してください。

サポートされていない機能

カスタムキーストアでは、非対称 CMK (p. 138)、非対称データキーペア (p. 7)、またはインポートされたキーマテリアル (p. 156)を持つ CMK はサポートされません。また、カスタムキーストアの CMK で自動キーローテーション (p. 151) を有効にすることはできません。

トピック• カスタムキーストアとは (p. 184)• カスタムキーストアへのアクセスのコントロール (p. 186)• カスタムキーストアの作成 (p. 188)• カスタムキーストアの管理 (p. 192)• カスタムキーストアでの CMK の管理 (p. 202)• カスタムキーストアのトラブルシューティング (p. 214)

カスタムキーストアとはこのトピックでは、AWS KMS カスタムキーストアで使用される概念の一部について説明します。

トピック• AWS KMS カスタムキーストア (p. 184)• AWS CloudHSM クラスター (p. 185)• kmsuser Crypto User (p. 185)• カスタムキーストアでの CMK (p. 186)

AWS KMS カスタムキーストアキーストア は、暗号化キーを保存するための安全な場所です。AWS KMS のデフォルトのキーストアは、保存されているキーを生成および管理するためのメソッドもサポートしています。デフォルトでは、AWSKMS で作成するカスタマーマスターキー (CMK) は、FIPS 140-2 で検証された暗号化モジュールであるハードウェアセキュリティモジュール (HSM) で生成され保護されます。CMK はモジュールを暗号化したままにはしません。

ただし、HSM の制御をさらに強化する必要がある場合は、所有し管理している AWS CloudHSM クラスターの FIPS 140-2 レベル 3 HSM によってバックアップされるカスタムキーストアを作成できます。

カスタムキーストアは、AWS KMS クラスターに関連付けられた AWS CloudHSM リソースです。カスタムキーストアに AWS KMS CMKを 作成すると、AWS KMS は関連する AWS CloudHSM クラスターに、256 ビットの、永続的で、エクスポート不可能な AES (Advanced Encryption Standard) 対称キーが生成されます。このキーマテリアルは、HSM を非暗号化のままにしません。カスタムキーストアで CMK を使用する場合、暗号化オペレーションはクラスター内の HSM で実行されます。

カスタムキーストアは、AWS KMS の便利で包括的なキー管理インターフェイスと、AWS アカウントのAWS CloudHSM クラスターによって提供される追加のコントロールを組み合わせています。この統合さ

184

Page 193: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS CloudHSM クラスター

れた機能により、クラスター、HSM、およびバックアップの管理など、キーマテリアルを保管する HSMを完全に制御しながら、AWS KMS で CMK を作成、管理、使用することができます。AWS KMS コンソールと API を使用して、カスタムキーストアとその CMK を管理できます。関連するクラスターを管理するには、AWS CloudHSM コンソール、API、クライアントソフトウェア、および関連するソフトウェアライブラリを使用することもできます。

カスタムキーストアを表示および管理し (p. 192)、プロパティを編集して (p. 194)、関連する AWSCloudHSM クラスターとの接続および切断を行うことができます (p. 196)。カスタムキーストアを削除する (p. 201)必要がある場合は、削除をスケジュールし、猶予期間が終了するまで待機することによって、カスタムキーストア内の CMK を最初に削除する必要があります。カスタムキーストアを削除すると、リソースが AWS KMS から削除されますが、AWS CloudHSM クラスターには影響しません。

AWS CloudHSM クラスターすべての AWS KMS カスタムキーストアは、1 つの AWS CloudHSM クラスターに関連付けられています。カスタムキーストアにカスタマーマスターキー (CMK) を作成すると、AWS KMS は関連するクラスターにキーマテリアルを作成します。カスタムキーストアで CMK を使用すると、暗号化オペレーションは関連するクラスターで実行されます。

各 AWS CloudHSM クラスターは、1 つのカスタムキーストアにのみ関連付けることができます。選択したクラスターを別のキーストアに関連付けたり、関連するクラスターとバックアップ履歴を共有することはできません。クラスターは初期化されてアクティブでなければならず、AWS KMS カスタムキーストアと同じ AWS アカウントとリージョンに存在する必要があります。新しいクラスターを作成したり、既存のクラスターを使用したりすることができます。AWS KMS はクラスターの排他的使用を必要としません。カスタムキーストアに CMK を作成するには、関連するクラスターに少なくとも 2 つのアクティブなHSM が含まれている必要があります。他のすべてのオペレーションでは、1 つの HSM しか必要ありません。

カスタムキーストアを作成するときにクラスターを指定しますが、変更することはできません。ただし、バックアップ履歴を共有するクラスターは、元のクラスターに置き換えることができます。これにより、必要に応じてクラスターを削除し、バックアップの 1 つから作成したクラスターに置き換えることができます。関連する AWS CloudHSM クラスターを完全に制御することにより、ユーザーとキーを管理し、HSM を作成および削除して、バックアップを使用および管理できます。

カスタムキーストアを使用する準備ができたら、関連する AWS CloudHSM クラスターに接続します。いつでもカスタムキーストアを接続および切断 (p. 196)できます。カスタムキーストアが接続されている場合は、その CMK を作成して使用できます。接続が切断されると、カスタムキーストアとその CMK を表示および管理できます。ただし、新しい CMK を作成したり、カスタムキーストアで CMK を使用して暗号化オペレーションを行うことはできません。

kmsuser Crypto User関連する AWS CloudHSM クラスターのキーマテリアルを作成および管理するために、AWS KMS は専用の AWS CloudHSM crypto user (CU) をkmsuser という名前のクラスターに追加します。kmsuser CUは、クラスター内のすべての HSM に自動的に同期された標準の CU アカウントで、クラスターバッグに保存されます。

カスタムキーストアを作成する前に、cloudhsm_mgmt_util の createUser コマンドを使用して、AWSCloudHSM クラスターに kmsuser CU アカウント (p. 189)を作成します。次に、カスタムキーストアを作成すると (p. 188)、kmsuser アカウントのパスワードが AWS KMS に提供されます。カスタムキーストアを接続すると (p. 196)、AWS KMS は kmsuser CU としてクラスターにログインし、パスワードをローテーションします。

カスタムキーストアが接続されている限り、AWS KMS は kmsuser としてログインしたままです。このCU アカウントは他の目的では使用しないでください。ただし、kmsuser CU アカウントの最終的な制御は保持されます。kmsuser が所有するキーのキーハンドルを見つけることができます (p. 213)。必要に応じて、カスタムキーストアを切断し (p. 196)、kmsuser パスワードを変更します。kmsuser としてクラスターにログインし (p. 219)、kmsuser が所有するキーを表示して管理します。

185

Page 194: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK

kmsuser CU アカウントの作成手順については、「kmsuser Crypto User を作成する (p. 189)」を参照してください。

カスタムキーストアでの CMKAWS マネジメントコンソール または AWS KMS API を使用して、カスタムキーストアにカスタマーマスターキー (p. 3) (CMK) を作成します。AWS KMS CMK で使用するのと同じ方法を使用します。唯一の違いは、カスタムキーストアを特定し、キーマテリアルのオリジンが AWS CloudHSM クラスターであることを指定する必要があることです。

カスタムキーストアに CMK を作成すると (p. 203)、AWS KMS は AWS KMS に CMK を作成し、関連するクラスターに 256 ビットの、永続的で、エクスポート不可能な AES (Advanced Encryption Standard) 対称バッキングキーが生成されます。AWS CloudHSM は異なるタイプの対称キーと非対称キーをサポートしていますが、AWS KMS とカスタムキーストアは AES 対称キーのみをサポートしています。

AWS KMS コンソールのカスタムキーストアで CMK を表示し、コンソールオプションを使用してカスタムキーストア ID を表示できます。また、DescribeKey オペレーションを使用して、カスタムキーストアID と AWS CloudHSM クラスター ID を見つけることもできます。

カスタムキーストアの CMK は、AWS KMS の CMK と同じように動作します。認可されたユーザーは、CMK の使用と管理に同じアクセス許可が必要です。同じコンソールの手順および API オペレーションを使用して、カスタムキーストアの CMK を表示および管理します。これには、CMK の有効化と無効化、タグとエイリアスの作成と使用、IAM とキーポリシーの設定と変更が含まれます。カスタムキーストアで CMK を暗号化オペレーションに使用し、カスタマー管理の CMK の使用をサポートする統合 AWSサービス (p. 241)で CMK を使用できます。ただし、自動キーローテーション (p. 151)を有効にすることはできません。また、キーマテリアルをカスタムキーストアの CMK にインポートする (p. 156)ことはできません。

また、カスタムキーストア内の CMK のスケジュール削除 (p. 213)にも同じプロセスを使用します。待機期間が終了すると、AWS KMS は AWS KMS から CMK を削除します。次に、関連付けられた AWSCloudHSM クラスターから CMK のキーマテリアルを可能な限り削除します。ただし、クラスターとそのバックアップから、手動で孤立したキーマテリアルを削除する (p. 218)必要があります。

カスタムキーストアへのアクセスのコントロールIAM ポリシーを使用して AWS KMS カスタムキーストアおよび AWS CloudHSM クラスターへのアクセスをコントロールします。IAM ポリシーおよびキーポリシーを使用して、カスタムキーストアのカスタマーマスターキー (CMK) へのアクセスをコントロールできます。ユーザー、グループ、およびロールには、実行する可能性が高いタスクに必要なアクセス許可のみを与えることをお勧めします。

トピック• カスタムキーストアマネージャーおよびユーザーの承認 (p. 186)• AWS CloudHSM リソースおよび Amazon EC2 リソースを管理することを AWS KMS に許可す

る (p. 187)

カスタムキーストアマネージャーおよびユーザーの承認カスタムキーストアを設計するときは、そのキーストアを使用および管理するプリンシパルに必要なアクセス許可のみが付与されていることを確認してください。次のリストは、カスタムキーストアの管理者とユーザーに必要な最小限のアクセス許可を示しています。

• カスタムキーストアを作成および管理するプリンシパルは、カスタムキーストア API オペレーションを使用するために次のアクセス許可を必要とします。

186

Page 195: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS CloudHSM リソースおよび Amazon EC2 リ

ソースを管理することを AWS KMS に許可する

• cloudhsm:DescribeClusters

• kms:CreateCustomKeyStore

• kms:ConnectCustomKeyStore

• kms:DisconnectCustomKeyStore

• kms:UpdateCustomKeyStore

• kms:DeleteCustomKeyStore

• kms:DescribeCustomKeyStores

• iam:CreateServiceLinkedRole

• カスタムキーストアに関連付けられた AWS CloudHSM クラスターを作成し管理するプリンシパルには、AWS CloudHSM クラスターを作成し初期化するアクセス許可が必要です。これには、仮想プライベートクラウドを作成または使用する、サブネットを作成する、Amazon EC2 インスタンスを作成するアクセス許可が含まれます。また、HSM の作成と削除、およびバックアップの管理が必要な場合もあります。必要なアクセス許可のリストについては、『AWS CloudHSM User Guide』の「AWS CloudHSMに必要なユーザーアクセス許可に限定する」を参照してください。

• カスタムキーストアでカスタマーマスターキー (CMK) を作成および管理するプリンシパルには、AWSKMS で CMK を作成および管理するプリンシパルと同じアクセス許可が必要です。たとえば、これらのプリンシパルには kms:CreateKey アクセス許可のある IAM ポリシーが必要です。追加のアクセス許可は必要ありません。カスタムキーストアの CMK のデフォルトのキーポリシー (p. 56)は、AWS KMS のCMK のデフォルトのキーポリシーと同一です。

• 暗号化オペレーション (p. 208)でカスタムキーストアの CMK を使用するプリンシパルは、kms:Decrypt など、CMK で暗号化オペレーションを実行するためのアクセス許可を必要とします。IAM またはキーポリシーで、これらのアクセス許可を提供できます。ただし、カスタムキーストアで CMK を使用するための追加のアクセス許可は必要ありません。

AWS CloudHSM リソースおよび Amazon EC2 リソースを管理することを AWS KMS に許可するカスタムキーストアをサポートするために、AWS KMS には AWS CloudHSM クラスターに関する情報を取得するアクセス許可が必要です。また、カスタムキーストアを AWSCloudHSM クラスターに接続するネットワークインフラストラクチャを作成するアクセス許可が必要です。これらのアクセス許可を取得するために、AWS KMS は AWS アカウントにAWSServiceRoleForKeyManagementServiceCustomKeyStores サービスにリンクされたロールを作成します。カスタムキーストアを作成するユーザーには、サービスにリンクされたロールの作成を許可するiam:CreateServiceLinkedRole アクセス許可が必要です。

トピック• AWS KMS サービスにリンクされたロールについて (p. 187)• サービスにリンクされたロールの作成 (p. 188)• サービスにリンクされたロールの説明を編集する (p. 188)• サービスにリンクされたロールを削除する (p. 188)

AWS KMS サービスにリンクされたロールについてサービスにリンクされたロール は、代理でその他の AWS サービスを呼び出す 1 つの AWS サービスアクセス許可を付与する IAM ロールです。これは、複数の統合された AWS サービスの機能を、複雑な IAM ポリシーを作成したり維持したりせずに、簡単に使用できるよう設計されました。

カスタムキーストアでは、AWS KMS は AWSKeyManagementServiceCustomKeyStoresServiceRolePolicyポリシーがある AWSServiceRoleForKeyManagementServiceCustomKeyStores サービスにリンクされたロールを作成します。このポリシーはロールに以下のアクセス許可を与えます。

187

Page 196: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの作成

• cloudhsm:DescribeClusters• ec2:AuthorizeSecurityGroupIngress• ec2:CreateNetworkInterface• ec2:CreateSecurityGroup• ec2:DeleteSecurityGroup• ec2:DescribeSecurityGroups• ec2:RevokeSecurityGroupEgress

[AWSServiceRoleForKeyManagementServiceCustomKeyStores] サービスにリンクされたロールはcks.kms.amazonaws.com のみを信頼するため、AWS KMS のみがこのサービスにリンクされたロールを引き受けることができます。このロールは、AWS KMS が AWS CloudHSM クラスターを表示し、カスタムキーストアをそれに関連付けられた AWS CloudHSM クラスターに接続するために必要なオペレーションに限定されています。AWS KMS に対して追加のアクセス許可は付与されません。たとえば、AWSKMS に、AWS CloudHSM クラスター、HSM、またはバックアップを作成、管理、または削除するためのアクセス許可はありません。

リージョン

カスタムキーストア機能と同様に、AWSServiceRoleForKeyManagementServiceCustomKeyStores ロールは AWS KMS と AWS CloudHSM の両方が使用可能なすべての AWS リージョンでサポートされています。各サービスがサポートする AWS リージョンのリストは、「AWS Key Management Service エンドポイントとクォータ」と『アマゾン ウェブ サービス全般のリファレンス』の「AWS CloudHSM エンドポイントとクォータ」を参照してください。

AWS のサービスがサービスにリンクされたロールを使用する詳細については、『IAM ユーザーガイド』の「サービスにリンクされたロールの使用」を参照してください。

サービスにリンクされたロールの作成ロールが現時点で存在しない場合、カスタムキーストアを作成する際に AWS KMS は自動で AWS アカウントに AWSServiceRoleForKeyManagementServiceCustomKeyStores サービスにリンクされたロールを作成します。このサービスにリンクされたロールを直接作成または再作成することはできません。

サービスにリンクされたロールの説明を編集するロール名または AWSServiceRoleForKeyManagementServiceCustomKeyStores サービスにリンクされたロールのポリシーステートメントを編集することはできませんが、ロールの説明を編集できます。手順については、IAM ユーザーガイド の「サービスにリンクされたロールの編集」を参照してください。

サービスにリンクされたロールを削除するAWS KMS は AWS アカウントから AWSServiceRoleForKeyManagementServiceCustomKeyStores サービスにリンクされたロールを削除しません。 カスタムキーストアをすべて削除し (p. 201)、新しいキーストアを作成する予定がない場合は、このサービスにリンクされたロールは不要です。AWS KMS は、アクティブなカスタムキーストアがない限り、このロールを引き受けたり、そのアクセス許可を使用したりしません。ただし、AWSServiceRoleForKeyManagementServiceCustomKeyStores サービスにリンクされたロールを削除する手順は現在ありません。

カスタムキーストアの作成アカウントに 1 つまたは複数のカスタムキーストア (p. 184)を作成できます。それぞれのカスタムキーストアは、同じ AWS リージョンの 1 つの AWS CloudHSM クラスターに関連付けられます。カスタム

188

Page 197: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド前提条件を構成する

キーストアを作成する前に、前提条件を構成する (p. 189)必要があります。その後で、カスタムキーストアを使用する前に、AWS CloudHSM クラスターにそのカスタムキーストアを接続 (p. 196)する必要があります。

Tip

カスタムキーストアを直ちに接続する必要はありません。使用する準備ができるまで切断された状態にしておくことができます。ただし、正しく設定されていることを確認するために、接続 (p. 196)して、接続ステータスを表示 (p. 192)してから、切断 (p. 196)するとよいかも知れません。

トピック• 前提条件を構成する (p. 189)• カスタムキーストアを作成する (コンソール) (p. 191)• カスタムキーストアを作成する (API) (p. 191)

前提条件を構成する各 AWS KMS カスタムキーストアは AWS CloudHSM クラスターにサポートされています。カスタムキーストアを作成するには、別のキーストアに関連付けられていない、アクティブな AWS CloudHSM クラスターを指定する必要があります。AWS KMS がユーザーの代わりにキーを作成して管理できる、クラスターの HSM に専用の暗号化ユーザー (CU) を作成する必要もあります。

カスタムキーストアを作成する前に、次の手順を実行します。

AWS CloudHSM クラスターを選択する

すべてのカスタムキーストアは、厳密に 1 個の AWS CloudHSM クラスター (p. 185)に関連付けられています。カスタムキーストアでカスタムマスターキー (p. 3) (CMK) を作成するとき、AWS KMSは AWS KMS で ID や Amazon リソースネーム (ARN) などの CMK メタデータを作成します。その後で、関連付けられたクラスターの HSM でキーマテリアルを作成します。新しい AWS CloudHSM クラスターを 作成するか、既存のものを使用できます。AWS KMS ではクラスターへの排他的アクセスが要求されません。

選択した AWS CloudHSM クラスターは、完全にカスタムキーストアに関連付けられます。カスタムキーストアを作成した後、関連付け済みのクラスターのクラスター ID を変更 (p. 194)することができますが、指定したクラスターは元のクラスターとバックアップ履歴を共有する必要があります。無関係のクラスターを使用するには、新しいカスタムキーストアを作成する必要があります。

選択した AWS CloudHSM クラスターには次の特性がある必要があります。• クラスターがアクティブである必要があります。

クラスターを作成して初期化し、プラットフォームに AWS CloudHSM クライアントソフトウェアをインストールして、クラスターをアクティブ化する必要もあります。詳細な手順については、「AWS CloudHSM User Guide」セクションの「開始方法」を参照してください。

• クラスターは、AWS KMS カスタムキーストア と同じアカウントおよびリージョンに存在している必要があります。あるリージョンのカスタムキーストアを別のリージョンのクラスターに関連付けることはできません。マルチリージョンの主要なインフラストラクチャを作成するには、各リージョンにキーストアとクラスターを作成する必要があります。

• クラスターをアカウント内の別のカスタムキーストアに関連付けることはできません。各カスタムキーストアは異なる AWS CloudHSM クラスターに関連付けられている必要があります。カスタムキーストアに関連付け済みのクラスターまたは関連付け済みのクラスターとバックアップ履歴を共有するクラスターを指定することはできません。バックアップ履歴を共有するクラスターには同じクラスター証明書があります。クラスターのクラスター証明書を表示するには、AWS CloudHSMコンソールまたは DescribeClusters オペレーションを使用します。

189

Page 198: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド前提条件を構成する

• クラスターは、リージョンの少なくとも 2 つのアベイラビリティーゾーンでプライベートサブネットを使用して設定する必要があります。AWS CloudHSM はすべてのアベイラビリティーゾーンでサポートされていないため、リージョン内のすべてのアベイラビリティーゾーンでプライベートサブネットを作成することをお勧めします。既存のクラスターにサブネットを再設定することはできませんが、クラスター設定内の異なるサブネットを使用してバックアップからクラスターを作成することはできます。

Important

カスタムキーストアを作成した後は、AWS CloudHSM クラスター用に設定されたプライベートサブネットを削除しないでください。AWS KMS がクラスター構成内ですべてのサブネットを見つけることができない場合、カスタムキーストアへの接続 (p. 196) を試みると、SUBNET_NOT_FOUND 接続エラー状態で失敗します。詳細については、「接続障害の修復方法 (p. 215)」を参照してください。

• クラスターのセキュリティグループ (cloudhsm-cluster-<cluster-id>-sg) に、ポート 2223 ~2225 での TCP トラフィックを許可するインバウンドルールとアウトバウンドルールが含まれている必要があります。インバウンドルールの Source とアウトバウンドルールの Destination は、セキュリティグループ ID と一致している必要があります。これらのルールは、クラスターの作成時にデフォルトで設定されます。変更または削除しないでください。

• クラスターは、異なるアベイラビリティーゾーンの少なくとも 2 つのアクティブな HSM を含む必要があります。HSM の数を確認するには、AWS CloudHSM コンソールか DescribeClusters オペレーションを使用します。必要に応じて、HSM を追加できます。

信頼アンカー証明書を見つける

カスタムキーストアを作成する場合、AWS CloudHSM クラスターの信頼アンカー証明書を AWSKMS にアップロードする必要があります。AWS KMS は、カスタムキーストアをクラスターに接続するために信頼アンカー証明書が必要です。

すべてのアクティブな AWS CloudHSM クラスターには信頼アンカー証明書があります。クラスターを初期化するときに、この証明書を生成して customerCA.crt ファイルに保存し、クラスターに接続するホストにコピーします。

AWS KMS 用の kmsuser 暗号化ユーザーを作成する

カスタムキーストアを管理するために、AWS KMS は選択したクラスターで kmsuser 暗号化ユーザー (p. 185) (CU) アカウントにログインします。カスタムキーストアを作成する前に kmsuser CUを作成する必要があります。カスタムキーストアを作成するとき、AWS KMS に kmsuser のパスワードを指定します。AWS KMS は、カスタムキーストアを関連付け済みの AWS CloudHSM クラスターに接続するたびに kmsuser パスワードをローテーションします。

Important

kmsuser CU を作成するとき、2FA オプションを指定しないでください。指定すると、AWSKMS はログインできず、カスタムキーストアはこの AWS CloudHSM クラスターに接続できません。2FA を指定すると、元に戻すことはできません。代わりに、CU を削除して再作成する必要があります。

kmsuser CU を作成するには、次の手順に従います。

1. 「AWS CloudHSM User Guide」の「cloudhsm_mgmt_util の実行準備」セクションで説明されている cloudhsm_mgmt_util を開始します。

2. cloudhsm_mgmt_util で createUser コマンドを使用して kmsuser という名前の CU を作成します。パスワードは 7〜32 の英数字で構成する必要があります。大文字と小文字が区別され、特殊文字を含めることはできません。

たとえば、次のコマンド例では、パスワードが kmsPswd の kmsuser CU を作成します。

aws-cloudhsm> createUser CU kmsuser kmsPswd

190

Page 199: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアを作成する (コンソール)

カスタムキーストアを作成する (コンソール)AWS マネジメントコンソール でカスタムキーストア (p. 184)を作成するとき、ワークフローの一部として前提条件 (p. 189)を作成して追加できます。ただし、プロセスは事前に構成しておくとより高速です。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Custom key stores (カスタムキーストア)] を選択します。4. [Create key store (キーストアの作成)] を選択します。5. カスタムキーストアのわかりやすい名前を入力します。名前はアカウント内で一意である必要があり

ます。6. カスタムキーストアに AWS CloudHSM クラスター (p. 185)を選択します。または、新しい AWS

CloudHSM クラスターを作成するには、[Create an AWS CloudHSM cluster (AWS CloudHSM クラスターを作成)] リンクを選択します。

クラスターは、カスタムキーストアとの関連付けの要件を 満たす (p. 189)必要があります。メニューに、カスタムキーストアにまだ関連付けられていないアカウントおよびリージョンのカスタムキーストアが表示されます。

7. [ファイルのアップロード] を選択し、選択した AWS CloudHSM クラスターの信頼アンカー証明書をアップロードします。これは、クラスターを初期化したときに作成した customerCA.crt ファイルです。

8. 選択したクラスターで作成した kmsuser 暗号化ユーザー (p. 185) (CU) のパスワードを入力します。

9. [Create] を選択します。

手順が正常に完了すると、新しいカスタムキーストアがアカウントとリージョンのカスタムキーストアのリストに表示されます。正常に完了しなかった場合は、問題を説明し、修正方法を示すエラーメッセージが表示されます。さらにヘルプが必要な場合は、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

次の手順: 新しいカスタムキーストアが自動的に接続されません。カスタムキーストアでカスタマーマスターキー (CMK) を作成する前に、関連付け済みの AWS CloudHSM クラスターにカスタムキーストアを接続する (p. 196)必要があります。

カスタムキーストアを作成する (API)CreateCustomKeyStore オペレーションが、アカウントとリージョンで AWS CloudHSM クラスターに関連付けられている新しいカスタムキーストア (p. 184)を作成します。これらの例では AWS CommandLine Interface (AWS CLI) を使用しますが、サポートされている任意のプログラミング言語を使用できます。

CreateCustomKeyStore オペレーションでは、次のパラメータ値が必要です。

• CustomKeyStoreName – アカウントで一意であるカスタムキーストアのわかりやすい名前。• CloudHsmClusterId – カスタムキーストアとの関連付けの要件を満たす (p. 189)クラスターのクラス

ター ID。• KeyStorePassword – 指定されたクラスターでの kmsuser CU アカウントのパスワード。• TrustAnchorCertificate – クラスターを初期化したときに作成した customerCA.crt ファイルのコンテ

ンツ。

次の例では、架空のクラスター ID を使用します。コマンドを実行する前に、有効なクラスター ID と置き換えます。

191

Page 200: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの管理

$ aws kms create-custom-key-store --custom-key-store-name ExampleKeyStore \ --cloud-hsm-cluster-id cluster-1a23b4cdefg \ --key-store-password kmsPswd \ --trust-anchor-certificate <certificate-goes-here>

AWS CLI を使用している場合、その内容ではなく、信頼アンカー証明書ファイルを指定できます。次の例では、customerCA.crt ファイルはルートディレクトリにあります。

$ aws kms create-custom-key-store --custom-key-store-name ExampleKeyStore \ --cloud-hsm-cluster-id cluster-1a23b4cdefg \ --key-store-password kmsPswd \ --trust-anchor-certificate file://customerCA.crt

オペレーションが正常に終了したら、次のレスポンス例に示すように、CreateCustomKeyStore はカスタムキーストア ID を返します。

{ "CustomKeyStoreId": cks-1234567890abcdef0}

オペレーションが失敗した場合は、例外で示されているエラーを修正して、もう一度試してください。詳細なヘルプについては、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

次に、カスタムキーストアを使用するには、その AWS CloudHSM クラスターに接続します (p. 196)。

カスタムキーストアの管理AWS マネジメントコンソール と AWS KMS API を使用して、カスタムキーストアを管理できます。たとえば、カスタムキーストアを表示、そのプロパティを編集、関連付けられた AWS CloudHSM クラスターからカスタムキーストアに接続および切断、およびカスタムキーストアを削除できます。

トピック• カスタムキーストアの表示 (p. 192)• カスタムキーストア設定の編集 (p. 194)• カスタムキーストアの接続および切断 (p. 196)• カスタムキーストアの削除 (p. 201)

カスタムキーストアの表示AWS マネジメントコンソール または AWS KMS API を使用して、各アカウントおよびリージョンでカスタムキーストアを表示できます。

カスタムキーストアでの CMK の表示に関するヘルプについては、「カスタムキーストアでの CMK の表示 (p. 207)」を参照してください。

トピック• カスタムキーストアを表示する (コンソール) (p. 193)• カスタムキーストアを表示する (API) (p. 193)

192

Page 201: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの表示

カスタムキーストアを表示する (コンソール)AWS マネジメントコンソール でカスタムキーストアを表示する場合は、以下を確認できます。

• カスタムキーストア名• 関連付け済み AWS CloudHSM クラスターの ID• クラスター内の HSM の数• 現在の接続ステータス

[Disconnected (切断)] の接続ステータスは、カスタムキーストアが新しく、接続されたことがないこと、または意図的に AWS CloudHSM クラスターから切断された (p. 196)ことを示します。ただし、接続されているカスタムキーストアで CMK を使用しようとすると失敗する場合、カスタムキーストアまたはそのAWS CloudHSM クラスターに問題があることを示している可能性があります。ヘルプについては、「失敗した CMK を修正する方法 (p. 215)」を参照してください。

指定されたアカウントとリージョンでカスタムキーストアを表示するには、以下の手順に従います。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Custom key stores (カスタムキーストア)] を選択します。

表示をカスタマイズするには、[Create key store (キーストアを作成)] ボタンの下に表示される歯車アイコンをクリックします。

カスタムキーストアを表示する (API)カスタムキーストアを表示するには、DescribeCustomKeyStores オペレーションを使用します。デフォルトでは、このオペレーションは、アカウントとリージョンのすべてのカスタムキーストアを返します。ただし、CustomKeyStoreId または CustomKeyStoreName パラメータのどちらかを使用して (両方は使用できません) 出力を特定のカスタムキーストアに制限できます。出力は、カスタムキーストア ID と名前、関連付けられた AWS CloudHSM クラスターの ID、および接続状態で構成されます。接続状態はエラーを示す場合、出力にエラーの理由を説明するエラーコードも含まれています。

このセクションの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされているすべてのプログラミング言語を使用できます。

たとえば、次のコマンドは、アカウントとリージョンのすべてのカスタムキーストアを返します。Limitパラメータと Marker パラメータを使用して、出力のカスタムキーストアをページ分割できます。

$ aws kms describe-custom-key-stores

次のコマンド例では、CustomKeyStoreName パラメータを使用して ExampleKeyStore というフレンドリ名の唯一のカスタムキーストアを取得します。各コマンドで CustomKeyStoreName パラメータまたはCustomKeyStoreId パラメータのどちらかを使用できますが、両方を使用することはできません。

次の出力例は、AWS CloudHSM クラスターに接続されているカスタムキーストアを表します。ConnectionState 要素は、コンソールの Status フィールドに対応します。

$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore{ "CustomKeyStores": [ {

193

Page 202: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストア設定の編集

"CloudHsmClusterId": "cluster-1a23b4cdefg", "ConnectionState": "CONNECTED", "CreationDate": "1.499288695918E9", "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "TrustAnchorCertificate": "<certificate appears here>" } ]}

Disconnected の ConnectionState は、カスタムキーストアが接続されたことがないこと、または意図的に AWS CloudHSM クラスターから切断された (p. 196)ことを示します。ただし、接続されているカスタムキーストアで CMK を使用しようとすると失敗する場合、カスタムキーストアまたはその AWSCloudHSM クラスターに問題があることを示している可能性があります。ヘルプについては、「失敗したCMK を修正する方法 (p. 215)」を参照してください。

カスタムキーストアの ConnectionState が FAILED である場合、DescribeCustomKeyStores レスポンスには、エラーの理由を説明する ConnectionErrorCode 要素が含まれています。

たとえば、次の出力では、INVALID_CREDENTIALS 値は、kmsuser パスワードが無効である (p. 217)ために、カスタムキーストアの接続に失敗したことを示しています。このエラーおよびその他の接続エラーのヘルプについては、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0{ "CustomKeyStores": [ { "CloudHsmClusterId": "cluster-1a23b4cdefg", "ConnectionErrorCode": "INVALID_CREDENTIALS" "ConnectionState": "FAILED", "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "CreationDate": "1.499288695918E9", "TrustAnchorCertificate": "<certificate appears here>" } ]}

カスタムキーストア設定の編集既存のカスタムキーストア (p. 184)の設定を変更することができます。カスタムキーストアは AWSCloudHSM クラスターから切断されている必要があります。

カスタムキーストア設定を編集するには:

1. AWS CloudHSM クラスターからカスタムキーストアを切断します (p. 196)。カスタムキーストアが切断されているときは、カスタムキーストアでカスタマーマスターキー (p. 3) (CMK) を作成したり、含まれている CMK を暗号化オペレーション (p. 208)で使用したりすることはできません。

2. 1 つ以上のカスタムキーストア設定を編集します。3. AWS CloudHSM クラスターにカスタムキーストアを再接続します (p. 196)。

カスタムキーストアで次の設定を編集できます。

カスタムキーストアのわかりやすい名前。

新しい分かりやすい名前を入力します。新しい名前は AWS アカウント内で一意である必要があります。

194

Page 203: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストア設定の編集

関連付け済みの AWS CloudHSM クラスターのクラスター ID。

この値を編集して、関連する AWS CloudHSM クラスターを元のクラスターと置き換えます。この機能を使用して、AWS CloudHSM クラスターが破損した場合、または削除された場合にカスタムキーストアを修復できます。

元のクラスターとバックアップ履歴を共有し、異なるアベイラビリティーゾーンにある 2 つのアクティブな HSM を含む、カスタムキーストアとの関連付けの要件を満たす (p. 189) AWS CloudHSMクラスターを指定します。バックアップ履歴を共有するクラスターには同じクラスター証明書があります。クラスターのクラスター証明書を表示するには、DescribeClusters オペレーションを使用します。編集機能を使用してカスタムキーストアを無関係な AWS CloudHSM クラスターと関連付けることはできません。

kmsuser 暗号化ユーザー (p. 185) (CU) の現在のパスワード。

AWS CloudHSM クラスター内の kmsuser CU の現在のパスワードを AWS KMS に伝えます。このアクションでは、AWS CloudHSM クラスター内の kmsuser CU のパスワードは変更されません。

AWS CloudHSM クラスター内の kmsuser CU のパスワードを変更する場合は、この機能を使用して、AWS KMS に 新しい kmsuser のパスワードを指定します。それ以外の場合、AWS KMS はクラスターにログインできず、カスタムキーストアをクラスターに接続しようとするすべての試行は失敗します。

トピック• カスタムキーストアを編集する (コンソール) (p. 195)• カスタムキーストアを編集する (API) (p. 196)

カスタムキーストアを編集する (コンソール)カスタムキーストアを編集すると、設定可能な任意の値を変更することができます。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Custom key stores (カスタムキーストア)] を選択します。4. 編集するカスタムキーストアを選択します。5. [ステータス] 列の値が DISCONNECTED ではない場合、編集する前にカスタムキーストアを切断する

必要があります。[Key store actions (キーストアのアクション)] メニューで、[Disconnect custom keystore (カスタムキーストアの切断)] を選択します。

6. [Key store actions (キーストアのアクション)] メニューで、[Edit custom key store (カスタムキーストアの編集)] を選択します。

7. 次のいずれかのアクションを実行します。

• カスタムキーストアの新しいわかりやすい名前を入力します。• 関連する AWS CloudHSM クラスターのクラスター ID を入力します。• 関連付けられた AWS CloudHSM クラスターに kmsuser 暗号化ユーザーの現在のパスワードを入

力します。8. [Save] を選択します。

プロシージャが正常に完了すると、編集した設定を説明するメッセージが表示されます。正常に行われなかった場合は、問題を説明し、修正方法を示すエラーメッセージが表示されます。さらにヘルプが必要な場合は、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

9. カスタムキーストアを再接続します。 (p. 196)

195

Page 204: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの接続および切断

カスタムキーストアを使用するには、編集後に再接続する必要があります。カスタムキーストアは切断されたままにすることができます。ただし、切断されている間は、カスタムキーストアで CMK を作成したり、暗号化オペレーション (p. 208)でカスタムキーストア内の CMK を使用したりすることはできません。

カスタムキーストアを編集する (API)カスタムキーのプロパティを変更するには、UpdateCustomKeyStore オペレーションを使用します。同じコマンド オペレーションが成功すると、AWS KMS は HTTP 200 レスポンスとプロパティを含まないJSON オブジェクトを返します。 でカスタムキーストアの複数のプロパティを変更できます。

このセクションの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされているすべてのプログラミング言語を使用できます。

最初に DisconnectCustomKeyStore を使用して、AWS KMS から カスタムキーストアを切断します (p. 196)。カスタムキーストア ID 例 cks-1234567890abcdef0 を実際の ID と置き換えます。

$ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0

最初の例では、UpdateCustomKeyStore を使用してカスタムキーストアのフレンドリ名をDevelopmentKeys に変更します。このコマンドでは、CustomKeyStoreId パラメータを使用してカスタムキーストアを識別し、CustomKeyStoreName でカスタムキーストアの新しい名前を指定します。

$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --new-custom-key-store-name DevelopmentKeys

次の例では、クラスターに関連付けられているカスタムキーストアを同じクラスターの別のバックアップに保存します。このコマンドでは、CustomKeyStoreId パラメータを使用してカスタムキーストアを識別し、CloudHsmClusterId パラメータで新しいクラスター ID を指定します。

$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --cloud-hsm-cluster-id cluster-1a23b4cdefg

次の例では、AWS KMS に現在の kmsuser のパスワードは ExamplePassword であると伝えます。このコマンドでは、CustomKeyStoreId パラメータを使用してカスタムキーストアを識別し、KeyStorePassword パラメータで現在のパスワードを指定します。

$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --key-store-password ExamplePassword

最後のコマンドはカスタムキーストアを AWS KMS に再接続します。カスタムキーストアは切断された状態のままにできますが、新しい CMK を作成したり、暗号化オペレーション (p. 208)で既存の CMK を使用したりする前に接続する必要があります。カスタムキーストア ID 例を実際の ID と置き換えます。

$ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0

カスタムキーストアの接続および切断新しいカスタムキーストアが接続されていません。カスタムキーストアでカスタマーマスターキー (CMK)を作成して使用する前に、関連付け済み AWS CloudHSM クラスターに接続する必要があります。カスタムキーストアはいつでも接続および切断でき、接続ステータスを表示できます (p. 193)。

196

Page 205: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの接続および切断

カスタムキーストアを接続する必要はありません。カスタムキーストアを無期限に切断された状態のままにしておき、使用する必要がある場合にのみ接続できます。ただし、定期的に接続をテストして、接続が正しく接続できることを確認するとよいでしょう。

Note

カスタムキーストアは、キーストアが一度も接続されたことがない場合、または明示的に切断された場合にのみ DISCONNECTED ステータスになります。カスタムキーストアのステータスがCONNECTED になっているものの、使用に問題がある場合は、それに関連付けられている AWSCloudHSM クラスターがアクティブで、少なくとも 1 つのアクティブな HSM が含まれていることを確認してください。接続障害のヘルプについては、「the section called “カスタムキーストアのトラブルシューティング” (p. 214)」を参照してください。

カスタムキーストアの接続

カスタムキーストアを接続すると、AWS KMS が関連付け済みの AWS CloudHSM クラスターを見つけて接続し、kmsuser 暗号化ユーザー (p. 185) (CU) として AWS CloudHSM クライアントにログインし、kmsuser パスワードをローテーションします。AWS KMS は、カスタムキーストアが接続されている間、AWS CloudHSM クライアントにログインしたままになります。

接続を確立するために、AWS KMS はクラスターの Virtual Private Cloud (VPC) で kms-<custom keystore ID> という名前を付けられた セキュリティグループを作成します。セキュリティグループには、クラスターセキュリティグループからのインバウンドトラフィックを許可する単一のルールがあります。AWS KMS は、クラスターのプライベートサブネットの各アベイラビリティーゾーンに ElasticNetwork Interface (ENI) を作成します。AWS KMS は kms-<cluster ID> セキュリティグループとクラスターのセキュリティグループに ENI を追加します。各 ENI の説明は KMS managed ENI forcluster <cluster-ID> です。

接続プロセスは、完了するまでに長い時間 (最長 20 分) がかかる場合があります。

カスタムキーストアを接続する前に、要件を満たしているかどうかを確認します。

• 関連付け済みの AWS CloudHSM クラスターに少なくとも 1 つのアクティブな HSM が含まれている必要があります。クラスター内の HSM の数を確認するには、AWS CloudHSM コンソールでクラスターを表示するか DescribeClusters オペレーションを使用します。必要に応じて、HSM を追加できます。

• クラスターには、kmsuser 暗号化ユーザー (p. 190) (CU) アカウントが必要ですが、カスタムキーストアを接続すると、その CU はクラスターにログインできません。ログアウトのヘルプについては、「ログアウトして再接続する方法 (p. 221)」を参照してください。

• カスタムキーストアの接続ステータスは、DISCONNECTING または FAILED にすることはできません。コンソールで接続ステータスを表示する (p. 193)か DescribeCustomKeyStores オペレーションを使用できます。接続ステータスが FAILED である場合、カスタムキーストアを切断してから接続します。

カスタムキーストアが接続されている場合、そこで CMK を作成 (p. 203)し、暗号化オペレーション (p. 208)で既存の CMK を使用できます。

カスタムキーストアの切断

カスタムキーストアを切断すると、AWS KMS が AWS CloudHSM クライアントからログアウトし、関連付け済みの AWS CloudHSM クラスターから切断して、接続をサポートするために作成したネットワークインフラストラクチャを削除します。

カスタムキーストアが切断されている場合、カスタムキーストアとカスタマーマスターキー (CMK)を管理することはできますが、カスタムキーストアで CMK を作成または使用することはできません。キーストアのステータスは DISCONNECTED で、カスタムキーストアの CMK のキーの状態 (p. 236)は、PendingDeletion でない限り、Unavailable です。 カスタムキーストアはいつでも再接続することができます。

Note

カスタムキーストアが切断されているときは、カスタムキーストアでカスタマーマスターキー(CMK) を作成したり、既存の CMK を暗号化オペレーションに使用しようとすると、すべて失敗

197

Page 206: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの接続および切断

します。この操作により、ユーザーが機密データを保存したりアクセスしたりすることを防ぐことができます。

キーストアの切断の影響をより正確に推定するには、カスタムキーストアで CMK を識別 (p. 210)し、その過去の使用方法を判断 (p. 179)します。

カスタムキーストアは、次のような理由で切断する必要がある場合があります。

• パスワードをローテーションkmsuserする。AWS KMS は AWS CloudHSM クラスターに接続するたびに kmsuser パスワードを変更します。パスワードローテーションを強制的に実行するには、切断して再接続します。

• AWS CloudHSM クラスターにある CMK のキーマテリアルを監査するには。カスタムキーストアを切断すると、AWS KMS が AWS CloudHSM クライアントの kmsuser暗号化ユーザー (p. 185)アカウントからログアウトします。これにより、クラスターに kmsuser CU としてログインし、CMK のキーマテリアルを監査および管理することができます。

• カスタムキーストアですべての CMK を直ちに無効にするには。カスタムキーストアで AWS マネジメントコンソール または DisableKey オペレーションを使用して、CMK を無効にし、再度有効 (p. 46)にすることができます。これらのオペレーションはすばやく完了しますが、一度に処理する CMK は 1 つです。切断すると、カスタムキーのすべての CMK のキー状態が直ちに Unavailable に変更され、暗号化オペレーションで使用できなくなります。

• 失敗した接続試行を修復するには。カスタムキーストアを接続する試行が失敗した場合 (カスタムキーストアの接続ステータスが FAILED)、再度接続を試みる前にカスタムキーストアを切断する必要があります。

トピック• カスタムキーストアを接続する (コンソール) (p. 198)• カスタムキーストアを接続する (API) (p. 199)• カスタムキーストアを切断する (コンソール) (p. 200)• カスタムキーストアを切断する (API) (p. 200)

カスタムキーストアを接続する (コンソール)AWS マネジメントコンソール でカスタムキーストアを接続するには、最初に [カスタムキーストア] ページからカスタムキーストアを選択します。この処理の完了には、最大 20 分かかることがあります。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Custom key stores (カスタムキーストア)] を選択します。4. 接続するカスタムキーストアを選択します。5. カスタムキーストアのステータスが [FAILED] の場合、接続する前にカスタムキーストアを切断す

る (p. 200)必要があります。6. [Key store actions (キーストアのアクション)] メニューで、[Connect custom key store (カスタムキー

ストアの接続)] を選択します。

AWS KMS がカスタムキーストアを結合するプロセスを開始します。関連付け済みの AWS CloudHSM クラスターを見つけ、必要なネットワークインフラストラクチャを構築し、そのインフラストラクチャに接続し、AWS CloudHSM クラスターに kmsuser CU としてログインして、kmsuser パスワードをローテーションします。オペレーションが完了すると、接続状態が [CONNECTED] に変わります。

オペレーションが失敗すると、失敗の理由を説明するエラーメッセージが表示されます。再度接続を試みる前に、カスタムキーストアの接続ステータス (p. 192)を表示します。[FAILED] である場合、再度接続

198

Page 207: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの接続および切断

する 前にカスタムキーストアを切断 (p. 200)する必要があります。ヘルプが必要な場合は、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

次の手順: カスタムキーストアでの CMK の作成 (p. 203)。

カスタムキーストアを接続する (API)切断されたカスタムキーストアを接続するには、ConnectCustomKeyStore オペレーションを使用します。関連付け済みの AWS CloudHSM クラスターは、少なくとも 1 つのアクティブな HSM が含まれている必要があり、接続状態を FAILED にすることはできません。

接続プロセスは、完了するまでに長い時間 (最長 20 分) かかります。すぐに失敗しない限り、オペレーションは HTTP 200 レスポンスとプロパティを含まない JSON オブジェクトを返します。ただし、この初期レスポンスは接続に成功したことを示していません。カスタムキーストアの接続ステータスを確認するには、DescribeCustomKeyStores オペレーションを使用します。

このセクションの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされているすべてのプログラミング言語を使用できます。

カスタムキーストアを識別するには、カスタムキーストア ID を使用します。ID はコンソールの [カスタムキーストア] ページまたは DescribeCustomKeyStores オペレーションを使用して見つけることができます。この例を実行する前に、例の ID を有効な ID に置き換えます。

$ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0

カスタムキーストアが接続されていることを確認するには、DescribeCustomKeyStores オペレーションを使用します。デフォルトでは、このオペレーションは、アカウントとリージョンのすべてのカスタムキーストアを返します。ただし、CustomKeyStoreId または CustomKeyStoreName パラメータのどちらかを使用して (両方は使用できません) レスポンスを特定のカスタムキーストアに制限できます。CONNECTED の ConnectionState 値は、カスタムキーストアがその AWS CloudHSM クラスターに接続されていることを示します。

$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0{ "CustomKeyStores": [ "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "CloudHsmClusterId": "cluster-1a23b4cdefg", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "CONNECTED" ],}

ConnectionState 値が [FAILED] の場合、ConnectionErrorCode 要素が失敗の原因を示します。この場合は、AWS KMS が、クラスター ID cluster-1a23b4cdefg のアカウントで AWS CloudHSM クラスターを見つけることができませんでした。クラスターを削除した場合、元のクラスターのバックアップから復元することができ、その後でカスタムキーストアのクラスター ID を編集 (p. 194)できます。

$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0{ "CustomKeyStores": [ "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "CloudHsmClusterId": "cluster-1a23b4cdefg", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "FAILED"

199

Page 208: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの接続および切断

"ConnectionErrorCode": "CLUSTER_NOT_FOUND" ],}

次の手順: カスタムキーストアでの CMK の作成 (p. 203)。

カスタムキーストアを切断する (コンソール)AWS マネジメントコンソール でカスタムキーストアを切断するには、最初に [カスタムキーストア] ページからカスタムキーストアを選択します。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Custom key stores (カスタムキーストア)] を選択します。4. 切断するカスタムキーストアを選択します。5. [Key store actions (キーストアのアクション)] メニューで、[Disconnect custom key store (カスタム

キーストアの切断)] を選択します。

オペレーションが完了すると、接続状態が [DISCONNECTING] から [DISCONNECTED] に変わります。オペレーションが失敗した場合は、問題を説明し、修正方法を示すエラーメッセージが表示されます。さらにヘルプが必要な場合は、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

カスタムキーストアを切断する (API)カスタムキーストアを切断するには、DisconnectCustomKeyStore オペレーションを使用します。オペレーションが成功すると、AWS KMS は HTTP 200 レスポンスとプロパティを含まない JSON オブジェクトを返します。

このセクションの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされているすべてのプログラミング言語を使用できます。

この例では、カスタムキーストアを切断します。この例を実行する前に、例の ID を有効な ID に置き換えます。

$ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0

カスタムキーストアが切断されていることを確認するには、DescribeCustomKeyStores オペレーションを使用します。デフォルトでは、このオペレーションは、アカウントとリージョンのすべてのカスタムキーストアを返します。ただし、CustomKeyStoreId または CustomKeyStoreName パラメータのどちらかを使用して (両方は使用できません) レスポンスを特定のカスタムキーストアに制限できます。DISCONNECTED の ConnectionState 値は、カスタムキーストアが AWS CloudHSM クラスターから切断されていることを示します。

$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0{ "CustomKeyStores": [ "CloudHsmClusterId": "cluster-1a23b4cdefg", "ConnectionState": "DISCONNECTED", "CreationDate": "1.499288695918E9", "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "TrustAnchorCertificate": "<certificate string appears here>" ],

200

Page 209: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアの削除

}

カスタムキーストアの削除カスタムキーストアを削除すると、AWS KMS は AWS CloudHSM クラスターとの関連付けを含め、カスタムキーストアに関するすべてのメタデータを KMS から削除します。このオペレーションは、AWSCloudHSM クラスター、その HSM、またはそのユーザーには影響しません。指定されたクラスターに関連付けられた新しいカスタムキーストアを作成することはできますが、削除オペレーションを元に戻すことはできません。

AWS KMS から切断されていて、カスタマーマスターキー (CMK) が含まれていないカスタムキーストアのみ削除できます。カスタムキーストアを削除する前に、次の手順を実行します。

• どの暗号化オペレーション (p. 208)でもキーストア内の CMK を一切使用する必要がないことを確認します。次に、キーストアからすべての CMK の削除をスケジュール (p. 213)します。カスタムキーストアで CMK を探す方法については、「カスタムキーストアで CMK を検索する (p. 210)」を参照してください。

• すべての CMK が削除されたことを確認します。カスタムキーストアで CMK を表示する方法については、「カスタムキーストアでの CMK の表示 (p. 207)」を参照してください。

• AWS KMS から カスタムキーストアを切断します (p. 196)。

カスタムキーストアを削除する代わりに、関連付けられた AWS CloudHSM クラスターから切断する (p. 196)ことを検討してください。カスタムキーストアが切断されている間、カスタムキーストアとそのカスタマーマスターキー (CMK) を管理できます。しかし、カスタムキーストアで CMK を作成または使用することはできません。カスタムキーストアはいつでも再接続することができます。

AWS アカウントのすべてのリージョンからすべてのカスタムキーストアを削除して、他に作成する予定がない場合は、AWS KMS がカスタムキーストアに使用するサービスにリンクされたロールを削除 (p. 187)する必要があります。

トピック• カスタムキーストアを削除する (コンソール) (p. 201)• カスタムキーストアを削除する (API) (p. 202)

カスタムキーストアを削除する (コンソール)AWS マネジメントコンソール でカスタムキーストアを削除するには、最初に カスタムキーストア ページからカスタムキーストアを選択します。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Custom key stores (カスタムキーストア)] を選択します。4. 削除するカスタムキーストアを表す行を見つけます。カスタムキーストアのステータスが

[DISCONNECTED] ではない場合は、カスタムキーストアを削除する前にカスタムキーストアを切断する (p. 196)必要があります。

5. [Key store actions (キーストアのアクション)] メニューで、[Delete custom key store (カスタムキーストアの削除)] を選択します。

オペレーションが完了すると、成功メッセージが表示され、カスタムキーストアリストにカスタムキーストアが表示されなくなります。オペレーションが正常に行われなかった場合、問題を説明し、修正方法を示すエラーメッセージが表示されます。さらにヘルプが必要な場合は、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

201

Page 210: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK の管理

カスタムキーストアを削除する (API)カスタムキーストアを削除するには、DeleteCustomKeyStore オペレーションを使用します。オペレーションが成功すると、AWS KMS は HTTP 200 レスポンスとプロパティを含まない JSON オブジェクトを返します。

最初に、カスタムキーストアに AWS KMS カスタマーマスターキー (CMK) が含まれていないことを確認します。CMK が含まれているカスタムキーストアを削除することはできません。最初のコマンド例では、ListKeys と DescribeKey を使用して、cks-1234567890abcdef0 の架空のキーストア ID のカスタムキーストアで AWS KMS カスタマーマスターキーを検索します。この場合、コマンドは CMK を返しません。存在する場合は、ScheduleKeyDeletion オペレーションを使用して、各 CMK の削除をスケジュールします。

Bash

for key in $(aws kms list-keys --query 'Keys[*].KeyId' --output text) ; do aws kms describe-key --key-id $key | grep '"CustomKeyStoreId": "cks-1234567890abcdef0"' --context 100; done

PowerShell

PS C:\> (Get-KMSKeyList).KeyArn | foreach {Get-KMSKey -KeyId $_} | where CustomKeyStoreId -eq 'cks-1234567890abcdef0'

次に、カスタムキーストアを切断します。このコマンド例では、を使用して、DisconnectCustomKeyStoreオペレーションを使用してカスタムキーストアをその AWS CloudHSM クラスターから切断します。このコマンドを実行する前に、例のカスタムキーストア ID を有効な ID に置き換えます。

Bash

$ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0

PowerShell

PS C:\> Disconnect-KMSCustomKeyStore -CustomKeyStoreId cks-1234567890abcdef0

カスタムキーストアが切断された後、DeleteCustomKeyStore オペレーションを使用して削除できます。

Bash

$ aws kms delete-custom-key-store --custom-key-store-id cks-1234567890abcdef0

PowerShell

PS C:\> Remove-KMSCustomKeyStore -CustomKeyStoreId cks-1234567890abcdef0

カスタムキーストアでの CMK の管理カスタムキーストアで、カスタマーマスターキー (CMK) を作成、表示、管理、使用、および削除をスケジュールできます。使用する手順は、AWS KMS で CMK に使用する手順とよく似ています。唯一の違いは、CMK を作成するときにカスタムキーストアを指定することです。次に、AWS KMS はカスタムキーストアに関連付けられている AWS CloudHSM クラスター内の CMK に対して抽出不可能なキーマテリア

202

Page 211: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK の作成

ルを作成します。カスタムキーストアで CMK を使用する場合、暗号化オペレーション (p. 208)はクラスター内の HSM で実行されます。

Note

AWS KMS カスタムキーストアは、対称キーのみをサポートしています。AWS CloudHSM は非対称キーをサポートしていますが、カスタムキーストアで非対称 CMK や非対称データキーペアを作成することはできません。カスタムキーストア内の CMK にキーマテリアルをインポート (p. 156)することはできません。AWS KMS は、CMK のキーマテリアルを AWS CloudHSM クラスター内に生成します。

このセクションで説明する手順に加え、カスタムキーストアでは CMK を使用して次のことを実行できます。

• キーポリシー、IAM ポリシーを使用して、CMK へのアクセス承認 (p. 51)を付与します。• CMK にタグ (p. 44)を割り当てて、CMK を参照するエイリアス (p. 367)を作成します。• 暗号化、復号化、再暗号化、データキーの生成などの暗号化オペレーション (p. 10)には CMK を使用し

ます。• AWS KMS と統合された AWS のサービス (p. 241)と CMK を使用してカスタマー管理 CMK をサポー

トします。• AWS CloudTrail ログ (p. 309)および Amazon CloudWatch モニタリングツール (p. 302)で使用する

CMK を追跡します。

ただし、カスタムキーストア内の CMK にキーマテリアルをインポートすることはできません。

トピック• カスタムキーストアでの CMK の作成 (p. 203)• カスタムキーストアでの CMK の表示 (p. 207)• カスタムキーストアでの CMK の使用 (p. 208)• CMK と キーマテリアルの検索 (p. 209)• カスタムキーストアからの CMK 削除のスケジュール (p. 213)

カスタムキーストアでの CMK の作成カスタムキーストアの作成後、キーストアでカスタマーマスターキー (p. 3) (CMK) を作成することができます。これらは、AWS KMS が生成するキーマテリアルを持つ対称 CMK (p. 139) である必要があります。インポートされたキーマテリアル (p. 156)を使用して非対称 CMK (p. 139) や CMK を作成することはできません。また、カスタムキーストアで対称 CMK を使用して非対称データキーペアを生成することはできません。

AWS KMS で任意の CMK を使用および管理するのと同じ方法で、カスタムキーストア内の CMK を使用および管理します。たとえば、次のいずれかを実行できます。

• 暗号化オペレーション (p. 10)で CMK を使用する。• CMK に IAM およびキーポリシーを設定する。• エイリアスの作成は CMK に関連付けられます。• CMK にタグをアタッチします。• CMK を有効または無効にする。• CMK の削除をスケジュールする。

カスタムキーストアで CMK 作成するには、カスタムキーストアは、その関連する AWS CloudHSM クラスターに接続されている (p. 196)必要があり、クラスターには、少なくとも 2 つのアクティブな HSM が異なるアベイラビリティーゾーンに含まれている必要があります。接続ステータスと HSM の数を確認す

203

Page 212: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK の作成

るには、AWS マネジメントコンソール にカスタムキーストアページ (p. 193)を表示します。API オペレーションを使用する場合、DescribeCustomKeyStores オペレーションを使用して、カスタムキーストアが接続されていることを確認します。AWS CloudHSM DescribeClusters オペレーションを使用して、クラスター内のアクティブな HSM の数とそのアベイラビリティーゾーンを取得します。

カスタムキーストアで CMK を作成する場合、AWS KMS は AWS KMS 内で CMK を作成します。しかし、関連付けられた AWS CloudHSM クラスター内に CMK のキーマテリアルが作成されます。具体的には、AWS KMS が作成した kmsuser CU (p. 189) としてクラスターにサインインします。次に、クラスター内に永続的で抽出不可能な 256 ビットの Advanced Encryption Standard (AES) 対称キーが作成されます。AWS KMS が、キーラベルの属性の値を設定します。これはクラスター内で、CMK の Amazon リソースネーム (ARN) にのみ表示されます。

コマンドが成功すると、新しい CMK のキーステータス (p. 236) は Enabled になり、そのオリジンはAWS_CLOUDHSM になります。作成後に CMK のオリジンを変更することはできません。コンソールで、または DescribeKey オペレーションを使用して、カスタムキーストア内の CMK を表示すると、そのキーID、キーステータス、作成日などの一般的なプロパティを参照することができます。カスタムキーストアID と AWS CloudHSM クラスター ID (オプション) を確認することもできます。詳細については、「カスタムキーストアでの CMK の表示 (p. 207)」を参照してください。

カスタムキーストアで CMK を作成しようとして失敗した場合は、エラーメッセージを使用して原因を判断します。カスタムキーストアが接続されていない (CustomKeyStoreInvalidStateException)、または関連する AWS CloudHSM クラスターに、このオペレーションに必要な 2 つのアクティブな HSM がないこと (CloudHsmClusterInvalidConfigurationException) を示している可能性があります。ヘルプについては、「カスタムキーストアのトラブルシューティング (p. 214)」を参照してください。

トピック• カスタムキーストアで CMK を作成する (コンソール) (p. 204)• カスタムキーストアで CMK を作成する (API) (p. 205)

カスタムキーストアで CMK を作成する (コンソール)以下の手順でカスタムキーストアにカスタマーマスターキー (CMK) を作成します。

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. [キーの作成] を選択します。5. [対称] を選択します。

カスタムキーストアで非対称 CMK を作成することはできません。6. [Advanced options (詳細オプション)] を選択します。7. [キーマテリアルのオリジン] に [Custom key store (CloudHSM) (カスタムキーストア (CloudHSM))] を

選択します。8. [次へ] を選択します。9. 新しい CMK にカスタムキーストアを選択します。新しいカスタムキーストアを作成するには、

[Create custom key store (カスタムキーストアの作成)] を選択します。

選択したカスタムキーストアは、[CONNECTED (接続)] のステータスが割り当てられている必要があります。関連付けられた AWS CloudHSM クラスターがアクティブで、異なるアベイラビリティーゾーンに少なくとも 2 つのアクティブな HSM が含まれている必要があります。

カスタムキーストアの接続に関するヘルプについては、「カスタムキーストアの接続および切断 (p. 196)」を参照してください。HSM の追加に関するヘルプについては、AWS CloudHSM UserGuide で「HSM の追加」を参照してください。

204

Page 213: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK の作成

10. [Next] を選択します。11. エイリアスと CMK のオプションの説明を入力します。12. (オプション).[タグの追加] ページで、CMK を識別または分類するタグを追加します。

AWS リソースにタグを追加すると、使用量とコストがタグごとに集計されたコスト配分レポートが AWS によって生成されます。CMK にタグ付けする方法の詳細については、「キーのタグ付け (p. 44)」を参照してください。

13. [次へ] を選択します。14. [キー管理者] セクションで、CMK を管理できる IAM ユーザーとロールを選択します。詳細について

は、「キー管理者による CMK 管理の許可 (p. 57)」を参照してください。Note

IAM ポリシーによって、CMK を使用するアクセス許可を他の IAM ユーザーおよびロールに付与できます。

15. (オプション) これらのキー管理者がこの CMK を削除できないようにするには、ページの下部にある[キーの管理者がこのキーを削除できるようにします。] チェックボックスをオフにします。

16. [Next] を選択します。17. [このアカウント] セクションで、暗号化オペレーション (p. 10)で CMK を使用できる、この AWS アカ

ウント内の IAM ユーザーおよびロールを選択します。詳細については、「キーユーザーに CMK の使用を許可する (p. 60)」を参照してください。

Note

IAM ポリシーによって、CMK を使用するアクセス許可を他の IAM ユーザーおよびロールに付与できます。

18. (オプション) 他の AWS アカウントが暗号化オペレーションにこの CMK を使用するようにできます。これを行うには、ページの下部にある [Other AWS accounts (別の AWS アカウント)] セクションで[Add another AWS account (別の AWS アカウントを追加する)] を選択し、外部アカウントの AWS アカウント ID 番号を入力します。複数の外部アカウントを追加するには、この手順を繰り返します。

Note

別の AWS アカウントの管理者が、ユーザーの IAM ポリシーを作成して、CMK へのアクセスを許可する必要もあります。詳細については、「他のアカウントのユーザーに CMK の使用を許可する (p. 79)」を参照してください。

19. [次へ] を選択します。20. [Review and edit key policy (キーポリシーの表示と編集)] ページで、新しい CMK のポリシードキュメ

ントを確認して編集します。完了したら、[完了] を選択します。

プロシージャが正常に終了すると、選択したカスタムキーストアに新しい CMK が表示されます。新しいCMK の名前やエイリアスを選択すると、その詳細ページに CMK のオリジン (CloudHSM)、カスタムキーストアの名前と ID、AWS CloudHSM クラスターの ID が表示されます。手順が失敗すると、失敗を説明するエラーメッセージが表示されます。

Tip

カスタムキーストアで CMK をより簡単に識別できるようにするには、[Customer managed keys(カスタマー管理型のキー)] ページで、[Custom key store ID (カスタムキーストア ID)] 列を追加して表示します。右上隅にある歯車アイコンをクリックし、[Custom key store ID (カスタムキーストア ID)] を選択します。

カスタムキーストアで CMK を作成する (API)カスタムキーストアに新しい カスタマーマスターキー (p. 3) (CMK) を作成するには、CreateKey オペレーションを使用します。CustomKeyStoreId パラメータを使用してカスタムキーストアを識別し、AWS_CLOUDHSM の Origin 値を指定します。

205

Page 214: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK の作成

また、キーポリシーを指定するために Policy パラメータが必要になる場合もあります。キーポリシー(PutKeyPolicy) を変更して、説明 や タグ などのオプショナルの要素をいつでも追加できます。

このセクションの例では AWS Command Line Interface (AWS CLI) を使用しますが、サポートされているすべてのプログラミング言語を使用できます。

次の例は、カスタムキーストアが関連する AWS CloudHSM クラスターに接続されていることを確認するため、DescribeCustomKeyStores オペレーションに対する呼び出しから開始されます。デフォルトでは、このオペレーションは、アカウントとリージョンのすべてのカスタムキーストアを返します。特定のカスタムキーストアのみを記述するには、CustomKeyStoreId または CustomKeyStoreName パラメータ(一方のみ) を使用します。

このコマンドを実行する前に、例のカスタムキーストア ID を有効な ID に置き換えます。

$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0{ "CustomKeyStores": [ "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "CloudHsmClusterId": "cluster-1a23b4cdefg", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "CONNECTED" ],}

次のコマンド例では、DescribeClusters オペレーションを使用して、ExampleKeyStore(cluster-1a23b4cdefg) と関連付けられた AWS CloudHSM クラスターに少なくとも 2 つのアクティブなHSM があることを確認します。クラスターにある HSM が 2 つに満たない場合、CreateKey オペレーションは失敗します。

$ aws cloudhsmv2 describe-clusters{ "Clusters": [ { "SubnetMapping": { ... }, "CreateTimestamp": 1507133412.351, "ClusterId": "cluster-1a23b4cdefg", "SecurityGroup": "sg-865af2fb", "HsmType": "hsm1.medium", "VpcId": "vpc-1a2b3c4d", "BackupPolicy": "DEFAULT", "Certificates": { "ClusterCertificate": "-----BEGIN CERTIFICATE-----\...\n-----END CERTIFICATE-----\n" }, "Hsms": [ { "AvailabilityZone": "us-west-2a", "EniIp": "10.0.1.11", "ClusterId": "cluster-1a23b4cdefg", "EniId": "eni-ea8647e1", "StateMessage": "HSM created.", "SubnetId": "subnet-a6b10bd1", "HsmId": "hsm-abcdefghijk", "State": "ACTIVE" }, { "AvailabilityZone": "us-west-2b", "EniIp": "10.0.0.2", "ClusterId": "cluster-1a23b4cdefg",

206

Page 215: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK の表示

"EniId": "eni-ea8647e1", "StateMessage": "HSM created.", "SubnetId": "subnet-b6b10bd2", "HsmId": "hsm-zyxwvutsrqp", "State": "ACTIVE" }, ], "State": "ACTIVE" } ]}

このコマンド例では、CreateKey オペレーションを使用して、カスタムキーストアで CMK を作成します。カスタムキーストアで CMK を作成するには、カスタムキーストア名の ID を指定し、AWS_CLOUDHSMの Origin 値を指定する必要があります。

応答には、カスタムキーストアと AWS CloudHSM クラスターの ID が含まれています。

このコマンドを実行する前に、例のカスタムキーストア ID を有効な ID に置き換えます。

$ aws kms create-key --origin AWS_CLOUDHSM --custom-key-store-id cks-1234567890abcdef0{ "KeyMetadata": { "AWSAccountId": "111122223333", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1.499288695918E9, "Description": "Example key", "Enabled": true, "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "KeyManager": "CUSTOMER", "KeyState": "Enabled", "KeyUsage": "ENCRYPT_DECRYPT", "Origin": "AWS_CLOUDHSM" "CloudHsmClusterId": "cluster-1a23b4cdefg", "CustomKeyStoreId": "cks-1234567890abcdef0" "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

カスタムキーストアでの CMK の表示カスタムキーストアでカスタマーマスターキー (CMK) を表示するには、AWS KMS カスタマー管理CMK (p. 3) の表示と同じ技術を使用します。基本情報については、キーの表示 (p. 26) を参照してください。CMK のキーマテリアルとして機能する AWS CloudHSM クラスター内のキーを特定するには、CMKと キーマテリアルの検索 (p. 209) を参照してください。

AWS マネジメントコンソール で、カスタムキーストア内の CMK が、AWS アカウントおよびリージョンの他のすべてのカスタマー管理 CMK とともに表示されます。

ただし、カスタムキーストアの CMK に固有の値は次のとおりです。

• CMK を格納するカスタムキーストアの名前と ID。• キーマテリアルを含む、関連付けられた AWS CloudHSM クラスターのクラスター ID。• API レスポンス内の AWS マネジメントコンソール または AWS_CLOUDHSM の CloudHSM の Origin

値。• キーストア (p. 236)の値は Unavailable である可能性があります。ステータスを解決するためのヘ

ルプについては、「使用できない CMK を修正する方法 (p. 214)」を参照してください。

207

Page 216: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアでの CMK の使用

カスタムキーストアで CMK を表示するには (コンソール)

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. 左のナビゲーションペインで、暗号化キーを選択します。3. フィルタ で、AWS の該当するリージョンを選択します。4. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。5. 右上で歯車アイコンを選択し、[カスタムキーストア ID] および [オリジン] を選択して、[確認] を選択

します。6. あらゆるカスタムキーストアで CMK を識別するには、[AWS_CLOUDHSM] の [オリジン] の値で

CMK を見つけます。特定のカスタムキーストアで CMK を特定するには、[カスタムキーストア ID] 列の値を表示します。

7. カスタムキーストアで CMK のエイリアスまたはキー ID を選択します。

このページには、Amazon リソースネーム (ARN)、キーポリシー、タグを含む、CMK に関する詳細情報が表示されます。

8. [Cryptographic configuration (暗号化設定)] を展開します。

このセクションには、CMK のカスタムキーストアとクラスターに関する情報が含まれます。

カスタムキーストアで CMK を表示するには (API)

ListKeys、DescribeKey、GetKeyPolicy など、他の CMK で使用する、カスタムキーストアで CMK を表示するための AWS KMS API オペレーションと同じオペレーションを使用できます。たとえば、AWS CLI の次の describe-key オペレーションでは、カスタムキーストアの CMK の特別なフィールドが表示されます。このようなコマンドを実行する前に、例の CMK ID を有効な ID に置き換えます。

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

{ "KeyMetadata": { "AWSAccountId": "111122223333", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1537582718.431, "Enabled": true, "KeyManager": "CUSTOMER", "KeyState": "Enabled", "KeyUsage": "ENCRYPT_DECRYPT", "Origin": "AWS_CLOUDHSM", "CloudHsmClusterId": "cluster-1a23b4cdefg", "CustomKeyStoreId": "cks-1234567890abcdef0", "Description": "CMK in custom key store" "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] }}

カスタムキーストアでの CMK の検索や、CMK のキーマテリアルとして機能する AWS CloudHSM クラスターでのキーの特定に関するヘルプは、「CMK と キーマテリアルの検索 (p. 209)」を参照してください。

カスタムキーストアでの CMK の使用カスタムキーストアで対称 CMK を作成 (p. 203)した後は、次の暗号化オペレーションに使用できます。

208

Page 217: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK と キーマテリアルの検索

• Encrypt• Decrypt• GenerateDataKey• GenerateDataKeyWithoutPlaintext• ReEncrypt

非対称 CMK と非対称データキーペアは、カスタムキーストアではサポートされていません。その結果、非対称 CMK の — Sign、Verify、および GetPublicKey に固有のオペレーションを使用することはできません。また、非対称データキーペアを生成するオペレーションである GenerateDataKeyPair とGenerateDataKeyPairWithoutPlaintext は、カスタムキーストアではサポートされていません。

リクエストで CMK を使用するときは、ID またはエイリアスで CMK を識別します。カスタムキーストアまたは AWS CloudHSM クラスターを指定する必要はありません。応答には、対称 CMK に対して返されるフィールドと同じフィールドが含まれます。

ただし、カスタムキーストアで CMK を使用すると、暗号化オペレーションはカスタムキーストアに関連付けられた AWS CloudHSM クラスター内ですべて実行されます。このオペレーションでは、選択したCMK に関連付けられているクラスターのキーマテリアルが使用されます。

これを可能にするには、次の条件が必要です。

• CMK のキーストア (p. 236)は Enabled である必要があります。キーの状態を確認するには、DescribeKey レスポンスの AWS マネジメントコンソール (p. 207) または KeyState フィールドの [ステータス] フィールドを使用します。

• カスタムキーストアは AWS CloudHSM クラスターに接続されている必要があります。DescribeCustomKeyStores レスポンスの AWS マネジメントコンソール (p. 192) またはConnectionState の [ステータス] は CONNECTED である必要があります。

• カスタムキーストアに関連付けられている AWS CloudHSM クラスターには、少なくとも 1 つのアクティブな HSM が含まれている必要があります。クラスター内のアクティブな HSM の数を確認するには、AWS KMS コンソール (p. 192)、AWS CloudHSM コンソール、または DescribeClusters オペレーションを使用します。

• AWS CloudHSM クラスターには CMK のキーマテリアルを含める必要があります。キーマテリアルがクラスターから削除された場合、または HSM がキーマテリアルを含まないバックアップから作成された場合、暗号化オペレーションは失敗します。

これらの条件が満たされていない場合、暗号化オペレーションは失敗し、AWS KMS はKMSInvalidStateException 例外を返します。通常、カスタムキーストアを再接続する (p. 196)必要があるだけです。詳細なヘルプについては、「失敗した CMK を修正する方法 (p. 215)」を参照してください。

カスタムキーストアで CMK を使用する場合、各カスタムキーストア内の CMK は、暗号化オペレーションのリクエストで 1 秒あたりのクォータ (p. 382)を共有することに注意してください。クォータを超えた場合、AWS KMS は ThrottlingException を返します。カスタムキーストアに関連付けられているAWS CloudHSM クラスターが、カスタムキーストアに関連しないものを含む多数のコマンドを処理している場合、予想よりも低い速度で ThrottlingException が発生する可能性があります。すべてのリクエストで ThrottlingException が表示される場合、リクエスト速度を下げ、再度コマンドを試してください。カスタムキーストアでの暗号化オペレーションの クォータのリクエスト の詳細については、「カスタムキーストアのクォータ (p. 382)」を参照してください。

CMK と キーマテリアルの検索カスタムキーストアを管理する場合は、各カスタムキーストア内の CMK を識別することが必要になる場合があります。たとえば、次のタスクの一部を実行する必要がある場合があります。

209

Page 218: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK と キーマテリアルの検索

• AWS CloudTrail ログで、カスタムキーストアの CMK を追跡します。• カスタムキーストアの切断の CMK への影響を予想します。• カスタムキーストアを削除する前に、CMK の削除をスケジュールします。

また、CMK のキーマテリアルとして機能する AWS CloudHSM クラスター内のキーを特定してください。AWS KMS は CMK とそのキーマテリアルを管理しますが、AWS CloudHSM クラスター、その HSMとバックアップ、HSM のキーの制御と管理に対する責任は引き続きユーザーが保持します。キーマテリアルを監査したり、誤って削除されないようにしたり、CMK を削除した後で HSM やクラスターバックアップから削除したりするために、キーを識別する必要がある場合があります。

カスタムキーストア内の CMK のすべてのキーマテリアルは、kmsuser暗号化ユーザー (p. 185) (CU) が所有します。AWS KMS は、CMK の Amazon リソースネーム (ARN) に対して、AWS CloudHSM でのみ表示されるキーラベルの属性を設定します。

CMK とキーマテリアルを検索するには、次のいずれかの方法を使用します。

• カスタムキーストアで CMK を検索する (p. 210) — カスタムキーストアの 1 つまたはすべての CMKを識別する方法。

• カスタムキーストアのすべてのキーを検索する (p. 211) — カスタムキーストア内の CMK のキーマテリアルとして機能するクラスターですべてのキーを検索する方法。

• CMK の キーを検索する (p. 213) — カスタムキーストア内の特定の CMK のキーマテリアルとして機能するクラスターでキーを検索する方法。

• キーの CMK を検索する (p. 212) — クラスターで特定のキーの CMK を検索する方法。

カスタムキーストアで CMK を検索するカスタムキーストアを管理する場合は、各カスタムキーストア内の CMK を識別することが必要になる場合があります。この情報を使用して、AWS CloudTrail ログで CMK オペレーションを追跡したり、カスタムキーストアの切断の CMK への影響を予想したり、カスタムキーストアを削除する前に CMK の削除をスケジュールしたりすることができます。

カスタムキーストアで CMK を検索するには (コンソール)

特定のカスタムキーストアで CMK を検索するには、[Customer Managed Keys (カスタマー管理型のキー)]ページで、[Custom Key Store Name (カスタムキーストア名)] フィールドまたは [Custom Key Store ID (カスタムキーストア ID)] フィールドの値を参照します。あらゆるカスタムキーストアで CMK を識別するには、[CloudHSM] の [オリジン] の値で CMK を見つけます。オプションの列をディスプレイに追加するには、ページの右上隅にある歯車アイコンを選択します。

カスタムキーストアで CMK を検索するには (API)

カスタムキーストアで CMK を検索するには、ListKeys オペレーションと DescribeKey オペレーションを使用し、次に CustomKeyStoreId 値をフィルタリングします。例を実行する前に、架空のカスタムキーストア ID の値を有効な値に置き換えます。

Bash

特定のカスタムキーストアで CMK を検索するには、アカウントとリージョンのすべての CMK を取得します。次に、カスタムキーストアの ID をフィルタリングします。

for key in $(aws kms list-keys --query 'Keys[*].KeyId' --output text) ; do aws kms describe-key --key-id $key | grep '"CustomKeyStoreId": "cks-1234567890abcdef0"' --context 100; done

210

Page 219: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK と キーマテリアルの検索

アカウントおよびリージョン内のカスタムキーストアで CMK を取得するには、cks- で始まるCustomKeyStoreId 値を検索します。

for key in $(aws kms list-keys --query 'Keys[*].KeyId' --output text) ; do aws kms describe-key --key-id $key | grep '"CustomKeyStoreId": "cks-"' --context 100; done

PowerShell

特定のカスタムキーストアで CMK を検索するには、Get-KmsKeyList Get-KmsKey コマンドレットを使用して、アカウントとリージョンのすべての CMK を取得します。次に、カスタムキーストアの IDをフィルタリングします。

PS C:\> (Get-KMSKeyList).KeyArn | foreach {Get-KMSKey -KeyId $_} | where CustomKeyStoreId -eq 'cks-1234567890abcdef0'

アカウントとリージョン内のいずれかのカスタムキーストアで CMK を取得するには、-like 比較演算子を使用します。すべてのカスタムキーストア識別子は、cks- で始まります。

PS C:\> (Get-KMSKeyList).KeyArn | foreach {Get-KMSKey -KeyId $_} | where CustomKeyStoreId -like 'cks*'

カスタムキーストアのすべてのキーを検索するカスタムキーストアのキーマテリアルとして機能する AWS CloudHSM クラスターで、キーを識別できます。そのためには、cloudhsm_mgmt_util の findAllKeys コマンドを使用して、kmsuser が所有または共有するすべてのキーのキーハンドルを見つけます。kmsuser としてログインしておらず、AWS KMS の外部でキーを作成していない限り、kmsuser が所有するすべてのキーが AWS KMS CMK のキーマテリアルを表します。

クラスター内のすべての Crypto Officer は、カスタムキーストアを切断することなく、このコマンドを実行できます。

1. 「cloudhsm_mgmt_util の実行準備」のトピックで説明されている手順を使って、cloudhsm_mgmt_utilを開始します。

2. Crypto Officer (CO) アカウントを使用して、cloudhsm_mgmt_util にログインします。3. listUsers コマンドを使用して、kmsuser Crypto User のユーザー ID を検索します。

この例では、kmsuser にユーザー ID 3 があります。

aws-cloudhsm> listUsersUsers on server 0(10.0.0.1):Number of users found:3

User Id User Type User Name MofnPubKey LoginFailureCnt 2FA 1 PCO admin NO 0 NO 2 AU app_user NO 0 NO 3 CU kmsuser NO 0 NO

4. findAllKeys コマンドを使用して、kmsuser が所有または共有するすべてのキーのキーハンドルを見つけます。ユーザー ID 例をクラスター内の kmsuser の実際のユーザー ID に置き換えます。

211

Page 220: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK と キーマテリアルの検索

出力例では、クラスター内の両方の HSM で、kmsuser が、キーハンドルが 8、9、および 262162 のキーを所有していることを示しています。

aws-cloudhsm> findAllKeys 3 0Keys on server 0(10.0.0.1):Number of keys found 3number of keys matched from start index 0::68,9,262162findAllKeys success on server 0(10.0.0.1)

Keys on server 1(10.0.0.2):Number of keys found 6number of keys matched from start index 0::68,9,262162findAllKeys success on server 1(10.0.0.2)

キーの CMK を検索するkmsuser がクラスター内に所有しているキーのキーハンドルがわかっている場合は、キーレベルを使用して、カスタムキーストアで関連する CMK を識別できます。

AWS KMS が CMK のキーマテリアルを AWS CloudHSM クラスターに作成すると、キーラベルに CMKの Amazon リソースネーム (ARN) が書き込まれます。ラベルの値を変更しない場合、key_mgmt_util または cloudhsm_mgmt_util で getAttribute コマンドを使用して、キーをその CMK に関連付けることができます。

この手順を実行するには、カスタムキーストアを一時的に切断して、kmsuser CU としてログインできるようにする必要があります。

Note

カスタムキーストアが切断されているときは、カスタムキーストアでカスタマーマスターキー(CMK) を作成したり、既存の CMK を暗号化オペレーションに使用しようとすると、すべて失敗します。この操作により、ユーザーが機密データを保存したりアクセスしたりすることを防ぐことができます。

1. カスタムキーストアをまだ切断していない場合は切断し、「切断してログインする方法 (p. 220)」で説明されているように、kmsuser として key_mgmt_util にログインします。

2. key_mgmt_util または cloudhsm_mgmt_util で getAttribute コマンドを使用して、特定のキーハンドルのラベルの属性 (OBJ_ATTR_LABEL、属性 3) を取得します。

たとえば、このコマンドは、cloudhsm_mgmt_util で getAttribute を使用して、キーハンドルが 262162 のキーのラベルの属性 (属性3) を取得します。出力は、キー 262162 が、ARNarn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890abを使用して CMK のキーマテリアルとして機能することを示します。このコマンドを実行する前に、キーハンドル例を有効なキーハンドルに置き換えます。

キー属性のリストについては、listAttributes コマンドを使用するか、または「AWS CloudHSM UserGuide」でキー属性リファレンス を参照してください。

aws-cloudhsm> getAttribute 262162 3

Attribute Value on server 0(10.0.1.10):OBJ_ATTR_LABELarn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

Attribute Value on server 1(10.0.1.12):OBJ_ATTR_EXTRACTABLE

212

Page 221: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアからの CMK 削除のスケジュール

arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

3. key_mgmt_util または cloudhsm_mgmt_util からログアウトし、「ログアウトして再接続する方法 (p. 221)」で説明されているように、カスタムキーストアを再接続します。

CMK の キーを検索するカスタムキーストア内の CMK の CMK ID を使用して、キーマテリアルとして機能するクラスターでキーを識別できます。その後、そのキーハンドルを使用して、AWS CloudHSM クライアントコマンドでキーを識別できます。

AWS KMS が CMK のキーマテリアルを AWS CloudHSM クラスターに作成すると、キーラベルに CMKの Amazon リソースネーム (ARN) が書き込まれます。ラベルの値を変更しない限り、key_mgmt_util でfindKey コマンドを使用して、CMK のキーマテリアルのキーハンドルを取得できます。この手順を実行するには、カスタムキーストアを一時的に切断して、kmsuser CU としてログインできるようにする必要があります。

Note

カスタムキーストアが切断されているときは、カスタムキーストアでカスタマーマスターキー(CMK) を作成したり、既存の CMK を暗号化オペレーションに使用しようとすると、すべて失敗します。この操作により、ユーザーが機密データを保存したりアクセスしたりすることを防ぐことができます。

1. カスタムキーストアをまだ切断していない場合は切断し、「切断してログインする方法 (p. 220)」で説明されているように、kmsuser として key_mgmt_util にログインします。

2. key_mgmt_util で findKey コマンドを使用して、カスタムキーストアで CMK の ARN と一致するラベルが付いたキーを検索します。-l (「label」の小文字の L) パラメータの値の CMK ARN 例を、有効なCMK ARN と置き換えます。

たとえば、このコマンドは、CMK ARN 例の arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab と一致するラベルが付いたキーを検索します。出力例は、キーハンドルが 262162 のキーのラベルに、指定した CMKARN があることを示しています。他の key_mgmt_util コマンドで、このキーハンドルを使用できるようになりました。

Command: findKey -l arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890abTotal number of keys present 1

number of keys matched from start index 0::1262162

Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS

Cfm3FindKey returned: 0x00 : HSM Return: SUCCESS

3. key_mgmt_util からログアウトして、「ログアウトして再接続する方法 (p. 221)」で説明されているように、カスタムキーストアを再接続します。

カスタムキーストアからの CMK 削除のスケジュール暗号化オペレーションにカスタマーマスターキー (CMK) を使用する必要がないことが確実である場合、CMK の削除をスケジュール (p. 170)できます。AWS KMS からの CMK 削除をスケジュールする手順と同じ手順を使用します。さらに、カスタムキーストアが接続されている状態を維持します。その結果、

213

Page 222: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタムキーストアのトラブルシューティング

待機期間が終了すると、AWS KMS によって、関連付けられた AWS CloudHSM クラスターから対応するキーマテリアルが削除されます。

Warning

CMK の削除は、破壊的で潜在的に危険なオペレーションで、これを実行すると CMK で暗号化されたすべてのデータは回復できなくなります。CMK の削除をスケジュールする前に、CMK の過去の使用状況を検証し (p. 179)、保留中に誰かが CMK を使用しようとするとアラートを発するAmazon CloudWatch アラームを作成してください (p. 176)。可能な限り、CMK を削除するのではなく、CMK を無効にしてください (p. 46)。

カスタムキーストアからの CMK の削除をスケジュールする場合、そのキーステータス (p. 236)は [削除保留中] に変わります。カスタムキーストアが切断されているため (p. 196)、CMK が使用できるようになっても、CMK は待機期間を通じて [削除保留中] の状態のままになります。これにより、待機期間中はいつでも CMK の削除をキャンセルできます。

待機期間が終了すると、AWS KMS は AWS KMS から CMK を削除します。次に、AWS KMS では、関連付けられた AWS CloudHSM クラスターからキーマテリアルを可能な限り削除します。キーストアが AWSKMS から切断されるなど、AWS KMS でキーマテリアルを削除できない場合は、クラスターから手動で孤立したキーマテリアルを削除 (p. 218)できます。

AWS KMS は、クラスターのバックアップからキーマテリアルを削除しません。AWS KMS から CMK を削除し、AWS CloudHSM クラスターからそのキーマテリアルを削除した場合でも、バックアップから作成されたクラスターには、削除したキーマテリアルが含まれている可能性があります。キーマテリアルを完全に削除するには、CMK の作成日を表示 (p. 207)します。次に、キーマテリアルが含まれている可能性があるすべてのクラスターのバックアップを削除します。

カスタムキーストアのトラブルシューティングカスタムキーストアは、有用で優れた復元力を持つように設計されています。ただし、カスタムキーストアを操作可能にするために修復する必要のあるエラー条件がいくつかあります。

トピック• 使用できない CMK を修正する方法 (p. 214)• 失敗した CMK を修正する方法 (p. 215)• 接続障害の修復方法 (p. 215)• 無効な kmsuser 認証情報の修正方法 (p. 217)• 孤立したキーマテリアルを削除する方法 (p. 218)• CMK の削除されたキーマテリアルの復旧方法 (p. 219)• kmsuser としてログインする方法 (p. 219)

使用できない CMK を修正する方法カスタムキーストアのカスタマーマスターキー (CMK) の キーの状態 (p. 236) は、通常は Enabled です。すべての CMK と同様に、カスタムキーストアで CMK を無効にするか、削除するようスケジュールすると、キーの状態が変更されます。ただし、他の CMK とは異なり、カスタムキーストアの CMKは、Unavailable の キーの状態 (p. 236) を持つこともできます。

Unavailable のキーの状態は、CMK が AWS CloudHSM クラスターから意図的に切断された (p. 196)カスタムキーストアにあり、再接続を試みて失敗しました。CMK は使用できませんが、CMKを表示および管理することはできます。ただし、暗号化オペレーション (p. 208)で使用することはできません。

214

Page 223: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド失敗した CMK を修正する方法

CMK のキーの状態を確認するには、[Customer managed keys (カスタマー管理型のキー)] ページで、CMKの [Status (ステータス)] フィールドを表示します。または、DescribeKey オペレーションを使用し、レスポンスで KeyState 要素を表示します。詳細については、「キーの表示 (p. 26)」を参照してください。

切断されたカスタムキーストアの CMK には、Unavailable または PendingDeletion のキーの状態があります。カスタムキーストアが AWS CloudHSM クラスターから切断されている場合でも、カスタムキーストアからの削除がスケジュールされている CMK には Pending Deletion キーの状態があります。これにより、カスタムキーストアに再接続することなく、スケジュールされたキーの削除をキャンセルできます。

使用できない CMK を修正するには、カスタムキーストアを再接続します (p. 196)。カスタムキーストアを再接続すると、カスタムキーストア内の CMK のキーの状態は、Enabled や Disabled などの以前の状態に自動的に復元されます。削除が保留中の CMK は PendingDeletion 状態のままです。ただし、問題が解決しない場合は、使用できない CMK を有効または無効にする (p. 46) は、キーの状態を変更しません。有効または無効のアクションは、キーが使用可能になったときにのみ適用されます。

失敗した接続のヘルプについては、「接続障害の修復方法 (p. 215)」を参照してください。

失敗した CMK を修正する方法カスタムキーストアで CMK を作成して使用する際の問題は、カスタムキーストア、関連する AWSCloudHSM クラスター、CMK、またはそのキーマテリアルの問題によって発生する可能性があります。

カスタムキーストアが AWS CloudHSM クラスターから切断されると、カスタムキーストア内の CMK のキー状態はUnavailable です。切断されたカスタムキーストアに CMK を作成するすべてのリクエストは、CustomKeyStoreInvalidStateException 例外を返します。データキーを暗号化、復号化、再暗号化、または生成するすべてのリクエストは、KMSInvalidStateException 例外を返します。問題を修正するには、カスタムキーストアを再接続します (p. 196)。

ただし、キーの状態が Enabled で、カスタムキーストアの接続ステータスが Connected であっても、暗号化オペレーション (p. 208)でカスタムキーストア CMK を使用しようとすると失敗する場合があります。これは、以下のいずれかの条件によって発生する可能性があります。

• CMK のキーマテリアルは、関連付けられた AWS CloudHSM クラスターから削除された可能性があります。調査するには、CMK のキーマテリアルの キーハンドルを見つけ (p. 207)、必要に応じてキーマテリアルの復旧を試みます (p. 219)。

• すべての HSM は、カスタムキーストアに関連付けられた AWS CloudHSM クラスターから削除されました。暗号化オペレーションでカスタムキーストアの CMK を使用するには、その AWS CloudHSMクラスターに少なくとも 1 つのアクティブな HSM が含まれている必要があります。AWS CloudHSMクラスター内の HSM の数と状態を確認するには、AWS CloudHSM コンソールか DescribeClusters オペレーションを使用します。HSM をクラスターに追加するには、AWS CloudHSM コンソールまたはCreateHsm オペレーションを使用します。

• カスタムキーストアに関連付けられた AWS CloudHSM クラスターが削除されました。問題を解決するには、元のクラスターのバックアップ、または元のクラスターの作成に使用されたバックアップなどの、元のクラスターに関連するバックアップからクラスターを作成します。次に、カスタムキーストアの設定で、クラスター ID を編集 (p. 194)します。手順については、「CMK の削除されたキーマテリアルの復旧方法 (p. 219)」を参照してください。

接続障害の修復方法カスタムキーストア (p. 196)を AWS CloudHSM クラスター接続しようとしたが、オペレーションが失敗した場合、カスタムキーストアの接続ステータスは FAILED に変わります。カスタムキーステータスのステータスを確認するには、AWS マネジメントコンソール のカスタムキーステータスの [ステータス] 列か、DescribeCustomKeyStores レスポンスの ConnectionState 要素を参照してください。

また、簡単に検出できるクラスター設定エラーが原因で接続の試行がすぐに失敗することがあります。この場合、 [ステータス] または ConnectionState は DISCONNECTED のままになります。これらの障害で

215

Page 224: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド接続障害の修復方法

は、試行の失敗原因を説明するエラーメッセージまたは例外が返されます。例外の説明とクラスターの要件 (p. 189)を確認して問題を修正し、カスタムキーストアを更新 (p. 194)し、必要に応じて接続を再試行してください。

接続ステータスが FAILED の場合は、DescribeCustomKeyStores オペレーションを実行し、レスポンスのConnectionErrorCode 要素を確認します。

Note

カスタムキーストアの接続ステータスが FAILED の場合は、再接続を試みる前に カスタムキーストアを切断 (p. 196)する必要があります。FAILED 接続ステータスでカスタムキーストアに接続することはできません。

• CLUSTER_NOT_FOUND は、AWS KMS が指定のクラスター ID を持つ AWS CloudHSM クラスターを見つけられないことを示します。これは、誤ったクラスター ID が API オペレーションに提供されたか、クラスターが削除されて置き換えられなかったために発生する可能性があります。このエラーを解決するには、AWS CloudHSM コンソールまたは DescribeClusters オペレーションを使用するなどして、クラスター ID を確認してください。クラスターが削除されている場合は、オリジナルの最新のバックアップからクラスターを作成します。次に、カスタムキーストアを切断し (p. 196)、カスタムキーストア (p. 194)クラスター ID 設定を編集して、カスタムキーストアをクラスターに再接続します (p. 196)。

• INSUFFICIENT_CLOUDHSM_HSMS は、関連付けられた AWS CloudHSM クラスターに HSM が含まれていないことを示します。クラスターに接続するには、少なくとも 1 つの HSM を持っている必要があります。クラスターの HSM の数を調べるには、DescribeClusters オペレーションを使用します。このエラーを解決するには、少なくとも 1 つの HSM をクラスターに追加します。複数の HSM を追加する場合は、別のアベイラビリティーゾーンでそれらを作成することをお勧めします。

• INTERNAL_ERROR は、内部エラーのために AWS KMS がリクエストを完了できなかったことを示します。リクエストを再実行してください。ConnectCustomKeyStore リクエストの場合、カスタムキーストアの接続を切断してから接続を再実行します。

• INVALID_CREDENTIALSは、適切な kmsuser アカウントのパスワードがないため、AWS KMS が関連付けられた AWS CloudHSM クラスターにログインできないことを示します。このエラーに関するヘルプについては、「無効な kmsuser 認証情報の修正方法 (p. 217)」を参照してください。

• NETWORK_ERRORS は通常、一時的なネットワークの問題を示します。カスタムキーストアを切断し (p. 196)、数分待ってから、もう一度接続してください。

• SUBNET_NOT_FOUND は、AWS CloudHSM クラスター設定のサブネットが少なくとも 1 つ削除されたことを示します。AWS KMS がクラスター構成内ですべてのサブネットを見つけることができない場合、カスタムキーストアを AWS CloudHSM クラスターに接続しようとすると失敗します。

このエラーを修正するには、同じ AWS CloudHSM クラスターの最新のバックアップからクラスターを作成します。(このプロセスでは、VPC とプライベートサブネットを持つ新しいクラスター設定が作成されます)。 新しいクラスターが カスタムキーストアの要件 (p. 189)を満たしていることを確認し、新しいクラスター ID を書き留めます。次に、新しいクラスターをカスタムキーストアに関連付けるには、 カスタムキーストアの接続を切断 (p. 196)し、カスタムキーストアのクラスター ID を新しいクラスターの ID に変更 (p. 194)して、もう一度接続を試みます。

Tip

kmsuser パスワードをリセット (p. 217)しないようにするには、AWS CloudHSM クラスターの最新のバックアップを使用します。

• USER_LOCKED_OUT は、失敗したパスワードの試行回数が多すぎるため、kmsuser Crypto User (CU)アカウント (p. 185)が関連付けられた AWS CloudHSM クラスターからロックアウトされたことを示します。このエラーに関するヘルプについては、「無効な kmsuser 認証情報の修正方法 (p. 217)」を参照してください。

このエラーを修正するには、カスタムキーストアを切断し (p. 196)、cloudhsm_mgmt_util のchangePswd コマンドを使用してkmsuser アカウントのパスワードを変更します。次に、カスタムキーストアの kmsuser のパスワード設定 (p. 194)を編集し、接続し直してみてください。ヘルプについては、無効な kmsuser 認証情報の修正方法 (p. 217)トピックに説明されている手順を使用します。

216

Page 225: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド無効な kmsuser 認証情報の修正方法

• USER_LOGGED_IN は、kmsuser CU アカウントが関連付けられた AWS CloudHSM クラスターにログインしていることを示します。これにより、AWS KMS が kmsuser アカウントパスワードをローテーションしてクラスターにログインするのを防ぐことができます。このエラーを修正するには、クラスターから kmsuser CU をログアウトします。クラスターにログインするために kmsuser パスワードを変更した場合は、カスタムキーストアのキーストアパスワード値も更新する必要があります。ヘルプについては、「ログアウトして再接続する方法 (p. 221)」を参照してください。

• USER_NOT_FOUND は、AWS KMS が関連付けられた AWS CloudHSM クラスターで kmsuser CU アカウントを見つけられないことを示します。このエラーを修正するには、クラスターで kmsuser CU アカウントを作成し (p. 190)、カスタムキーストアのキーストアのキーストアのパスワード値を更新します (p. 194)。ヘルプについては、「無効な kmsuser 認証情報の修正方法 (p. 217)」を参照してください。

無効な kmsuser 認証情報の修正方法カスタムキーストアを接続すると (p. 196)、AWS KMS は関連付けられた AWS CloudHSM クラスターに kmsuser暗号化ユーザー (p. 185) (CU) としてログインします。カスタムキーストアが切断されるまで、ログインしたままになります。DescribeCustomKeyStores レスポンスは、次の例に示すように、INVALID_CREDENTIALS の FAILED と ConnectionErrorCode の値の ConnectionState を示します。

カスタムキーストアを切断して kmsuser パスワードを変更すると、AWS KMS は kmsuser CU アカウントの認証情報で AWS CloudHSM クラスターにログインできなくなります。その結果、カスタムキーストアへの接続はすべて失敗します。DescribeCustomKeyStores レスポンスは、次の例に示すように、INVALID_CREDENTIALS の FAILED と ConnectionErrorCode の値の ConnectionState を示します。

$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore{ "CustomKeyStores": [ "CloudHsmClusterId": "cluster-1a23b4cdefg", "ConnectionErrorCode": "INVALID_CREDENTIALS" "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "FAILED" ],}

また、誤ったパスワードでクラスターにログインしようとして 5 回失敗すると、AWS CloudHSM はユーザーアカウントをロックします。このクラスターにログインするには、アカウントのパスワードを変更する必要があります。

AWS KMS が kmsuser CU としてクラスターにログインしようとしたときにロックアウトレスポンスを受け取ると、カスタムキーストアの接続リクエストは失敗します。DescribeCustomKeyStores レスポンスは、次の例に示すように、USER_LOCKED_OUT の FAILED と ConnectionErrorCode の値のConnectionState を含みます。

$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore{ "CustomKeyStores": [ "CloudHsmClusterId": "cluster-1a23b4cdefg", "ConnectionErrorCode": "USER_LOCKED_OUT" "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "FAILED"

217

Page 226: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド孤立したキーマテリアルを削除する方法

],}

これらの条件を修復するには、次の手順を実行します。

1. カスタムキーストアを切断します (p. 196)。2. DescribeCustomKeyStores オペレーションを実行し、レスポンス内の ConnectionErrorCode 要素

の値を表示します。

• ConnectionErrorCode の値が INVALID_CREDENTIALS の場合は、kmsuser アカウントの現在のパスワードを特定します。必要に応じて、cloudhsm_mgmt_util の changePswd コマンドを使用して、パスワードを既知の値に設定します。

• ConnectionErrorCode の値が USER_LOCKED_OUT の場合は、cloudhsm_mgmt_util のchangePswd コマンドを使用して kmsuser パスワードを変更する必要があります。

3. kmsuser パスワード設定を編集して (p. 194)、クラスター内の現在の kmsuser パスワードと一致させます。このアクションは、AWS KMS にクラスターにログインするために使用するパスワードを指示します。クラスターの kmsuser パスワードは変更されません。

4. カスタムキーストアを接続します (p. 196)。

孤立したキーマテリアルを削除する方法カスタムキーストアから CMK の削除をスケジュールした後、対応するキーマテリアルを関連するクラスターから手動で削除する必要が生じる場合があります。

カスタムキーストアで CMK を作成すると、AWS KMS は AWS KMS に CMK メタデータを作成し、関連付けられた AWS CloudHSM クラスターにキーマテリアルを生成します。カスタムキーストアで CMK の削除をスケジュールすると、待機期間の後、AWS KMS は CMK メタデータを削除します。次に、AWSKMS は、できる限り対応するキーマテリアルをクラスターから削除します。AWS KMS はクラスターバックアップからキーマテリアルを削除しようとしません。

カスタムキーストアが切断された場合など、AWS KMS がキーマテリアルを削除できない場合は、AWSKMS はエントリを AWS CloudTrail ログに書き込みます。このエントリには、CMK ID、AWS CloudHSMクラスター ID、およびキーマテリアルのキーハンドルが含まれます。

関連する AWS CloudHSM クラスターからキーマテリアルを削除するには、次のような手順を使用します。この例では、AWS CLI および AWS CloudHSM コマンドラインツールを使用していますが、CLI の代わりに AWS マネジメントコンソール を使用することもできます。

1. カスタムキーストアをまだ切断していない場合は切断し、「切断してログインする方法 (p. 220)」で説明されているように、key_mgmt_util にログインします。

2. key_mgmt_util で deleteKey コマンドを使用して、クラスターの HSM からキーを削除します。

たとえば、このコマンドは、クラスターの HSM 262162 からキーを削除します。CloudTrail ログエントリでキーハンドルが一覧表示されます。

Command: deleteKey -k 262162

Cfm3DeleteKey returned: 0x00 : HSM Return: SUCCESS

Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS

3. key_mgmt_util からログアウトして、「ログアウトして再接続する方法 (p. 221)」で説明されているように、カスタムキーストアを再接続します。

218

Page 227: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の削除されたキーマテリアルの復旧方法

CMK の削除されたキーマテリアルの復旧方法カスタマーマスターキーのキーマテリアルが削除された場合は、CMK は使用できず、CMK で暗号化されたすべての暗号テキストを復号化することはできません。これは、カスタムキーストアの CMK のキーマテリアルが関連する AWS CloudHSM クラスターから削除された場合に発生します。ただし、キーマテリアルを復元することは可能な場合もあります。

カスタムキーストアでカスタマーマスターキー (CMK) を作成すると、AWS KMS は関連する AWSCloudHSM クラスターにログインし、CMK のキーマテリアルを作成します。また、それだけが知っている値にパスワードを変更し、カスタムキーストアが接続されている間だけ、ログインしたままになります。キー所有者、つまりキーを作成した CU のみがキーを削除できるため、誤って HSM からキーが削除されることはありません。

ただし、CMK のキーマテリアルがクラスター内の HSM から削除されると、CMK キーの状態は最終的に UNAVAILABLE に変わります。暗号化オペレーションに CMK を使用しようとすると、KMSInvalidStateException 例外が発生してオペレーションが失敗します。最も重要なことは、CMK で暗号化されたデータは復号化できないことです。

特定の状況下では、キーマテリアルを含むバックアップからクラスターを作成して、削除されたキーマテリアルを復旧できます。この戦略は、キーが存在していて削除される前に少なくとも 1 つのバックアップが作成された場合にのみ機能します。

キーマテリアルを復旧するには、次の手順を実行します。

1. キーマテリアルが格納されているクラスターバックアップを見つけます。バックアップには、クラスターとその暗号化されたデータをサポートするために必要なすべてのユーザーとキーも含まれている必要があります。

DescribeBackups オペレーションを使用してクラスターのバックアップを一覧表示します。バックアップのタイムスタンプを使用すると、バックアップの選択に役立ちます。カスタムキーストアに関連付けられているクラスターへの出力を制限するには、次の例のように Filters パラメータを使用します。

$ aws cloudhsmv2 describe-backups --filters clusterIds=<cluster ID>{ "Backups": [ { "ClusterId": "cluster-1a23b4cdefg", "BackupId": "backup-9g87f6edcba", "CreateTimestamp": 1536667238.328, "BackupState": "READY" }, ... ]}

2. 選択したバックアップからクラスターを作成します。バックアップに削除されたキーおよびクラスターに必要な他のユーザーとキーが含まれていることを確認します。

3. カスタムキーストアを切断して (p. 196)、そのプロパティを編集できます。4. カスタムキーストアのクラスター ID を編集します (p. 194)。バックアップから作成したクラスターの

クラスター ID を入力します。クラスターは元のクラスターとバックアップ履歴を共有するため、新しいクラスター ID が有効である必要があります。

5. カスタムキーストアを再接続します (p. 196)。

kmsuser としてログインする方法カスタムキーストアの AWS CloudHSM クラスターにキーマテリアルを作成して管理するために、AWSKMS は kmsuser 暗号化ユーザー (CU) アカウント (p. 185)を使用します。クラスターに kmsuser CU ア

219

Page 228: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドkmsuser としてログインする方法

カウントを作成し (p. 189)、カスタムキーストアを作成するときにそのパスワードを AWS KMS に入力します。

一般的に、AWS KMS は kmsuser アカウントを管理します。ただし、カスタムキーストアを切断し、kmsuser CU としてクラスターにログインして、cloudhsm_mgmt_util および key_mgmt_util コマンドラインツールを使用する必要があるタスクもあります。

Note

カスタムキーストアが切断されているときは、カスタムキーストアでカスタマーマスターキー(CMK) を作成したり、既存の CMK を暗号化オペレーションに使用しようとすると、すべて失敗します。この操作により、ユーザーが機密データを保存したりアクセスしたりすることを防ぐことができます。

このトピックでは、カスタムキーストアを切断して kmsuser ユーザーとしてログインし (p. 220)、AWSCloudHSM コマンドラインツールを実行し、ログアウトしてカスタムキーストアを再接続する (p. 221)方法について説明します。

トピック• 切断してログインする方法 (p. 220)• ログアウトして再接続する方法 (p. 221)

切断してログインする方法関連するクラスターに kmsuser CU としてログインする必要があるたびに、次の手順を実行します。

1. カスタムキーストアがまだ切断されていない場合は、切断します。AWS マネジメントコンソール または AWS KMS API を使用できます。

カスタムキーが接続されている間、AWS KMS は kmsuser としてログインします。これにより、kmsuser としてログインしたり、kmsuser パスワードを変更することができなくなります。

たとえば、このコマンドは DisconnectCustomKeyStore を使用してキーストアを切断します。カスタムキーストア ID 例を有効な ID と置き換えます。

$ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0

2. cloudhsm_mgmt_util を起動します。「AWS CloudHSM User Guide」の「cloudhsm_mgmt_util の実行準備」セクションで説明されている 手順を使用します。

3. crypto officer (CO) として AWS CloudHSM クラスターの cloudhsm_mgmt_util にログインします。

たとえば、このコマンドは admin という名前の CO としてログインします。CO ユーザー名とパスワードの例を有効な値に置き換えます。

aws-cloudhsm>loginHSM CO admin <password>loginHSM success on server 0(10.0.2.9)loginHSM success on server 1(10.0.3.11)loginHSM success on server 2(10.0.1.12)

4. changePswd コマンドを使用して、kmsuser アカウントのパスワードを知っているものに変更します (AWS KMS は、カスタムキーストアに接続するときにパスワードをローテーションします)。 パスワードは 7〜32 の英数字で構成する必要があります。大文字と小文字が区別され、特殊文字を含めることはできません。

たとえば、このコマンドは、kmsuser パスワードを tempPassword に変更します。

aws-cloudhsm>changePswd CU kmsuser tempPassword

220

Page 229: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドkmsuser としてログインする方法

*************************CAUTION********************************This is a CRITICAL operation, should be done on all nodes in thecluster. Cav server does NOT synchronize these changes with thenodes on which this operation is not executed or failed, pleaseensure this operation is executed on all nodes in the cluster.****************************************************************

Do you want to continue(y/n)?yChanging password for kmsuser(CU) on 3 nodes

5. 設定したパスワードを使用して、key_mgmt_util または cloudhsm_mgmt_util に kmsuser としてログインします。詳細な手順については、「cloudhsm_mgmt_util の開始方法」および「key_mgmt_util の開始方法」を参照してください。使用するツールは、タスクによって異なります。

たとえば、このコマンドは key_mgmt_util にログインします。

Command: loginHSM -u CU -s kmsuser -p tempPasswordCfm3LoginHSM returned: 0x00 : HSM Return: SUCCESS

Cluster Error StatusNode id 0 and err state 0x00000000 : HSM Return: SUCCESSNode id 1 and err state 0x00000000 : HSM Return: SUCCESSNode id 2 and err state 0x00000000 : HSM Return: SUCCESS

ログアウトして再接続する方法1. タスクを実行し、コマンドラインツールからログアウトします。ログアウトしないと、カスタムキー

ストアへの再接続が失敗します。

Command: logoutHSMCfm3LogoutHSM returned: 0x00 : HSM Return: SUCCESS

Cluster Error StatusNode id 0 and err state 0x00000000 : HSM Return: SUCCESSNode id 1 and err state 0x00000000 : HSM Return: SUCCESS

2. カスタムキーストアの kmsuser パスワード設定を編集します (p. 194)。

これにより、クラスターの kmsuser の現在のパスワードが AWS KMS に通知されます。このステップを省略すると、AWS KMS は kmsuser としてクラスターにログインできなくなり、カスタムキーストアの再接続がすべて失敗します。UpdateCustomKeyStore オペレーションの AWS マネジメントコンソール または KeyStorePassword パラメータを使用できます。

たとえば、このコマンドは現在のパスワードが tempPassword あることを AWS KMS に通知します。例のパスワードを実際のパスワードに置き換えます。

$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --key-store-password tempPassword

3. カスタムキーストアを AWS KMS に再接続します。カスタムキーストア ID 例を有効な ID と置き換えます。接続処理中に、AWS KMS は kmsuser パスワードを、それだけが知っている値に変更します。

ConnectCustomKeyStore オペレーションはすぐに戻りますが、接続プロセスには長時間かかることがあります。最初のレスポンスは、接続プロセスの成功を示していません。

$ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0

221

Page 230: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドkmsuser としてログインする方法

4. DescribeCustomKeyStores オペレーションを使用して、カスタムキーストアが接続されていることを確認します。カスタムキーストア ID 例を有効な ID と置き換えます。

この例では、接続状態フィールドは、カスタムキーストアが接続されていることを示しています。

$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0{ "CustomKeyStores": [ "CustomKeyStoreId": "cks-1234567890abcdef0", "CustomKeyStoreName": "ExampleKeyStore", "CloudHsmClusterId": "cluster-1a23b4cdefg", "TrustAnchorCertificate": "<certificate string appears here>", "CreationDate": "1.499288695918E9", "ConnectionState": "CONNECTED" ],}

222

Page 231: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

VPC エンドポイントを介した AWSKMS への接続

インターネットを介さずに、VPC のプライベートエンドポイントから AWS KMS に直接接続できます。VPC エンドポイントを使用すると、VPC と AWS KMS の間の通信は完全に AWS ネットワーク内で実施されます。

AWS KMS では、Amazon Virtual Private Cloud (Amazon VPC) インターフェイスエンドポイントがサポートされています。このエンドポイントは、https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Introduction.html#what-is-privatelink を使用します。各 VPC エンドポイントは、VPC サブネット内の 1 つ以上の Elastic Network Interfaces (ENI) とプライベート IP アドレスで表されます。

VPC インターフェイスエンドポイントは VPC を AWS KMS に直接接続します。その際、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続を使用しません。VPC のインスタンスは、パブリック IP アドレスがなくても AWS KMS と通信できます。

VPC エンドポイントは、AWS KMS API オペレーションおよび AWS CLI コマンドで指定できます。たとえば、次のコマンドは、endpoint-url パラメータを使用して、AWS KMS への AWS CLI コマンドで VPCエンドポイントを指定しています。

$ aws kms list-keys --endpoint-url https://-dfm9tr04.kms.us-east-1.vpce.amazonaws.com

デフォルトのドメイン名サーバーを使用する場合 (AmazonProvidedDNS)、および VPC エンドポイントのプライベート DNS ホスト名を有効にする場合は、エンドポイント URL を指定する必要はありません。AWS によってプライベートゾーンデータと VPC ネームサーバーが検出されるため、パブリック KMSエンドポイント (https://kms.<region>.amazonaws.com) はプライベート VPC エンドポイントに解決されます。独自のネームサーバーを使用する場合に、この機能を有効にするには、VPC ネームサーバーに KMS ドメインのリクエストを転送します。

AWS CloudTrail ログを使用して、VPC エンドポイントを介した KMS キーの使用を監査することもできます。また、IAM およびキーポリシーで条件を使用すると、指定された VPC または VPC エンドポイントからではないリクエストすべてに対するアクセスを拒否できます。

Note

VPC エンドポイントに基づいて IAM およびキーポリシーを作成するときは注意が必要です。ポリシーステートメントによって、特定の VPC または VPC エンドポイントからリクエストが送信されるように要求されている場合は、ユーザーに代わって CMK を使用する統合 AWS サービスからのリクエストが失敗する可能性があります。ヘルプについては、「AWS KMS アクセス許可を持つポリシーでの VPC エンドポイント条件の使用 (p. 96)」を参照してください。

AWS でサポートされているリージョン

AWS KMS では、Amazon VPC と AWS KMS の両方が使用可能なすべての AWS リージョンの VPC エンドポイントがサポートされます。

トピック• AWS KMS VPC エンドポイントの作成 (p. 224)• AWS KMS VPC エンドポイントへの接続 (p. 226)• ポリシーステートメントでの VPC エンドポイントの使用 (p. 227)• VPC での CMK 使用の監査 (p. 229)

223

Page 232: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドVPC エンドポイントの作成

AWS KMS VPC エンドポイントの作成各リージョンで KMS VPC エンドポイントサービスを使用して、VPC にインターフェイスエンドポイントを作成します。VPC エンドポイントは AWS マネジメントコンソール で作成できます。また、AWS CLIや Amazon EC2 API を使用して作成することもできます。

トピック• AWS KMS VPC エンドポイントの作成 (VPC コンソール) (p. 224)• AWS KMS VPC エンドポイントの作成 (AWS CLI) (p. 225)

AWS KMS VPC エンドポイントの作成 (VPC コンソール)1. AWS マネジメントコンソールにサインインし、Amazon VPC コンソール (https://

console.aws.amazon.com/vpc/) を開きます。2. ナビゲーションバーで、リージョンセレクターを使用して、リージョンを選択します。3. ナビゲーションペインで、[Endpoints] を選択します。メインペインで、[Create Endpoint] を選択しま

す。4. [Service category] で、[AWS services] を選択します。5. [サービス名] リストで、リージョンの AWS KMS インターフェイスエンドポイントのエン

トリを選択します。たとえば、米国東部 (バージニア北部) リージョンでは、エントリ名はcom.amazonaws.us-east-1.kms です。

6. [VPC] で、VPC を選択します。エンドポイントは、選択した VPC で作成されます。7. [Subnets] で、追加するサブネットを各アベイラビリティーゾーンから選択します。

VPC エンドポイントは、複数のアベイラビリティーゾーンにまたがることができます。VPC エンドポイントの Elastic Network Interface (ENI) は、選択した各サブネットで作成されます。各 ENI にDNS ホスト名とプライベート IP アドレスがあります。

8. このステップでは、VPC エンドポイントのプライベート DNS ホスト名を有効にできます。[プライベート DNS 名を有効にする] オプションを選択すると、標準の AWS KMS DNS ホスト名 (https://kms.<region>.amazonaws.com) は VPC エンドポイントに解決されます。

このオプションにより VPC エンドポイントが使いやすくなります。AWS KMS CLI および SDK はデフォルトで標準の AWS KMS DNS ホスト名を使用するため、アプリケーションおよびコマンドでVPC エンドポイント URL を指定する必要はありません。

この機能は、VPC の enableDnsHostnames 属性および enableDnsSupport 属性が true に設定されている場合にのみ使用できます。この属性を設定するには、VPC の DNS サポートを更新してください。

プライベート DNS ホスト名を有効にするには、[Enable Private DNS Name] で、[Enable for thisendpoint] を選択します。

9. [Security groups] で、セキュリティグループを選択または作成します。

セキュリティグループを使用すると、エンドポイントへのアクセスをコントロールできます。これは、ファイアウォールを使用するのに似ています。

10. [Create endpoint] を選択します。

結果として VPC エンドポイントが表示されます。これには、VPC エンドポイントへの接続 (p. 226)に使用する VPC エンドポイント ID と DNS 名が含まれます。

224

Page 233: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS VPC エンドポイントの作成 (AWS CLI)

Amazon VPC ツールを使って、エンドポイントを表示したり、エンドポイントの通知の作成、エンドポイントのプロパティの変更、エンドポイントの削除などの管理作業を行ったりすることもできます。手順については、「インターフェイス VPC エンドポイント」を参照してください。

AWS KMS VPC エンドポイントの作成 (AWS CLI)AWS CLI で create-vpc-endpoint コマンドを使用して、AWS KMS に接続する VPC エンドポイントを作成できます。

VPC エンドポイントタイプには必ず interface を使用します。また、kms が含まれるサービス名の値と、VPC が配置されているリージョンを指定してください。

このコマンドには、PrivateDnsNames パラメータは含まれません。このデフォルト値は true であるためです。このオプションを無効にするには、値が false のパラメータを指定します。プライベート DNS 名は、VPC の enableDnsHostnames 属性と enableDnsSupport 属性が true に設定されている場合にのみ使用できます。この属性を設定するには、ModifyVpcAttribute オペレーションを使用します。

コマンドの構文を次に示します。

aws ec2 create-vpc-endpoint --vpc-id <vpc id> \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.<region>.kms \ --subnet-ids <subnet id> \ --security-group-id <security group id>

225

Page 234: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドVPC エンドポイントへの接続

たとえば、次のコマンドは、VPC ID が で、リージョンが us-east-1の VPC エンドポイントを VPCに作成します。ここではアベイラビリティーゾーンを表すサブネット ID が 1 つしか指定されていませんが、これは多数指定することができます。セキュリティグループ ID も必要です。

出力には、新しい VPC エンドポイントへの接続に使用する VPC エンドポイント ID と DNS 名が含まれます。

$ aws ec2 create-vpc-endpoint --vpc-id \ --vpc-endpoint-type Interface \ --service-name com.amazonaws.us-west-1.kms \ --subnet-ids \ --security-group-id sg-1a2b3c4d

{ "VpcEndpoint": { "PolicyDocument": "{\n \"Statement\": [\n {\n \"Action\": \"*\", \n \"Effect\": \"Allow\", \n \"Principal\": \"*\", \n \"Resource\": \"*\"\n }\n ]\n}", "VpcId": "", "NetworkInterfaceIds": [ "eni-bf8aa46b" ], "SubnetIds": [ "" ], "PrivateDnsEnabled": true, "State": "pending", "ServiceName": "com.amazonaws.us-east-1.kms", "RouteTableIds": [], "Groups": [ { "GroupName": "default", "GroupId": "sg-1a2b3c4d" } ], "VpcEndpointId": "", "VpcEndpointType": "Interface", "CreationTimestamp": "2017-09-05T20:14:41.240Z", "DnsEntries": [ { "HostedZoneId": "Z7HUB22UULQXV", "DnsName": "-dfm9tr04.kms.us-east-1.vpce.amazonaws.com" }, { "HostedZoneId": "Z7HUB22UULQXV", "DnsName": "-dfm9tr04-us-east-1a.kms.us-east-1.vpce.amazonaws.com" }, { "HostedZoneId": "Z1K56Z6FNPJRR", "DnsName": "kms.us-east-1.amazonaws.com" } ] }}

AWS KMS VPC エンドポイントへの接続AWS CLI または AWS SDK を使用して、VPC エンドポイント経由で AWS KMS に接続できます。VPC エンドポイントを指定するには、DNS 名を使用します。

226

Page 235: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドポリシーステートメントでの VPC エンドポイントの使用

たとえば、次の list-keys コマンドは、endpoint-url パラメータを使用して VPC エンドポイントを指定します。こうしたコマンドを使用するには、サンプルの VPC エンドポイント ID を、ご自身のアカウントのものに置き換えてください。

aws kms list-keys --endpoint-url https://-dfm9tr04.kms.us-east-1.vpce.amazonaws.com

VPC エンドポイントの作成時にプライベートホスト名を有効にした場合は、CLI コマンドまたはアプリケーションの設定で VPC エンドポイント URL を指定する必要はありません。標準の AWS KMS DNSホスト名 (https://kms.<region>.amazonaws.com) は、ご自身の VPC エンドポイントに解決されます。AWS CLI と SDK はデフォルトでこのホスト名を使用します。これにより、スクリプトとアプリケーションを変更せずに VPC エンドポイントを使用し始めることができます。

プライベートホスト名を使用するには、VPC の enableDnsHostnames 属性と enableDnsSupport 属性を true に設定する必要があります。この属性を設定するには、ModifyVpcAttribute オペレーションを使用します。

ポリシーステートメントでの VPC エンドポイントの使用

IAM ポリシーおよび AWS KMS キーポリシーを使用すると、AWS KMS カスタマーマスターキー (CMK)へのアクセスをコントロールできます。また、グローバル条件キーを使って、リクエストの VPC エンドポイントまたは VPC に基づいて、こうしたポリシーを制限することもできます。

• aws:sourceVpce 条件キーを使用して、VPC エンドポイントに基づいて AWS KMS CMK へのアクセスを許可または制限します。

• aws:sourceVpc 条件キーを使用して、プライベートエンドポイントをホストする VPC に基づいてAWS KMS CMK へのアクセスを許可または制限します。

Note

VPC エンドポイントに基づいて IAM およびキーポリシーを作成するときは注意が必要です。ポリシーステートメントによって、特定の VPC または VPC エンドポイントからリクエストが送信されるように要求されている場合は、ユーザーに代わって CMK を使用する統合 AWS サービスからのリクエストが失敗する可能性があります。ヘルプについては、「AWS KMS アクセス許可を持つポリシーでの VPC エンドポイント条件の使用 (p. 96)」を参照してください。また、リクエストが Amazon VPC エンドポイントから送信されている場合、aws:sourceIP 条件キーは無効です。リクエストを VPC エンドポイントに制限するには、aws:sourceVpce または aws:sourceVpc 条件キーを使用します。詳細については、『Amazon VPC ユーザーガイド』の「VPC エンドポイント - エンドポイントの使用の管理」を参照してください。

たとえば、次のサンプルキーポリシーでは、指定された VPC エンドポイントからリクエストが送信されている場合にのみ、ユーザーが CMK で暗号化オペレーションを実行できます。

ユーザーが AWS KMS へのリクエストを行うと、リクエストの VPC エンドポイント ID が、ポリシーのaws:sourceVpce 条件キーの値と比較されます。これが一致しない場合、リクエストは拒否されます。

このようなポリシーを使用するには、AWS アカウント ID と VPC エンドポイント ID のプレースホルダーを、ご自身の有効な値で置き換えます。

{ "Id": "example-key-1", "Version": "2012-10-17", "Statement": [ {

227

Page 236: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドポリシーステートメントでの VPC エンドポイントの使用

"Sid": "Enable IAM user permissions", "Effect": "Allow", "Principal": {"AWS":["111122223333"]}, "Action": ["kms:*"], "Resource": "*" }, { "Sid": "Restrict usage to my VPC endpoint", "Effect": "Deny", "Principal": "*", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "" } } }

]}

また、aws:sourceVpc 条件キーを使用して、VPC エンドポイントが存在する VPC に基づいて、CMK へのアクセスを制限することもできます。

次のサンプルキーポリシーでは、CMK を管理するコマンドが許可されるのは、そのコマンドがvpc-12345678 から送信されている場合だけです。また、暗号化オペレーションに CMK を使用するコマンドは、vpc-2b2b2b2b から送信されている場合にのみ許可されます。ある VPC でアプリケーションが実行されていれば、このようなポリシーを使用できますが、管理機能のために 2 番目の切り離された VPCを使用します。

このようなポリシーを使用するには、AWS アカウント ID と VPC エンドポイント ID のプレースホルダーを、ご自身の有効な値で置き換えます。

{ "Id": "example-key-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow administrative actions from vpc-12345678", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Create*","kms:Enable*","kms:Put*","kms:Update*", "kms:Revoke*","kms:Disable*","kms:Delete*", "kms:TagResource", "kms:UntagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "Allow key usage from vpc-2b2b2b2b", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [

228

Page 237: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドVPC での CMK 使用の監査

"kms:Encrypt","kms:Decrypt","kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } }, { "Sid": "Allow read actions from everywhere", "Effect": "Allow", "Principal": {"AWS": "111122223333"}, "Action": [ "kms:Describe*","kms:List*","kms:Get*" ], "Resource": "*", } ]}

VPC での CMK 使用の監査AWS KMS へのリクエストで VPC エンドポイントが使用されている場合、VPC エンドポイント ID は、そのリクエストが記録されている AWS CloudTrail ログ (p. 309)のエントリに表示されます。このエンドポイント ID を使用して、AWS KMS VPC エンドポイントの使用状況を監査できます。

たとえば、次のサンプルログエントリには、VPC エンドポイントを使用した GenerateDataKey リクエストが記録されます。vpcEndpointId フィールドは、ログエントリの最後に表示されます。

{ "eventVersion":"1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accessKeyId": "EXAMPLE_KEY_ID", "accountId": "111122223333", "userName": "Alice" }, "eventTime":"2018-01-16T05:46:57Z", "eventSource":"kms.amazonaws.com", "eventName":"GenerateDataKey", "awsRegion":"eu-west-1", "sourceIPAddress":"172.01.01.001", "userAgent":"aws-cli/1.14.23 Python/2.7.12 Linux/4.9.75-25.55.amzn1.x86_64 botocore/1.8.27", "requestParameters":{ "keyId":"", "numberOfBytes":128 }, "responseElements":null, "requestID":"a9fff0bf-fa80-11e7-a13c-afcabff2f04c", "eventID":"77274901-88bc-4e3f-9bb6-acf1c16f6a7c", "readOnly":true, "resources":[{ "ARN":"arn:aws:kms:eu-west-1:111122223333:key/", "accountId":"111122223333", "type":"AWS::KMS::Key" }], "eventType":"AwsApiCall",

229

Page 238: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドVPC での CMK 使用の監査

"recipientAccountId":"111122223333", "vpcEndpointId": ""}

230

Page 239: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

AWS KMS でハイブリッドポスト量子 TLS を使用する

AWS Key Management Service (AWS KMS) は、Transport Layer Security (TLS) ネットワーク暗号化プロトコル用のハイブリッドポスト量子キー交換オプションをサポートするようになりました。この TLS オプションは、KMS API エンドポイントに接続するときに使用できます。この機能はポスト量子アルゴリズムが標準化される前に提供されているため、これらのキー交換プロトコルの AWS KMS コールへの影響のテストを開始できます。これらのオプションのハイブリッドポスト量子キー交換機能は、現在使用しているTLS 暗号化と同等以上に安全であり、セキュリティ上のさらなる利点をもたらす可能性があります。ただし、現在使用されている従来のキー交換プロトコルと比較して、レイテンシーとスループットに影響します。

AWS Key Management Service (AWS KMS) に送信されたデータは、Transport Layer Security (TLS) 接続が提供する暗号化によって転送中に保護されます。AWS KMS が TLS セッションでサポートしている従来の暗号スイートにより、現在のテクノロジーではキー交換メカニズムに対するブルートフォース攻撃は実行不可能です。しかし、大規模な量子コンピューティングが将来実用的になると、TLS 鍵交換メカニズムで使用される従来の暗号スイートは、これらの攻撃の影響を受けやすくなります。TLS 接続を介して渡されるデータの長期的な機密性に依存するアプリケーションを開発している場合は、大規模な量子コンピュータが使用できるようになる前に、ポスト量子暗号化に移行する計画を検討する必要があります。AWS は、この未来に備えるために取り組んでいます。また、皆さんも十分に備えてほしいと思っています。

潜在的な将来の攻撃から現在暗号化されたデータを保護するために、AWS は量子耐性またはポスト量子アルゴリズムを開発する暗号化コミュニティに参加しています。AWS KMS エンドポイントにハイブリッドポスト量子キー交換暗号スイートを実装しました。これらのハイブリッド暗号スイートは、従来の要素とポスト量子要素を組み合わせたもので、これにより TLS 接続が少なくとも従来の暗号スイートと同じくらい強力になります。

これらのハイブリッド暗号スイートは、ほとんどの AWS リージョン (p. 231)で本稼働ワークロードで使用できます。ただし、ハイブリッド暗号スイートのパフォーマンス特性と帯域幅要件は従来のキー交換メカニズムのものとは異なるため、異なる条件下での AWS KMS API コールでテストする (p. 234)ことをお勧めします。

フィードバック

これまでと同様、皆様のフィードバックや私たちのオープンソースリポジトリへの参加はいつでも歓迎です。特に、この新しい種類の TLS トラフィックが皆様のインフラストラクチャとどのように相互作用するかをぜひお聞かせください。

• このトピックに関するフィードバックを提供するには、このページの右下隅にある [フィードバック] リンクを使用してください。また、GitHub の aws-kms-developer-docs リポジトリで 問題やプルリクエストを作成することもできます。

• これらのハイブリッド暗号スイートは、GitHubの s2n リポジトリのオープンソースで開発されています。暗号スイートのユーザビリティに関するフィードバックを提供したり、新しいテスト条件や結果を共有したりするには、s2n リポジトリで問題を作成してください。

• aws-kms-pq-tls-example GitHub リポジトリで、AWS KMS でハイブリッドポスト量子 TLS を使用するためのコードサンプルを作成しています。ハイブリッド暗号スイートを使用するための HTTP クライアントまたは AWS KMS クライアントの構成に関して質問したりアイデアを共有するには、aws-kms-pq-tls-example リポジトリで問題を作成します。

サポートされている AWS リージョン

AWS KMS のポスト量子 TLS は、AWS GovCloud (米国東部)、AWS GovCloud (米国西部)、中国 (北京)、中国 (寧夏) を除くすべての AWS リージョンで使用できます。

231

Page 240: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドポスト量子 TLS について

各 AWS リージョン AWS KMS エンドポイントのリストについては、『アマゾン ウェブ サービス全般のリファレンス』の「AWS Key Management Service のエンドポイントとクォータ」を参照してください。FIPS エンドポイントについては、『アマゾン ウェブ サービス全般のリファレンス』の「AWS サービスエンドポイント」を参照してください。。

TLS におけるハイブリッドポスト量子キー交換について

AWS KMS は、ハイブリッドポスト量子キー交換暗号スイートをサポートします。AWS SDK for Java 2.xおよび AWS 共通ランタイムを使用して、これらの暗号スイートを使用するように HTTP クライアントを構成できます。その後、HTTP クライアントで AWS KMS エンドポイントに接続するたびに、ハイブリッド暗号スイートが使用されます。

この HTTP クライアントは、TLS プロトコルのオープンソース実装である s2n を使用します。s2n には、転送中の暗号化のためのハイブリッドポスト量子アルゴリズムの実装を含む pq-crypto モジュールが含まれています。

s2n のハイブリッド暗号スイートは、直接データ暗号化ではなく、キー交換専用に実装されています。キー交換中、クライアントとサーバーは、転送中にデータの暗号化と復号化に使用するキーを計算します。

s2n が使用するアルゴリズムは、現在 TLS で使用されている従来のキー交換アルゴリズムであるElliptic Curve Diffie-Hellman (ECDH) と、推奨されるポスト量子アルゴリズムである Bit Flipping KeyEncapsulation (BIKE) を組み合わせたハイブリッドです。このメカニズムは、各アルゴリズムを独立して使用してキーを生成します。次に、2つのキーを暗号的に組み合わせます。s2n では、プリファレンスリストで ECDH と BIKE を最初に構成する暗号プリファレンスを使用して HTTP クライアントを構成できます。互換性を確保するために、従来のキー交換アルゴリズムがプリファレンスリストに含まれていますが、プリファレンスの順序では低くなっています。

進行中の研究で、BIKE アルゴリズムには予想されるポスト量子強度が欠けていることが明らかになった場合でも、ハイブリッドキーは現在使用されている単独の ECDH キーと少なくとも同じ強度です。NationalInstitute for Standards and Technology (NIST) は、ポスト量子アルゴリズムをまだ標準化していません。まだアプローチの候補を評価している段階です。このプロセスが完了するまで、ポスト量子アルゴリズムを単独で使用するのではなく、ハイブリッドアルゴリズムを使用することをお勧めします。

AWS KMS でハイブリッドポスト量子 TLS を使用する

AWS KMS へのコールには、ハイブリッドポスト量子 TLS を使用できます。HTTP クライアントのテスト環境を設定するときは、次の点に注意してください。

転送時の暗号化

s2n のハイブリッド暗号スイートは、転送中の暗号化のみに使用されます。これらはクライアントからAWS KMS エンドポイントへの移動中にデータを保護します。AWS KMS はこれらの暗号スイートを使用してカスタマーマスターキー (CMK) 下のデータを暗号化しません。

AWS KMS が CMK でデータを暗号化する場合、代わりに 256 ビットキーによる対称暗号化と、AdvancedEncryption Standard in Galois Counter Mode (AES-GCM) アルゴリズムを使用します。これは既に量子耐性です。理論上の将来、256 ビット AES-GCM キーで作成された暗号文に対する大規模な量子コンピューティング攻撃は、キーの効果的なセキュリティを 128 ビットに低下させます。このセキュリティレベルは、AWS KMS 暗号文に対するブルートフォース攻撃を実行不可能にするのに十分です。

232

Page 241: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド設定方法

サポートされているシステム

s2n のハイブリッド暗号スイートの使用は、現在 Linux システムでのみサポートされています。さらに、これらの暗号スイートは、AWS SDK for Java 2.x など AWS 共通ランタイムをサポートする SDK でのみサポートされます。例については、「ハイブリッドポスト量子 TLS の設定方法 (p. 233)」を参照してください。

AWS KMS エンドポイント

ハイブリッド暗号スイートを使用する場合は、標準 AWS KMS エンドポイントを使用します。s2n のハイブリッド暗号スイートは、AWS KMS の FIPS 140-2 検証済みエンドポイントと互換性がありません。ポスト量子アルゴリズムは、検証済み暗号モジュールでは許可されていません。

s2n のハイブリッドポスト量子暗号プリファレンスを使用して HTTP クライアントを構成すると、ポスト量子暗号は暗号プリファレンスリストの先頭になります。ただし、互換性を保つため、プリファレンスリストには優先順で低い従来の非ハイブリッド暗号が含まれています。AWS KMS FIPS 140-2 検証済みエンドポイントでこの暗号設定を使用する場合、s2n は従来の非ハイブリッドキー交換暗号をネゴシエートします。

各 AWS リージョン AWS KMS エンドポイントのリストについては、『アマゾン ウェブ サービス全般のリファレンス』の「AWS Key Management Service のエンドポイントとクォータ」を参照してください。FIPS エンドポイントについては、『アマゾン ウェブ サービス全般のリファレンス』の「AWS サービスエンドポイント」を参照してください。

期待されるパフォーマンス

初期のベンチマークテストでは、s2n のハイブリッド暗号スイートは従来の TLS 暗号スイートよりも遅いことが示されています。この効果は、ネットワークプロファイル、CPU 速度、コア数、コールレートによって異なります。パフォーマンステストの結果については、Post-quantum TLS now supported in AWSKMS を参照してください。

ハイブリッドポスト量子 TLS の設定方法この手順では、GitHub リポジトリから AWS SDK for Java 2.x の aws-crt-dev-preview (開発者プレビュー) ブランチを取得します。次に、AWS 共通ランタイムクライアントを構築し、AWS 共通ランタイムを依存関係に追加します。その後、ハイブリッドポスト量子暗号プリファレンスを使用する HTTP クライアントを構成し、HTTP クライアントを使用する AWS KMS クライアントを作成できます。

AWS KMS でのハイブリッドポスト量子 TLS の構成と使用の完全な実例については、aws-kms-pq-tls-example リポジトリを参照してください。

1. AWS SDK for Java 2.x の開発者プレビューブランチ (aws-crt-dev-preview) をクローンします。

AWS SDK for Java 2.x は、aws-sdk-java-v2 GitHub リポジトリで開発されています。

Note

aws-crt-dev-preview ブランチはベータリリースです。このライブラリの使用には、AWS サービス規約のセクション 1.10 (「ベータサービスへの参加」) が適用されます。

$ git clone [email protected]:aws/aws-sdk-java-v2.git --branch aws-crt-dev-preview

2. AWS 共通ランタイムクライアント (aws-crt-client) JAR をインストールしてビルドします。

$ cd aws-sdk-java-v2$ mvn install -Pquick

233

Page 242: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドテスト方法

3. Maven の依存関係に AWS 共通ランタイムクライアントを追加します。利用可能な最新バージョンを使用することをお勧めします。

たとえば、以下のステートメントは Maven の依存関係に AWS 共通ランタイムクライアントのバージョン 2.10.7-SNAPSHOT を追加します。

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-crt-client</artifactId> <version>2.10.7-SNAPSHOT</version></dependency>

4. ハイブリッドポスト量子暗号スイートを有効にするには、AWS SDK for Java 2.x をプロジェクトに追加して初期化します。次に、次の例に示すように、ハイブリッド暗号スイートを有効にします。

このコードにより、ハイブリッド暗号スイートをサポートするシステムで作業していることを確認できます。このコードでは、その後 BIKE ハイブリッド暗号スイートと ECDH を優先するTLS_CIPHER_KMS_PQ_TLSv1_0_2019_06 暗号プリファレンスを使用して HTTP クライアントが作成されます。最後に、データ転送に HTTP クライアントを使用する AWS KMS クライアントが作成されます。

このコードでは、AWS KMS 非同期クライアントである KmsAsyncClient を使用します。このクライアントは AWS KMS を非同期に呼び出します。このクライアントの詳細については、KmsAsyncClient Javadoc を参照してください。

このコードが完了すると、AWS KMS 非同期クライアントの AWS KMS API リクエストは TLS にハイブリッド暗号スイートを使用します。

// Check platform supportif(!TLS_CIPHER_KMS_PQ_TLSv1_0_2019_06.isSupported()){ throw new RuntimeException("Hybrid post-quantum cipher suites are not supported on this platform");}

// Configure HTTP client SdkAsyncHttpClient awsCrtHttpClient = AwsCrtAsyncHttpClient.builder() .tlsCipherPreference(TLS_CIPHER_KMS_PQ_TLSv1_0_2019_06) .build();

// Create the KMS async clientKmsAsyncClient kmsAsync = KmsAsyncClient.builder() .httpClient(awsCrtHttpClient) .build();

5. ポスト量子 TLS を使用して KMS コールをテストします。

構成された AWS KMS クライアントで AWS KMS API オペレーションを呼び出すと、コールはハイブリッドポスト量子 TLS を使用して AWS KMS エンドポイントに送信されます。構成をテストするには、ListKeys などの単純な KMS API コールを実行します。

ListKeysReponse keys = kmsAsync.listKeys().get();

AWS KMS でハイブリッドポスト量子 TLS をテストする

AWS KMS を呼び出すアプリケーションで、ハイブリッド暗号スイートを使用して次のテストを実行することを検討してください。

234

Page 243: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド詳細はこちら

• 負荷テストとベンチマークを実行します。ハイブリッド暗号スイートの動作は、従来のキー交換アルゴリズムとは異なります。ハンドシェイク時間が長くなるように、接続のタイムアウトを調整する必要がある場合があります。AWS Lambda 関数内で実行している場合は、実行タイムアウト設定を拡張します。

• 別の場所からの接続を試します。要求が通過するネットワークパスによっては、ディープパケットインスペクション (DPI) を持つ中間ホスト、プロキシ、またはファイアウォールが要求をブロックしていることが検出されることがあります。これは、TLS ハンドシェイクの ClientHello 部分で新しい暗号スイートを使用した場合や、大きなキー交換メッセージから発生することがあります。これらの問題を解決できない場合は、セキュリティチームまたは IT 管理者と協力して、関連する構成を更新し、新しい TLS暗号スイートのブロックを解除してください。

AWS KMS でのポスト量子 TLS についてAWS KMS でのハイブリッドポスト量子 TLS の使用の詳細については、次のリソースを参照してください。

• AWS KMS でのハイブリッドポスト量子 TLS 暗号スイート (パフォーマンスデータを含む) の使用の詳細については、Post-quantum TLS now supported in AWS KMS を参照してください。

• AWS SDK for Java 2.x の詳細については、「AWS SDK for Java 2.x 開発者ガイド」および AWS SDKfor Java 2.x リリースに関するブログ投稿を参照してください。

• s2n の詳細については、Introducing s2n, a New Open Source TLS Implementation および Using s2n を参照してください。

• National Institute for Standards and Technology (NIST) のポスト量子暗号プロジェクトについては、Post-Quantum Cryptography を参照してください。

• TLS でのハイブリッドポスト量子キー交換の使用に関する技術情報については、Hybrid Post-QuantumKey Encapsulation Methods (PQ KEM) for Transport Layer Security 1.2 (TLS) を参照してください。

235

Page 244: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

キー状態: CMK への影響カスタマーマスターキー (CMK) は常に次のいずれかの状態にあります。Enabled、Disabled、PendingImport、PendingDeletion、Unavailable。

次の表では、各状態における CMK で実行される AWS KMS API オペレーションが成功する ✓()、失敗する (X)、あるいは特定の条件下のみで成功する (?) と予期される可能性を示しています。ほとんどの場合、この結果は CMK のインポートされたキーマテリアルとは異なります。

対称 CMK は、Enabled、Disabled、PendingImport、PendingDeletion、または Unavailable状態になります。非対称 CMK は、Enabled、Disabled、または PendingDeletion のキー状態になる可能性があります。

Unavailable状態は、カスタムキーストア (p. 182) の CMK にのみ適用されます。カスタムキーストア が意図的にその AWS CloudHSM クラスターから切断されると、カスタムキーストア の CMK はUnavailable です。使用できない CMK を表示および管理することはできますが、暗号化オペレーションで使用することはできません。

以下の API オペレーションは、既存の CMK を使用しないため、テーブルに表示されません。

• ConnectCustomKeyStore• CreateCustomKeyStore• CreateKey• DeleteCustomKeyStore• DescribeCustomKeyStores• DisconnectCustomKeyStore• GenerateRandom• UpdateCustomKeyStore

API 有効 無効 インポートの保留中

削除の保留中 使用不可

CancelKeyDeletion

[4] [4] [4] [4], [13]

CreateAlias

[3]

CreateGrant

[1] [5] [2] または [3]

復号化

[1] [5] [2] または [3] [11]

236

Page 245: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

API 有効 無効 インポートの保留中

削除の保留中 使用不可

DeleteAlias

DeleteImportedKeyMaterial

[9] [9] (影響なし) [9] [9]

DescribeKey

DisableKey

[5] [3] [12]

DisableKeyRotation

[7] [1] または [7] [6] [3] または [7] [7]

EnableKey

[5] [3] [12]

EnableKeyRotation

[7] [1] または [7] [6] [3] または [7] [7]

暗号化

[1] [5] [2] または [3] [11]

GenerateDataKey

[1] [5] [2] または [3] [11]

GenerateDataKeyPair

[1] [5] [2] または [3] [11]

GenerateDataKeyPairWithoutPlaintext

[1] [5] [2] または [3] [11]

237

Page 246: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

API 有効 無効 インポートの保留中

削除の保留中 使用不可

GenerateDataKeyWithoutPlaintext

[1] [5] [2] または [3] [11]

GetKeyPolicy

GetKeyRotationStatus

[7] [7] [6] [7] [7]

GetParametersForImport

[9] [9] [8] または [9] [9]

GetPublicKey

[1]

該当なし

[2] または [3]

該当なし

ImportKeyMaterial

[9] [9] [8] または [9] [9]

ListAliases

ListGrants

ListKeyPolicies

ListKeys

ListResourceTags

ListRetirableGrants

PutKeyPolicy

ReEncrypt

[1] [5] [2] または [3] [11]

238

Page 247: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

API 有効 無効 インポートの保留中

削除の保留中 使用不可

RetireGrant

RevokeGrant

ScheduleKeyDeletion

[3]

Sign

[1]

該当なし

[2] または [3]

該当なし

TagResource

[3]

UnTagResource

[3]

UpdateAlias

[10]

UpdateKeyDescription

[3]

検証

[1]

該当なし

[2] または [3]

該当なし

テーブルの詳細

• [1] DisabledException: <CMK ARN> is disabled.• [2] DisabledException: <CMK ARN> is pending deletion.• [3] KMSInvalidStateException: <CMK ARN> is pending deletion.• [4] KMSInvalidStateException: <CMK ARN> is not pending deletion.• [5] KMSInvalidStateException: <CMK ARN> is pending import.• [6] UnsupportedOperationException: <CMK ARN> origin is EXTERNAL which is notvalid for this operation.

239

Page 248: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド

• [7] CMK にインポートされたキーマテリアルがある場合、または CMK がカスタムキーストアにある場合: UnsupportedOperationException。

• [8] CMK にインポートされたキーマテリアルがある場合: KMSInvalidStateException• [9] CMK にインポートされたキーマテリアルがない、または持てない場合:UnsupportedOperationException。

• [10] ソース CMK が削除保留中の場合、コマンドは成功します。送信先の CMK が削除保留中の場合、コマンドは次のエラーで失敗します: KMSInvalidStateException : <CMK ARN> is pendingdeletion.

• [11] KMSInvalidStateException: <CMK ARN> is unavailable. 使用できない CMK でこのオペレーションを実行することはできません。

• [12] オペレーションは成功しますが、CMK のキーステータスは使用可能になるまで変更されません。• [13] カスタムキーストアの CMK の削除保留中は、CMK が使用できなくなっても、そのキーステータス

は PendingDeletion のままとなります。これにより、待機期間中はいつでも CMK の削除をキャンセルできます。

240

Page 249: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS CloudTrail

AWS のサービスで AWS KMS を使用する方法

AWS サービスの多くは、AWS KMS を使用してデータの暗号化をサポートします。AWS サービスとAWS KMS を統合している場合は、アカウントでカスタマーマスターキー (CMK) を使用し、サービスがユーザー代理で受信、保存、管理するデータを保護できます。AWS KMS と統合している AWS サービスの詳細リストについては「AWS サービス統合 (AWS Service Integration)」をご覧ください。

次のトピックでは、特定のサービスがどのように AWS KMS を使用しているのか詳しく説明しています。サービスがサポートしている CMK、データキー管理の方法、必要な権限、各サービスによるアカウント内の CMK 使用を追跡する方法などを取り上げています。

Important

AWS KMS と統合された AWS のサービスは、対称 CMK を使用してデータを暗号化します。これらのサービスは、非対称 CMK を使用した暗号化をサポートしていません。 CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

AWS CloudTrail で AWS KMS を使用する方法AWS CloudTrail を使用すると、AWS API 呼び出しや AWS アカウントの他のアクティビティを記録し、記録された情報を、選択した Amazon Simple Storage Service (Amazon S3) バケット内のログファイルに保存できます。デフォルトでは、CloudTrail によって S3 バケットに配信されるログファイルは、AmazonS3– で管理された暗号化キーによるサーバー側の暗号化 (SSE-S3) を使用して暗号化されます。ただし、AWS KMS– 管理キーによるサーバー側の暗号化 (SSE-KMS) の使用を選択することもできます。AWSKMS を使用して CloudTrail ログファイルを暗号化する方法については、『AWS CloudTrail User Guide』の「 AWS KMS– 管理キー (SSE-KMS) による CloudTrail ログファイルの暗号化」を参照してください。

Important

AWS CloudTrail と Amazon S3 は、対称カスタマーマスターキー (p. 139) (CMK) のみをサポートしています。非対称 CMK (p. 139) を使用して CloudTrail ログを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

トピック• CMK を使用するタイミングについて (p. 241)• CMK を使用する頻度について (p. 245)

CMK を使用するタイミングについてAWS KMS– 管理キー (SSE-KMS) によるサーバー側の暗号化と呼ばれる、Amazon S3 機能におけるAWS KMS ビルドによる CloudTrail ログファイルの暗号化SSE-KMS の詳細については、このガイドの「Amazon Simple Storage Service (Amazon S3) で AWS KMS を使用する方法 (p. 279)」か、『AmazonSimple Storage Service 開発者ガイド』の「AWS KMS– 管理キーによるサーバー側の暗号化 (SSE-KMS)を使用したデータの保護」を参照してください。

241

Page 250: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK を使用するタイミングについて

SSE-KMS を使用してログファイルを暗号化するように AWS CloudTrail を設定すると、CloudTrail とAmazon S3 はそれらのサービスで特定のアクションを実行するときに KMS カスタマーマスターキー(CMK) を使用します。以下のセクションでは、これらのサービスが CMK をいつ、どのように使用するかについて説明し、この説明を確認するために使用できる追加情報を示します。

CloudTrail および Amazon S3で CMK を使用するアクション• カスタマーマスターキー (CMK) によってログファイルを暗号化するように CloudTrail を設定す

る (p. 242)• CloudTrail が S3 バケットにログファイルを置く (p. 243)• S3 バケットから暗号化されたログファイルを取得する (p. 244)

カスタマーマスターキー (CMK) によってログファイルを暗号化するように CloudTrail を設定するCMK を使用するように CloudTrail 設定を更新すると、CloudTrail は GenerateDataKey リクエストをAWS KMS に送信し、CMK が存在することと、暗号化に CMK を使用する権限が CloudTrail にあることを確認します。CloudTrail は結果データキーを使用しません。

GenerateDataKey リクエストには、暗号化コンテキスト (p. 15)の次の情報が含まれています。

• CloudTrail 証跡の Amazon リソースネーム (ARN)• CloudTrail ログファイルが配信される S3 バケットの ARN とパス

GenerateDataKey リクエストの結果、次の例のようなエントリが CloudTrail ログに生成されます。こ

のようなログエントリが表示された場合、AWS KMS ( ) GenerateDataKey オペレーション ( ) と

呼ばれる CloudTrail ( ) を、特定の証跡 ( ) に定めることができます。特定の CMK ( ) においてAWS KMS はデータキーを作成します。

Note

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE",

"arn": "arn:aws:iam::086441151436:user/AWSCloudTrail", "accountId": "086441151436", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "AWSCloudTrail", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T21:15:33Z" }}, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-11-11T21:15:33Z",

"eventSource": "kms.amazonaws.com",

"eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": {

242

Page 251: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK を使用するタイミングについて

"keyId": "arn:aws:kms:us-west-2:111122223333:alias/ExampleAliasForCloudTrailCMK", "encryptionContext": {

"aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/" }, "keySpec": "AES_256" }, "responseElements": null, "requestID": "581f1f11-88b9-11e5-9c9c-595a1fb59ac0", "eventID": "3cdb2457-c035-4890-93b6-181832b9e766", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-

west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsServiceEvent", "recipientAccountId": "111122223333"}

CloudTrail が S3 バケットにログファイルを置くCloudTrail が S3 バケットにログファイルを置くたびに、Amazon S3 は GenerateDataKey リクエストをCloudTrail の代わりに AWS KMS に送信します。このリクエストに応答して、AWS KMS は一意のデータキーを生成し、データキーのコピーを 2 つ Amazon S3 に送信します。1 つはプレーンテキストで、もう 1つは指定した CMK によって暗号化されています。Amazon S3 はプレーンテキストデータキーを使用してCloudTrail ログファイルを暗号化し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。Amazon S3 は、暗号化されたデータキーを、暗号化された CloudTrail ログファイルを使用したメタデータとして保存します。

GenerateDataKey リクエストには、暗号化コンテキスト (p. 15)の次の情報が含まれています。

• CloudTrail 証跡の Amazon リソースネーム (ARN)• S3 オブジェクトの ARN (CloudTrail ログファイル)

各 GenerateDataKey リクエストの結果、次の例のようなエントリが CloudTrail ログに生成されます。

このようなログエントリが表示された場合、AWS KMS ( ) GenerateDataKey オペレーション ( )

と呼ばれる CloudTrail ( ) を、ログファイル ( ) を保存する特定の証跡 ( ) として定めることがで

きます。特定の CMK ( ) において AWS KMS はデータキーを作成し、同じログエントリの中で 2 回表示します。

Note

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "eventVersion": "1.02", "userIdentity": { "type": "AssumedRole", "principalId": "AROACKCEVSQ6C2EXAMPLE:i-34755b85",

"arn": "arn:aws:sts::086441151436:assumed-role/AWSCloudTrail/i-34755b85", "accountId": "086441151436", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false",

243

Page 252: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK を使用するタイミングについて

"creationDate": "2015-11-11T20:45:25Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::086441151436:role/AWSCloudTrail", "accountId": "086441151436", "userName": "AWSCloudTrail" } }, "invokedBy": "internal.amazonaws.com" }, "eventTime": "2015-11-11T21:15:58Z",

"eventSource": "kms.amazonaws.com",

"eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": {

"aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/CloudTrail/us-west-2/2015/11/11/111122223333_CloudTrail_us-

west-2_20151111T2115Z_7JREEBimdK8d2nC9.json.gz" }, "keyId": "arn:aws:kms:us-

west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "keySpec": "AES_256" }, "responseElements": null, "requestID": "66f3f74a-88b9-11e5-b7fb-63d925c72ffe", "eventID": "7738554f-92ab-4e27-83e3-03354b1aa898", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-

west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsServiceEvent", "recipientAccountId": "111122223333"}

S3 バケットから暗号化されたログファイルを取得するS3 バケットから暗号化された CloudTrail ログファイルを取得するたびに、Amazon S3 は自動的にDecrypt リクエストを AWS KMS に送信し、ログファイルの暗号化されたデータキーを復号します。このリクエストに応答して、AWS KMS は CMK を使用してデータキーを復号し、Amazon S3 にプレーンテキストのデータキーを送信します。Amazon S3 はプレーンテキストのデータキーを使用して、CloudTrailログファイルを復号し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

Decrypt リクエストには、暗号化コンテキスト (p. 15)の次の情報が含まれています。

• CloudTrail 証跡の Amazon リソースネーム (ARN)• S3 オブジェクトの ARN (CloudTrail ログファイル)

各 Decrypt リクエストの結果、次の例のようなエントリが CloudTrail ログに生成されます。このような

ログエントリが表示された場合、AWS KMS ( ) Decrypt オペレーション ( ) と呼ばれる、AWS ア

244

Page 253: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK を使用する頻度について

カウント ( ) 内の IAM ユーザーを、特定の証跡 ( ) および特定のログファイル ( ) として定めるこ

とができます。特定の CMK ( ) において AWS KMS はデータキーを復号します。

Note

You might need to scroll to the right to see some of the callouts in the following example log entry.

{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE",

"arn": "arn:aws:iam::111122223333:user/cloudtrail-admin", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "cloudtrail-admin", "sessionContext": {"attributes": { "mfaAuthenticated": "false", "creationDate": "2015-11-11T20:48:04Z" }}, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2015-11-11T21:20:52Z",

"eventSource": "kms.amazonaws.com",

"eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "internal.amazonaws.com", "userAgent": "internal.amazonaws.com", "requestParameters": { "encryptionContext": {

"aws:cloudtrail:arn": "arn:aws:cloudtrail:us-west-2:111122223333:trail/Default", "aws:s3:arn": "arn:aws:s3:::example-bucket-for-CT-logs/AWSLogs/111122223333/CloudTrail/us-west-2/2015/11/11/111122223333_CloudTrail_us-

west-2_20151111T2115Z_7JREEBimdK8d2nC9.json.gz" } }, "responseElements": null, "requestID": "16a0590a-88ba-11e5-b406-436f15c3ac01", "eventID": "9525bee7-5145-42b0-bed5-ab7196a16daa", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-

west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

CMK を使用する頻度についてコストを予測し、AWS 請求額を理解するためには、CMK を CloudTrail が使用する頻度を調べます。無料利用枠を超えたサービスへのすべての API リクエストで AWS KMS 料金が発生します。正確な料金については、「AWS Key Management Service の料金表」を参照してください。

AWS KMS– 管理キー (SSE-KMS) によって CloudTrail ログファイルを暗号化すると、CloudTrail がログファイルを S3 バケットに置くたびに (p. 243)、AWS KMS API リクエストが生成されます。通

245

Page 254: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon DynamoDB

常、CloudTrail は 5 分おきにログファイルを S3 バケットに置くため、リージョンおよび AWS アカウントあたり 1 日に約 288 の AWS KMS API リクエストが生成されます。以下に例を示します。

• 単一の AWS アカウントの 2 つのリージョンでこの機能を有効にした場合、1 日あたり約 576 の AWSKMS API リクエスト (2 x 288) が生成されると予想できます。

• 3 つの各 AWS アカウントの 2 つのリージョンでこの機能を有効にした場合、1 日あたり約 1,728 のAWS KMS API リクエスト (6 x 288) が生成されると予想できます。

これらの数値は PUT リクエストから生じる AWS KMS 呼び出しのみを表します。S3 バケットから暗号化されたログファイルを取得したときに、GET リクエストから生じる AWS KMS への復号化呼び出しはカウントされません。

Amazon DynamoDB で AWS KMS を使用する方法Amazon DynamoDB は、完全マネージド型のスケーラブルな NoSQL データベースサービスです。DynamoDB は AWS Key Management Service (AWS KMS) を統合して、サーバー側の暗号化機能である保管時の暗号化をサポートします。

保管時の暗号化を使用して、DynamoDB は DynamoDB テーブルがディスクに保管されるたびに、プライマリキーおよびローカルとグローバルのセカンダリインデックスを含むすべてのカスタマーデータを透過的に暗号化します。(テーブルにソートキーが存在する場合、範囲の境界線を示すソートキーの一部が、プレーンテキスト形式でテーブルメタデータに保存されます。) テーブルにアクセスすると、DynamoDB はテーブルデータを透過的に復号化します。暗号化されたテーブルの使用あるいは管理のためにアプリケーションを変更する必要はありません。

保存時の暗号化は、耐久性のあるメディアに保存されるDynamoDB ストリームやグローバルテーブル、バックアップなどのオブジェクトも保護します。このトピックではテーブルを取り上げていますが、その内容はこれらのオブジェクトにも当てはまります。

DynamoDB テーブルは、すべて暗号化されます。新規のテーブルでも既存のテーブルでも、暗号化を有効または無効にするオプションはありません。デフォルトでは、すべてのテーブルは、DynamoDB サービスアカウントの AWS 所有のカスタマーマスターキー (p. 4) (CMK) を使って暗号化されます。ただし、アカウントの DynamoDB 用の カスタマー管理 CMK (p. 4) または AWS 管理 CMK (p. 4) を使って、テーブルの一部を暗号化するか、全部を暗号化するかを選択できます。

Note

2018 年 11 月以前は、保管時の暗号化は、DynamoDB 用の AWS 管理 CMK のみをサポートするオプション機能でした。いずれかの DynamoDB テーブルで保管時の暗号化を有効にした場合、AWS マネジメントコンソール または UpdateTable オペレーションを使ってカスタマー管理の CMK または AWS 所有の CMK に切り替えない限り、テーブルは引き続き AWS 管理の CMKで暗号化されます。

DynamoDB のクライアント側の暗号化サーバー側の暗号化機能である保管時の暗号化に加えて、AWS は Amazon DynamoDB 暗号化クライアントを提供しています。このクライアント側の暗号化ライブラリは、DynamoDB に送信する前のテーブルデータの保護を有効にします。サーバー側の暗号化では、データは HTTPS 接続で伝送時に暗号化され、DynamoDB エンドポイントで復号された後、DynamoDB に保管される前に再度暗号化されます。クライアント側の暗号化では、ソースから DynamoDB のストレージまで、データをエンドツーエンド保護します。

DynamoDB の暗号化クライアント は保管時の暗号化ととともに使用できます。この戦略が対象となるDynamoDB データに適しているかどうかを判断するには、『Amazon DynamoDB の暗号化クライアント開発者ガイド』の「クライアント側またはサーバー側の暗号化」を参照してください。

トピック

246

Page 255: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK とデータキーの使用

• CMK とデータキーの使用 (p. 247)• CMK の使用の承認 (p. 248)• DynamoDB の暗号化コンテキスト (p. 252)• DynamoDB と AWS KMS のやり取りのモニタリング (p. 253)

CMK とデータキーの使用DynamoDB 保管時の暗号化機能は、AWS KMS カスタマーマスターキー (CMK) とデータキーの階層を使ってテーブルデータを保護します。DynamoDB は、耐久性のあるメディアに保存される DynamoDB のストリームやグローバルテーブル、バックアップも、同じキー階層を使って保護します。

カスタマーマスターキー (CMK)

保管時の暗号化は、AWS KMS カスタマーマスターキー (CMK) を使って DynamoDB テーブルを保護します。デフォルトでは、AWS 所有の CMK (p. 4) が使用されます。このCMKは、DynamoDB サービスアカウントで作成および管理されるマルチテナントキーです。ただし、DynamoDB は、AWS アカウントの DynamoDB (aws/dynamodb) のカスタマー管理 CMK (p. 4) または AWS 管理の CMK (p. 4)でテーブルの一部またはすべてを暗号化するオプションをサポートします。テーブルを作成または更新するときは、テーブル用の CMK を選択します。各テーブルに対して異なる選択を行うことができます。

Important

DynamoDB は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用してDynamoDB テーブルを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

CMK は、DynamoDB コンソールまたは DynamoDB API を使用して選択できます。テーブルの CMKを選択すると、ローカルおよびグローバルセカンダリインデックス、ストリーム、およびバックアップが同じ CMK で暗号化されます。ただし、カスタマー管理の CMK を使用して、DynamoDB グローバルテーブルレプリカを暗号化することはできません。レプリカを暗号化するには、AWS 所有のCMK または AWS 管理の CMK を使用します。

テーブル用の CMK は、いつでも DynamoDB コンソールで、または UpdateSecret オペレーションを使用して変更できます。キーの切り替えプロセスはシームレスであり、ダウンタイムやサービスの低下を必要としません。

カスタマー管理の CMK を使用して、次の機能を利用できます。• CMK へのアクセスを制御するための キーポリシー (p. 55)、IAM ポリシー (p. 74)および許

可 (p. 123)の設定を含め、CMK を作成および管理します。CMK の有効化または無効化 (p. 46)、自動キーローテーション (p. 151)の有効化または無効化、使用しなくなった CMK の削除 (p. 170)ができます。

• カスタマー管理の CMK を インポートしたキーマテリアル (p. 156)とともに使用、またはユーザーが所有して管理するカスタムキーストア (p. 182)で、カスタマー管理の CMK を使用できます。

• AWS CloudTrail ログ (p. 253)の AWS KMS への DynamoDB API 呼び出しを調べることで、DynamoDB テーブルの暗号化と復号化を監査できます。

次のいずれかの機能が必要なときは、AWS 管理の CMK を使用します。• CMK を表示 (p. 26)し、そのキーポリシーを表示 (p. 67)できます。(キーポリシーの変更はできませ

ん)。• AWS CloudTrail ログ (p. 253)の AWS KMS への DynamoDB API 呼び出しを調べること

で、DynamoDB テーブルの暗号化と復号化を監査できます。

ただし、AWS 所有 CMK は無料で、その使用は AWS KMS リソースクォータまたはリクエストクォータ (p. 378)に対してカウントされません。カスタマー管理の CMK と AWS 管理の CMK には、APIコールごとに料金が発生し、これらの CMK には AWS KMS クォータが適用されます。

247

Page 256: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の承認

テーブルキー

DynamoDB は、テーブルの CMK を使用してそのテーブル用の一意のデータキー (p. 5) (テーブルキー) を生成し、暗号化します。テーブルキーは、暗号化されたテーブルの存続期間中は保持されます。

テーブルキーは、キー暗号化キーとして使用されます。DynamoDB は、このテーブルキーを使って、テーブルデータの暗号化に使うデータ暗号化キーを保護します。DynamoDBはテーブルの基本構造ごとに一意のデータ暗号化キーを生成しますが、複数のテーブル項目が同じデータ暗号化キーによって保護されることがあります。

暗号化されたテーブルにユーザーが初めてアクセスすると、DynamoDB は、CMK を使ってテーブルキーを復号化するよう AWS KMS にリクエストを送信します。その後、プレーンテキストテーブルキーを使用してデータ暗号化キーを復号化し、プレーンテキストデータ暗号化キーを使用してテーブルデータを復号化します。

DynamoDB は、テーブルキーを生成して使用し、テーブルキーと暗号化キーを AWS KMS の外部に保管します。これによって、Advanced Encryption Standard (AES) 暗号化および 256 ビット暗号化キーのすべてのキーが保護されます。続いて、暗号化されたキーを暗号化されたデータと一緒に保存します。これらのキーおよびデータは、必要なときにテーブルデータの暗号化に使用できます。

テーブルの CMK を変更すると、DynamoDB によって新しいテーブルキーが生成されます。次に、新しいテーブルキーを使用してデータ暗号化キーの再暗号化が行われます。

テーブルキーのキャッシュ

すべての DynamoDB オペレーションで AWS KMS を呼び出すことを回避するために、DynamoDB は各接続のプレーンテキストテーブルキーをメモリにキャッシュします。DynamoDB は 5 分以上のアイドル状態が続いた場合にキャッシュされたテーブルキーへのリクエストを取得し、テーブルキーを復号化する新しいリクエストを AWS KMS に送信します。この呼び出しは、テーブルキーの暗号化を求める前回のリクエスト以降に AWS KMS または AWS Identity and Access Management (IAM) で CMKのアクセスポリシーに加えられた変更をすべてキャプチャします。

CMK の使用の承認アカウントでカスタマー管理の CMK (p. 4) または AWS 管理の CMK (p. 4) を使って DynamoDB テーブルを保護する場合は、その CMK のポリシーが、ユーザーに代わって使用するための DynamoDB アクセス許

248

Page 257: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の承認

可を付与している必要があります。DynamoDB 用の AWS 管理 CMK の認証コンテキストは、そのキーポリシーを含み、使用許可を委任する権限を付与します。

カスタマー管理の CMK のポリシーと許可を完全に制御できます。AWS 管理の CMK はアカウントにあるため、ポリシーと許可を表示して確認できます。ただし、AWS によって管理されているため、ポリシーを変更することはできません。

DynamoDB は、デフォルトの AWS 所有 CMK (p. 3) を使って AWS アカウントの DynamoDB テーブルを保護する際、追加の承認を必要としません。

トピック• AWS マネージド CMK キーポリシー (p. 249)• カスタマー管理の CMK キーポリシー (p. 250)• DynamoDB への権限付与を使用する (p. 251)

AWS マネージド CMK キーポリシーDynamoDB が暗号化オペレーションに DynamoDB (aws/dynamodb) 用 AWS 管理 CMK (p. 4) を使用するとき、それは、DynamoDB リソースにアクセス中のユーザーに代わって実行されます。AWS 管理 CMKのキーポリシーは、アカウントのすべてのユーザーに、AWS 管理 CMK を使用して指定のオペレーションを実行することを許可します。ただし、許可は DynamoDB がユーザー名でリクエストを行うときのみに付与されます。キーポリシーの ViaService 条件 (p. 119)は、リクエストが DynamoDB サービスに由来している場合を除き、どのユーザーに対しても AWS 管理 CMK の使用を許可しません。

このキーポリシーは、すべての AWS 管理キーと同様に、AWS サービスによって確立されます。このポリシーを変更することはできませんが、いつでも表示できます。詳細については、「キーポリシーの表示 (p. 67)」を参照してください。

このキーポリシーのポリシーステートメントには次の効果があります。

• アカウントのユーザーに、その名で DynamoDB からリクエストを受信したときのみに、DynamoDB 用の AWS 管理 CMK を使用して暗号化オペレーションを行うことができるようにします。また、このポリシーは、ユーザーが CMK の許可を作成 (p. 251)できるようにします。

• AWS アカウントのルートユーザーに対し、DynamoDB 用の AWS 管理 CMK のプロパティを表示することと、DynamoDB に与えた CMK の使用許可を取り消すことを許可します。DynamoDB は、継続的なメンテナンスオペレーションのための許可 (p. 251)を使用します。

• DynamoDB が読み取り専用オペレーションを実行して、アカウントにある DynamoDB 用の AWS 管理CMK を取得できるようにします。

{ "Version" : "2012-10-17", "Id" : "auto-dynamodb-1", "Statement" : [ { "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:CallerAccount" : "111122223333", "kms:ViaService" : "dynamodb.us-west-2.amazonaws.com" }

249

Page 258: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の承認

} }, { "Sid" : "Allow direct access to key metadata to the account", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource" : "*" }, { "Sid" : "Allow DynamoDB Service with service principal name dynamodb.amazonaws.com to describe the key directly", "Effect" : "Allow", "Principal" : { "Service" : "dynamodb.amazonaws.com" }, "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource" : "*" } ]}

カスタマー管理の CMK キーポリシーDynamoDB テーブルを保護するために カスタマー管理の CMK (p. 4) を選択すると、DynamoDB は、選択を行うプリンシパルに代わって CMK を使用するアクセス許可を取得します。そのプリンシパル(ユーザーまたはロール)は、DynamoDB に必要な CMK のアクセス許可を持つ必要があります。これらのアクセス許可は、キーポリシー (p. 55)、IAM ポリシー (p. 74)、または 許可 (p. 123)で指定できます。

少なくとも、DynamoDB では、カスタマー管理の CMK で以下のアクセス許可が必要です。

• kms:Encrypt• kms:Decrypt• kms:ReEncrypt*(kms:ReEncryptFrom および kms:ReEncryptTo)• kms:GenerateDataKey*(kms:GenerateDataKey および kms:GenerateDataKeyWithoutPlaintext 用)• kms:DescribeKey• kms:CreateGrant

たとえば、次のキーポリシーの例では、必要なアクセス許可のみを提供します。このポリシーには、以下の影響があります。

• DynamoDB で CMK を暗号化オペレーションで使用し、許可を作成できるようにします。ただし、DynamoDB を使用するアクセス許可を持つアカウント内のプリンシパルの代理として動作している場合に限ります。ポリシーステートメントで指定されたプリンシパルに DynamoDB を使用するアクセス許可がない場合、DynamoDB サービスから呼び出された場合でも、呼び出しは失敗します。

• kms:ViaService (p. 119) 条件キーは、ポリシーステートメントにリストされているプリンシパルの代わりに DynamoDB からリクエストが来た場合にのみアクセス許可を許可します。これらのプリンシパルは、これらのオペレーションを直接呼び出すことはできません。kms:ViaService値、dynamodb.*.amazonaws.com は、リージョンの位置にアスタリスク (*) が付いていることに注意してください。DynamoDB は、特定の AWS リージョンから独立して、DynamoDB グローバルテーブルをサポートするためにクロスリージョン呼び出しを行うことができるようにする必要があります。

• CMK 管理者(db-team ロールを引き受けることができるユーザー)に、CMK への読み取り専用アクセスと、テーブルを保護するために DynamoDBに必要な許可 (p. 251)を含め、許可を取り消すアクセス許可を付与します。

• CMK への DynamoDB 読み取り専用アクセスを提供します。この場合、DynamoDB はこれらのオペレーションを直接呼び出すことができます。アカウントプリンシパルの代わりに機能する必要はありません。

250

Page 259: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の承認

サンプルキーポリシーを使用する前に、サンプルプリンシパルを AWS アカウントの実際のプリンシパルに置き換えてください。

{ "Id": "key-policy-dynamodb", "Version":"2012-10-17", "Statement": [ { "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*", "Condition": { "StringLike": { "kms:ViaService" : "dynamodb.*.amazonaws.com" } } }, { "Sid": "Allow administrators to view the CMK and revoke grants", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/db-team" }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource": "*" }, { "Sid": "Allow DynamoDB to get information about the CMK", "Effect": "Allow", "Principal": { "Service":["dynamodb.amazonaws.com"] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" } ]}

DynamoDB への権限付与を使用するキーポリシーに加えて、DynamoDB では、権限の付与を使用して DynamoDB 用のカスタマー管理のCMK または AWS 管理 CMK (aws/dynamodb) にアクセス許可を設定します。アカウントの CMK に対する権限の付与を表示するには、ListGrants オペレーションを使用します。DynamoDB は、AWS 所有のCMK (p. 4) を使ってテーブルを保護する際に、権限の付与や追加のアクセス許可を必要としません。

251

Page 260: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドDynamoDB の暗号化コンテキスト

DynamoDB は、バックグラウンドシステムメンテナンスおよび継続的なデータの保護タスクを実行するときに、権限付与を使用します。また、テーブルキー (p. 247)の生成に権限付与を使用します。

権限付与は、それぞれ、テーブルに固有です。アカウントに、同じ CMK を使って暗号化された複数のテーブルがある場合、テーブルごとに、各タイプの権限付与があります。この権限付与は、テーブル名および AWS アカウント ID が含まれる DynamoDB 暗号化コンテキスト (p. 252)によって制限され、不要になった場合の権限付与の解除のための許可を含みます。

許可を作成するには、暗号化されたテーブルを作成したユーザーに代わって CreateGrant を呼び出すアクセス許可が DynamoDB に必要です。AWS 管理 CMK の場合、DynamoDB は kms:CreateGrant アクセス許可をキーポリシー (p. 249)から取得し、これによって DynamoDB が承認されたユーザーの代わりにリクエストを行う場合にのみ、アカウントユーザーが CMK で CreateGrant 呼び出しを行うことを許可します。

また、キーポリシーでは、アカウントが CMK で許可を取り消すことが許可されます。ただし、アクティブな暗号化テーブルで権限の付与を取り消すと、DynamoDB はテーブルを保護して維持することはできません。

DynamoDB の暗号化コンテキスト暗号化コンテキスト (p. 15) は、一連のキーと値のペアを含む任意非シークレットデータです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

DynamoDB は、すべての AWS KMS 暗号化オペレーションで同じ暗号化コンテキストを使用します。カスタマー管理の CMK (p. 4) または AWS 管理の CMK (p. 4) を使用して DynamoDB テーブルを保護している場合は、暗号化コンテキストを使って監査レコードやログの中で CMK の使用を特定することができます。また、AWS CloudTrail や Amazon CloudWatch Logs などのログにもプレーンテキストで表示されます。

暗号化コンテキストは、ポリシーと権限付与の認証用の条件としても使用できます。DynamoDB は、暗号化テキストを使用してユーザーのアカウントやリージョンでのカスタマー管理の CMK や AWS 管理 CMKへのアクセスを許可する権限付与 (p. 251)を制限します。

DynamoDB は AWS KMS へのリクエストで 2 つのキーと値のペアの暗号化コンテキストを使用します。

"encryptionContextSubset": { "aws:dynamodb:tableName": "Books" "aws:dynamodb:subscriberId": "111122223333"}

• テーブル – 最初のキーと値のペアは DynamoDB が暗号化しているテーブルを識別します。キーは、aws:dynamodb:tableName です。この値は、テーブルの名前です。

"aws:dynamodb:tableName": "<table-name>"

例:

"aws:dynamodb:tableName": "Books"

• アカウント – 2 番目のキーと値のペアは、AWS アカウントを識別します。キーは、aws:dynamodb:subscriberId です。値は、アカウント ID です。

"aws:dynamodb:subscriberId": "<account-id>"

以下に例を示します。

252

Page 261: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドDynamoDB と AWS KMS のやり取りのモニタリング

"aws:dynamodb:subscriberId": "111122223333"

DynamoDB と AWS KMS のやり取りのモニタリングカスタマー管理 CMK (p. 4)または AWS 管理の CMK (p. 4) を使用して DynamoDB テーブルを保護している場合は、AWS CloudTrail ログを使って、DynamoDB がユーザーに代わって AWS KMS に送信したリクエストを追跡することができます。

このセクションでは、GenerateDataKey、Decrypt、および CreateGrant リクエストを説明します。さらに、DynamoDB は DescribeKey オペレーションを使用して、アカウントおよびリージョンに選択したCMK が存在するかどうかを判断します。また、RetireGrant オペレーションを使用して、テーブルの削除時に権限付与を削除します。

GenerateDataKey

テーブルで保管時の暗号化を有効にすると、DynamoDB は一意のテーブルキーを作成します。GenerateDataKey リクエストを AWS KMS に送信し、そのテーブル用の CMK を指定します。

GenerateDataKey オペレーションを記録するイベントは、次のようなサンプルイベントになります。ユーザーは、 DynamoDB サービスアカウントです。このパラメータには、CMK の Amazon リソースネーム (ARN)、256 ビットキーを要求するキー識別子、およびテーブルと AWS アカウントを識別する暗号化コンテキスト (p. 252)が含まれます。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T00:15:17Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:dynamodb:tableName": "Services", "aws:dynamodb:subscriberId": "111122223333" }, "keySpec": "AES_256", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "requestID": "229386c1-111c-11e8-9e21-c11ed5a52190", "eventID": "e3c436e9-ebca-494e-9457-8123a1f5e979", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333", "sharedEventID": "bf915fa6-6ceb-4659-8912-e36b69846aad"

253

Page 262: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドDynamoDB と AWS KMS のやり取りのモニタリング

}

Decrypt

暗号化された DynamoDB テーブルにアクセスすると、DynamoDB はテーブルキーの復号化が必要となるため、階層の下でキーを復号できます。次に、テーブル内のデータを復号化します。テーブルキーを復号化するには、次が実行されます。DynamoDB は、テーブル用の CMK を指定する AWSKMS に Decrypt リクエストを送信します。

Decrypt オペレーションを記録するイベントは、次のようなサンプルイベントになります。このユーザーは、テーブルにアクセスしている AWS アカウントのプリンシパルです。パラメータには、暗号化されたテーブルのキー (暗号化テキストの blob として) およびテーブルと AWS アカウントを識別する暗号化コンテキスト (p. 252)が含まれます。AWS KMS は暗号化テキストから CMK の ID を取得します。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-02-14T16:42:15Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIGDT3HGFQZX4RY6RU", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" } }, "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T16:42:39Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:dynamodb:tableName": "Books", "aws:dynamodb:subscriberId": "111122223333" } }, "responseElements": null, "requestID": "11cab293-11a6-11e8-8386-13160d3e5db5", "eventID": "b7d16574-e887-4b5b-a064-bf92f8ec9ad3", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ],

254

Page 263: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドDynamoDB と AWS KMS のやり取りのモニタリング

"eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

CreateGrant

カスタマー管理の CMK (p. 4) または AWS 管理 CMK (p. 4) を使って DynamoDB テーブルを保護している場合、DynamoDB は権限付与 (p. 251)を使用して、継続するデータの保護とメンテナンスおよび耐久タスクを実行するサービスを許可します。これらの権限付与は、AWS 所有の CMK (p. 4) では必要ありません。

DynamoDB が作成する権限付与はテーブルごとに固有となります。CreateGrant リクエストのプリンシパルは、テーブルを作成したユーザーです。

CreateGrant オペレーションを記録するイベントは、次のようなサンプルイベントになります。このパラメータには、そのテーブル用の CMK の Amazon リソースネーム (ARN)、プリンシパルの被付与者と廃止プリンシパル (DynamoDB サービス)、およびこの権限付与の範囲内のオペレーションが含まれます。また、指定された暗号化コンテキスト (p. 252)を使用するすべての暗号化オペレーションを必要とする制約も含まれています。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-02-14T00:12:02Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIGDTESTANDEXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" } }, "invokedBy": "dynamodb.amazonaws.com" }, "eventTime": "2018-02-14T00:15:15Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "dynamodb.amazonaws.com", "userAgent": "dynamodb.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "retiringPrincipal": "dynamodb.us-west-2.amazonaws.com", "constraints": { "encryptionContextSubset": { "aws:dynamodb:tableName": "Books", "aws:dynamodb:subscriberId": "111122223333" } }, "granteePrincipal": "dynamodb.us-west-2.amazonaws.com", "operations": [ "DescribeKey",

255

Page 264: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon Elastic Block Store (Amazon EBS)

"GenerateDataKey", "Decrypt", "Encrypt", "ReEncryptFrom", "ReEncryptTo", "RetireGrant" ] }, "responseElements": { "grantId": "5c5cd4a3d68e65e77795f5ccc2516dff057308172b0cd107c85b5215c6e48bde" }, "requestID": "2192b82a-111c-11e8-a528-f398979205d8", "eventID": "a03d65c3-9fee-4111-9816-8bf96b73df01", "readOnly": false, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

Amazon Elastic Block Store (Amazon EBS) で AWSKMS を使用する方法

このトピックでは、Amazon Elastic Block Store (Amazon EBS) で AWS KMS を使用してボリュームとスナップショットを暗号化する方法について詳しく説明します。Amazon EBS ボリュームを暗号化する基本的な手順については、「Amazon EBS の暗号化」を参照してください。

トピック• Amazon EBS 暗号化 (p. 256)• CMK とデータキーの使用 (p. 257)• Amazon EBS の暗号化コンテキスト (p. 257)• Amazon EBS エラーの検出 (p. 258)• 暗号化された Amazon EBS ボリュームを AWS CloudFormation で作成する (p. 258)

Amazon EBS 暗号化暗号化の対象となる Amazon EBS ボリュームをサポートされている Amazon Elastic Compute Cloud(Amazon EC2) インスタンスタイプにアタッチすると、そのボリュームに保管されるデータ、そのボリュームとのディスク I/O、そのボリュームから作成されたスナップショットは、すべて暗号化されます。暗号化は Amazon EC2 インスタンスをホストするサーバー側で実施されます。

この機能は、すべての Amazon EBS ボリュームタイプでサポートされます。暗号化されたボリュームには、他のボリュームにアクセスする場合と同じ方法でアクセスできます。暗号化と復号化は透過的に処理され、ユーザー、EC2 インスタンス、アプリケーションからの追加アクションは不要です。暗号化されたボリュームのスナップショットは自動的に暗号化され、暗号化されたスナップショットから作成されたボリュームも、自動的に暗号化されます。

EBS ボリュームの暗号化ステータスは、ボリュームの作成時に決定されます。既存のボリュームの暗号化ステータスを変更することはできません。ただし、暗号化されたボリュームと暗号化されていないボ

256

Page 265: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK とデータキーの使用

リューム間でデータを移行でき、スナップショットのコピー中に新しい暗号化のステータスを適用できます。

CMK とデータキーの使用暗号化 Amazon EBS ボリュームを作成するときは、AWS KMS カスタマーマスターキー (CMK) を指定します。デフォルトでは、Amazon EBS は、お客様のアカウントに割り当てられた Amazon EBS 用の AWS管理の CMK (p. 4) を使用します。ただし、カスタマー管理の CMK (p. 4) を指定できます。

Important

Amazon EBS は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用してAmazon EBS ボリュームを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

Amazon EBS は、指定された CMK を使用して各ボリュームの一意のデータキーを生成します。データキーの暗号化されたコピーをボリュームに保存します。次に、Amazon EC2 インスタンスにボリュームを接続すると、Amazon EBS はデータキーを使用してボリュームへのすべてのディスク I/O を暗号化します。

以下では、Amazon EBS で CMK を使用する方法を説明します。

1. 暗号化された EBS ボリュームを作成すると、Amazon EBS は GenerateDataKeyWithoutPlaintext リクエストを AWS KMS に送信し、EBS ボリュームの暗号化のためにユーザーが選択した CMK を指定します。

2. AWS KMS は新しいデータキーを生成し、指定された CMK で暗号化して、その暗号化されたデータキーを Amazon EBS に送信してボリュームのメタデータとともに保存します。

3. 暗号化されたボリュームを EC2 インスタンスにアタッチすると、Amazon EC2 は暗号化されたデータキーを Decrypt リクエストとともに AWS KMS に送信します。

4. AWS KMS は、暗号化されたデータキーを復号化して、その復号化された (プレーンテキスト) データキーを Amazon EC2 に送信します。

5. Amazon EC2 は、ハイパーバイザーメモリ内のプレーンテキストデータキーを使用して、ディスク I/Oを EBS ボリュームに暗号化します。プレーンテキストデータキーは、EBS ボリュームが EC2 インスタンスにアタッチされる限り、メモリ内で維持されます。

Amazon EBS の暗号化コンテキストAWS KMS への GenerateDataKeyWithoutPlaintext および Decrypt リクエストでは、Amazon EBS は、リクエスト内のボリュームまたはスナップショットを識別する名前と値のペアを持つ暗号化コンテキストを使用します。暗号化コンテキストの名前は変わりません。

暗号化コンテキスト (p. 15) は、一連のキーと値のペアを含む任意非シークレットデータです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

すべてのボリュームと、Amazon EBS CreateSnapshot オペレーションで作成された暗号化されたスナップショットについては、Amazon EBS はボリューム ID を暗号化コンテキスト値として使用します。CloudTrail ログエントリの requestParameters フィールドで、暗号化コンテキストは以下のようになります。

"encryptionContext": { "aws:ebs:id": "vol-0cfb133e847d28be9"}

257

Page 266: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EBS エラーの検出

Amazon EC2 CopySnapshot オペレーションで作成された暗号化されたスナップショットの場合、Amazon EBS はスナップショット ID を暗号化コンテキスト値として使用します。CloudTrail ログエントリの requestParameters フィールドで、暗号化コンテキストは以下のようになります。

"encryptionContext": { "aws:ebs:id": "snap-069a655b568de654f"}

Amazon EBS エラーの検出暗号化された EBS ボリュームを作成したり、ボリュームを EC2 インスタンスにアタッチしたりするために、Amazon EBS および Amazon EC2 インフラストラクチャは、EBS ボリュームの暗号化のためにユーザーが指定した CMK を使用する必要があります。CMK が使用できない場合 — たとえば、キーの状態 (p. 236)が Enabled になっていない場合 — ボリュームの作成またはボリュームのアタッチは失敗します。

この場合、Amazon EBS はイベントを Amazon CloudWatch Events に送信して、ユーザーにエラーを知らせます。CloudWatch イベント では、これらのイベントに応じて自動アクションをトリガーするルールを設定できます。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「AmazonCloudWatch Events for Amazon EBS」を参照してください。特に以下のセクションに注目してください。

• ボリュームのアタッチ時または再アタッチ時の無効な暗号化キー• ボリューム作成時の無効な暗号化キー

これらのエラーを修正するには、EBS ボリュームの暗号化のために指定した CMK が有効になっていることを確認します。これを行うには、最初に CMK を表示 (p. 26)して現在のキーステータス (AWS マネジメントコンソール の [Status] 列) を確認します。次に、以下のリンクのいずれかで情報を確認します。

• CMK のキーステータスが無効になっている場合は、それを有効化 (p. 46)します。• CMK のキーステータスがインポートの保留中になっている場合は、キーマテリアルをインポー

ト (p. 157)します。• CMK のキーステータスが削除の保留中になっている場合は、キーの削除をキャンセル (p. 172)します。

暗号化された Amazon EBS ボリュームを AWSCloudFormation で作成するAWS CloudFormation を使用して、暗号化された Amazon EBS ボリュームを作成できます。詳細については、『AWS CloudFormation ユーザーガイド』の「AWS::EC2::Volume」を参照してください。

Amazon Elastic Transcoder で AWS KMS を使用する方法

Amazon Elastic Transcoder を使用して、Amazon S3 バケットに格納されているメディアファイルを、消費者の再生デバイスで必要とされる形式に変換できます。入力ファイルと出力ファイルの両方を暗号化し復号することができます。以下のセクションでは、両方の処理で AWS KMS を使用する方法について説明します。

トピック• 入力ファイルの暗号化 (p. 259)• 入力ファイルの復号 (p. 259)

258

Page 267: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド入力ファイルの暗号化

• 出力ファイルの暗号化 (p. 260)• HLS のコンテンツ保護 (p. 262)• Elastic Transcoder の暗号化コンテキスト (p. 262)

入力ファイルの暗号化Elastic Transcoder を使用する前に、Amazon S3 バケットを作成して、そこにメディアファイルをアップロードする必要があります。AES クライアント側の暗号化を使用してアップロード前にファイルを暗号化することも、また Amazon S3 のサーバー側の暗号化を使用してアップロード前にファイルを暗号化することもできます。

AES を使用したクライアント側の暗号化を選択した場合、ユーザーには、Amazon S3 にアップロードする前にファイルを暗号化する責任があり、Elastic Transcoder が暗号化キーにアクセスできるようにする必要があります。これは、対称 (p. 139)AWS KMSカスタマーマスターキー (p. 3) (CMK) を使用して、メディアファイルを暗号化するときに使用した AES 暗号化キーを保護することで実現されます。

サーバー側の暗号化を選択した場合は、Amazon S3 がユーザーの代わりにすべてのファイルの暗号化と復号を実行するのを許可することになります。Amazon S3 を設定して、以下の 3 種類のマスターキーのどれかを使って、ファイルの暗号化に使用されるユニークなデータキーを保護することができます。

• Amazon S3 マスターキー。AWS によって所有、管理されます。• Amazon S3 用の AWS 管理 CMK (p. 4)。お客様のアカウントによって所有されるが、AWS によって管

理されるマスターキーです。• 対称 (p. 139)カスタマー管理 CMK (p. 4) は、AWS KMS を使用してお客様が作成する任意のキーです。

Important

クライアント側とサーバー側の両方の暗号化で、Elastic Transcoder は 対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用して Elastic Transcoder ファイルを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMKの識別 (p. 37)」を参照してください。

暗号化とそれに必要なマスターキーは、Amazon S3 コンソールまたは適切な Amazon S3 API を使用してリクエストできます。Amazon S3 による暗号化の実行方法の詳細については、『Amazon Simple StorageService 開発者ガイド』の「暗号化を使用したデータの保護」を参照してください。

お客様のアカウントにある Amazon S3 用の AWS 管理 CMK、またはカスタマー管理 CMK を使用して入力ファイルを保護している場合、Amazon S3 と AWS KMS は次のようにやり取りします。

1. Amazon S3 は、プレーンテキストのデータキーと、指定された CMK で暗号化されたデータキーのコピーをリクエストします。

2. AWS KMS はデータキーを作成し、指定する CMK で暗号化してから、プレーンテキストのデータキーと暗号化されたデータキーの両方を Amazon S3 に送ります。

3. Amazon S3 は、プレーンテキストデータキーを使用してメディアファイルを暗号化し、指定されたAmazon S3 バケットにそのファイルを保存します。

4. Amazon S3 は、暗号化されたメディアファイルと一緒に、暗号化されたデータキーを保存します。

入力ファイルの復号Amazon S3 のサーバー側の暗号化を使って入力ファイルを暗号化することを選択した場合、ElasticTranscoder はファイルを復号しません。その代わりに、Elastic Transcoder は、ジョブとパイプラインの作成時に指定した設定に応じて Amazon S3 に復号を実行してもらいます。

設定は以下の組み合わせが可能です。

259

Page 268: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド出力ファイルの暗号化

暗号化モード AWS KMS キー 意味

S3 デフォルト メディアファイルの暗号化と復号に使用するキーを Amazon S3が作成して管理します。その処理をユーザーから見ることはできません。

S3-AWS-KMS デフォルト お客様のアカウントの AmazonS3 用のデフォルト AWS 管理CMK によって暗号化されたデータキーを使用して、Amazon S3がメディアファイルを暗号化します。

S3-AWS-KMS カスタム (ARN 付き) 指定されたカスタマー管理 CMKによって暗号化されたデータキーを使用して、Amazon S3 がメディアファイルを暗号化します。

S3-AWS-KMS が指定されている場合、Amazon S3 と AWS KMS は次のように協力して復号を実行します。

1. 暗号化されたデータキーを Amazon S3 が AWS KMS に送信します。2. AWS KMS が適切な CMK を使ってデータキーを復号し、Amazon S3 にプレーンテキストのデータキー

を返します。3. Amazon S3 がプレーンテキストのデータキーを使って暗号化テキストを復号します。

AES キーを使用したクライアント側の暗号化を選択した場合、Elastic Transcoder は Amazon S3バケットから暗号化されたファイルを取得して、それを復号します。Elastic Transcoder は、パイプラインの作成時に指定された CMK を使用して AES キーを復号し、その AES キーを使用してメディアファイルを復号します。

出力ファイルの暗号化Elastic Transcoder は、ジョブとパイプラインの作成時に指定された暗号化の設定に応じて、出力ファイルを暗号化します。以下のオプションが利用できます。

暗号化モード AWS KMS キー 意味

S3 デフォルト 出力ファイルの暗号化に使用するキーを Amazon S3 が作成して管理します。

S3-AWS-KMS デフォルト Amazon S3 によって作成され、お客様のアカウントの AWSKMS 用の AWS 管理の CMK によって暗号化されたデータキーを Amazon S3 が使用します。

S3-AWS-KMS カスタム (ARN 付き) ARN によって指定されたカスタマー管理の CMK を使って暗号化されたデータキーを使用し

260

Page 269: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド出力ファイルの暗号化

暗号化モード AWS KMS キー 意味て、Amazon S3 がメディアファイルを暗号化します。

AES- デフォルト お客様のアカウントの ElasticTranscoder 用の AWS 管理 CMKを使用して、指定された AESキーを Amazon S3 が復号し、そのキーを使って出力ファイルを暗号化します。

AES- カスタム (ARN 付き) ARN によって指定されたカスタマー管理 CMK を使用して、指定された AES キーを ElasticTranscoder が復号化し、そのキーを使って出力ファイルを暗号化します。

アカウントにある Amazon S3 用の AWS 管理 CMK またはカスタマー管理の CMK を使用して出力ファイルを暗号化することを指定すると、Amazon S3 と AWS KMS は次のような方法でやり取りします。

1. Amazon S3 は、プレーンテキストのデータキーと、指定された CMK で暗号化されたデータキーのコピーをリクエストします。

2. AWS KMS はデータキーを作成し、CMK で暗号化してから、プレーンテキストのデータキーと暗号化されたデータキーの両方を Amazon S3 に送ります。

3. Amazon S3 がデータキーを使用してメディアを暗号化し、指定された Amazon S3 バケットにそれを保存します。

4. Amazon S3 は、暗号化されたメディアファイルと一緒に、暗号化されたデータキーを保存します。

指定した AES キーを使った出力ファイルの暗号化を指定する場合、AES キーは、AWS KMS で CMK を使用して暗号化されている必要があります。Elastic Transcoder、AWS KMS、ユーザーは、次のような方法でやり取りします。

1. AWS KMS API の Encrypt オペレーションを呼び出して AES キーを暗号化します。AWS KMS は、指定された CMK を使用してキーを暗号化します。お客様はパイプラインの作成時に使用する CMK を指定します。

2. ユーザーが、Elastic Transcoder ジョブの作成時に、暗号化された AES キーを含むファイルを指定します。

3. Elastic Transcoder は AWS KMS API の Decrypt オペレーションを呼び出し、暗号化キーを暗号化テキストとして渡します。

4. Elastic Transcoder が、復号された AES キーを使用して出力メディアファイルを暗号化し、その後、復号された AES キーをメモリから削除します。ジョブで定義した元のキーを暗号化したキーのみがディスクに保存されます。

5. ユーザーは、暗号化された出力ファイルをダウンロードして、定義した元の AES キーを使用してローカルにファイルを復号化できます。

Important

AWS がプライベート暗号化キーを保存することはありません。したがって、キーを安全に管理することが重要です。キーを紛失すると、データを復号化できなくなります。

261

Page 270: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドHLS のコンテンツ保護

HLS のコンテンツ保護HTTP Live Streaming (HLS) はアダプティブストリーミングプロトコルです。Elastic Transcoder では HLSをサポートするために、メディアセグメントと呼ばれる個別の小さなファイルに入力ファイルが分割されます。対応する個別のメディアセグメントには、異なるビットレートでエンコードされた同じ素材が含まれているため、プレイヤーは利用可能な帯域幅に最適なストリームを選択することができます。また、Elastic Transcoder はストリーミングに利用できるさまざまなセグメントのメタデータを含むプレイリストも作成します。

HLS のコンテンツ保護を有効にすると、各メディアセグメントは 128 ビットの AES 暗号化キーを使用して暗号化されます。再生中にコンテンツが表示されると、プレイヤーはキーをダウンロードし、メディアセグメントを復号化します。

使用されるキーには、AWS KMS CMK とデータキーの 2 種類があります。データキーの暗号化と復号に使用する CMK を作成する必要があります。Elastic Transcoder ではデータキーを使用してメディアセグメントを暗号化および復号されます。データキーは AES-128 である必要があります。同じコンテンツのすべてのバリエーションとセグメントは、同じデータキーを使用して暗号化されます。データキーを提供するか、Elastic Transcoder でデータキーを作成することができます。

CMK は、次のポイントでデータキーの暗号化に使用することができます。

• 独自のデータキーを提供する場合、Elastic Transcoder に渡す前に暗号化する必要があります。• Elastic Transcoder にデータキーの生成をリクエストすると、Elastic Transcoder がデータキーを暗号化

します。

CMK は、次のポイントでデータキーの復号に使用することができます。

• Elastic Transcoder は、データキーを使用して出力ファイルを暗号化するか、入力ファイルを復号する必要があるときに、お客様によって指定されたデータキーを復号します。

• Elastic Transcoder によって生成されたデータキーを復号し、このキーを使用して出力ファイルを復号します。

詳細については、『Amazon Elastic Transcoder Developer Guide』の「HLS のコンテンツ保護」を参照してください。

Elastic Transcoder の暗号化コンテキスト暗号化コンテキスト (p. 15)は、シークレットでない任意のデータを含む一連のキーと値のペアです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

Elastic Transcoder は、データキーの生成、暗号化、復号をリクエストするときに、すべての AWS KMSAPI で同じ暗号化コンテキストを使用します。

"service" : "elastictranscoder.amazonaws.com"

暗号化コンテキストは、CloudTrail ログに書き込まれるため、所定の AWS KMS CMK が使用された方法を理解しやすくなっています。CloudTrail ログファイルの requestParameters フィールドで、暗号化コンテキストは以下のようになります。

"encryptionContext": { "service" : "elastictranscoder.amazonaws.com"

262

Page 271: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EMR

}

サポートされる暗号化オプションの 1 つを使用するように Elastic Transcoder ジョブを設定する方法の詳細については、『Amazon Elastic Transcoder Developer Guide』の「データ暗号化のオプション」を参照してください。

Amazon EMR で AWS KMS を使用する方法Amazon EMR クラスターを使用すると、永続的ストレージに保存する前に、保存データを暗号化するようにクラスターを設定できます。保存データは、EMR ファイルシステム (EMRFS) かクラスターノードのストレージボリューム、またはその両方で暗号化できます。保存データを暗号化するには、AWS KMS でカスタマーマスターキー (CMK) を使用します。以下のトピックでは、Amazon EMR クラスターで CMK を使用して保存データを暗号化する方法について説明します。

Important

Amazon EMR は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用して、Amazon EMR クラスター内の保存データを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

また、Amazon EMR クラスターでは、送信中のデータの暗号化も行われるため、データはクラスターで暗号化されてから、ネットワークを介して送信されます。CMK を使用して、送信中のデータを暗号化することはできません。詳細については、Amazon EMR 管理ガイドの「伝送時のデータ暗号化」を参照してください。

Amazon EMR で利用できるすべての暗号化オプションの詳細については、Amazon EMR 管理ガイドの「暗号化オプション」を参照してください。

トピック• EMR ファイルシステム (EMRFS) のデータを暗号化する (p. 263)• クラスターノードのストレージボリュームのデータを暗号化する (p. 265)• 暗号化コンテキスト (p. 266)

EMR ファイルシステム (EMRFS) のデータを暗号化するAmazon EMR クラスターでは、次の 2 種類の分散ファイルシステムを使用しています。

• Hadoop Distributed File System (HDFS)HDFS 暗号化では、AWS KMS の CMK は使用しません。• EMR ファイルシステム (EMRFS)EMRFS は、Amazon EMR クラスターでデータを Amazon Simple

Storage Service (Amazon S3) に保存できるようにする HDFS の実装です。EMRFS は、4 種類の暗号化オプションをサポートしており、そのうち 2 種類は、AWS KMS の CMK を使用します。4 種類すべての EMRFS の暗号化オプションの詳細については、Amazon EMR 管理ガイドの「暗号化オプション」を参照してください。

CMK を使用する 2 種類の EMRFS 暗号化オプションでは、以下の Amazon S3 の暗号化機能を使用しています。

• AWS KMS で管理されたキーを使用したサーバー側の暗号化 (SSE-KMS)SSE-KMS では、Amazon EMRクラスターから Amazon S3 にデータが送信され、Amazon S3 で CMK を使用してそのデータを暗号化

263

Page 272: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドEMR ファイルシステム (EMRFS) のデータを暗号化する

してから、S3 バケットに保存されます。この仕組みについては、「SSE-KMS を使用して EMRFS のデータを暗号化するプロセス (p. 264)」を参照してください。

• AWS KMS で管理されたキーを使用したクライアント側の暗号化 (CSE-KMS)。CSE-KMS では、Amazon EMR クラスターで CMK を使用してデータを暗号化してから、Amazon S3 ストレージに送信されます。この仕組みについては、「CSE-KMS を使用して EMRFS のデータを暗号化するプロセス (p. 265)」を参照してください。

Amazon EMR クラスターを設定して、SSE-KMS または CSE-KMS で EMRFS のデータを暗号化する際は、Amazon S3 または Amazon EMR クラスターで使用する AWS KMS の CMK を選択します。SSE-KMS では、エイリアス aws/s3 または作成したカスタム CMK を使用して、Amazon S3 で使用する AWSマネージド CMK を選択できます。CSE-KMS では、作成する対称カスタマー管理 CMK を選択する必要があります。カスタマー管理 CMK を選択する際は、Amazon EMR クラスターにその CMK の使用権限があることを確認する必要があります。詳細については、Amazon EMR 管理ガイドの「暗号化のための AWSKMS カスタマーマスターキー(CMK) の使用」を参照してください。

SSE-KMS と CSE-KMS の両方を使用する場合は、選択した CMK は、エンベロープ暗号化 (p. 14)ワークフローのマスターキーとなります。データは一意のデータ暗号化キー (またはデータキー) で暗号化され、このデータキーは AWS KMS の CMK で暗号化されることになります。暗号化されたデータとその暗号化されたデータキーのコピーは、1 つの暗号化オブジェクトとして S3 バケットに一緒に保存されます。この仕組みについては、次のトピックを参照してください。

トピック• SSE-KMS を使用して EMRFS のデータを暗号化するプロセス (p. 264)• CSE-KMS を使用して EMRFS のデータを暗号化するプロセス (p. 265)

SSE-KMS を使用して EMRFS のデータを暗号化するプロセスAmazon EMR クラスターを構成して、SSE-KMS を使用する場合、暗号化プロセスは次のようになります。

1. クラスターから Amazon S3 にデータが送信され、S3 バケットのストレージに保存されます。2. Amazon S3 から AWS KMS に GenerateDataKey リクエストが送信され、SSE-KMS を使用するために

クラスターを設定した際に選択した CMK のキー ID が指定されます。リクエストには暗号化コンテキストが含まれます。詳細については、「暗号化コンテキスト (p. 266)」を参照してください。

3. AWS KMS で一意のデータ暗号化キー (データキー) が生成され、このデータキーの 2 つのコピーがAmazon S3 に送信されます。コピーのうち一方は、暗号化されていない形式 (プレーンテキスト) で、もう一方は CMK で暗号化されます。

4. ステップ 1 で受け取ったデータは、Amazon S3 でプレーンテキストデータキーを使用して暗号化され、使用後はできるだけ早くメモリから削除されます。

5. Amazon S3 では、暗号化されたデータとその暗号化されたデータキーのコピーは、1 つの暗号化オブジェクトとして S3 バケットに一緒に保存されます。

この復号プロセスは、次のように行われます。

1. クラスターは、暗号化されたデータオブジェクトを S3 バケットへ要求します。2. Amazon S3 は、S3 オブジェクトから暗号化データを取得し、次に Decrypt リクエストで暗号化データ

キーを AWS KMS に送信します。リクエストには暗号化コンテキスト (p. 15)が含まれます。3. AWS KMS では、暗号化に使用したものと同一の CMK を使用して暗号化データキーを復号し、その

後、復号 (プレーンテキスト) データキーを Amazon S3 に送信します。4. Amazon S3 は、プレーンテキストデータキーを使用して暗号化データを復号し、使用後できるだけ早

くそのプレーンテキストデータキーをメモリから削除します。5. Amazon S3 は、復号されたデータをクラスターに送信します。

264

Page 273: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドクラスターノードのストレージ

ボリュームのデータを暗号化する

CSE-KMS を使用して EMRFS のデータを暗号化するプロセスAmazon EMR クラスターを構成して、CSE-KMS を使用する場合、暗号化プロセスは次のようになります。

1. Amazon S3 にデータを保存する準備ができたら、クラスターは GenerateDataKey リクエストを AWSKMS に送信して、CSE-KMS を使用するためにクラスターを構成した際に選択した CMK のキー ID を指定します。リクエストには暗号化コンテキストが含まれます。詳細については、「暗号化コンテキスト (p. 266)」を参照してください。

2. AWS KMS は、一意のデータ暗号化キー (データキー) を生成し、このデータキーの 2 つのコピーをクラスターに送信します。コピーのうち一方は、暗号化されていない形式 (プレーンテキスト) で、もう一方は CMK で暗号化されます。

3. クラスターは、プレーンテキストデータキーを使用してデータを暗号化し、使用後できるだけ早くそのプレーンテキストデータキーをメモリから削除します。

4. クラスターは、暗号化データと暗号化されたデータキーのコピーを 1 つの暗号化オブジェクトにまとめます。

5. クライアントは、暗号化されたオブジェクトを Amazon S3 ストレージに送信します。

この復号プロセスは、次のように行われます。

1. クラスターは、暗号化されたデータオブジェクトを S3 バケットへ要求します。2. Amazon S3 はその暗号化されたオブジェクトをクラスターに送信します。3. クラスターは、暗号化されたオブジェクトから暗号化されたデータキーを取得し、その後 Decrypt リ

クエストで暗号化されたデータキーを AWS KMS に送信します。リクエストには暗号化コンテキスト (p. 15)が含まれます。

4. AWS KMS は、暗号化に使用したものと同一の CMK を使用して暗号化データキーを復号し、その後、復号 (プレーンテキスト) データキーをクラスターに送信します。

5. クラスターは、そのプレーンテキストデータキーを使用して、暗号化されたデータを復号し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

クラスターノードのストレージボリュームのデータを暗号化するAmazon EMR クラスターとは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのコレクションのことです。クラスター内のインスタンスはそれぞれ、クラスターノードまたはノードと呼ばれます。各ノードに対して、インスタンスストアボリュームと Amazon Elastic Block Store (Amazon EBS) ボリュームの 2 種類のストレージボリュームを設定できます。これらのノードでストレージボリュームをいずれも暗号化するには、クラスターを構成して、Linux Unified Key Setup (LUKS) を使用できます (各ノードの起動ボリュームは不可)。これは、ローカルディスクの暗号化と呼ばれます。

クラスター向けにローカルディスクの暗号化を有効にすると、AWS KMS の CMK を使用して、LUKS マスターキーを暗号化できます。作成したカスタマー管理の CMK (p. 4) を選択する必要があります。AWS管理の CMK (p. 4) を使用することはできません。カスタマー管理の CMK を選択する場合は、AmazonEMR クラスターにその CMK を使用するアクセス許可があることを確認してください。詳細については、Amazon EMR 管理ガイドの「暗号化のための AWS KMS カスタマーマスターキー(CMK) の使用」を参照してください。

CMK を使用してローカルディスクの暗号化を有効にする場合、暗号化プロセスは次のようになります。

1. 各クラスターノードが起動すると、GenerateDataKey リクエストが AWS KMS に送信され、クラスターのローカルディスクの暗号化を有効にした際に選択した CMK のキー ID が指定されます。

265

Page 274: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド暗号化コンテキスト

2. AWS KMS は、一意のデータ暗号化キー (データキー) を生成し、このデータキーの 2 つのコピーをノードに送信します。コピーのうち一方は、暗号化されていない形式 (プレーンテキスト) で、もう一方はCMK で暗号化されます。

3. このノードでは、LUKS マスターキーを保護するパスワードとして、base64 コードのプレーンテキストデータキーを使用しています。ノードは、暗号化されたデータキーのコピーを起動ボリュームに保存します。

4. ノードが再起動すると、暗号化されたデータキーは、再起動したノードより Decrypt リクエストでAWS KMS に送信されます。

5. AWS KMS は、暗号化に使用したものと同一の CMK を使用して暗号化データキーを復号し、その後、復号 (プレーンテキスト) データキーをノードに送信します。

6. このノードでは、LUKS マスターキーのロックを解除するパスワードとして、base64 コードのプレーンテキストデータキーを使用しています。

暗号化コンテキストAWS KMS を使用して、データキーを生成するか、またはデータの暗号化または復号化を行う際、AWSKMS に統合されている各 AWS サービスでは、暗号化コンテキスト (p. 15)を指定できます。暗号化コンテキストは、データの整合性を調べるために AWS KMS で使用される追加の認証情報です。サービスにおいて、暗号化操作のために暗号化コンテキストを指定する際、復号操作と同じ暗号コンテキストを指定する必要があります。指定しない場合は復号できません。また、暗号化コンテキストは、AWS CloudTrail ログファイルにも書き込まれるため、所定の CMK キーが使用された原因を理解するのに役立ちます。

以下のセクションでは、CMK を使用する各 Amazon EMR 暗号化のシナリオで使用されている暗号化コンテキストについて説明します。

SSE-KMS による EMRFS 暗号化の暗号化コンテキストSSE-KMS を使用すると、Amazon EMR クラスターから Amazon S3 にデータが送信され、Amazon S3で CMK を使用してそのデータを暗号化してから、S3 バケットに保存されます。この場合、Amazon S3は、AWS KMS に送信する GenerateDataKey および Decrypt リクエストそれぞれを含む暗号化コンテキストとして、S3 オブジェクトの Amazon リソースネーム (ARN) を使用します。次の例は、Amazon S3 が使用する暗号化コンテキストの JSON 表現を示しています。

{ "aws:s3:arn" : "arn:aws:s3:::S3_bucket_name/S3_object_key" }

CSE-KMS による EMRFS 暗号化の暗号化コンテキストCSE-KMS を使用すると、Amazon EMR クラスターで CMK を使用してデータを暗号化してから、Amazon S3 ストレージに送信されます。この場合、クラスターは、AWS KMS に送信されるGenerateDataKey および Decrypt リクエストそれぞれを含む暗号化コンテキストとして、CMK のAmazon リソースネーム (ARN) を使用します。次の例では、クラスターが使用する暗号化コンテキストのJSON 表現を示します。

{ "kms_cmk_id" : "arn:aws:kms:us-east-2:111122223333:key/0987ab65-43cd-21ef-09ab-87654321cdef" }

LUKS によるローカルディスク暗号化の暗号化コンテキストAmazon EMR クラスターが LUKS を用いてローカルディスクの暗号化を使用する際、クラスターノードは、AWS KMS に送信される GenerateDataKey および Decrypt リクエストで暗号化コンテキストを指定しません。

266

Page 275: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon Redshift

Amazon Redshift で AWS KMS を使用する方法このトピックでは、Amazon Redshift で AWS KMS を使用してデータを暗号化する方法について説明します。

トピック• Amazon Redshift による暗号化 (p. 267)• 暗号化コンテキスト (p. 267)

Amazon Redshift による暗号化Amazon Redshift データウェアハウスは、ノードと呼ばれるコンピューティングリソースのコレクションで、クラスターと呼ばれるグループで構成されています。各クラスターは、1 つの Amazon Redshift エンジンを実行し、1 つ以上のデータベースを含みます。

Amazon Redshift は、4 層のキーベースの暗号化アーキテクチャを使用します。これらのキーは、データ暗号化キー、データベースキー、クラスターキー、マスターキーから構成されます。

データ暗号化キーは、クラスター内のデータブロックを暗号化します。各データブロックに、ランダムに生成された AES-256 キーが割り当てられます。これらのキーは、クラスターのデータベースキーを使用して暗号化されます。

データベースキーは、クラスターのデータ暗号化キーを暗号化します。データベースキーは、ランダムに生成された AES-256 キーです。このアーキテクチャは、Amazon Redshift クラスターとは別のネットワーク上にあるディスクに保存され、セキュリティで保護されたチャネルを通じてクラスターに渡されます。

クラスターキーは、Amazon Redshift クラスターのデータベースキーを暗号化します。クラスターキーを管理するには、AWS KMS、AWS CloudHSM、または外部のハードウェアセキュリティモジュール (HSM)を使用できます。詳細については、「Amazon Redshift データベースの暗号化」のドキュメントを参照してください。

マスターキーはクラスターキーを暗号化します。AWS KMS カスタマーマスターキー (p. 3) (CMK) をAmazon Redshift のマスターキーとして使用できます。暗号化をリクエストする場合は、Amazon Redshiftコンソールで適切なボックスを選択します。カスタマー管理型の CMK (p. 4) を使用するように指定できます。そのためには、暗号化のボックスの下に表示されるリストからいずれかのキーを選択します。カスタマー管理型の CMK を指定しないと、Amazon Redshift は、アカウントの Amazon Redshift に対する AWS管理型 CMK (p. 4) を使用します。

Important

Amazon Redshift は、対称 CMK のみをサポートします。非対称 CMK を Amazon Redshift 暗号化ワークフローのマスターキーとして使用することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

暗号化コンテキストAWS KMS と統合された各サービスでは、データキー、暗号化および復号化をリクエストするときに暗号化コンテキスト (p. 15)が指定されます。暗号化コンテキストは、データの整合性を調べるために AWSKMS で使用される追加の認証データ (AAD) です。つまり、暗号化オペレーションで暗号化コンテキストを指定すると、サービスは復号化オペレーションでも同じ暗号化コンテキストを指定します。指定しなかった場合、復号化は成功しません。Amazon Redshift は暗号化コンテキストのクラスター ID と作成時間を使用します。CloudTrail ログファイルの requestParameters フィールドで、暗号化コンテキストは次のように表示されます。

"encryptionContext": { "aws:redshift:arn": "arn:aws:redshift:region:account_ID:cluster:cluster_name",

267

Page 276: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon Relational Database Service (Amazon RDS)

"aws:redshift:createtime": "20150206T1832Z"},

CloudTrail ログのクラスター名を検索し、カスタマーマスターキー (CMK) を使用して、実行されたオペレーションについて理解することができます。この操作には、クラスターの暗号化、クラスターの復号、およびデータキーの生成が含まれます。

Amazon Relational Database Service (AmazonRDS) で AWS KMS を使用する方法

Amazon Relational Database Service (Amazon RDS) を使用すると、クラウドでリレーショナルデータベースをセットアップ、運用、拡張できます。オプションで、Amazon RDSDB インスタンスに保存されたデータを、AWS KMS 内のカスタマーマスターキー (p. 3) (CMK) によって暗号化することを選択できます。AWS KMS CMK によって Amazon RDS リソースを暗号化する方法については、Amazon RDS ユーザーガイド の「Amazon RDS リソースの暗号化」を参照してください。

Important

Amazon RDS は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用してAmazon RDS データベース内のデータを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

Amazon RDS は、データベースボリュームのディスク全体を暗号化するために、Amazon Elastic BlockStore (Amazon EBS) 暗号化を使用します。Amazon EBS が AWS KMS を使用してボリュームを暗号化する方法については、「Amazon Elastic Block Store (Amazon EBS) で AWS KMS を使用する方法 (p. 256)」を参照してください。

Amazon RDS によって暗号化された DB インスタンスを作成すると、Amazon RDS が暗号化された EBSボリュームをユーザーの代わりに作成し、データベースを保存します。ボリュームに保管されているデータ、データベーススナップショット、自動バックアップ、リードレプリカはすべて、DB インスタンスを作成したときに指定した KMS CMK によって暗号化されます。

Amazon RDS の暗号化コンテキストAmazon RDS が KMS CMK を使用する場合や、Amazon EBS が Amazon RDS の代わりに KMS CMK を使用する場合、サービスは暗号化コンテキスト (p. 15)を指定します。暗号化コンテキストは、データの整合性を保証するために AWS KMS で使用される追加の認証データ (ADD) です。暗号化オペレーションで暗号化コンテキストを指定すると、サービスは復号化オペレーションでも同じ暗号化コンテキストを指定する必要があります。そうしないと、復号は失敗します。暗号化コンテキストは、AWS CloudTrail ログにも書き込まれるため、所定の CMK キーが使用された理由を理解しやすくなっています。CloudTrail ログには、CMK の使用を示す多くのエントリが含まれていることがありますが、各ログエントリの暗号化コンテキストによってその特定の使用の理由を特定することができます。

少なくとも、以下の JSON 形式の例のように、Amazon RDS は暗号化コンテキストの DB インスタンスID を常に使用します。

{ "aws:rds:db-id": "db-CQYSMDPBRZ7BPMH7Y3RTDG5QY" }

この暗号化コンテキストによって、CMK が使用された DB インスタンスを識別することができます。

CMK が特定の DB インスタンスと特定の EBS ボリュームに使用されると、次の JSON 形式の例のように、DB インスタンス ID と EBS ボリューム ID の両方が暗号化コンテキストに使用されます。

{ "aws:rds:db-id": "db-BRG7VYS3SVIFQW7234EJQOM5RQ", "aws:ebs:id": "vol-ad8c6542"

268

Page 277: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS Secrets Manager

}

AWS Secrets Manager で AWS KMS を使用する方法

AWS Secrets Manager は、シークレットを暗号化して保存し、それらを透過的に復号してプレーンテキストで返す、AWS のサービスです。これは定期的に変更され、ハードコードしたり、アプリケーションにプレーンテキストで保存したりするべきではないアプリケーションシークレット (ログイン認証情報など) を保存するために専用に設計されています。アプリケーションは、ハードコードされた認証情報またはテーブルを参照する代わりに、Secrets Manager を呼び出します。

Secrets Manager は、一般的に使用されるデータベースに関連付けられたシークレットを定期的に更新する機能もサポートしています。常に、保存する前に新しく更新されたシークレットを暗号化します。

Secrets Manager は AWS Key Management Service (AWS KMS) と統合されて、AWS KMS カスタマーマスターキー (p. 3) (CMK) によって保護された一意のデータ暗号化キー (p. 5)を使用して、すべてのシークレットの全バージョンを暗号化します。この統合により、AWS KMS を暗号化されないままにしない暗号化キーにより、シークレットが保護されます。また、マスターキーでカスタムアクセス権限を設定し、シークレットを保護するデータキーを生成、暗号化、復号するオペレーションを監査することができます。

トピック• シークレット値の保護 (p. 269)• シークレットの暗号化と復号 (p. 269)• AWS KMS CMK の使用 (p. 271)• CMK の使用の許可 (p. 272)• Secrets Manager の暗号化コンテキスト (p. 274)• Secrets Manager と AWS KMS のやり取りのモニタリング (p. 275)

シークレット値の保護シークレットを保護するため、Secrets Manager はシークレットのシークレット値を暗号化します。

Secrets Manager では、シークレットは、シークレット値 (保護されたシークレットテキストまたは暗号化されたシークレットデータとも呼ばれます) および関連するメタデータとバージョン情報で構成されます。シークレット値は、最大 65,536 バイトまでの任意の文字列またはバイナリデータとすることができますが、通常はサーバーまたはデータベースのログイン情報を構成する名前と値のペアのコレクションです。

Secrets Manager は、シークレットを保存する前に常にシークレット値全体を暗号化します。また、シークレット値を取得または変更するたびに、透過的に復号します。暗号化を有効または無効にするオプションはありません。Secrets Manager では、シークレット値を暗号化および復号するために、AWS KMS を使用します。

シークレットの暗号化と復号Secrets Manager は、シークレットを保護するために、AWS KMS カスタマーマスターキー (p. 3) (CMK)およびデータキー (p. 5)とともにエンベロープ暗号化 (p. 14)を使用します。

Secrets Manager は、各シークレット値を保護するために一意のデータキーを使用します。シークレットのシークレット値が変わるたびに、Secrets Manager は新しいデータキーを生成してそれを保護します。次の図に示すように、データキーは AWS KMS CMK で暗号化され、シークレットのメタデータに保存さ

269

Page 278: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドシークレットの暗号化と復号

れます。Secrets Manager は、シークレットを復号するためには、最初に AWS KMS で CMK を使用して暗号化されたデータキーを復号する必要があります。

各シークレットの AWS KMS CMK各シークレットは、AWS 管理またはカスタマー管理のカスタマーマスターキー (p. 3) (CMK) に関連付けられます。カスタマー管理の CMK により、承認されたユーザーはポリシーと許可を通じた CMK へのアクセスの制御 (p. 51)、自動更新 (p. 151)の管理、およびインポートされたキーマテリアル (p. 156)の使用が可能です。

Important

Secrets Manager は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用してシークレットを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

新しいシークレットを作成するときに、アカウントとリージョンで対称カスタマー管理 CMK を指定するか、Secrets Manager、aws/secretsmanager 用の AWS 管理の CMK を指定できます。CMK を指定しない場合、またはコンソールのデフォルト値 DefaultEncryptionKey を選択する場合、Secrets Manager によって aws/secretsmanager CMK が作成され (存在しない場合)、シークレットに関連付けられます。アカウントのシークレットごとに、同じ CMK または異なる CMK を使用できます。

シークレットの CMK は、いつでも Secrets Manager コンソールで、または UpdateSecret オペレーションを使用して変更できます。CMK を変更した場合、Secrets Manager は新しい CMK で既存のシークレット値を再暗号化しません。ただし、次回にシークレット値が変更されると、Secrets Manager は新しい CMKでその値を暗号化します。

シークレットに関連付けられている CMK を見つけるには、ListSecrets または DescribeSecret オペレーションを使用します。シークレットが Secrets Manager 用の AWS 管理の CMK (aws/secretsmanager)に関連付けられている場合、これらのオペレーションでは CMK ID は返されません。

Secrets Manager は CMK を使用してシークレット値を直接暗号化しません。代わりに、CMK を使用して一意のデータキーを生成して暗号化し、データキーを使用してシークレット値を暗号化します。

各シークレット値の一意のデータキーシークレットのシークレット値を作成または変更するたびに、Secrets Manager はシークレットに関連付けられている CMK を使用して、一意の 256 ビット Advanced Encryption Standard (AES) 対称データ

270

Page 279: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS CMK の使用

キー (p. 5)を生成し、暗号化します。Secrets Manager はプレーンテキストデータキーを使用して AWSKMS の外部でシークレット値を暗号化し、次にメモリから削除します。また、データキーの暗号化されたコピーを、シークレットのメタデータに保存します。

シークレット値は、最終的に CMK によって保護され、AWS KMS が暗号化されないままの状態になることはありません。Secrets Manager は、シークレットを復号する前に、暗号化されたデータキーの復号をAWS KMS に指示する必要があります。

シークレット値の暗号化Secrets Manager では、シークレットでシークレット値を暗号化するために、次のプロセスが使用されます。

1. Secrets Manager はシークレットの CMK の ID と、256 ビット AES 対称キーのリクエストを使用して、AWS KMS の GenerateDataKey オペレーションを呼び出します。AWS KMS は、プレーンテキストのデータキーと CMK で暗号化されたデータキーのコピーを返します。

2. Secrets Manager では、プレーンテキストのデータキーと Advanced Encryption Standard (AES) アルゴリズムを使用して、AWS KMS の外部でシークレット値を暗号化します。次に、使用後可能な限り早く、メモリからプレーンテキストキーが削除されます。

3. Secrets Manager は暗号化されたデータキーをシークレットのメタデータに保存し、シークレット値の復号に利用できるようにします。ただし、いずれの Secrets Manager API も、暗号化されたシークレットまたは暗号化されたデータキーを返しません。

シークレット値の復号Secrets Manager は、暗号化されたシークレット値を復号するためには、暗号化されたデータキーを最初に復号する必要があります。データキーは AWS KMS のシークレットに対して CMK で暗号化されるため、Secrets Manager は AWS KMS にリクエストを行う必要があります。

暗号化されたシークレット値を復号するには:

1. Secrets Manager は AWS KMS の Decrypt オペレーションを呼び出し、暗号化されたデータキーを渡します。

2. AWS KMS はシークレットの CMK を使ってデータキーを復号します。次に、プレーンテキストのデータキーを返します。

3. Secrets Manager がプレーンテキストのデータキーを使ってシークレット値を復号します。次に、可能な限り早く、メモリからデータキーが削除されます。

AWS KMS CMK の使用Secrets Manager は、シークレットに関連付けられたカスタマーマスターキー (p. 3) (CMK) を使用して、各シークレット値のデータキーを生成します。また、CMK を使用して、暗号化されたシークレット値を復号する必要があるときに、そのデータキーを復号します。AWS CloudTrail イベント、AmazonCloudWatch Logs (p. 275)、および監査証跡のリクエストとレスポンスを追跡できます。

次の Secrets Manager オペレーションでは、AWS KMS CMK を使用するためのリクエストをトリガーします。

GenerateDataKey

Secrets Manager は、次の Secrets Manager オペレーションに応じて、AWS KMS のGenerateDataKey オペレーションを呼び出します。• CreateSecret – 新しいシークレットにシークレット値が含まれる場合、Secrets Manager はその値

を暗号化するために新しいデータキーをリクエストします。

271

Page 280: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の許可

• PutSecretValue – Secrets Manager は指定されたシークレット値を暗号化するために新しいデータキーをリクエストします。

• UpdateSecret – 更新でシークレット値が変更される場合、Secrets Manager は新しいシークレット値を暗号化するために新しいデータキーをリクエストします。

Note

RotateSecret オペレーションでは、シークレット値を変更しないため、GenerateDataKeyを呼び出しません。ただし、RotateSecret が呼び出す Lambda 関数がシークレット値を変更する場合、PutSecretValue オペレーションの呼び出しにより、GenerateDataKey リクエストがトリガーされます。

Decrypt

Secrets Manager は、暗号化されたシークレット値を復号するため、AWS KMS の Decrypt オペレーションを呼び出して、シークレットの暗号化されたデータキーを復号します。次に、プレーンテキストのデータキーを使って、暗号化されたシークレット値を復号します。

Secrets Manager は、次の Secrets Manager オペレーションに応じて、レスポンスの Decrypt オペレーションを呼び出します。• GetSecretValue – Secrets Manager は、呼び出し元に返す前にシークレット値を復号します。• PutSecretValue および UpdateSecret – ほとんどの PutSecretValue および UpdateSecret リ

クエストは、Decrypt オペレーションをトリガーしません。ただし、PutSecretValue またはUpdateSecret リクエストが、既存のバージョンのシークレットでシークレット値を変更しようとすると、Secrets Manager は既存のシークレット値を復号し、リクエストのシークレット値と比較して、それらが同じであることを確認します。このアクションにより、その Secrets Manager オペレーションがべき等になります。

CMK へのアクセスの検証

シークレットに関連付けられている CMK を作成または変更する場合、Secrets Manager は指定された CMK で GenerateDataKey および Decrypt オペレーションを呼び出します。これらの呼び出しでは、呼び出し元に、これらのオペレーションに対して CMK を使用するアクセス許可があることが確認されます。Secrets Manager はこれらのオペレーションの結果を破棄します。いずれの暗号化オペレーションでも、これらの結果が使用されることはありません。

これらのリクエストの SecretVersionId キーの暗号化コンテキスト (p. 274)の値はRequestToValidateKeyAccess であるため、この検証呼び出しを識別できます。

Note

以前は、Secrets Manager 検証呼び出しには、暗号化コンテキストが含まれていませんでした。古い AWS CloudTrail ログには、暗号化コンテキストのない呼び出しが含まれている可能性があります。

CMK の使用の許可Secrets Manager は、暗号化オペレーションでカスタマーマスターキー (p. 3) (CMK) を使用する場合、シークレットのシークレット値を作成または変更するユーザーに代わって操作を実行します。

ユーザーに代わって AWS KMS カスタマーマスターキー (CMK) を使用するには、ユーザーには次のアクセス権限が必要になります。IAM ポリシーまたはキーポリシーで、これらの必要なアクセス権限を指定できます。

• kms:GenerateDataKey• kms:Decrypt

272

Page 281: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の許可

Secrets Manager から実行されるリクエストにのみ CMK が使用されるようにするには、値secretsmanager.<region>.amazonaws.com で kms:ViaService 条件キー (p. 119)を使用できます。

また、暗号化オペレーションに CMK を使用する条件として、暗号化コンテキスト (p. 274)でキーまたは値を使用することもできます。たとえば、IAM またはキーポリシードキュメントで文字列条件演算子を使用するか、許可で許可の制約を使用できます。

AWS 管理 CMK のキーポリシーSecrets Manager 用の AWS 管理 CMK のキーポリシーにより、Secrets Manager がユーザーに代わってリクエストを行うときにのみ、指定されたオペレーションに CMK を使用するためのアクセス許可がユーザーに付与されます。このキーポリシーでは、ユーザーが CMK を直接使用することは許可されません。

このキーポリシーは、すべての AWS 管理型キー (p. 3)と同様に、サービスによって確立されます。キーポリシーは変更できませんが、いつでも表示できます。詳細については、「キーポリシーの表示 (p. 67)」を参照してください。

このキーポリシーのポリシーステートメントには次の効果があります。

• アカウントのユーザーに、その名で Secrets Manager からリクエストを受信したときのみに、CMK を使用して暗号化オペレーションを行うことができるようにします。kms:ViaService 条件キーで、この制限を適用します。

• AWS アカウントが、CMK プロパティを表示し、許可を取り消すことをユーザーに許可する IAM ポリシーを作成できるようにします。

• Secrets Manager は許可を使用して CMK へのアクセスを取得しませんが、ポリシーでは、SecretsManager がユーザーに代わって CMK の許可を作成 (p. 123)し、アカウントで CMK を使用できるようにする許可の取り消しを Secrets Manager に許可します。これらは、AWS 管理の CMK のポリシードキュメントの標準の要素です。

以下に示すのは、Secrets Manager 用の AWS 管理 CMK のキーポリシー例です。

{ "Version" : "2012-10-17", "Id" : "auto-secretsmanager-1", "Statement" : [ { "Sid" : "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "secretsmanager.us-west-2.amazonaws.com", "kms:CallerAccount" : "111122223333" } } },{ "Sid" : "Allow direct access to key metadata to the account", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource" : "*"

273

Page 282: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドSecrets Manager の暗号化コンテキスト

} ]}

Secrets Manager の暗号化コンテキスト暗号化コンテキスト (p. 15) は、一連のキーと値のペアを含む任意非シークレットデータです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

Secrets Manager は、AWS KMS に対する GenerateDataKey および Decrypt リクエストで、次の例に示すようにシークレットとそのバージョンを識別する 2 つの名前–値のペアで暗号化コンテキストを使用します。名前は変わりませんが、組み合わされた暗号化コンテキストの値は、シークレット値ごとに異なります。

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-west-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"}

暗号化コンテキストを使用して、Amazon CloudWatch Logs、AWS CloudTrail などの監査レコードやログで、これらの暗号化オペレーションを確認できます。また、ポリシーと許可で認可の条件としても確認できます。

Secrets Manager 暗号化コンテキストは、2 つの名前と値のペアで構成されます。

• SecretARN – シークレットを識別する最初の名前 – 値のペア。キーは、SecretARN です。値はシークレットの Amazon リソースネーム (ARN) です。

"SecretARN": "ARN of an Secrets Manager secret"

たとえば、シークレットの ARN が arn:aws:secretsmanager:us-west-2:111122223333:secret:test-secret-a1b2c3 である場合、暗号化コンテキストには次のペアが含まれます。

"SecretARN": "arn:aws:secretsmanager:us-west-2:111122223333:secret:test-secret-a1b2c3"

• SecretVersionId – シークレットのバージョンを識別する、2 番目の名前 – 値のペア。キーは、SecretVersionId です。値は、バージョン ID です。

"SecretVersionId": "<version-id>"

たとえば、シークレットのバージョン ID が EXAMPLE1-90ab-cdef-fedc-ba987SECRET1 である場合、暗号化コンテキストには次のペアが含まれます。

"SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"

シークレットの CMK を作成または変更すると、Secrets Manager は GenerateDataKey および Decrypt リクエストを AWS KMS に送信し、これらのオペレーションのために CMK を使用するアクセス許可が呼び出し元にあることを確認します。レスポンスは廃棄され、シークレット値では使用されません。

これらの検証リクエストでは、SecretARN の値がシークレットの実際の ARN となりますが、SecretVersionId 値は、次の暗号化コンテキストの例に示すようにRequestToValidateKeyAccess になります。この特殊な値は、ログと監査証跡で検証リクエストを識別するうえで役立ちます。

274

Page 283: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドSecrets Manager と AWS KMS のやり取りのモニタリング

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-west-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "RequestToValidateKeyAccess"}

Note

以前は、Secrets Manager 検証リクエストには、暗号化コンテキストが含まれていませんでした。古い AWS CloudTrail ログには、暗号化コンテキストのない呼び出しが含まれている可能性があります。

Secrets Manager と AWS KMS のやり取りのモニタリングAWS CloudTrail と Amazon CloudWatch Logs を使用して、Secrets Manager がユーザーに代わって AWSKMS に送信するリクエストを追跡できます。

GenerateDataKey

シークレットのシークレット値を作成または変更 (p. 271)する場合、Secrets Manager はシークレットの CMK を指定する GenerateDataKey リクエストを AWS KMS に送信します。

GenerateDataKey オペレーションを記録するイベントは、次のようなサンプルイベントになります。リクエストは secretsmanager.amazonaws.com によって起動されます。このパラメータには、シークレットの CMK の Amazon リソースネーム (ARN)、256 ビットキーを要求するキー識別子、およびシークレットとバージョンを識別する暗号化コンテキスト (p. 274)が含まれます。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:23:41Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:23:41Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "keySpec": "AES_256", "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-west-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null,

275

Page 284: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドSecrets Manager と AWS KMS のやり取りのモニタリング

"requestID": "a7d4dd6f-6529-11e8-9881-67744a270888", "eventID": "af7476b6-62d7-42c2-bc02-5ce86c21ed36", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

Decrypt

シークレットのシークレット値を取得または変更 (p. 271)するたびに、Secrets Manager は Decryptリクエストを AWS KMS に送信し、暗号化されたデータキーを復号します。

Decrypt オペレーションを記録するイベントは、次のようなサンプルイベントになります。このユーザーは、テーブルにアクセスしている AWS アカウントのプリンシパルです。パラメータには、暗号化されたテーブルのキー (暗号化テキストの blob として) およびテーブルと AWS アカウントを識別する暗号化コンテキスト (p. 274)が含まれます。AWS KMS は暗号化テキストから CMK の ID を取得します。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:36:09Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:36:09Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-west-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null, "requestID": "658c6a08-652b-11e8-a6d4-ffee2046048a", "eventID": "f333ec5c-7fc1-46b1-b985-cbda13719611", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333",

276

Page 285: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon Simple Email Service (Amazon SES)

"type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333"}

Amazon Simple Email Service (Amazon SES) でAWS KMS を使用する方法

Amazon Simple Email Service (Amazon SES) を使用して E メールを受信し、(オプションで) 受信した E メールメッセージを暗号化してから、選択した Amazon Simple Storage Service (Amazon S3) バケットに保存することができます。E メールメッセージを暗号化するよう Amazon SES を設定する場合は、Amazon SES がメッセージを暗号化する AWS KMS カスタマーマスターキー (p. 3) (CMK) を選択する必要があります。Amazon SES 用の AWS 管理 CMK (p. 4) を選択するか(エイリアスは aws/ses です)、AWS KMS で作成した対称カスタマー管理 CMK (p. 4) を選択できます。

Important

Amazon SES は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用してAmazon SES E メールメッセージを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

Amazon SES を使用した E メールの受信の詳細については、『Amazon Simple Email Service 開発者ガイド』の「Amazon SES を使用した E メールの受信」を参照してください。

トピック• Amazon SES を使用した AWS KMS 暗号化の概要 (p. 277)• Amazon SES の暗号化コンテキスト (p. 278)• Amazon SES カスタマーマスターキー (CMK) を使用するためのアクセス許可を AWS KMS に付与す

る (p. 278)• E メールメッセージの取得と復号 (p. 279)

Amazon SES を使用した AWS KMS 暗号化の概要受信した E メールメッセージを暗号化してから S3 バケットに保存するよう Amazon SES を設定する場合のプロセスは、次のようになります。

1. Amazon SES の受信ルールを作成し、S3 アクション、ストレージの S3 バケット、および暗号化のKMS カスタマーマスターキー (CMK) を指定します。

2. Amazon SES は、受信ルールに一致する E メールメッセージを受信します。3. Amazon SES は、該当する受信ルールで指定した KMS CMK を使って暗号化された一意のデータキー

をリクエストします。4. AWS KMS は新しいデータキーを作成し、指定された CMK で暗号化して、データキーの暗号化され

たコピーとプレーンテキストのコピーを Amazon SES に送信します。5. Amazon SES はプレーンテキストデータキーを使用して E メールメッセージを暗号化し、使用後でき

るだけ早くプレーンテキストデータキーをメモリから削除します。6. Amazon SES は暗号化された E メールメッセージと暗号化されたデータキーを、指定された S3 バ

ケットに配置します。暗号化されたデータキーは、暗号化された E メールメッセージとともにメタデータとして保存されます。

277

Page 286: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon SES の暗号化コンテキスト

Step 3 (p. 277) から Step 6 (p. 277) を実行するため 、Amazon SES は AWS–により提供されたAmazon S3 暗号化クライアントを使用します。Amazon S3 から暗号化された E メールメッセージを取得して復号するには、同じクライアントを使用します。詳細については、「E メールメッセージの取得と復号 (p. 279)」を参照してください。

Amazon SES の暗号化コンテキストAmazon SES が受信した E メールメッセージを暗号化するためにデータキーをリクエストすると (「Step3 (p. 277)」の Amazon SES を使用した AWS KMS 暗号化の概要 (p. 277))、リクエストに暗号化コンテキスト (p. 15)が含まれます。暗号化コンテキストは、データの整合性を保証するために AWS KMS で使用される追加の認証データ (AAD) を提供します。また、暗号化コンテキストが AWS CloudTrail ログファイルに書き込まれるため、特定のカスタマーマスターキー (CMK) が使用された理由を理解するうえで役立ちます。Amazon SES では、次の暗号化コンテキストが使用されます

• E メールメッセージを受信するよう Amazon SES を設定した AWS アカウントの ID• E メールメッセージで S3 アクションを呼び出した Amazon SES 受信ルールのルール名• E メールメッセージの Amazon SES メッセージ ID

次の例は、Amazon SES が使用する暗号化コンテキストの JSON 表現を示しています。

{ "aws:ses:source-account": "111122223333", "aws:ses:rule-name": "example-receipt-rule-name", "aws:ses:message-id": "d6iitobk75ur44p8kdnnp7g2n800"}

Amazon SES カスタマーマスターキー (CMK) を使用するためのアクセス許可を AWS KMS に付与するE メールメッセージを暗号化するには、Amazon SES (aws/ses) のアカウントで AWS 管理のカスタマーマスターキー (CMK) (p. 4) を使用するか、作成したカスタマー管理の CMK (p. 4) を使用できます。Amazon SES にはすでに、お客様に代わって AWS 管理の CMK を使用するアクセス許可があります。ただし、Amazon SES 受信ルールに S3 アクションを追加するときにカスタマー管理の CMK を指定する場合は、CMK を使用して E メールメッセージを暗号化するアクセス許可を Amazon SES に付与する必要があります。

カスタマー管理の CMK を使用するアクセス許可を Amazon SES に付与するには、CMK のキーポリシー (p. 55)に以下のステートメントを追加します。

{ "Sid": "Allow SES to encrypt messages using this master key", "Effect": "Allow", "Principal": {"Service": "ses.amazonaws.com"}, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:ses:rule-name": false, "kms:EncryptionContext:aws:ses:message-id": false }, "StringEquals": {"kms:EncryptionContext:aws:ses:source-account": "ACCOUNT-ID-WITHOUT-HYPHENS"} }

278

Page 287: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドE メールメッセージの取得と復号

}

ACCOUNT-ID-WITHOUT-HYPHENS を、E メールメッセージを受信するよう Amazon SES を設定したAWS アカウントの 12 桁の ID で置き換えます。次のポリシーステートメントでは、Amazon SES が、これらの条件下でのみこの CMK でデータを暗号化することができます。

• Amazon SES は、AWS KMS API リクエストの EncryptionContext で、aws:ses:rule-name および aws:ses:message-id を指定する必要があります。

• Amazon SES は、AWS KMS API リクエストの EncryptionContext で aws:ses:source-accountを指定し、aws:ses:source-account の値は、キーポリシーで指定された AWS のアカウント ID と一致する必要があります。

E メールメッセージを暗号化する際に Amazon SES で使用される暗号化コンテキストの詳細については、「Amazon SES の暗号化コンテキスト (p. 278)」を参照してください。AWS KMS が暗号化テキストをどのように使用するかについての一般情報は、 暗号化コンテキスト (p. 15)を参照してください。

E メールメッセージの取得と復号Amazon SES には、暗号化された E メールメッセージを復号するアクセス権限がないため、メッセージを復号することができません。Amazon S3 から E メールメッセージを取得して復号化するコードを書く必要があります。これを簡単にするには、Amazon S3 暗号化クライアントを使用します。以下の AWS SDKには、Amazon S3 暗号化クライアントが含まれます。

• AWS SDK for Java – 『AWS SDK for Java API Reference』の「AmazonS3EncryptionClient」を参照してください。

• AWS SDK for Ruby – 『AWS SDK for Ruby API Reference』の「Aws::S3::Encryption::Client」を参照してください。

• AWS SDK for .NET – 『AWS SDK for .NET API Reference』の「AmazonS3EncryptionClient」を参照してください。

• AWS SDK for Go – 『AWS SDK for Go API リファレンス』の「s3crypto」を参照してください。

Amazon S3 暗号化クライアントは、Amazon S3 が暗号化された E メールメッセージを取得し、AWSKMS がメッセージの暗号化されたデータキーを復号するために必要なリクエストを作成するために必要な作業と、E メールメッセージの復号の作業を簡略化します。たとえば、暗号化されたデータキーを正常に復号するには、Amazon SES からデータキーをリクエストした (「AWS KMS」の Step 3 (p. 277)) ときに Amazon SES を使用した AWS KMS 暗号化の概要 (p. 277) が渡したのと同じ暗号化コンテキストを渡す必要があります。Amazon S3 暗号化クライアントが、この作業と他の作業の多くをユーザーに代わって処理します。

AWS SDK for Java で Amazon S3 暗号化クライアントをサンプルコードが使用してクライアント側の復号を実行する方法については、以下を参照してください。

• 例: クライアント側の暗号化 (オプション 1: AWS KMS– で管理されるカスタマーマスターキーの使用(AWS SDK for Java) ) (Amazon Simple Storage Service 開発者ガイド)

• 「AWS Key Management Service を使用した Amazon S3 の暗号化」(AWS 開発者ブログ)

Amazon Simple Storage Service (Amazon S3) でAWS KMS を使用する方法

このトピックでは、AWS KMS を使用して Amazon S3 データセンター内に保管されたデータを保護する方法について説明します。Amazon S3 で AWS KMS を使用するには 2 つの方法があります。カスタマー

279

Page 288: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドサーバー側の暗号化: SSE-KMS の使用

マスターキーとサーバー側の暗号化を使用してデータを保護することも、AWS KMS カスタマーマスターキー (CMK) と Amazon S3 暗号化クライアントを使用してクライアント側でデータを保護することもできます。

トピック• サーバー側の暗号化: SSE-KMS の使用 (p. 280)• Amazon S3 暗号化クライアントの使用 (p. 281)• 暗号化コンテキスト (p. 281)

サーバー側の暗号化: SSE-KMS の使用3 種類のサーバー側の暗号化モード (SSE-S3、SSE-C、または SSE-KMS) を使用して、Amazon S3 に保管されているデータを保護することができます。

• SSE-S3 の場合は、Amazon S3 がデータ暗号化キーとマスター暗号化キーを管理する必要があります。SSE-S3 の詳細については、「Amazon S3 で管理された暗号化キーによるサーバー側の暗号化(SSE-S3) を使用したデータの保護」を参照してください。

• SSE-C の場合は、ユーザーが暗号化キーを管理する必要があります。SSE-C の詳細については、「お客様が用意した暗号化キーによるサーバー側の暗号化 (SSE-C) を使用したデータの保護」を参照してください。

• SSE-KMS の場合、データキーは AWS が管理しますが、カスタマーマスターキー (p. 3) (CMK) はユーザーが AWS KMS で管理する必要があります。

このトピックの残りでは、AWS KMS で管理されるキーとサーバー側の暗号化を使用してデータを保護する方法 (SSE-KMS) について説明します。

Amazon S3 コンソールまたは API を使用して、暗号化をリクエストし、CMK を選択できます。コンソールで、適切なチェックボックスをオンにして暗号化を実行し、リストから CMK を選択します。AmazonS3 API の場合、GET または PUT リクエストの適切なヘッダーを設定することで、暗号化を指定し、CMKを選択します。詳細については、「AWS KMS で管理された暗号化キーによるサーバー側の暗号化 (SSE-KMS) を使用したデータの保護」を参照してください。

Important

Amazon S3 は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用して、Amazon S3でデータを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

カスタマー管理型の CMK (p. 4) を選択することも、アカウントにある Amazon S3 用の AWS 管理型の CMK (p. 4) を選択することもできます。ユーザーがデータの暗号化を選択した場合、AWS KMS とAmazon S3 は以下の処理を実行します。

• Amazon S3 は、プレーンテキストのデータキーと、指定された CMK で暗号化されたキーのコピーをリクエストします。

• AWS KMS は、データキーを作成し、マスターキーを使ってそれを暗号化し、プレーンテキストのデータキーと暗号化されたデータキーの両方を Amazon S3 に送信します。

• Amazon S3 は、データキーを使ってデータを暗号化し、使用後は、メモリからプレーンテキストのキーをできるだけ早く削除します。

• Amazon S3 は、暗号化されたデータキーを、暗号化されたデータのメタデータとして保存します。

データの復号をリクエストされると、Amazon S3 と AWS KMS は以下の操作を実行します。

• 暗号化されたデータキーを Amazon S3 が AWS KMS に送信します。

280

Page 289: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon S3 暗号化クライアントの使用

• AWS KMS が適切なマスターキーを使ってキーを復号し、Amazon S3 にプレーンテキストのキーを返します。

• Amazon S3 は、暗号化テキストを復号し、メモリからプレーンテキストのデータキーをできるだけ早く削除します。

Amazon S3 暗号化クライアントの使用アプリケーションで AWS SDK のAmazon S3 暗号化クライアントを使用して、オブジェクトを暗号化し、それを Amazon S3 にアップロードすることができます。この方法では、データをローカルに暗号化して、Amazon S3 サービスにデータを渡す際にデータの安全性を保証することができます。Amazon S3サービスは暗号化されたデータを受け取るだけで、データの暗号化または復号には関与しません。

Amazon S3 暗号化クライアントは、エンベロープ暗号化を使用してオブジェクトを暗号化します。ユーザーがデータをクライアントに渡して暗号化機能を呼び出すと、クライアントは処理の途中で AWS KMSを呼び出します。AWS KMS は、カスタマーマスターキー (p. 3) (CMK) の使用をユーザーが承認されているか確認し、承認されている場合は、新しいプレーンテキストのデータキーと、CMK を使って暗号化されたデータキーを返します。Amazon S3 暗号化クライアントは、プレーンテキストのキーを使用してデータを暗号化した後、メモリからそのキーを削除します。暗号化されたデータキーは Amazon S3 に送信され、暗号化されたデータと一緒に保存されます。

暗号化コンテキストAWS KMS と統合された各サービスでは、データキー、暗号化および復号化をリクエストするときに暗号化コンテキスト (p. 15)が指定されます。暗号化コンテキストは、データの整合性を調べるために AWSKMS で使用される追加の認証データ (AAD) です。

暗号化操作で暗号化コンテキストを指定すると、Amazon S3 が同じ暗号化コンテキストを復号オペレーションにも指定します。そうしないと、復号は失敗します。

SSE-KMS または Amazon S3 暗号化クライアントを使用して暗号化を実行する場合、AmazonS3 では暗号化コンテキストとしてバケットのパスが使用されます。CloudTrail ログファイルのrequestParameters フィールドで、暗号化コンテキストは次のようになります。

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::bucket_name/file_name"},

AWS Systems Manager Parameter Store で AWSKMS を使用する方法

AWS Systems Manager Parameter Store を使用すると、プレーンテキストのパラメータ名と暗号化されたパラメータ値を持つ secure string パラメータを作成できます。Parameter Store は AWS KMS を使用して、secure string パラメータのパラメータ値を暗号化および復号します。

Parameter Store を使用すると、値を持つパラメータとしてデータを作成、保存、管理することができます。Parameter Store にパラメータを作成し、それを設計したポリシーとアクセス許可の対象となる複数のアプリケーションやサービスで使用することができます。パラメータの値を変更する必要がある場合は、エラーが発生しやすい変更を多数のソースで管理するのではなく、1 つのインスタンスを変更します。Parameter Store はパラメータ名の階層構造をサポートしているため、特定の用途に応じてパラメータを選別できます。

281

Page 290: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド標準 Secure String パラメータの保護

secure string パラメータを作成して、機密データを管理することができます。Parameter Store は、AWSKMS カスタマーマスターキー (CMK) を使用して、secure string パラメータを作成または変更する際にそのパラメータ値を暗号化します。また、アクセス時に CMK を使用してパラメータ値を復号化します。Parameter Store がアカウント用に作成する AWS 管理の CMK (p. 4) を使用するか、独自のカスタマー管理 CMK (p. 4) を指定することができます。

Important

Parameter Store は、対称 CMK (p. 139) のみをサポートします。非対称 CMK (p. 139) を使用してパラメータを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

Parameter Store は、標準とアドバンストの 2 つの階層の secure string パラメータをサポートしています。標準パラメータは、4096 バイトを上限とし、ユーザーが指定した CMK を使って直接暗号化および復号化されます。アドバンストの secure string パラメータを暗号化および復号化するには、ParameterStore は AWS 暗号化 SDK を使用したエンベロープ暗号化を行います。標準の secure string パラメータをアドバンストパラメータに変換することはできますが、アドバンストパラメータを標準パラメータに変換することはできません。標準とアドバンストの secure string パラメータの違いの詳細については、AWSSystems Manager ユーザーガイド の「Systems Manager アドバンストパラメータについて」 を参照してください 。

トピック• 標準 Secure String パラメータの保護 (p. 282)• アドバンストの Secure String パラメータの保護 (p. 284)• パラメータ値を暗号化および復号するためのアクセス許可の設定 (p. 287)• Parameter Store の暗号化コンテキスト (p. 288)• Parameter Store での CMK 問題のトラブルシューティング (p. 290)

標準 Secure String パラメータの保護Parameter Store は暗号化オペレーションを実行しません。代わりに、AWS KMS を使用して、securestring パラメータ値を暗号化および復号します。標準の secure string パラメータ値を作成または変更すると、Parameter Store は AWS KMS暗号化オペレーションを呼び出します。このオペレーションでは、CMK を使用してデータキー (p. 5)を生成する代わりに、対称 AWS KMS CMK を直接使用してパラメータ値を暗号化します。

Parameter Store がパラメータ値を暗号化するために使用する CMK を選択できます。CMK を指定しない場合、Parameter Store は Systems Manager がアカウントに自動的に作成する AWS 管理の CMK を使用します。この CMK には aws/ssm エイリアスがあります。

アカウントのデフォルトの aws/ssm CMK を表示するには、AWS KMS API で DescribeKey オペレーションを使用します。次の例では、aws/ssm エイリアス名を持つ AWS Command Line Interface (AWS CLI) のdescribe-key コマンドを使用します。

aws kms describe-key --key-id alias/aws/ssm

標準の secure string パラメータを作成するには、Systems Manager API で PutParameter オペレーションを使用します。Tier パラメータを省略するか、デフォルトの値である Standard を指定します。値がSecureString の Type パラメータを含めます。AWS KMS CMK を指定するには、KeyId パラメータを使用します。デフォルトは、アカウントの AWS 管理 CMK である aws/ssm です。

Parameter Store は CMK とプレーンテキストパラメータ値を使用して AWS KMS Encrypt オペレーションを呼び出します。AWS KMS は暗号化したパラメータ値を返します。この値を Parameter Store はパラメータ名とともに保存します。

282

Page 291: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド標準 Secure String パラメータの保護

次の例では、AWS CLI で Systems Manager put-parameter コマンドとその --type パラメータを使用して、secure string パラメータを作成します。このコマンドはオプションの --tier および --key-id パラメータを省略するため、Parameter Store は標準の secure string パラメータを作成し、それを AWS 管理CMK を使って暗号化します。

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString

次の例では、--key-id パラメータを使用して類似したカスタマー管理の CMK (p. 4)を指定します。この例では、CMK ID を使用して CMK を識別していますが、任意の有効な CMK ID を使用することもできます。このコマンドは Tier パラメータ (--tier) を省略するため、Parameter Store は、アドバンストではなく標準の secure string パラメータを作成します。

aws ssm put-parameter --name param1 --value "secret" --type SecureString --key-id 1234abcd-12ab-34cd-56ef-1234567890ab

Parameter Store から secure string パラメータを取得すると、その値が暗号化されます。パラメータを取得するには、Systems Manager API で GetParameter オペレーションを使用します。

次の例では、AWS CLI で Systems Manager get-parameter コマンドを使用して、値を復号することなくParameter Store から MyParameter パラメータを取得します。

$ aws ssm get-parameter --name MyParameter

{ "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg/9E464VRo68cvwAAAG8wbQYJKoZIhvcNAQcGoGAwXgIBADBZBgkqhkiG9w0BBwEwHgYJYZZIAWUDBAEuMBEEDImYOw44gna0Jm00hAIBEIAsjgr7mum1EnnXzE3xM8bGle0oKYcfVCHtBkfjIeZGTgL6Hg0fSDnpMHdcSXY=" }}

返す前にパラメータ値を復号するには、GetParameter の WithDecryption パラメータを true に設定します。WithDecryption を使用すると、Parameter Store はユーザーに代わって AWS KMS Decrypt オペレーションを呼び出して、パラメータ値を復号します。その結果、GetParameter リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

$ aws ssm get-parameter --name MyParameter --with-decryption

{ "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "secret_value" }}

次のワークフローでは、Parameter Store が AWS KMS CMK を使って標準の secure string パラメータを暗号化および復号します。

標準パラメータの暗号化1. PutParameter を使って secure string パラメータを作成する場合、Parameter Store は、AWS KMS

に Encrypt リクエストを送信します。このリクエストには、プレーンテキストのパラメータ値、ユーザーが選択した CMK、Parameter Store 暗号化コンテキスト (p. 288)が含まれます。AWS KMS への送信時に、secure string パラメータのプレーンテキスト値は、Transport Layer Security (TLS) によって保護されます。

283

Page 292: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドアドバンストの Secure String パラメータの保護

2. AWS KMS は、指定の CMK と暗号化コンテキストを使ってパラメータ値を暗号化します。暗号化テキストを Parameter Store に返し、そこでパラメータ名と暗号化された値が保存されます。

標準パラメータの復号1. GetParameter リクエストに WithDecryption パラメータを含めると、Parameter Store は、暗号化

された secure string パラメータ値と Parameter Store 暗号化コンテキスト (p. 288)を含む Decryptリクエストを AWS KMS に送信します。

2. AWS KMS は、同じ CMK と指定の暗号化コンテキストを使って、暗号化された値を復号化します。これは、プレーンテキストの (復号化された) パラメータ値を Parameter Store に返します。送信中、プレーンテキストのデータは TLS によって保護されます。

3. Parameter Store は、プレーンテキストパラメータ値を GetParameter レスポンスで返します。

アドバンストの Secure String パラメータの保護PutParameter を使用してアドバンストの secure string パラメータを作成する場合、Parameter Storeは、AWS 暗号化 SDK と対称 AWS KMS カスタマーマスターキー (CMK) を使ったエンベロープ暗号化を行ってパラメータ値を保護します。アドバンストパラメータ値は、それぞれ一意のデータキーで暗号化され、そのデータキーは AWS KMS CMK で暗号化されます。アカウント用の AWS 管理 CMK (p. 4)(aws/ssm) か、任意のカスタマー管理 CMK を使用できます。

AWS 暗号化 SDK は、オープンソースのクライアント側ライブラリで、業界標準とベストプラクティスに沿ったデータの暗号化および復号化に役立ちます。これは、複数のプラットフォームと、コマンドラインインターフェイスを含む複数のプログラミング言語でサポートされています。ソースコードを表示し、GitHub での開発に貢献することができます。

各 secure string パラメータ値に対して、Parameter Store は AWS 暗号化 SDK を呼び出し、AWS KMS が生成する一意のデータキー (GenerateDataKey) を使ってパラメータ値を暗号化します。AWS 暗号化 SDKは、暗号化されたメッセージを Parameter Store に返します。このメッセージには、暗号化されたパラメータ値と、一意のデータキーの暗号化されたコピーが含まれます。Parameter Store は、暗号化された

284

Page 293: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドアドバンストの Secure String パラメータの保護

メッセージ全体を secure string パラメータ値に保存します。その後、アドバンスト secure string パラメータ値を取得すると、Parameter Store は AWS 暗号化 SDK を使ってパラメータ値を復号化します。これには、AWS KMS を呼び出して、暗号化されたデータを復号化する必要があります。

アドバンスト secure string パラメータを作成するには、Systems Manager API で PutParameter オペレーションを使用します。Tier パラメータの値を Advanced に設定します。値が SecureString の Typeパラメータを含めます。AWS KMS CMK を指定するには、KeyId パラメータを使用します。デフォルトは、アカウントの AWS 管理 CMK である aws/ssm です。

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString --tier Advanced

次の例では、--key-id パラメータを使用して類似したカスタマー管理の CMK (p. 4)を指定します。この例では、CMK の Amazon リソースネーム (ARN) を使用していますが、有効な CMK ID を使用することもできます。

aws ssm put-parameter --name MyParameter --value "secret_value" --type SecureString --tier Advanced --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

Parameter Store から secure string パラメータを取得すると、その値は、AWS 暗号化 SDK が返した暗号化されたメッセージとなります。パラメータを取得するには、Systems Manager API で GetParameter オペレーションを使用します。

次の例では、Systems Manager GetParameter オペレーションを使用して Parameter Store から値を復号化せずに MyParameter パラメータを取得します。

$ aws ssm get-parameter --name MyParameter

{ "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "AQECAHgnOkMROh5LaLXkA4j0+vYi6tmM17Lg/9E464VRo68cvwAAAG8wbQYJKoZIhvcNAQcGoGAwXgIBADBZBgkqhkiG9w0BBwEwHgYJYZZIAWUDBAEuMBEEDImYOw44gna0Jm00hAIBEIAsjgr7mum1EnnXzE3xM8bGle0oKYcfVCHtBkfjIeZGTgL6Hg0fSDnpMHdcSXY=" }}

返す前にパラメータ値を復号化するには、GetParameter の WithDecryption パラメータを true に設定します。WithDecryption を使用すると、Parameter Store はユーザーに代わって AWS KMS Decryptオペレーションを呼び出して、パラメータ値を復号します。その結果、GetParameter リクエストは、次の例に示すように、プレーンテキストパラメータ値を持つパラメータを返します。

$ aws ssm get-parameter --name MyParameter --with-decryption

{ "Parameter": { "Type": "SecureString", "Name": "MyParameter", "Value": "secret_value" }}

アドバンスト secure string パラメータを標準パラメータに変換することはできますが、標準 secure stringをアドバンストに変換することはできません。標準 secure string パラメータをアドバンスト secure stringに変換するには、Overwrite パラメータを使った PutParameter オペレーションを実行します。Typeは SecureString、 Tier 値は Advanced である必要があります。カスタマー管理 CMK を特定する

285

Page 294: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドアドバンストの Secure String パラメータの保護

KeyId パラメータの使用は任意です。このパラメータを省略すると、Parameter Store は、アカウント用の AWS 管理 CMK を使用します。標準パラメータの暗号化に使用した CMK とは異なる場合でも、プリンシパルが使用を許可されている任意の CMK を指定することができます。

Overwrite パラメータを使用すると、Parameter Store は AWS 暗号化 SDK を使用してパラメータ値を暗号化します。続いて、新たに暗号化されたメッセージを Parameter Store に保存します。

$ aws ssm put-parameter --name myStdParameter --value "secret_value" --type SecureString --tier Advanced --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --overwrite

次のワークフローでは、Parameter Store が AWS KMS CMK を使ってアドバンストの secure string パラメータを暗号化および復号化します。

アドバンストパラメータの暗号化1. PutParameter を使用してアドバンスト secure string パラメータを作成すると、Parameter Store は

AWS 暗号化 SDK と AWS KMS を使用してパラメータ値を暗号化します。Parameter Store はパラメータ値、ユーザーが指定した AWS KMS CMK、および Parameter Store 暗号化コンテキスト (p. 288)を使用して AWS 暗号化 SDK を呼び出します。

2. AWS 暗号化 SDK は、ユーザーが指定した CMK の識別子と Parameter Store 暗号化コンテキストを含む GenerateDataKey リクエストを AWS KMS に送信します。AWS KMS は、一意のデータキーのコピーを 2 つ (プレーンテキスト形式と CMK で暗号化したもの) 返します。(暗号化コンテキストは、データキーを暗号化するときに使用します)。

3. AWS 暗号化 SDK はプレーンテキストのデータキーを使ってパラメータ値を暗号化し、暗号化されたメッセージを戻します。このメッセージは、暗号化されたパラメータ値、暗号化されたデータキー、そして Parameter Store 暗号化コンテキストなどのその他のデータを含みます。

4. Parameter Store は、暗号化されたメッセージをパラメータ値として保存します。

286

Page 295: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドパラメータ値を暗号化および復

号するためのアクセス許可の設定

アドバンストパラメータの復号1. アドバンスト secure string パラメータを取得するための GetParameter リクエスト

に、WithDecryption パラメータを含めることができます。これを行うと、Parameter Store は暗号化されたメッセージをパラメータ値から AWS 暗号化 SDK の復号化メソッドに渡します。

2. AWS 暗号化 SDK は KMS Decrypt オペレーションを呼び出します。これは、暗号化されたメッセージから暗号化されたデータキーと Parameter Store 暗号化コンテキストを渡します。

3. AWS KMS は、CMK と Parameter Store 暗号化コンテキストを使って、暗号化されたデータキーを復号化します。続いて、プレーンテキストの (復号化された) データキーを AWS 暗号化 SDK に返します。

4. AWS 暗号化 SDK は、プレーンテキストのデータキーを使ってパラメータ値を復号化し、プレーンテキストのパラメータ値を Parameter Store に返します。

5. Parameter Store は暗号化コンテキストを検証し、プレーンテキストパラメータ値を GetParameter レスポンスで返します。

パラメータ値を暗号化および復号するためのアクセス許可の設定ユーザーが標準 secure string パラメータの値を暗号化するには、kms:Encrypt アクセス許可が必要です。ユーザーがアドバンスト secure string パラメータの値を暗号化するには、kms:GenerateDataKeyアクセス許可が必要です。ユーザーがいずれかのタイプの secure string パラメータの値を復号化するには、kms:Decrypt アクセス許可が必要です。

IAM ポリシーを使用し、ユーザーに対して Systems Manager PutParameter および GetParameter オペレーションを呼び出すためのアクセス許可を許可または拒否できます。

カスタマー管理の CMK を使用して secure string パラメータ値を暗号化している場合は、IAM ポリシーとキーポリシーを使用して暗号化および復号化のアクセス許可を管理できます。ただし、デフォルトのaws/ssm CMK に対してアクセス許可ポリシーを確立することはできません。カスタマー管理の CMK へのアクセスを制御する方法の詳細については、「AWS KMS の認証とアクセスコントロール (p. 51)」を参照してください。

次の例は、標準 secure string パラメータ用に設計された IAM ポリシーです。このポリシーによって、ユーザーは、FinancialParameters パスのすべてのパラメータに対して Systems Manager PutParameterオペレーションの呼び出しを許可されます。また、ユーザーは、例にあるカスタマー管理 CMK で AWSKMS Encrypt オペレーションを呼び出すこともできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/FinancialParameters/*" }, { "Effect": "Allow", "Action": [ "kms:Encrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ]

287

Page 296: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドParameter Store の暗号化コンテキスト

}

次の例は、アドバンスト secure string パラメータ用に設計された IAM ポリシーです。このポリシーによって、ユーザーは、ReservedParameters パスのすべてのパラメータに対して Systems ManagerPutParameter オペレーションの呼び出しを許可されます。また、ユーザーは、例にあるカスタマー管理CMK で AWS KMS GenerateDataKey オペレーションを呼び出すこともできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:PutParameter" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/ReservedParameters/*" }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ]}

最後の例も、標準またはアドバンスト secure string パラメータに使用できる IAM ポリシーを示します。このポリシーによって、ユーザーは、ITParameters パスのすべてのパラメータに対して SystemsManager GetParameter オペレーション (および関連するオペレーション) の呼び出しを許可されます。また、ユーザーは、例にあるカスタマー管理 CMK で AWS KMS Decrypt オペレーションを呼び出すこともできます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameter*" ], "Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/ITParameters/*" }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ]}

Parameter Store の暗号化コンテキスト暗号化コンテキスト は、一連のキーと値のペアを含む任意非シークレットデータです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

288

Page 297: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドParameter Store の暗号化コンテキスト

また、暗号化コンテキストを使用して、監査レコードおよびログ内の暗号化オペレーションを識別することもできます。暗号化コンテキストは、AWS CloudTrail ログなどのログにプレーンテキストで表示されます。

AWS 暗号化 SDK も暗号化コンテキストを取りますが、その処理方法は異なります。Parameter Store が暗号化メソッドの暗号化コンテキストを指定します。AWS 暗号化 SDK は、暗号的に暗号化コンテキストを暗号化されたデータにバインドします。また、暗号化されたメッセージを返す際、ヘッダーに暗号化コンテキストをプレーンテキストとして含めます。ただし、AWS KMS とは異なり、AWS 暗号化 SDK の復号化メソッドは、入力として暗号化コンテキストを取りません。その代わり、AWS 暗号化 SDK は、データを復号化する際に暗号化されたメッセージから暗号化コンテキストを取得します。Parameter Store は、暗号化コンテキストに指定の値が含まれていることを検証してから、プレーンテキストパラメータ値を返します。

Parameter Store は、暗号化オペレーションで次の暗号化コンテキストを使用します。

• キー: PARAMETER_ARN• 値: 暗号化されるパラメータの Amazon リソースネーム (ARN)。

暗号化コンテキストの形式は以下のとおりです。

"PARAMETER_ARN":"arn:aws:ssm:<REGION_NAME>:<ACCOUNT_ID>:parameter/<parameter-name>"

たとえば Parameter Store は、サンプルの AWS アカウントとリージョンで、MyParameter パラメータを暗号化および復号する呼び出しにこの暗号化コンテキストを含めます。

"PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter"

パラメータが Parameter Store 階層パスにある場合、パスと名前は暗号化コンテキストに組み込まれます。たとえば、サンプルの AWS アカウントとリージョンのパス /ReadableParameters でMyParameter パラメータを暗号化および復号化するときに、この暗号化コンテキストが使用されます。

"PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/ReadableParameters/MyParameter"

正しい暗号化コンテキストと、Systems Manager GetParameter オペレーションが返す暗号化されたパラメータ値を使用して AWS KMS Decrypt オペレーションを呼び出し、暗号化された securestring パラメータ値を復号化することができます。ただし、Parameter Store パラメータ値の復号化には、GetParameter オペレーションと WithDecryption パラメータを使用することをお勧めします。

暗号化コンテキストを IAM ポリシーに含めることもできます。たとえば、ユーザーが特定の 1 つのパラメータ値またはパラメータ値のセットのみを復号化できるようにすることができます。

次の例の IAM ポリシーステートメントでは、ユーザーは MyParameter パラメータの値を取得し、指定された CMK を使用してその値を復号できます。ただし、アクセス許可は、暗号化コンテキストが指定された文字列と一致する場合にのみ適用されます。これらのアクセス許可は他のパラメータや CMK には適用されず、暗号化コンテキストが文字列と一致しない場合、GetParameter の呼び出しは失敗します。

このようなポリシーステートメントを使用するときは、事前にサンプルの ARN を有効な値で置き換えてください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameter*" ],

289

Page 298: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドParameter Store での CMK 問題のトラブルシューティング

"Resource": "arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter", }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "Condition": { "StringEquals": { "kms:EncryptionContext:PARAMETER_ARN":"arn:aws:ssm:us-west-2:111122223333:parameter/MyParameter" } } } ]}

Parameter Store での CMK 問題のトラブルシューティングsecure string パラメータに対してオペレーションを実行するには、Parameter Store は、指定したオペレーションに指定した AWS KMS CMK を使用できる必要があります。CMK に関する Parameter Store の失敗の大部分は、次の問題によって引き起こされます。

• アプリケーションが使用している認証情報には、CMK で指定されたアクションを実行するアクセス許可がありません。

このエラーを解決するには、異なる認証情報を使用してアプリケーションを実行するか、オペレーションを妨げている IAM またはキーポリシーを修正します。AWS KMS IAM とキーポリシーのヘルプについては、「AWS KMS の認証とアクセスコントロール (p. 51)」を参照してください。

• CMK が見つかりません。

これは、通常 CMK に誤った識別子を使用した場合に発生します。CMK の正しい識別子 (p. 36)を見つけて、再度コマンドを実行してください。

• CMK が有効になっていません。これが発生すると、Parameter Store は AWS KMS からの詳細なエラーメッセージとともに InvalidKeyId 例外を返します。CMK のステータスが Disabled の場合、有効にします (p. 46)。Pending Import の場合は、インポート手順 (p. 156)を完了してください。キーステータスが Pending Deletion の場合は、キーの削除をキャンセルするか (p. 172)、別の CMK を使用します。

AWS KMS コンソールの CMK のキーステータス (p. 236)を確認するには、[カスタマー管理型のキー] または [AWS 管理型のキー] ページで、ステータス列 (p. 26)をクリックします。AWS KMS APIを使用してCMK のステータスを確認するには、DescribeKey オペレーションを使用します。

Amazon WorkMail で AWS KMS を使用する方法このトピックでは、Amazon WorkMail で AWS KMS を使用して E メールメッセージを暗号化する方法について説明します。

トピック• Amazon WorkMail の概要 (p. 291)• Amazon WorkMail による暗号化 (p. 291)• CMK の使用の許可 (p. 294)

290

Page 299: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon WorkMail の概要

• Amazon WorkMail の暗号化コンテキスト (p. 296)• Amazon WorkMail と AWS KMS のやり取りのモニタリング (p. 296)

Amazon WorkMail の概要Amazon WorkMail はセキュリティに優れたマネージド型の企業向け E メールおよびカレンダーサービスであり、デスクトップとモバイルの既存の E メールクライアントに対応しています。Amazon WorkMail 組織を作成し、所有している 1 つ以上の E メールドメインにその組織を割り当てることができます。その後、組織内の E メールユーザーとディストリビューショングループのメールボックスを作成できます。

Amazon WorkMail は、Amazon WorkMail 組織内全体のメールボックスにあるすべてのメールを、ディスクに書き込まれる前に透過的に暗号化し、ユーザーがメッセージにアクセスする際に透過的に復号します。暗号化を無効にするオプションはありません。メッセージを保護する暗号化キーを保護するために、Amazon WorkMail は AWS Key Management Service (AWS KMS) と統合されています。

Amazon WorkMail では、ユーザーが署名または暗号化された E メールを送信できるオプションも用意されています。この暗号化機能は AWS KMS を使用していません。

Amazon WorkMail による暗号化Amazon WorkMail では、各組織に複数のメールボックスを含め、組織のユーザーごとに 1 つ含めることができます。E メール、カレンダーの項目などのすべてのメッセージはユーザーのメールボックスに保存されます。

Amazon WorkMail 組織のメールボックス内にあるコンテンツを保護するために、Amazon WorkMail はメールボックス内のすべてのメッセージを、ディスクに書き込まれる前に暗号化します。お客様から提供された情報がプレーンテキストで保存されることはありません。

各メッセージは、一意のデータ暗号化キーで暗号化されます。メッセージキーは、そのメールボックスでのみ使用される一意の暗号化キーであるメールボックスキーで保護されています。メールボックスキーは、組織の AWS KMS カスタマーマスターキー (CMK) で暗号化されるため、AWS KMS が暗号化されないまま残されることは決してありません。次の図では、AWS KMS における、暗号化されたメッセージ、暗号化されたメッセージキー、暗号化されたメールボックスキー、組織の CMK の関係を示しています。

291

Page 300: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon WorkMail による暗号化

組織の CMKAmazon WorkMail 組織を作成する際、その組織の AWS KMS カスタマーマスターキー (CMK) を選択できます。この CMK は組織内のすべてのメールボックスキーを保護します。

組織の作成に高速セットアップの手順を使用する場合、Amazon WorkMail は AWS アカウントの AmazonWorkMail (aws/workmail) にAWS 管理 CMK (p. 3) を使用します。標準セットアップを使用する場合は、Amazon WorkMail に AWS 管理 CMK か、所有および管理するカスタマー管理 CMK (p. 3) のいずれかを選択できます。各組織に同じ CMK を使用するか異なる CMK を使用するかを選択できますが、一度選択した CMK を変更することはできません。

Important

Amazon WorkMail は、対称 CMK のみをサポートします。非対称 CMK を使用して、AmazonWorkMail でデータを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

組織の CMK を見つけるには、AWS KMS への呼び出しを記録する AWS CloudTrail ログエントリを使用します。

各メールボックスの一意の暗号化キーAmazon WorkMail は新しいメールボックスを作成する際、メールボックスに一意の 256 ビットAdvanced Encryption Standard (AES) 対称暗号化キーを AWS KMS の外部に作成します (メールボック

292

Page 301: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon WorkMail による暗号化

スキー)。Amazon WorkMail はメールボックスキーを使用してメールボックス内の各メッセージの暗号化キーを保護します。

メールボックスキーを保護するために、Amazon WorkMail は AWS KMS を呼び出して組織の CMK でメールボックスキーを暗号化します。その後、メールボックスのメタデータに暗号化されたメールボックスキーを保存します。

Note

Amazon WorkMail は対称メールボックス暗号化キーを使用してメッセージキーを保護します。以前は、Amazon WorkMail は非対称キーペアを使用して各メールボックスを保護していました。パブリックキーを使用して各メッセージキーを暗号化し、プライベートキーで復号していました。プライベートメールボックスキーは組織の CMK で保護されていました。既存のメールボックスは今も非対称メールボックスキーペアを使用している場合があります。この変更により、メールボックスやそのメッセージのセキュリティに影響が生じることはありません。

各メッセージの一意の暗号化キーメールボックスにメッセージが追加されると、Amazon WorkMail はそのメッセージの一意の 256 ビットAES 対称暗号化キーを AWS KMS の外部に生成します。このメッセージキーを使用してメッセージを保護します。Amazon WorkMail はメールボックスキーでメッセージキーを暗号化し、暗号化されたメッセージキーをメッセージとともに保存します。次に、組織の CMK でメールボックスキーを暗号化します。

新しいメールボックスの作成Amazon WorkMail は新しいメールボックスを作成する際、次の手順を使用して、暗号化されたメッセージを保持するためのメールボックスを準備します。

• Amazon WorkMail はそのメールボックスの一意の 256 ビット AES 対称暗号化キーを AWS KMS の外部に生成します。

• Amazon WorkMail は AWS KMS 暗号化オペレーションを呼び出します。メールボックスキーと組織のカスタマーマスターキー (CMK) の識別子を渡します。AWS KMS は CMK で暗号化されたメールボックスキーの暗号化テキストを返します。

• Amazon WorkMail は暗号化されたメールボックスキーをメールボックスのメタデータとともに保存します。

メールボックスメッセージの暗号化メッセージを暗号化するために、Amazon WorkMail は次の手順を使用します。

1. Amazon WorkMail はメッセージに一意の 256 ビット AES 対称キーを生成します。プレーンテキストのメッセージキーと Advanced Encryption Standard (AES) アルゴリズムを使用して、AWS KMS の外部でメッセージを暗号化します。

2. メールボックスキーでメッセージを保護するために、Amazon WorkMail は、常に暗号化された形式で保存されているメールボックスキーを復号する必要があります。

Amazon WorkMail は AWS KMS 復号オペレーションを呼び出し、暗号化されたメールボックスキーで渡します。AWS KMS は組織の CMK を使用してメールボックスキーを復号し、Amazon WorkMail にプレーンテキストのメールボックスキーを返します。

3. Amazon WorkMail では、プレーンテキストのメールボックスキーと Advanced Encryption Standard(AES) アルゴリズムを使用して、AWS KMS の外部でメッセージキーを暗号化します。

4. Amazon WorkMail は暗号化されたメッセージキーを暗号化されたメッセージのメタデータに保存し、復号に利用できるようにします。

293

Page 302: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の許可

メールボックスメッセージの復号Amazon WorkMail は、メッセージを復号するために次のプロセスを使用します。

1. Amazon WorkMail は AWS KMS 復号オペレーションを呼び出し、暗号化されたメールボックスキーで渡します。AWS KMS は組織の CMK を使用してメールボックスキーを復号し、Amazon WorkMail にプレーンテキストのメールボックスキーを返します。

2. Amazon WorkMail では、プレーンテキストのメールボックスキーと Advanced Encryption Standard(AES) アルゴリズムを使用して、AWS KMS の外部で暗号化されたメッセージキーを復号します。

3. Amazon WorkMail はプレーンテキストのメッセージキーを使用して、暗号化されたメッセージを復号します。

メールボックスキーのキャッシュパフォーマンスを向上し AWS KMS への呼び出しを最小限に抑えるために、Amazon WorkMail はクライアントそれぞれのプレーンテキストのメールボックスキーを最長 1 分間ローカルにキャッシュします。キャッシュ期間の終了時に、メールボックスキーは削除されます。キャッシュ期間中にクライアントのメールボックスキーが必要な場合、Amazon WorkMail は AWS KMS を呼び出すのではなく、キャッシュからメールボックスキーを取得できます。メールボックスキーはキャッシュで保護されており、プレーンテキストでディスクに書き込まれることはありません。

CMK の使用の許可Amazon WorkMail は、暗号化オペレーションでカスタマーマスターキー (CMK) を使用する際、メールボックス管理者の代理として機能します。

代理として AWS KMS カスタマーマスターキー (CMK) を使用するには、管理者には次のアクセス許可が必要になります。IAM ポリシーまたはキーポリシーで、これらの必要なアクセス許可を指定できます。

• kms:Encrypt

• kms:Decrypt

• kms:CreateGrant

Amazon WorkMail から実行されるリクエストにのみ CMK が使用されるようにするには、値workmail.<region>.amazonaws.com で kms:ViaService 条件キー (p. 119)を使用できます。

また、暗号化オペレーションに CMK を使用する条件として、暗号化コンテキスト (p. 296)でキーまたは値を使用することもできます。たとえば、IAM またはキーポリシードキュメントで文字列条件演算子を使用するか、許可で許可の制約を使用できます。

AWS 管理 CMK のキーポリシー

Amazon WorkMail 用の AWS 管理 CMK のキーポリシーにより、Amazon WorkMail がユーザーに代わってリクエストを行うときのみに、指定されたオペレーションに CMK を使用するアクセス許可がユーザーに付与されます。このキーポリシーでは、ユーザーが CMK を直接使用することは許可されません。

このキーポリシーは、すべての AWS 管理キーと同様に、サービスによって確立されます。キーポリシーは変更できませんが、いつでも表示できます。詳細については、「キーポリシーの表示 (p. 67)」を参照してください。

このキーポリシーのポリシーステートメントには次の効果があります。

• アカウントおよびリージョンのユーザーに、代理で Amazon WorkMail からリクエストを受信したときのみに、CMK を使用して暗号化オペレーションおよび権限付与の作成を実行できるようにします。kms:ViaService 条件キーで、この制限を適用します。

294

Page 303: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCMK の使用の許可

• AWS アカウントが、CMK プロパティを表示し、許可を取り消すことをユーザーに許可する IAM ポリシーを作成できるようにします。

以下に示すのは、Amazon WorkMail 用の AWS 管理 CMK のキーポリシー例です。

{ "Version" : "2012-10-17", "Id" : "auto-workmail-1", "Statement" : [ { "Sid" : "Allow access through WorkMail for all principals in the account that are authorized to use WorkMail", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:Decrypt", "kms:CreateGrant", "kms:ReEncrypt*", "kms:DescribeKey", "kms:Encrypt" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "workmail.us-east-1.amazonaws.com", "kms:CallerAccount" : "111122223333" } } }, { "Sid" : "Allow direct access to key metadata to the account", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : [ "kms:Describe*", "kms:List*", "kms:Get*", "kms:RevokeGrant" ], "Resource" : "*" } ]}

Amazon WorkMail への権限付与を使用する

キーポリシーに加えて、Amazon WorkMail では各組織の CMK にアクセス許可を付与する権限を使用します。アカウントの CMK の権限付与を表示するには、ListGrants オペレーションを使用します。

Amazon WorkMail は権限を使用して、組織の CMK に次のアクセス許可を付与します。

• kms:Encrypt アクセス許可を追加して、Amazon WorkMail がメールボックスキーを暗号化できるようにします。

• kms:Decrypt アクセス許可を追加して、Amazon WorkMail が CMK を使用してメールボックスキーを復号できるようにします。メールボックスのメッセージを読み取るリクエストが、メッセージを読むユーザーのセキュリティコンテキストを使用するため、Amazon WorkMail は権限付与でこのアクセス許可を必要とします。リクエストは AWS アカウントの認証情報を使用しません。組織の CMK を選択する際に Amazon WorkMail はこの権限付与を作成します。

権限付与を作成するために、Amazon WorkMail は組織を作成したユーザーに代わって CreateGrantを呼び出します。権限付与を作成するアクセス許可はキーポリシーから付与されます。このポリシーは、Amazon WorkMail が承認されたユーザーの代わりにリクエストを作成する際に、アカウントのユーザーが組織の CMK で CreateGrant を呼び出せるようにします。

また、キーポリシーはアカウントルートが AWS 管理キーで権限付与を解除することを許可します。ただし権限付与を解除すると、Amazon WorkMail はメールボックス内の暗号化されたデータを復号できません。

295

Page 304: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon WorkMail の暗号化コンテキスト

Amazon WorkMail の暗号化コンテキスト暗号化コンテキスト (p. 15)は、任意のシークレットデータを含まない、一連のキーと値のペアです。データを暗号化するリクエストに暗号化コンテキストを組み込むと、AWS KMS は暗号化コンテキストを暗号化されたデータに暗号化してバインドします。データを復号化するには、同じ暗号化コンテキストに渡す必要があります。

Amazon WorkMail は、すべての AWS KMS 暗号化オペレーションで同じ暗号化コンテキストフォーマットを使用します。暗号化コンテキストを使用して、AWS CloudTrail などの監査レコードやログで、暗号化オペレーションを確認できます。また、ポリシーと許可で認可の条件として確認することもできます。

AWS KMS に対する暗号化リクエストと復号リクエストで、Amazon WorkMail は、キーがaws:workmail:arn であり値が組織の Amazon リソースネーム (ARN) である暗号化コンテキストを使用します。

"aws:workmail:arn":"arn:aws:workmail:region:account ID:organization/organization ID"

たとえば、次の暗号化コンテキストには 米国東部 (オハイオ) (us-east-2) リージョンの組織の ARN のサンプルが含まれています。

"aws:workmail:arn":"arn:aws:workmail:us-east-2:111122223333:organization/m-68755160c4cb4e29a2b2f8fb58f359d7"

Amazon WorkMail と AWS KMS のやり取りのモニタリングAWS CloudTrail と Amazon CloudWatch Logs を使用して、Amazon WorkMail がユーザーに代わってAWS KMS に送信するリクエストを追跡できます。

暗号化新しいメールボックスを作成する際、Amazon WorkMail はメールボックスキーを生成して AWS KMS を呼び出し、メールボックスキーを暗号化します。Amazon WorkMail は暗号化リクエストをプレーンテキストのメールボックスキーおよび Amazon WorkMail 組織の CMK の識別子とともに AWS KMS に送信します。

Encrypt オペレーションを記録するイベントは、次のようなサンプルイベントになります。ユーザーはAmazon WorkMail サービスです。パラメータには Amazon WorkMail 組織の CMK ID (keyId) および暗号化コンテキストが含まれます。また、Amazon WorkMail はメールボックスキーで渡しますが、CloudTrailログには記録されません。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "workmail.eu-west-1.amazonaws.com" }, "eventTime": "2019-02-19T10:01:09Z", "eventSource": "kms.amazonaws.com", "eventName": "Encrypt", "awsRegion": "eu-west-1", "sourceIPAddress": "workmail.eu-west-1.amazonaws.com", "userAgent": "workmail.eu-west-1.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:workmail:arn": "arn:aws:workmail:eu-west-1:111122223333:organization/m-c6981ff7642446fa8772ba99c690e455"

296

Page 305: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon WorkMail と AWS KMS のやり取りのモニタリング

}, "keyId": "arn:aws:kms:eu-west-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" }, "responseElements": null, "requestID": "76e96b96-7e24-4faf-a2d6-08ded2eaf63c", "eventID": "d5a59c18-128a-4082-aa5b-729f7734626a", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:eu-west-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333", "sharedEventID": "d08e60f1-097e-4a00-b7e9-10bc3872d50c"}

復号メールボックスのメッセージを追加、表示、または削除する際、Amazon WorkMail は AWS KMS にメールボックスキーを復号するよう依頼します。Amazon WorkMail は AWS KMS に復号リクエストを暗号化メールボックスキーおよび Amazon WorkMail 組織の CMK の識別子とともに送信します。

Decrypt オペレーションを記録するイベントは、次のようなサンプルイベントになります。ユーザーはAmazon WorkMail サービスです。パラメータには暗号化メールボックスキー (暗号化テキストの blob 形式) が含まれ、ログおよび Amazon WorkMail 組織の暗号化コンテキストには記録されません。AWS KMSは暗号化テキストから CMK の ID を取得します。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSService", "invokedBy": "workmail.eu-west-1.amazonaws.com" }, "eventTime": "2019-02-20T11:51:10Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "eu-west-1", "sourceIPAddress": "workmail.eu-west-1.amazonaws.com", "userAgent": "workmail.eu-west-1.amazonaws.com", "requestParameters": { "encryptionContext": { "aws:workmail:arn": "arn:aws:workmail:eu-west-1:111122223333:organization/m-c6981ff7642446fa8772ba99c690e455" } }, "responseElements": null, "requestID": "4a32dda1-34d9-4100-9718-674b8e0782c9", "eventID": "ea9fd966-98e9-4b7b-b377-6e5a397a71de", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:eu-west-1:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall",

297

Page 306: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon WorkSpaces

"recipientAccountId": "111122223333", "sharedEventID": "241e1e5b-ff64-427a-a5b3-7949164d0214"}

Amazon WorkSpaces で AWS KMS を使用する方法

Amazon WorkSpaces を使用して、エンドユーザーごとにクラウドベースのデスクトップ (WorkSpace)をプロビジョニングできます。新しい WorkSpace を起動するとき、そのボリュームの暗号化を選択し、暗号化に使用する AWS KMS カスタマーマスターキー (p. 3) (CMK) を決定することができます。Amazon WorkSpaces ([aws/workspaces]) 用の AWS マネージド CMK (p. 4) または対称カスタマー管理 CMK (p. 4)を選択できます。

Important

Amazon WorkSpaces は、対称 CMK のみをサポートします。非対称 CMK を使用して、AmazonWorkSpaces 内のボリュームを暗号化することはできません。CMK が対称か非対称かを判断する方法については、「対称 CMK と非対称 CMK の識別 (p. 37)」を参照してください。

暗号化されたボリュームを使用して WorkSpace を作成する方法の詳細については、『AmazonWorkSpaces Administration Guide』の「WorkSpace の暗号化」を参照してください。

トピック• Amazon WorkSpaces を使用した AWS KMS 暗号化の概要 (p. 298)• Amazon WorkSpaces の暗号化コンテキスト (p. 299)• ユーザーに代わって CMK を使用するためのアクセス許可を Amazon WorkSpaces に付与す

る (p. 299)

Amazon WorkSpaces を使用した AWS KMS 暗号化の概要暗号化されたボリュームを使用して WorkSpace を作成すると、Amazon WorkSpaces は Amazon ElasticBlock Store (Amazon EBS) を使用してそれらのボリュームを作成および管理します。どちらのサービスも、KMS カスタマーマスターキー (CMK) を使用して暗号化されたボリュームを操作します。EBS ボリュームの暗号化の詳細については、以下のドキュメントを参照してください。

• このガイドの「Amazon Elastic Block Store (Amazon EBS) で AWS KMS を使用する方法 (p. 256)」• 『Windows インスタンスの Amazon EC2 ユーザーガイド』の「Amazon EBS の暗号化」

暗号化されたボリュームを使用する WorkSpace を起動すると、エンドツーエンドの処理が次のように行われます。

1. 暗号化に使用する CMK と、WorkSpace のユーザーとディレクトリを指定します。このアクションにより、Amazon WorkSpaces にこの WorkSpace でのみ —(つまり、指定されたユーザーとディレクトリに関連付けられた WorkSpace でのみ) CMK の使用を許可する許可 (p. 123)が作成されます。

2. Amazon WorkSpaces は、WorkSpace の暗号化された EBS ボリュームを作成し、使用する CMK とボリュームのユーザーおよびディレクトリを指定します (ステップ Step 1 (p. 298) で指定したのと同じ情報)。このアクションにより、Amazon EBS にこの WorkSpace とボリュームでのみ —(つまり、指定されたユーザーとディレクトリに関連付けられた WorkSpace、および指定されたボリュームでのみ) CMK の使用を許可する許可 (p. 123)が作成されます。

298

Page 307: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon WorkSpaces の暗号化コンテキスト

3. Amazon EBS は、CMK によって暗号化されたボリュームデータキーをリクエストし、WorkSpaceユーザーの Sid とディレクトリ ID、ボリューム ID を暗号化コンテキストとして指定します。

4. AWS KMS は、新しいデータキーを作成して CMK によって暗号化し、暗号化されたデータキーをAmazon EBS に送信します。

5. Amazon WorkSpaces は Amazon EBS を使用して暗号化されたボリュームを WorkSpace にアタッチします。Amazon EBS は、Decrypt リクエストを使って暗号化されたデータキーを AWS KMS に送信し、WorkSpace ユーザーの Sid とディレクトリ ID、暗号化コンテキスト (p. 299)として使用するボリューム ID を指定します。

6. AWS KMS は、CMK を使用してデータキーを復号化し、プレーンテキストデータキーを AmazonEBS に送信します。

7. Amazon EBS は、プレーンテキストデータキーを使用して、暗号化されたボリュームに入出力されるすべてのデータを暗号化します。Amazon EBS は、ボリュームが WorkSpace にアタッチされている限り、プレーンテキストデータキーをメモリ内に保持します。

8. WorkSpace を再起動または再構築した場合、Amazon EBS は後で使用できるように暗号化されたデータキー (Step 4 (p. 299) で受け取ったデータキー) とボリュームメタデータを保存します。

9. AWS マネジメントコンソール を使用して WorkSpace を削除すると (または、Amazon WorkSpacesAPI で TerminateWorkspaces アクションを使用すると)、Amazon WorkSpaces と Amazon EBS はその WorkSpace での CMK の使用を許可していた許可を削除します。

Amazon WorkSpaces の暗号化コンテキストAmazon WorkSpaces は、カスタマーマスターキー (CMK) を暗号化操作(Encrypt、Decrypt、GenerateDataKey など) に直接使用することがありません。つまり、AmazonWorkSpaces は暗号化コンテキスト (p. 15)が含まれる AWS KMS にリクエストを送信しません。ただし、Amazon EBS が、WorkSpace の暗号化されたボリュームに対して暗号化されたデータキーをリクエストするとき (「Amazon WorkSpaces を使用した AWS KMS 暗号化の概要 (p. 298)」のStep3 (p. 299)) と、そのデータキーのプレーンテキストコピーをリクエストするとき (Step 5 (p. 299)) には、リクエストに暗号化コンテキストが含められます。暗号化コンテキストは、データの整合性を保証するために AWS KMS で使用される追加の認証データ (AAD) を提供します。また、暗号化コンテキストがAWS CloudTrail ログファイルに書き込まれるため、特定のカスタマーマスターキー (CMK) が使用された理由を理解するうえで役立ちます。Amazon EBS では、暗号化コンテキストとして次のものが使用されます

• WorkSpace に関連付けられている AWS Directory Service ユーザーの sid• WorkSpace に関連付けられた AWS Directory Service ディレクトリのディレクトリ ID• 暗号化されたボリュームのボリューム ID

次の例は、Amazon EBS が使用する暗号化コンテキストの JSON 表現を示しています。

{ "aws:workspaces:sid-directoryid": "[S-1-5-21-277731876-1789304096-451871588-1107]@[d-1234abcd01]", "aws:ebs:id": "vol-1234abcd"}

ユーザーに代わって CMK を使用するためのアクセス許可を Amazon WorkSpaces に付与するAmazon WorkSpaces の AWS 管理の CMK (aws/workspaces) またはカスタマー管理の CMK でワークスペースデータを保護することができます。カスタマー管理 CMK を使用する場合は、アカウントのAmazon WorkSpaces 管理者に代わって CMK を使用する Amazon WorkSpaces アクセス許可を与える必

299

Page 308: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドユーザーに代わって CMK を使用するためのアクセス許可を Amazon WorkSpaces に付与する

要があります。Amazon WorkSpaces の AWS 管理 CMK には、デフォルトで必要なアクセス許可が設定されます。

Amazon WorkSpaces で使用するための顧客管理 CMK を準備するには、次の手順を実行します。

1. WorkSpace 管理者を CMK のキーポリシーでキーユーザーのリストに追加する (p. 300)2. IAM ポリシーによって WorkSpace 管理者に追加の権限を付与する (p. 300)

Amazon WorkSpaces 管理者は、Amazon WorkSpaces を使用するためのアクセス許可も必要とします。これらの権限の詳細については、『Amazon WorkSpaces Administration Guide』の「AmazonWorkSpaces リソースへのアクセスの制御」を参照してください。

パート 1: CMK のキーユーザーに WorkSpace 管理者を追加するAmazon WorkSpaces 管理者に必要なアクセス許可を付与するには、AWS マネジメントコンソール または AWS KMS API を使用できます。

CMK のキーユーザーとして WorkSpace 管理者を追加するには (コンソール)

1. AWS マネジメントコンソール にサインインし、AWS Key Management Service (AWS KMS) コンソール (https://console.aws.amazon.com/kms) を開きます。

2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。3. ナビゲーションペインで、[Customer managed keys (カスタマー管理型のキー)] を選択します。4. カスタマー管理 CMK のキー ID またはエイリアスを選択します。5. [Key policy (キーポリシー)] セクションの [Key users (キーユーザー)] で、[Add (追加)] を選択します。6. IAM ユーザーとロールのリストで、WorkSpace 管理者に対応するユーザーとロールを選択し、

[Attach] を選択します。

CMK のキーユーザーとして WorkSpace 管理者を追加するには (AWS KMS API)

1. GetKeyPolicy オペレーションを使用して既存のキーポリシードキュメントを取得し、キーポリシードキュメントをファイルに保存します。

2. 任意のテキストエディタでポリシードキュメントを開きます。WorkSpace 管理者に対応する IAMユーザーとロールを、キーユーザーに権限を付与する (p. 60)ポリシーステートメントに追加します。その後、ファイルを保存します。

3. PutKeyPolicy オペレーションを使用して、更新されたキーポリシードキュメントを CMK に適用します。

パート 2: WorkSpace 管理者に追加のアクセス許可を付与するカスタマー管理の CMK を使用して Amazon WorkSpaces データを保護する場合、WorkSpace 管理者はデフォルトキーポリシー (p. 56)のキーユーザーセクションの権限に加えて、CMK の権限 (p. 123)を作成する権限が必要です。また、AWS マネジメントコンソール を使用して暗号化されたボリュームを持つWorkSpace を作成する場合、WorkSpace 管理者にはエイリアスとキーを一覧表示するためのアクセス許可が必要です。IAM ユーザーポリシーの作成と編集については、IAM ユーザーガイド の「管理ポリシーとインラインポリシー」を参照してください。

これらのアクセス許可を WorkSpace 管理者に付与するには、IAM ポリシーを使用します。各 WorkSpace管理者の IAM ポリシーに、次の例のようなポリシーステートメントを追加します。例の CMK ARN(arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab) を有効なものに置き換えます。WorkSpace 管理者が (コンソールではなく) Amazon WorkSpaces API のみを使用する場合は、"kms:ListAliases" および "kms:ListKeys" のアクセス権を持つ 2 番目のポリシーステートメントを省略できます。

300

Page 309: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドユーザーに代わって CMK を使用するためのアクセス許可を Amazon WorkSpaces に付与する

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:CreateGrant", "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "kms:ListAliases", "kms:ListKeys" ], "Resource": "*" } ]}

301

Page 310: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドモニタリングツール

カスタマーマスターキーをモニタリングする

モニタリングは、AWS KMS のカスタマーマスターキー (CMK) の可用性、状態と使用状況を理解し、AWS ソリューションの信頼性、可用性、およびパフォーマンスを維持するうえで重要な要素です。AWS ソリューションのすべてのパートからモニタリングデータを収集すると、マルチポイント障害が発生した場合にそれをデバッグするのに役立ちます。ただし、CMK のモニタリングを開始する前に、以下の質問に対する回答を反映したモニタリング計画を作成する必要があります。

• どのような目的でモニタリングしますか?• モニタリングの対象となるリソースとは ?• どのくらいの頻度でこれらのリソースをモニタリングしますか?• 使用するモニタリングツール (p. 302)は ?• 誰がモニタリングタスクを実行しますか?• 問題が発生したときに誰が通知を受け取りますか ?

次のステップでは、CMK を継時的にモニタリングして、環境内での通常の AWS KMS 使用および想定のベースラインを確立します。CMK をモニタリングするとき、過去のモニタリングデータを保存し、現在のデータと比較することで、通常パターンと異常パターンを識別して、問題に対処する方法を考案できるようにします。

たとえば、CMK に影響を与える AWS KMS API アクティビティとイベントをモニタリングできます。データが、確立基準を上回ったり、下回ったりする場合、修正作業を調査、または実行する必要が生じる場合があります。

通常のパターンのベースラインを確立するには、次の項目をモニタリングします。

• データプレーンオペレーションの AWS KMS API アクティビティ。これは、CMK を使用する暗号化オペレーション (p. 10) (Decrypt、Encrypt、ReEncrypt、GenerateDataKey など) です。

• お客様にとって重要なコントロールプレーン操作のための AWS KMSAPI のアクティビティ。上記のオペレーションは、CMK を管理します。CMK のアベイラビリティーを変更させる可能性のあるオペレーション(ScheduleKeyDeletion、CancelKeyDeletion、DisableKey、EnableKey、ImportKeyMaterial、DeleteImportedKeyMaterialなど) をモニタリング、または、CMK のアクセスコントロール (PutKeyPolicy および RevokeGrant など) を変更することができます。

• 他の AWS KMS メトリクス (インポートされたキーマテリアル (p. 156)が有効期限切れになるまでの残り時間など) およびイベント (キーマテリアルの有効期限切れ、または CMK のキーの更新など)。

モニタリングツールAWS では、CMK のモニタリングに使用できるさまざまなツールを提供しています。これらのツールの中には、自動モニタリングを設定できるものもあれば、手操作を必要とするものもあります。モニタリングタスクをできるだけ自動化することをお勧めします。

自動モニタリングツール次の自動化されたモニタリングツールを使用すると、CMK の監視が行われ、変更が生じたときに報告されます。

302

Page 311: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド手動ツール

• [Amazon CloudWatch アラーム] – 指定した期間にわたって単一のメトリクスを監視し、複数の期間にわたり既定のしきい値に関連するメトリクス値に基づいて 1 つ以上のアクションを実行します。アクションは、Amazon Simple Notification Service (Amazon SNS) トピックまたは Amazon EC2 Auto Scalingポリシーに送信される通知です。CloudWatch アラームは、単に特定の状態にあるというだけではアクションを呼び出しません。状態が変わり、それが指定した数の期間にわたって持続する必要があります。詳細については、「Amazon CloudWatch によるモニタリング (p. 304)」を参照してください。

• Amazon CloudWatch Events– イベントに一致して、1 つ以上のターゲット関数またはストリームに振り分け、状態情報を取得します。必要に応じて変更を加えるか、修正作業を行います。詳細については、『AWS KMS のイベント (p. 307)Amazon CloudWatch Events ユーザーガイド』を参照してください。

• Amazon CloudWatch Logs – AWS CloudTrail、またはその他のソースのログファイルの監視、保存、アクセスができます。詳細については、『Amazon CloudWatch Logs ユーザーガイド』を参照してください。

• AWS CloudTrail ログモニタリング – アカウント間でログファイルを共有し、CloudWatch Logs に送信してリアルタイムで CloudTrail ログファイルを監視します。CloudTrail Processing Library を使用してログ処理アプリケーションを作成し、CloudTrail による配信後にログファイルが変更されていないことを検証します。詳細については、AWS CloudTrail User Guide の「CloudTrail ログファイルの操作」を参照してください。

手動モニタリングツールCMK のモニタリングにおけるもう 1 つの重要な部分は、CloudWatch アラームおよびイベントで網羅されていない項目を手動でモニタリングすることです。AWS KMS、CloudWatch、AWS Trusted Advisor などの AWS ダッシュボードには、AWS 環境の状態が一目でわかるビューが表示されます。

AWS KMS コンソールの [AWS Managed Keys (AWS 管理型のキー)] ページと [Customer Managed Keys(カスタマー管理型のキー)] ページをカスタマイズして (p. 26)、各 CMK に関する以下の情報を表示できます。

• キー ID• ステータス• 作成日• 有効期限 (インポートされたキーマテリアル (p. 156)を持つ CMK の場合)• Origin• カスタムキーストア ID (カスタムキーストア (p. 182)内の CMK 用)

CloudWatch コンソールダッシュボードは、以下を示します。

• 現在のアラームとステータス• アラームとリソースのグラフ• サービス状態ステータス

さらに、CloudWatch を使用して次のことが行えます。

• 重視するサービスをモニタリングするためのカスタマイズしたダッシュボードを作成する• メトリクスデータをグラフ化して、問題のトラブルシューティングを行い、傾向を確認する• AWS リソースのすべてのメトリクスを検索して、参照する• 問題があることを通知するアラームを作成/編集する

AWS Trusted Advisor は、AWS リソースのパフォーマンス、信頼性、セキュリティ、費用効率を向上するためのモニタリングに役立ちます。すべてのユーザーは、4 つの Trusted Advisor; チェックを利用できま

303

Page 312: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCloudWatch によるモニタリング

す。ビジネスまたはエンタープライズサポートプランのユーザーは、50 以上のチェックを利用できます。詳細については、「AWS Trusted Advisor」を参照してください。

Amazon CloudWatch によるモニタリングAmazon CloudWatch を使用して、カスタマーマスターキー (CMK) を監視することで、AWS KMS から未加工データを収集し、リアルタイムに近い読み取り可能なメトリクスに加工することができます。これらのデータは、履歴情報にアクセスして、時間の経過に伴う CMK の使用や変更に関する理解を深められるように 2 週間記録されます。Amazon CloudWatch の詳細については、『Amazon CloudWatch ユーザーガイド』を参照してください。

トピック• AWS KMS のメトリクスとディメンション (p. 304)• CloudWatch アラームを作成して AWS KMS メトリクスをモニタリングする (p. 305)• AWS KMS のイベント (p. 307)

AWS KMS のメトリクスとディメンションキーマテリアルを CMK にインポート (p. 156)し、有効期限を設定すると、メトリクスとディメンションがAWS KMS から CloudWatch に送信されます。AWS マネジメントコンソール や Amazon CloudWatch APIを使用して AWS KMS メトリクスを表示できます。

AWS KMS メトリクスAWS/KMS 名前空間には、次のメトリクスが含まれます。

SecondsUntilKeyMaterialExpiration

このメトリクスはインポートしたキーマテリアルの有効期限までの残りの秒数を追跡します。このメトリクスは、オリジンが EXTERNAL でキーマテリアルの有効期限が設定された CMK に対してのみ有効です。このメトリクスで最も有用な統計は Minimum で、指定した統計期間のすべてのデータポイントの最小残り時間を示します。このメトリクスの唯一の有効な単位は Seconds です。

このメトリクスを使用して、インポートしたキーマテリアルの有効期限までの残り時間を追跡します。その時間が定義したしきい値を下回った場合は、新しい有効期限を使用してキーマテリアルを再インポートするなどのアクションを実行できます。これが発生したときに通知する CloudWatch アラームを作成できます。詳細については、「CloudWatch アラームを作成して AWS KMS メトリクスをモニタリングする (p. 305)」を参照してください。

AWS KMS メトリクスのディメンションAWS KMS メトリクスは AWS/KMS 名前空間を使用し、有効なディメンションは KeyId 1 つだけです。このディメンションを使用して、特定の CMK のメトリクスデータまたは CMK の設定を表示できます。

AWS KMS メトリクスの表示方法AWS マネジメントコンソール や Amazon CloudWatch API を使用して AWS KMS メトリクスを表示できます。

CloudWatch コンソールを使用してメトリクスを表示するには

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。

304

Page 313: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドアラームの作成

2. 必要に応じてリージョンを変更します。ナビゲーションバーから、AWS リソースがあるリージョンを選択します。

3. ナビゲーションペインで メトリクスを選択します。4. コンテンツペインで、[All metrics] タブを選択します。次に、[AWS の名前空間] で [KMS] を選択しま

す。5. [Per-Key Metrics] を選択して、個別のメトリクスとディメンションを選択します。

Amazon CloudWatch API を使ってメトリクスを表示するには

CloudWatch API を使用して AWS KMS メトリクスを表示するには、Namespace を AWS/KMS に設定してListMetrics リクエストを送信します。次の例では、AWS Command Line Interface (AWS CLI) を使用してこの操作を行う方法を示します。

$ aws cloudwatch list-metrics --namespace AWS/KMS

CloudWatch アラームを作成して AWS KMS メトリクスをモニタリングするメトリクスの値を変更し、アラームが変更状態になると、CloudWatch アラームを作成して Amazon SNSメッセージを送信できます。アラームは、指定期間にわたって単一のメトリクスを監視し、その値と複数期間に対するしきい値との比較結果に基づいて 1 つ以上のアクションを実行します。アクションは、Amazon SNS トピックまたは Auto Scaling ポリシーに送信される通知です。アラームは、持続している状態変化に対してのみアクションを呼び出します。CloudWatch アラームは、単に特定の状態にあるというだけでアクションを呼び出すわけではありません。状態が変わり、それが指定した数の期間にわたって持続している必要があります。

トピック• CloudWatch アラームを作成して、インポートされたキーマテリアルの有効期限切れをモニタリングす

る (p. 305)• CloudWatch アラームを作成して削除保留中の CMK の使用をモニタリングする (p. 306)

CloudWatch アラームを作成して、インポートされたキーマテリアルの有効期限切れをモニタリングするキーマテリアルを CMK にインポートする (p. 156)と、キーマテリアルの有効期限を任意で指定することができます。キーマテリアルが有効期限切れになると、AWS KMS はキーマテリアルを削除し、CMK は使用不可能になります。CMK を再び使用するには、キーマテリアルを再インポートする必要があります。インポートしたキーマテリアルが定義したしきい値 (例:10 日) を下回るまでの日数を通知する CloudWatch アラームを作成できます。このようなアラームから通知を受け取った場合、新しい有効期限でキーマテリアルを再インポートするなどのアクションを実行する場合があります。

インポートされたキーマテリアルの有効期限をモニタリングするアラームを作成するには (AWSマネジメントコンソール)

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。2. 必要に応じてリージョンを変更します。ナビゲーションバーから、AWS リソースがあるリージョンを

選択します。3. ナビゲーションペインで、[Alarms] を選択します。次に [アラームの作成] を選択します。4. [Browse Metrics]、[KMS] の順に選択します。5. CMK のキー ID の横にあるチェックボックスを選択し、モニタリングします。

305

Page 314: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドアラームの作成

6. 下部ペインのメニューから、統計を [Minimum]、期間を [1 分間] に変更します。続いて、[Next] を選択します。

7. [Create Alarm] ウィンドウで、以下の操作を行います。

a. [名前] には KeyMaterialExpiresSoon などの名前を入力します。b. [次の時:] に続く [が:] に、<= を選択して、しきい値に設定する秒数を入力します。たとえば、イ

ンポートしたキーマテリアルの有効期限までの残日数が 10 日またはそれ以下になると通知するには、864000 と入力します。

c. 必要に応じて、[回連続した場合] に「1」と入力します。d. [Send notification to:] については、次のいずれかを実行します。

• 新しい Amazon SNS トピックを使用するには、[新しいリスト] を選択して新しいトピック名を入力します。[Email list:] に、E メールアドレスを少なくとも 1 つ入力します。カンマで区切って、複数の E メールアドレスを入力できます。

• 既存の Amazon SNS トピックを使用するには、使用するトピックの名前を選択します。e. [Create Alarm] を選択します。

8. メールアドレスによる通知を選択した場合は、「AWS Notification - Subscription Confirmation」という件名の E メールメッセージが [email protected] から送信されます。 E メールメッセージ内の [Confirm subscription] リンクを選択し、E メールアドレスを確認します。

Important

E メールアドレスを確認しない限り、E メール通知は受け取れません。

CloudWatch アラームを作成して削除保留中の CMK の使用をモニタリングするCMK のキー削除の予定を作成 (p. 170)した場合、CMK は、AWS KMS で一定期間待機してから削除されます。待機期間を設定すれば、CMK が不要であり、今後も使用しないことを確認できます。待機期間中にユーザーまたはアプリケーションが CMK を使用しようとした場合に CloudWatch アラームで警告するよ

306

Page 315: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS のイベント

うに設定することもできます。このようなアラームから通知を受け取ると、CMK の削除をキャンセルする場合があります。

詳細については、「Amazon CloudWatch アラームを作成し、削除保留中のカスタマーマスターキーの使用を検出する (p. 176)」を参照してください。

AWS KMS のイベントAWS KMS は Amazon CloudWatch Events と連携して、CMK に影響を及ぼす特定のイベントを通知します。各イベントは、JSON (JavaScript Object Notation) で表され、イベント名、イベント日時、影響を受ける CMK などが含まれています。CloudWatch イベント を使用して、これらのイベントを収集し、AWSLambda 機能や Amazon SNS トピック、Amazon SQS キュー、Amazon Kinesis Data Streams のストリームなど複数のターゲットまたは組み込みターゲットに、そのイベントを経由するルールを設定できます。

read/write API リクエストを記録する際、AWS CloudTrail で出力されるイベントなど、その他の種類のイベントとともに CloudWatch イベント を使用する詳細については、『Amazon CloudWatch Events ユーザーガイド』を参照してください。

次のトピックでは、AWS KMS が作成する CloudWatch イベント を説明します。

トピック• KMS CMK の更新 (p. 307)• KMS でインポートされたキーマテリアルの有効期限切れ (p. 307)• KMS CMK の削除 (p. 308)

KMS CMK の更新顧客管理の CMK (p. 4) の自動キーローテーション (p. 151)を有効にすると、AWS KMS により毎年 CMKの新しいキーマテリアルが作成されます。AWS 管理の CMKのキーマテリアル (p. 4)は 3 年ごとに自動的にローテーションされます。

AWS KMS がキーマテリアルをローテーションするたびに、KMS CMK ローテーションイベントがCloudWatch イベント に送信されます。このイベントの例を以下に示します。

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "KMS CMK Rotation", "source": "aws.kms", "account": "111122223333", "time": "2016-08-25T21:05:33Z", "region": "us-west-2", "resources": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" ], "detail": { "key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" }}

KMS でインポートされたキーマテリアルの有効期限切れキーマテリアルを CMK にインポートする (p. 156)と、キーマテリアルの有効期限を任意で指定することができます。キーマテリアルの有効期限が切れると、AWS KMS によってキーマテリアルが削除され、イベントが CloudWatch イベント に送信されます。このイベントの例を以下に示します。

{

307

Page 316: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS のイベント

"version": "0", "id": "9da9af57-9253-4406-87cb-7cc400e43465", "detail-type": "KMS Imported Key Material Expiration", "source": "aws.kms", "account": "111122223333", "time": "2016-08-22T20:12:19Z", "region": "us-west-2", "resources": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" ], "detail": { "key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" }}

KMS CMK の削除CMK のキー削除の予定を作成 (p. 170)した場合、CMK は、AWS KMS で一定期間待機してから削除されます。待機期間が終了すると、CMK は AWS KMS より削除され、そのイベントは CloudWatch イベントに送信されます。このイベントの例を以下に示します。

{ "version": "0", "id": "e9ce3425-7d22-412a-a699-e7a5fc3fbc9a", "detail-type": "KMS CMK Deletion", "source": "aws.kms", "account": "111122223333", "time": "2016-08-19T03:23:45Z", "region": "us-west-2", "resources": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" ], "detail": { "key-id": "1234abcd-12ab-34cd-56ef-1234567890ab" }}

308

Page 317: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCloudTrail 内の AWS KMS 情報

AWS CloudTrail による AWS KMSAPI コールのログ記録

AWS KMS は AWS CloudTrail と統合されています。このサービスは、AWS KMS 内でユーザーやロール、または AWS のサービスによって実行されたアクションを記録するサービスです。CloudTrailは、AWS KMS コンソールからのコールや、AWS KMS API へのコード呼び出しを含む、AWS KMS のすべての API コールをイベントとしてキャプチャします。証跡を作成すると、CloudTrail のイベントを含む、Amazon S3 バケットへの AWS KMS イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Event history (イベント履歴)] で最新のイベントを表示できます。CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、AWS KMS に対してどのようなリクエストが行われたかを判断できます。

デフォルトでは、すべての AWS KMS アクションが CloudTrail イベントとして記録されますが、CloudTrail 証跡から AWS KMS アクションを除外できます。詳細については、「証跡からの AWSKMS イベントの除外 (p. 310)」を参照してください。

CloudTrail の詳細については、「AWS CloudTrail User Guide」を参照してください。CMK の使用をモニタリングするその他の方法については、「カスタマーマスターキーをモニタリングする (p. 302)」を参照してください。

CloudTrail 内の AWS KMS 情報CloudTrail は、アカウント作成時に AWS アカウントで有効になります。AWS KMS でアクティビティが発生すると、そのアクティビティは [Event history (イベント履歴)] の AWS の他のサービスのイベントとともに CloudTrail イベントに記録されます。最近のイベントは、AWS アカウントで表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

AWS KMS のイベントなど、AWS アカウントのイベントの継続的な記録については、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成するときに、証跡がすべてのリージョンに適用されます。証跡では、AWS パーティションのすべてのリージョンからのイベントがログに記録され、指定した Amazon S3 バケットにログファイルが配信されます。さらに、より詳細な分析と CloudTrail ログで収集されたデータに基づいた行動のためにその他の AWS サービスを設定できます。詳細については、以下のトピックを参照してください。

• 証跡を作成するための概要• CloudTrail でサポートされるサービスと統合• CloudTrail の Amazon SNS 通知の設定• 「複数のリージョンから CloudTrail ログファイルを受け取る」と「複数のアカウントから CloudTrail ロ

グファイルを受け取る」

CloudTrail は、読み取り専用オペレーション (ListAliases や GetKeyPolicy など)、CMK を管理するオペレーション (CreateKey や PutKeyPolicy など)、暗号化オペレーション (p. 10)(GenerateDataKey、Encrypt、Decrypt など) を含むすべての AWS KMS オペレーションをログに記録します。各オペレーションにより、CloudTrail ログファイルにエントリが生成されます。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。この ID 情報は以下のことを確認するのに役立ちます。

309

Page 318: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド証跡からの AWS KMS イベントの除外

• リクエストが、ルートと IAM ユーザー認証情報のどちらを使用して送信されたか。• リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を使用

して送信されたか.• リクエストが、別の AWS サービスによって送信されたかどうか。

詳細については、「CloudTrail userIdentity 要素」を参照してください。

証跡からの AWS KMS イベントの除外ほとんどの AWS KMS ユーザーは、AWS KMS リソースの使用と管理の記録を提供するために、CloudTrail 証跡内のイベントに依存しています。証跡は、カスタマーマスターキー (CMK) の作成、無効化、削除、キーポリシーの変更、AWS サービスに代わる CMK の使用など、重要なイベントを監査するための貴重なデータ源になります。場合によっては、暗号化オペレーションの暗号化コンテキスト (p. 15)など、CloudTrail ログエントリのメタデータは、エラーを回避または解決するのに役立ちます。

ただし、AWS KMS では多数のイベントを生成できるため、AWS CloudTrail では証跡から AWS KMS イベントを除外できます。この証跡単位の設定では、すべての AWS KMS イベントが除外されます。特定のAWS KMS イベントを除外することはできません。

Warning

CloudTrail ログから AWS KMS イベントを除外すると、CMK を使用するアクションが隠されることがあります。このオペレーションを実行するために必要なcloudtrail:PutEventSelectors アクセス許可をプリンシパルに与えるときは注意してください。

証跡から AWS KMS イベントを除外するには:

• CloudTrail コンソールで、証跡の作成時または証跡の更新時に、[Log Key Management Service events(ログキー管理サービスのイベント)] 設定を使用します。手順については、AWS CloudTrail User Guideの「 AWS マネジメントコンソールでの管理イベントのログ記録」を参照してください。

• CloudTrail API では、PutEventSelectors オペレーションを使用します。ExcludeManagementEventSources 属性を kms.amazonaws.com の値でイベントセレクタに追加します。例については、AWS CloudTrail User Guideの「例: AWS Key Management Service のイベントを記録しない証跡」を参照してください。

この除外は、コンソール設定または証跡のイベントセレクタを変更することでいつでも無効にできます。その後、証跡は AWS KMS イベントの記録を開始します。ただし、除外が有効である間に発生した AWSKMS イベントはリカバリできません。

コンソールまたは API を使用して KMS イベントを除外すると、結果の CloudTrail PutEventSelectorsAPI オペレーションも CloudTrail ログに記録されます。KMS イベントが CloudTrail ログに表示されない場合は、ExcludeManagementEventSources 属性が kms.amazonaws.com に設定されているPutEventSelectors イベントを探します。

AWS KMS ログファイルエントリの概要証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信できる設定です。CloudTrailログファイルには、1 つ以上のログエントリが含まれます。イベントは任意のソースからの 1 つのリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

各 API リクエストの例 CloudTrail ログエントリについては、以下のトピックを参照してください。

310

Page 319: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCreateAlias

トピック• CreateAlias (p. 311)• CreateGrant (p. 312)• CreateKey (p. 313)• Decrypt (p. 314)• DeleteAlias (p. 314)• DescribeKey (p. 315)• DisableKey (p. 316)• EnableKey (p. 317)• Encrypt (p. 318)• GenerateDataKey (p. 318)• GenerateDataKeyWithoutPlaintext (p. 319)• GenerateRandom (p. 320)• GetKeyPolicy (p. 320)• ListAliases (p. 321)• ListGrants (p. 322)• ReEncrypt (p. 322)• Amazon EC2 の例 1 (p. 323)• Amazon EC2 の例 2 (p. 325)

CreateAlias次の例は、CreateAlias を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-04T00:52:27Z" } } }, "eventTime": "2014-11-04T00:52:27Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateAlias", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "aliasName": "alias/my_alias", "targetKeyId": "arn:aws:kms:us-east-1:123456789012:key/64e07f97-2489-4d04-bfdf-41723ad130bd" }, "responseElements": null, "requestID": "d9472f40-63bc-11e4-bc2b-4198b6150d5c",

311

Page 320: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCreateGrant

"eventID": "f72d3993-864f-48d6-8f16-e26e1ae8dff0", "readOnly": false, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/64e07f97-2489-4d04-bfdf-41723ad130bd", "accountId": "123456789012" }, { "ARN": "arn:aws:kms:us-east-1:123456789012:alias/my_alias", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

CreateGrant次の例は、CreateGrant を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:53:12Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "arn:aws:kms:us-east-1:123456789012:key/65f61d18-c45c-41ca-90c9-179982e9b716", "constraints": { "encryptionContextSubset": { "ContextKey1": "Value1" } }, "operations": ["Encrypt", "RetireGrant"], "granteePrincipal": "EX_PRINCIPAL_ID" }, "responseElements": { "grantId": "f020fe75197b93991dc8491d6f19dd3cebb24ee62277a05914386724f3d48758" }, "requestID": "f3c08808-63bc-11e4-bc2b-4198b6150d5c", "eventID": "5d529779-2d27-42b5-92da-91aaea1fc4b5", "readOnly": false, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/65f61d18-c45c-41ca-90c9-179982e9b716", "accountId": "123456789012" }], "eventType": "AwsApiCall",

312

Page 321: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドCreateKey

"recipientAccountId": "123456789012" } ]}

CreateKey次の例は、CreateKey を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:59Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "policy": "{\n \"Version\":\"2012-10-17\",\n \"Statement\":[{\n \"Effect\":\"Allow\",\n \"Principal\":{\"AWS\":\"arn:aws:iam::123456789012:user/Alice\"},\n \"Action\":\"kms:*\",\n \"Resource\":\"*\"\n }, {\n \"Effect\":\"Allow\",\n \"Principal\":{\"AWS\":\"arn:aws:iam::012345678901:user/Bob\"},\n \"Action\":\"kms:CreateGrant\",\n \"Resource\":\"*\"\n }, {\n \"Effect\":\"Allow\",\n \"Principal\":{\"AWS\":\"arn:aws:iam::012345678901:user/Charlie\"},\n \"Action\":\"kms:Encrypt\",\n \"Resource\":\"*\"\n}]\n}", "description": "", "keyUsage": "ENCRYPT_DECRYPT" }, "responseElements": { "keyMetadata": { "AWSAccountId": "123456789012", "enabled": true, "creationDate": "Nov 4, 2014 12:52:59 AM", "keyId": "06dc80ca-1bdc-4d0b-be5b-b7009cd14f13", "keyUsage": "ENCRYPT_DECRYPT", "description": "", "arn": "arn:aws:kms:us-east-1:123456789012:key/06dc80ca-1bdc-4d0b-be5b-b7009cd14f13" } }, "requestID": "ebe8ee68-63bc-11e4-bc2b-4198b6150d5c", "eventID": "ba116326-1792-4784-87dd-a688d1cb42ec", "readOnly": false, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/06dc80ca-1bdc-4d0b-be5b-b7009cd14f13", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

313

Page 322: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドDecrypt

Decrypt次の例は、Decrypt を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:20Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "errorCode": "InvalidCiphertextException", "requestParameters": null, "responseElements": null, "requestID": "d5239dea-63bc-11e4-bc2b-4198b6150d5c", "eventID": "954983cf-7da9-4adf-aeaa-261a1292c0aa", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/e17cebae-e7a6-4864-b92f-0365f2feff38", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

DeleteAlias次の例は、DeleteAlias を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-04T00:52:27Z" } } }, "eventTime": "2014-11-04T00:52:27Z",

314

Page 323: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドDescribeKey

"eventSource": "kms.amazonaws.com", "eventName": "DeleteAlias", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "aliasName": "alias/my_alias" }, "responseElements": null, "requestID": "d9542792-63bc-11e4-bc2b-4198b6150d5c", "eventID": "12f48554-bb04-4991-9cfc-e7e85f68eda0", "readOnly": false, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:alias/my_alias", "accountId": "123456789012" }, { "ARN": "arn:aws:kms:us-east-1:123456789012:key/64e07f97-2489-4d04-bfdf-41723ad130bd", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

DescribeKey次の例では、DescribeKey の複数呼び出しを記録するログファイルを示しています。これらの呼び出しは、AWS KMS 管理コンソールのキーの表示 (p. 26)の結果です。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T20:51:21Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2014-11-05T20:51:34Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "signin.amazonaws.com", "requestParameters": { "keyId": "30a9a1e7-2a84-459d-9c61-04cbeaebab95" }, "responseElements": null, "requestID": "874d4823-652d-11e4-9a87-01af2a1ddecb", "eventID": "f715da9b-c52c-4824-99ae-88aa1bb58ae4",

315

Page 324: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドDisableKey

"readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-1:123456789012:key/30a9a1e7-2a84-459d-9c61-04cbeaebab95", "accountId": "123456789012" } ], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T20:51:21Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2014-11-05T20:51:55Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "signin.amazonaws.com", "requestParameters": { "keyId": "e7b6d35a-b551-4c8f-b51a-0460ebc04565" }, "responseElements": null, "requestID": "9400c720-652d-11e4-9a87-01af2a1ddecb", "eventID": "939fcefb-dc14-4a52-b918-73045fe97af3", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-1:123456789012:key/e7b6d35a-b551-4c8f-b51a-0460ebc04565", "accountId": "123456789012" } ], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

DisableKey次の例は、DisableKey を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": {

316

Page 325: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドEnableKey

"type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:43Z", "eventSource": "kms.amazonaws.com", "eventName": "DisableKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "262d9fcb-f1a0-4447-af16-3714cff61ec1" }, "responseElements": null, "requestID": "e26552bc-63bc-11e4-bc2b-4198b6150d5c", "eventID": "995c4653-3c53-4a06-a0f0-f5531997b741", "readOnly": false, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/262d9fcb-f1a0-4447-af16-3714cff61ec1", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

EnableKey次の例は、EnableKey を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:20Z", "eventSource": "kms.amazonaws.com", "eventName": "EnableKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "e17cebae-e7a6-4864-b92f-0365f2feff38" }, "responseElements": null, "requestID": "d528a6fb-63bc-11e4-bc2b-4198b6150d5c", "eventID": "be393928-3629-4370-9634-567f9274d52e", "readOnly": false, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/e17cebae-e7a6-4864-b92f-0365f2feff38", "accountId": "123456789012"

317

Page 326: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドEncrypt

}], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

Encrypt次の例は、Encrypt を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:53:11Z", "eventSource": "kms.amazonaws.com", "eventName": "Encrypt", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "ContextKey1": "Value1" }, "keyId": "arn:aws:kms:us-east-1:012345678901:key/8d3acf57-6bba-480a-9459-ed1b8e79d3d0" }, "responseElements": null, "requestID": "f3423043-63bc-11e4-bc2b-4198b6150d5c", "eventID": "91235988-eb87-476a-ac2c-0cdc244e6dca", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-east-1:012345678901:key/8d3acf57-6bba-480a-9459-ed1b8e79d3d0", "accountId": "012345678901" }], "eventType": "AwsServiceEvent", "recipientAccountId": "012345678901" } ]}

GenerateDataKey次の例は、GenerateDataKey を呼び出すことによって作成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser",

318

Page 327: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドGenerateDataKeyWithoutPlaintext

"principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:40Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "637e8678-3d08-4922-a650-e77eb1591db5", "numberOfBytes": 32 }, "responseElements": null, "requestID": "e0eb83e3-63bc-11e4-bc2b-4198b6150d5c", "eventID": "a9dea4f9-8395-46c0-942c-f509c02c2b71", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/637e8678-3d08-4922-a650-e77eb1591db5", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

GenerateDataKeyWithoutPlaintext次の例は、GenerateDataKeyWithoutPlaintext を呼び出すことによって作成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:23Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKeyWithoutPlaintext", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "errorCode": "InvalidKeyUsageException", "requestParameters": { "keyId": "d4f2a88d-5f9c-4807-b71d-4d0ee5225156", "numberOfBytes": 16 }, "responseElements": null, "requestID": "d6b8e411-63bc-11e4-bc2b-4198b6150d5c", "eventID": "f7734272-9ec5-4c80-9f36-528ebbe35e4a", "readOnly": true,

319

Page 328: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドGenerateRandom

"resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/d4f2a88d-5f9c-4807-b71d-4d0ee5225156", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

GenerateRandom次の例は、GenerateRandom を呼び出すことによって作成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:37Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateRandom", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": null, "responseElements": null, "requestID": "df1e3de6-63bc-11e4-bc2b-4198b6150d5c", "eventID": "239cb9f7-ae05-4c94-9221-6ea30eef0442", "readOnly": true, "resources": [], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

GetKeyPolicy次の例は、GetKeyPolicy を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" },

320

Page 329: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドListAliases

"eventTime": "2014-11-04T00:50:30Z", "eventSource": "kms.amazonaws.com", "eventName": "GetKeyPolicy", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "arn:aws:kms:us-east-1:123456789012:key/e923fe55-d3ef-4f9c-89a1-2752f98c3a70", "policyName": "default" }, "responseElements": null, "requestID": "93746dd6-63bc-11e4-bc2b-4198b6150d5c", "eventID": "4aa7e4d5-d047-452a-a5a6-2cce282a7e82", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/e923fe55-d3ef-4f9c-89a1-2752f98c3a70", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

ListAliases次の例は、ListAliases を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:51:45Z", "eventSource": "kms.amazonaws.com", "eventName": "ListAliases", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "limit": 5, "marker": "eyJiIjoiYWxpYXMvZTU0Y2MxOTMtYTMwNC00YzEwLTliZWItYTJjZjA3NjA2OTJhIiwiYSI6ImFsaWFzL2U1NGNjMTkzLWEzMDQtNGMxMC05YmViLWEyY2YwNzYwNjkyYSJ9" }, "responseElements": null, "requestID": "bfe6c190-63bc-11e4-bc2b-4198b6150d5c", "eventID": "a27dda7b-76f1-4ac3-8b40-42dfba77bcd6", "readOnly": true, "resources": [], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

321

Page 330: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドListGrants

ListGrants次の例は、ListGrants を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:49Z", "eventSource": "kms.amazonaws.com", "eventName": "ListGrants", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "arn:aws:kms:us-east-1:123456789012:key/ea22a751-e707-40d0-92ac-13a28fa9eb11", "marker": "eyJncmFudElkIjoiMWY4M2U2ZmM0YTY2NDgxYjQ2Yzc4MTdhM2Y4YmQwMDFkZDNiYmQ1MGVlYTMyY2RmOWFiNWY1Nzc1NDNjYmNmMyIsImtleUFybiI6ImFybjphd3M6dHJlbnQtc2FuZGJveDp1cy1lYXN0LTE6NTc4Nzg3Njk2NTMwOmtleS9lYTIyYTc1MS1lNzA3LTQwZDAtOTJhYy0xM2EyOGZhOWViMTEifQ\u003d\u003d", "limit": 10 }, "responseElements": null, "requestID": "e5c23960-63bc-11e4-bc2b-4198b6150d5c", "eventID": "d24380f5-1b20-4253-8e92-dd0492b3bd3d", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/ea22a751-e707-40d0-92ac-13a28fa9eb11", "accountId": "123456789012" }], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

ReEncrypt次の例は、ReEncrypt を呼び出すことによって生成されるログファイルを示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:19Z",

322

Page 331: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EC2 の例 1

"eventSource": "kms.amazonaws.com", "eventName": "ReEncrypt", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "destinationKeyId": "arn:aws:kms:us-east-1:123456789012:key/116b8956-a086-40f1-96d6-4858ef794ba5" }, "responseElements": null, "requestID": "d3eeee63-63bc-11e4-bc2b-4198b6150d5c", "eventID": "627c13b4-8791-4983-a80b-4c28807b964c", "readOnly": false, "resources": [{ "ARN": "arn:aws:kms:us-east-1:123456789012:key/ff0c0fc1-cbaa-41ab-a267-69481da8a4c8", "accountId": "123456789012" }, { "ARN": "arn:aws:kms:us-east-1:123456789012:key/116b8956-a086-40f1-96d6-4858ef794ba5", "accountId": "123456789012" }], "eventType": "AwsServiceEvent", "recipientAccountId": "123456789012" } ]}

Amazon EC2 の例 1次の例は、Amazon EC2 マネジメントコンソールでデフォルトのボリュームキーを使って暗号化されたボリュームを作成する IAM ユーザーを示します。

次の例の CloudTrail ログエントリでは、AWS EC2 マネジメントコンソールでデフォルトのボリュームキーを使用して暗号化されたボリュームを作成するユーザー Alice を示しています。EC2 ログファイルレコードには、値が volumeId の "vol-13439757" フィールドが含まれます。AWS KMS レコードには、値が "aws:ebs:id": "vol-13439757" の encryptionContext フィールドが含まれます。同様に、2 つのレコード間の principalId と accountId が一致します。レコードは、暗号化されたボリュームを作成するとボリュームコンテンツの暗号化に使用されるデータキーが生成されるという事実を示しています。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T20:40:44Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2014-11-05T20:50:18Z",

323

Page 332: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EC2 の例 1

"eventSource": "ec2.amazonaws.com", "eventName": "CreateVolume", "awsRegion": "us-east-1", "sourceIPAddress": "72.72.72.72", "userAgent": "signin.amazonaws.com", "requestParameters": { "size": "10", "zone": "us-east-1a", "volumeType": "gp2", "encrypted": true }, "responseElements": { "volumeId": "vol-13439757", "size": "10", "zone": "us-east-1a", "status": "creating", "createTime": 1415220618876, "volumeType": "gp2", "iops": 30, "encrypted": true }, "requestID": "1565210e-73d0-4912-854c-b15ed349e526", "eventID": "a3447186-135f-4b00-8424-bc41f1a93b4f", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T20:40:44Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2014-11-05T20:50:19Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKeyWithoutPlaintext", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "aws:ebs:id": "vol-13439757" }, "numberOfBytes": 64, "keyId": "alias/aws/ebs" }, "responseElements": null, "requestID": "create-123456789012-758241111-1415220618", "eventID": "4bd2a696-d833-48cc-b72c-05e61b608399", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-1:123456789012:key/e29ddfd4-1bf6-4e1b-8ecb-08216bd70d07", "accountId": "123456789012" }

324

Page 333: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EC2 の例 2

], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

Amazon EC2 の例 2次の例では、IAM ユーザーは、暗号化されたデータボリュームをマウントする Amazon EC2 インスタンスを実行しています。また、この暗号化ではデフォルトのボリュームキーが使用されています。ここでは、ユーザーが実行したアクションによって、複数の AWS KMS ログレコードが生成されます。暗号化されたボリュームを作成するとデータキーが生成されます。またお客様に代わって、Amazon EC2 サービスによって、データキーを復号化するための許可が生成されます。instanceId ("i-81e2f56c")は、CreateGrant レコードの granteePrincipal フィールドで "123456789012:aws:ec2-infrastructure:i-81e2f56c" として参照されています。また、Decrypt を呼び出しているプリンシパルの ID でも、"arn:aws:sts::123456789012:assumed-role/aws:ec2-infrastructure/i-81e2f56c" として参照されています。UUID "e29ddfd4-1bf6-4e1b-8ecb-08216bd70d07" によって識別されるキーは、3 つの KMS 呼び出しすべてで共通です。

{ "Records": [ { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T21:34:36Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2014-11-05T21:35:27Z", "eventSource": "ec2.amazonaws.com", "eventName": "RunInstances", "awsRegion": "us-east-1", "sourceIPAddress": "72.72.72.72", "userAgent": "signin.amazonaws.com", "requestParameters": { "instancesSet": { "items": [ { "imageId": "ami-b66ed3de", "minCount": 1, "maxCount": 1 } ] }, "groupSet": { "items": [ { "groupId": "sg-98b6e0f2" } ] },

325

Page 334: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EC2 の例 2

"instanceType": "m3.medium", "blockDeviceMapping": { "items": [ { "deviceName": "/dev/xvda", "ebs": { "volumeSize": 8, "deleteOnTermination": true, "volumeType": "gp2" } }, { "deviceName": "/dev/sdb", "ebs": { "volumeSize": 8, "deleteOnTermination": false, "volumeType": "gp2", "encrypted": true } } ] }, "monitoring": { "enabled": false }, "disableApiTermination": false, "instanceInitiatedShutdownBehavior": "stop", "clientToken": "XdKUT141516171819", "ebsOptimized": false }, "responseElements": { "reservationId": "r-5ebc9f74", "ownerId": "123456789012", "groupSet": { "items": [ { "groupId": "sg-98b6e0f2", "groupName": "launch-wizard-2" } ] }, "instancesSet": { "items": [ { "instanceId": "i-81e2f56c", "imageId": "ami-b66ed3de", "instanceState": { "code": 0, "name": "pending" }, "amiLaunchIndex": 0, "productCodes": { }, "instanceType": "m3.medium", "launchTime": 1415223328000, "placement": { "availabilityZone": "us-east-1a", "tenancy": "default" }, "monitoring": { "state": "disabled" }, "stateReason": { "code": "pending", "message": "pending"

326

Page 335: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EC2 の例 2

}, "architecture": "x86_64", "rootDeviceType": "ebs", "rootDeviceName": "/dev/xvda", "blockDeviceMapping": { }, "virtualizationType": "hvm", "hypervisor": "xen", "clientToken": "XdKUT1415223327917", "groupSet": { "items": [ { "groupId": "sg-98b6e0f2", "groupName": "launch-wizard-2" } ] }, "networkInterfaceSet": { }, "ebsOptimized": false } ] } }, "requestID": "41c4b4f7-8bce-4773-bf0e-5ae3bb5cbce2", "eventID": "cd75a605-2fee-4fda-b847-9c3d330ebaae", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T21:34:36Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2014-11-05T21:35:35Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "constraints": { "encryptionContextSubset": { "aws:ebs:id": "vol-f67bafb2" } }, "granteePrincipal": "123456789012:aws:ec2-infrastructure:i-81e2f56c", "keyId": "arn:aws:kms:us-east-1:123456789012:key/e29ddfd4-1bf6-4e1b-8ecb-08216bd70d07" }, "responseElements": { "grantId": "6caf442b4ff8a27511fb6de3e12cc5342f5382112adf75c1a91dbd221ec356fe"

327

Page 336: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EC2 の例 2

}, "requestID": "41c4b4f7-8bce-4773-bf0e-5ae3bb5cbce2", "eventID": "c1ad79e3-0d3f-402a-b119-d5c31d7c6a6c", "readOnly": false, "resources": [ { "ARN": "arn:aws:kms:us-east-1:123456789012:key/e29ddfd4-1bf6-4e1b-8ecb-08216bd70d07", "accountId": "123456789012" } ], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::123456789012:user/Alice", "accountId": "123456789012", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T21:34:36Z" } }, "invokedBy": "AWS Internal" }, "eventTime": "2014-11-05T21:35:32Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKeyWithoutPlaintext", "awsRegion": "us-east-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "requestParameters": { "encryptionContext": { "aws:ebs:id": "vol-f67bafb2" }, "numberOfBytes": 64, "keyId": "alias/aws/ebs" }, "responseElements": null, "requestID": "create-123456789012-758247346-1415223332", "eventID": "ac3cab10-ce93-4953-9d62-0b6e5cba651d", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-1:123456789012:key/e29ddfd4-1bf6-4e1b-8ecb-08216bd70d07", "accountId": "123456789012" } ], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }, { "eventVersion": "1.02", "userIdentity": { "type": "AssumedRole", "principalId": "123456789012:aws:ec2-infrastructure:i-81e2f56c", "arn": "arn:aws:sts::123456789012:assumed-role/aws:ec2-infrastructure/i-81e2f56c", "accountId": "123456789012", "accessKeyId": "",

328

Page 337: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAmazon EC2 の例 2

"sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-11-05T21:35:38Z" }, "sessionIssuer": { "type": "Role", "principalId": "123456789012:aws:ec2-infrastructure", "arn": "arn:aws:iam::123456789012:role/aws:ec2-infrastructure", "accountId": "123456789012", "userName": "aws:ec2-infrastructure" } } }, "eventTime": "2014-11-05T21:35:47Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-1", "sourceIPAddress": "172.172.172.172", "requestParameters": { "encryptionContext": { "aws:ebs:id": "vol-f67bafb2" } }, "responseElements": null, "requestID": "b4b27883-6533-11e4-b4d9-751f1761e9e5", "eventID": "edb65380-0a3e-4123-bbc8-3d1b7cff49b0", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-1:123456789012:key/e29ddfd4-1bf6-4e1b-8ecb-08216bd70d07", "accountId": "123456789012" } ], "eventType": "AwsApiCall", "recipientAccountId": "123456789012" } ]}

329

Page 338: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドクライアントの作成

AWS KMS API のプログラミングAWS KMS API を使用して次のようなアクションを実行できます。

• キーを作成、説明、リスト表示、有効にする。• エイリアスを作成、削除、リスト表示、更新する。• コンテンツを暗号化、復号、再暗号化する。• キーポリシーを設定、リスト表示、取得する。• アクセス許可を作成、無効にする、取り消す。• キー更新のステータスを取得する。• キーの説明を更新する。• プレーンテキストを含むデータキーまたは含まないデータキーを生成する。• ランダムなデータを生成する。

以下のトピックのサンプルコードは、AWS SDK を使用して AWS KMS API を呼び出す方法を示しています。

AWS KMS コンソールを使用してこれらのタスクのいくつかを実行する方法については、「開始方法 (p. 20)」を参照してください。

トピック• クライアントの作成 (p. 330)• キーの使用 (p. 331)• データキーの暗号化と復号 (p. 342)• キーポリシーの使用 (p. 350)• 許可の使用 (p. 358)• エイリアスの使用 (p. 367)

クライアントの作成AWS SDK for Java、AWS SDK for .NET、AWS SDK for Python (Boto3)、AWS SDK for Ruby、AWS SDKfor PHP、あるいは AWS SDK for JavaScript in Node.js を使用して AWS Key Management Service (AWSKMS) API を使ったコードを書き込むには、AWS KMS クライアントの作成から始めます。

作成するクライアントオブジェクトは、次のトピックのサンプルコードで使用されます。

Java

Java で AWS KMS クライアントを作成するには、クライアントビルダーを使用します。

AWSKMS kmsClient = AWSKMSClientBuilder.standard().build();

Java クライアントビルダーの使用に関する詳細は、以下のリソースを参照してください。

• AWS 開発者ブログの「Fluent Client Builders (能率的なクライアントビルダー)」• 『AWS SDK for Java Developer Guide』の「サービスクライアントの作成」• 『AWS SDK for Java API Reference』の「AWSKMSClientBuilder」

330

Page 339: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーの使用

C#

AmazonKeyManagementServiceClient kmsClient = new AmazonKeyManagementServiceClient();

Python

kms_client = boto3.client('kms')

Ruby

require 'aws-sdk-kms' # in v2: require 'aws-sdk'

kmsClient = Aws::KMS::Client.new

PHP

PHP で AWS KMS クライアントを作成するには、AWS KMS クライアントオブジェクトを使用して、バージョン 2014-11-01 を指定します。詳細については、『AWS SDK for PHP API Reference』の「KMSClient クラス」を参照してください。

// Create a KMSClient$KmsClient = new Aws\Kms\KmsClient([ 'profile' => 'default', 'version' => '2014-11-01', 'region' => 'us-east-1']);

Node.js

const kmsClient = new AWS.KMS();

キーの使用このトピックの例では、AWS KMS API を使用して AWS KMS カスタマーマスターキー (p. 3)を作成、表示、有効化、無効化し、データキー (p. 5)を生成します。

トピック• カスタマーマスターキーの作成 (p. 331)• データキーの生成 (p. 333)• カスタマーマスターキーの表示 (p. 335)• カスタマーマスターキーのキー ID およびキー ARN の取得 (p. 337)• カスタマーマスターキーの有効化 (p. 339)• カスタマーマスターキーの無効化 (p. 341)

カスタマーマスターキーの作成カスタマーマスターキー (p. 3) (CMK) を作成するには、CreateKey オペレーションを使用します。このセクションの例では、対称 CMK を作成します。これらの例で使用されている Description パラメータはオプションです。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

331

Page 340: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーの作成

AWS KMS コンソールで CMK を作成する方法については、「キーの作成 (p. 20)」を参照してください。

Java

詳細については、『AWS SDK for Java API Reference』の「createKey メソッド」を参照してください。

// Create a CMK//String desc = "Key for protecting critical data"; CreateKeyRequest req = new CreateKeyRequest().withDescription(desc);CreateKeyResult result = kmsClient.createKey(req);

C#

詳細については、『AWS SDK for .NET』の「CreateKey メソッド」を参照してください。

// Create a CMK//String desc = "Key for protecting critical data";

CreateKeyRequest req = new CreateKeyRequest(){ Description = desc};CreateKeyResponse response = kmsClient.CreateKey(req);

Python

詳細については、『AWS SDK for Python (Boto3)』の「create_key メソッド」を参照してください。

# Create a CMK

desc = 'Key for protecting critical data'

response = kms_client.create_key( Description=desc)

Ruby

詳細については、『AWS SDK for Ruby』の「create_key」インスタンスメソッドを参照してください。

# Create a CMK

desc = 'Key for protecting critical data'

response = kmsClient.create_key({ description: desc})

PHP

詳細については、『AWS SDK for PHP』の「CreateKey メソッド」を参照してください。

// Create a CMK//$desc = "Key for protecting critical data";

$result = $KmsClient->createKey([

332

Page 341: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーの生成

'Description' => $desc]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「createKey プロパティ」を参照してください。

// Create a CMK//const Description = 'Key for protecting critical data';

kmsClient.createKey({ Description }, (err, data) => { ...});

PowerShell

PowerShell で CMK を作成するには、New-KmsKey コマンドレットを使用します。

# Create a CMK

$desc = 'Key for protecting critical data'New-KmsKey -Description $desc

データキーの生成対称データキーを生成するには、GenerateDataKey オペレーションを使用します。このオペレーションは、対称 CMK を受け取り、プレーンテキストのデータキーと、指定した CMK で暗号化されたデータキーのコピーを返します。各コマンドには、KeySpec または NumberOfBytes のいずれか (両方ではなく) を指定する必要があります。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「generateDataKey メソッド」を参照してください。

// Generate a data key//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest();dataKeyRequest.setKeyId(keyId);dataKeyRequest.setKeySpec("AES_256");

GenerateDataKeyResult dataKeyResult = kmsClient.generateDataKey(dataKeyRequest);

ByteBuffer plaintextKey = dataKeyResult.getPlaintext();

ByteBuffer encryptedKey = dataKeyResult.getCiphertextBlob();

C#

詳細については、『AWS SDK for .NET』の「GenerateDataKey メソッド」を参照してください。

333

Page 342: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーの生成

// Generate a data key//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest(){ KeyId = keyId, KeySpec = DataKeySpec.AES_256};

GenerateDataKeyResponse dataKeyResponse = kmsClient.GenerateDataKey(dataKeyRequest);

MemoryStream plaintextKey = dataKeyResponse.Plaintext;

MemoryStream encryptedKey = dataKeyResponse.CiphertextBlob;

Python

詳細については、『AWS SDK for Python (Boto3)』の「generate_date_key メソッド」を参照してください。

# Generate a data key

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.generate_data_key( KeyId=key_id, KeySpec='AES_256')

plaintext_key = response['Plaintext']

encrypted_key = response['CiphertextBlob']

Ruby

詳細については、『AWS SDK for Ruby』の「generate_data_key」 インスタンスメソッドを参照してください。

# Generate a data key

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.generate_data_key({ key_id: keyId, key_spec: 'AES_256'})

plaintextKey = response.plaintext

encryptedKey = response.ciphertext_blob

PHP

詳細については、『AWS SDK for PHP』の「GenerateDataKey メソッド」を参照してください。

// Generate a data key//

334

Page 343: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーの表示

// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';$keySpec = 'AES_256';

$result = $KmsClient->generateDataKey([ 'KeyId' => $keyId, 'KeySpec' => $keySpec,]);

$plaintextKey = $result['Plaintext'];

$encryptedKey = $result['CiphertextBlob'];

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「generateDataKey プロパティ」を参照してください。

// Generate a data key//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';const KeySpec = 'AES_256';kmsClient.generateDataKey({ KeyId, KeySpec }, (err, data) => { if (err) console.log(err, err.stack); else { const { CiphertextBlob, Plaintext } = data; ... }});

PowerShell

対称データキーを生成するには、New-KMSDataKey コマンドレットを使用します。

出力では、プレーンテキストキー (Plaintext プロパティ内) と暗号化されたキー(CiphertextBlob プロパティ内) は MemoryStream オブジェクトです。これらを文字列に変換するには、MemoryStream クラスのメソッド、または MemoryStream オブジェクトを文字列に変換するコマンドレットまたは関数を使用します。たとえば、「変換」モジュールの ConvertFrom-MemoryStream 関数および ConvertFrom-Base64 関数を使用します。

# Generate a data key

# ###### CMK ARN #### CMK ID ### ARN ######## $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'$keySpec = 'AES_256'

$response = New-KmsDataKey -KeyId $keyId -KeySpec $keySpec$plaintextKey = $response.Plaintext$encryptedKey = $response.CiphertextBlob

カスタマーマスターキーの表示CMK ARN およびキーの状態 (p. 236)を含むカスタマーマスターキー (CMK) についての詳細を取得するには、DescribeKey オペレーションを使用します。

DescribeKey はエイリアスを取得しません。エイリアスを取得するには、ListAliases オペレーションを使用します。例については、「エイリアスの使用 (p. 367)」を参照してください。

335

Page 344: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーの表示

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

AWS KMS コンソールで CMK を表示する方法については、「キーの表示 (p. 26)」を参照してください。

Java

詳細については、『AWS SDK for Java API Reference』の「describeKey メソッド」を参照してください。

// Describe a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

DescribeKeyRequest req = new DescribeKeyRequest().withKeyId(keyId);DescribeKeyResult result = kmsClient.describeKey(req);

C#

詳細については、『AWS SDK for .NET』の「DescribeKey メソッド」を参照してください。

// Describe a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

DescribeKeyRequest describeKeyRequest = new DescribeKeyRequest(){ KeyId = keyId};

DescribeKeyResponse describeKeyResponse = kmsClient.DescribeKey(describeKeyRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「describe_key メソッド」を参照してください。

# Describe a CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.describe_key( KeyId=key_id)

Ruby

詳細については、『AWS SDK for Ruby』の「describe_key」インスタンスメソッドを参照してください。

# Describe a CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.describe_key({

336

Page 345: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーのキー ID およびキー ARN の取得

key_id: keyId})

PHP

詳細については、『AWS SDK for PHP』の「DescribeKey メソッド」を参照してください。

// Describe a CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

$result = $KmsClient->describeKey([ 'KeyId' => $keyId, ]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「describeKey プロパティ」を参照してください。

// Describe a CMK//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';kmsClient.describeKey({ KeyId }, (err, data) => { ...});

PowerShell

CMK に関する詳細情報を取得するには、Get-KmsKey コマンドレットを使用します。

# Describe a CMK

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'Get-KmsKey -KeyId $keyId

カスタマーマスターキーのキー ID およびキー ARN の取得カスタマーマスターキーのキー ID (p. 12) およびキー ARN (p. 12) を取得するには、ListKeys オペレーションを使用します。これらの例では、オプションの Limit パラメータを使用して、各呼び出しで返されるCMK の最大数を設定します。AWS KMS オペレーションで CMK を識別する方法については、「キー識別子 (KeyId) (p. 11)」を参照してください。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

AWS KMS コンソールでキー ID とキー ARN を検索する方法については、「キー ID と ARN を検索する (p. 36)」を参照してください。

Java

詳細については、『AWS SDK for Java API Reference』の「listKeys メソッド」を参照してください。

337

Page 346: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーのキー ID およびキー ARN の取得

// List CMKs in this account//Integer limit = 10;

ListKeysRequest req = new ListKeysRequest().withLimit(limit);ListKeysResult result = kmsClient.listKeys(req);

C#

詳細については、『AWS SDK for .NET』の「ListKeys メソッド」を参照してください。

// List CMKs in this account//int limit = 10;

ListKeysRequest listKeysRequest = new ListKeysRequest(){ Limit = limit};ListKeysResponse listKeysResponse = kmsClient.ListKeys(listKeysRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「list_keys メソッド」を参照してください。

# List CMKs in this account

response = kms_client.list_keys( Limit=10)

Ruby

詳細については、『AWS SDK for Ruby』の「list_keys」インスタンスメソッドを参照してください。

# List CMKS in this account

response = kmsClient.list_keys({ limit: 10})

PHP

詳細については、『AWS SDK for PHP』の「ListKeys メソッド」を参照してください。

// List CMKs in this account//$limit = 10;

$result = $KmsClient->listKeys([ 'Limit' => $limit,]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「listKeys プロパティ」を参照してください。

// List CMKs in this account

338

Page 347: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーの有効化

//const Limit = 10;kmsClient.listKeys({ Limit }, (err, data) => { ...});

PowerShell

アカウントとリージョン内のすべての CMK のキー ID とキー ARN を取得するには、Get-KmsKeyListコマンドレットを使用します。

出力オブジェクト数を制限するために、この例では、Limit パラメータの代わりに Select-Objectコマンドレットを使用します。このパラメータは、リストのコマンドレットでは非推奨です。AWSTools for PowerShell での出力のページ分割については、「AWS Tools for PowerShell での出力ページ分割」を参照してください。

# List CMKs in this account

$limit = 10Get-KmsKeyList | Select-Object -First $limit

カスタマーマスターキーの有効化無効化されたカスタマーマスターキー (CMK) を有効化するには、EnableKey オペレーションを使用します。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

AWS KMS コンソールで CMK を有効または無効にする方法については、「キーの有効化と無効化 (p. 46)」を参照してください。

Java

Java の実装の詳細については、『AWS SDK for Java API Reference』の「enableKey メソッド」を参照してください。

// Enable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

EnableKeyRequest req = new EnableKeyRequest().withKeyId(keyId);kmsClient.enableKey(req);

C#

詳細については、『AWS SDK for .NET』の「EnableKey メソッド」を参照してください。

// Enable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

EnableKeyRequest enableKeyRequest = new EnableKeyRequest(){ KeyId = keyId

339

Page 348: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーの有効化

};kmsClient.EnableKey(enableKeyRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「enable_key メソッド」を参照してください。

# Enable a CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.enable_key( KeyId=key_id)

Ruby

詳細については、『AWS SDK for Ruby』の「enable_key」インスタンスメソッドを参照してください。

# Enable a CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.enable_key({ key_id: keyId})

PHP

詳細については、『AWS SDK for PHP』の「EnableKey メソッド」を参照してください。

// Enable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

$result = $KmsClient->enableKey([ 'KeyId' => $keyId, ]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「enableKey のプロパティ」を参照してください。

// Enable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';kmsClient.enableKey({ KeyId }, (err, data) => { ...});

PowerShell

CMK を有効にするには、Enable-KmsKey コマンドレットを使用します。

340

Page 349: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキーの無効化

# Enable a CMK

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'Enable-KmsKey -KeyId $keyId

カスタマーマスターキーの無効化CMK を無効にするには、DisableKey オペレーションを使用します。無効にした CMK は、暗号化オペレーション (p. 10)で使用されなくなります。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

AWS KMS コンソールで CMK を有効または無効にする方法については、「キーの有効化と無効化 (p. 46)」を参照してください。

Java

詳細については、『AWS SDK for Java API Reference』の「disableKey メソッド」を参照してください。

// Disable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

DisableKeyRequest req = new DisableKeyRequest().withKeyId(keyId);kmsClient.disableKey(req);

C#

詳細については、『AWS SDK for .NET』の「DisableKey メソッド」を参照してください。

// Disable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

DisableKeyRequest disableKeyRequest = new DisableKeyRequest(){ KeyId = keyId};kmsClient.DisableKey(disableKeyRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「disable_key メソッド」を参照してください。

# Disable a CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.disable_key( KeyId=key_id

341

Page 350: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーの暗号化と復号

)

Ruby

詳細については、『AWS SDK for Ruby』の「disable_key」インスタンスメソッドを参照してください。

# Disable a CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.disable_key({ key_id: keyId})

PHP

詳細については、『AWS SDK for PHP』の「DisableKey メソッド」を参照してください。

// Disable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

$result = $KmsClient->disableKey([ 'KeyId' => $keyId, ]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「disableKey プロパティ」を参照してください。

// Disable a CMK//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';kmsClient.disableKey({ KeyId }, (err, data) => { ...});

PowerShell

CMK を無効にするには、Disable-KmsKey コマンドレットを使用します。

# Disable a CMK

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'Disable-KmsKey -KeyId $keyId

データキーの暗号化と復号このトピックの例では、AWS KMS API で Encrypt、Decrypt、ReEncrypt オペレーションを使用します。

342

Page 351: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーの暗号化

これらのオペレーションは、データキー (p. 5)を暗号化および復号化するように設計されています。ここでは、暗号化オペレーションに AWS KMS カスタマーマスターキー (p. 3) (CMK) を使用しますが、4 KB(4096 bytes) 以上のデータを受け付けません。パスワードや RSA キーなどの少量データを暗号化するためにこれを使用できますが、アプリケーションデータを暗号化するために設計されていません。

アプリケーションデータを暗号化するには、AWS サービスのサーバー側の暗号化機能、あるいはクライアント側の暗号化ライブラリを使用します (AWS 暗号化 SDK や Amazon S3 暗号化クライアント など)。

トピック• データキーの暗号化 (p. 343)• データキーの復号化 (p. 345)• 異なるカスタマーマスターキーによるデータキーの再暗号化 (p. 347)

データキーの暗号化暗号化オペレーションは、データキーを暗号化するように設計されていますが、頻繁には使用されていません。GenerateDataKey および GenerateDataKeyWithoutPlaintext オペレーションは、暗号化されたデータキーを返します。暗号化されたデータを異なるリージョンに移動し、この新しいリージョンで CMK でデータキーを暗号化するときにこのメソッドを使用できます。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「暗号化メソッド」を参照してください。

// Encrypt a data key//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";ByteBuffer plaintext = ByteBuffer.wrap(new byte[]{1,2,3,4,5,6,7,8,9,0});

EncryptRequest req = new EncryptRequest().withKeyId(keyId).withPlaintext(plaintext);ByteBuffer ciphertext = kmsClient.encrypt(req).getCiphertextBlob();

C#

詳細については、『AWS SDK for .NET』の「暗号化メソッド」を参照してください。

// Encrypt a data key//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";MemoryStream plaintext = new MemoryStream();plaintext.Write(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }, 0, 10);

EncryptRequest encryptRequest = new EncryptRequest(){ KeyId = keyId, Plaintext = plaintext};MemoryStream ciphertext = kmsClient.Encrypt(encryptRequest).CiphertextBlob;

Python

詳細については、『AWS SDK for Python (Boto3)』の「暗号化メソッド」を参照してください。

343

Page 352: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーの暗号化

# Encrypt a data key

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'plaintext = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x00'

response = kms_client.encrypt( KeyId=key_id, Plaintext=plaintext)

ciphertext = response['CiphertextBlob']

Ruby

詳細については、『AWS SDK for Ruby』の「encrypt」インスタンスメソッドを参照してください。

# Encrypt a data key

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'plaintext = "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x00"

response = kmsClient.encrypt({ key_id: keyId, plaintext: plaintext})

ciphertext = response.ciphertext_blob

PHP

詳細については、『AWS SDK for PHP』の「暗号化メソッド」を参照してください。

// Encrypt a data key//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';$message = pack('c*',1,2,3,4,5,6,7,8,9,0);

$result = $KmsClient->encrypt([ 'KeyId' => $keyId, 'Plaintext' => $message, ]);

$ciphertext = $result['CiphertextBlob'];

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「暗号化プロパティ」を参照してください。

// Encrypt a data key//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';const Plaintext = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]);kmsClient.encrypt({ KeyId, Plaintext }, (err, data) => { if (err) console.log(err, err.stack); // an error occurred else { const { CiphertextBlob } = data;

344

Page 353: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーの復号化

... }});

PowerShell

AWS KMS CMK でデータキーを暗号化するには、Invoke-KMSEncrypt コマンドレットを使用します。これは、MemoryStream (System.IO.MemoryStream) オブジェクトとして暗号文を返します。このMemoryStream オブジェクトは Invoke-KMSDecrypt コマンドレットへの入力として使用できます。

AWS KMS もまた、データキーを MemoryStream オブジェクトとして返します。この例では、プレーンテキストのデータキーをシミュレートするために、バイト配列を作成して MemoryStream オブジェクトに書き込みます。

Invoke-KMSEncrypt の Plaintext パラメータは、バイト配列 (byte[]) を受けとります。MemoryStream オブジェクトは必要ありません。AWSPowerShell バージョン 4.0 以降、バイト配列と MemoryStream オブジェクトを受け取るすべての AWSPowerShell モジュールのパラメータは、バイト配列、MemoryStream オブジェクト、文字列、文字列配列FileInfo (System.IO.FileInfo)オブジェクトを受け入れます。これらのタイプのいずれも Invoke-KMSEncrypt に渡すことができます。

# Encrypt a data key

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

# Simulate a data key # Create a byte array[byte[]] $bytes = 1, 2, 3, 4, 5, 6, 7, 8, 9, 0

# Create a MemoryStream $plaintext = [System.IO.MemoryStream]::new()

# Add the byte array to the MemoryStream$plaintext.Write($bytes, 0, $bytes.length)

# Encrypt the simulated data key$response = Invoke-KMSEncrypt -KeyId $keyId -Plaintext $plaintext

# Get the ciphertext from the response$ciphertext = $response.CiphertextBlob

データキーの復号化データキーを復号するには、復号 オペレーションを使用します。

指定する ciphertextBlob は、GenerateDataKey、GenerateDataKeyWithoutPlaintext、または Encrypt 応答からの CiphertextBlob フィールドの値、または GenerateDataKeyPair またはGenerateDataKeyPairWithoutPlaintext からの PrivateKeyCiphertextBlob フィールドの値である必要があります。また、Decrypt オペレーションを使用して、非対称 CMK のパブリックキーによって AWSKMS 外部で暗号化されたデータを復号することもできます。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「decrypt メソッド」を参照してください。

345

Page 354: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドデータキーの復号化

// Decrypt a data key//

ByteBuffer ciphertextBlob = Place your ciphertext here;

DecryptRequest req = new DecryptRequest().withCiphertextBlob(ciphertextBlob);ByteBuffer plainText = kmsClient.decrypt(req).getPlaintext();

C#

詳細については、『AWS SDK for .NET』の「Decrypt メソッド」を参照してください。

// Decrypt a data key//

MemoryStream ciphertextBlob = new MemoryStream();// Write ciphertext to memory stream

DecryptRequest decryptRequest = new DecryptRequest(){ CiphertextBlob = ciphertextBlob};MemoryStream plainText = kmsClient.Decrypt(decryptRequest).Plaintext;

Python

詳細については、『AWS SDK for Python (Boto3)』の「decrypt メソッド」を参照してください。

# Decrypt a data key

ciphertext = 'Place your ciphertext here'

response = kms_client.decrypt( CiphertextBlob=ciphertext)

plaintext = response['Plaintext']

Ruby

詳細については、『AWS SDK for Ruby』の「decrypt」インスタンスメソッドを参照してください。

# Decrypt a data key

ciphertext = 'Place your ciphertext here'ciphertext_packed = [ciphertext].pack("H*")

response = kmsClient.decrypt({ ciphertext_blob: ciphertext_packed})

plaintext = response.plaintext

PHP

詳細については、『AWS SDK for PHP』の「Decrypt メソッド」を参照してください。

// Decrypt a data key//$ciphertext = 'Place your cipher text blob here';

346

Page 355: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド異なるカスタマーマスターキーによるデータキーの再暗号化

$result = $KmsClient->decrypt([ 'CiphertextBlob' => $ciphertext]);

$plaintext = $result['Plaintext'];

Node.js

詳細については、AWS SDK for JavaScript in Node.js の「decrypt プロパティ」を参照してください。

// Decrypt a data key//const CiphertextBlob = 'Place your cipher text blob here';kmsClient.decrypt({ CiphertextBlob }, (err, data) => { if (err) console.log(err, err.stack); // an error occurred else { const { Plaintext } = data; ... }});

PowerShell

データキーを復号化するには、Invoke-KMSEncrypt コマンドレットを使用します。

このコマンドレットは、プレーンテキストを MemoryStream (System.IO.MemoryStream) オブジェクトとして返します。これをバイト配列に変換するには、「変換」モジュールの関数など、MemoryStream オブジェクトをバイト配列に変換するコマンドレットまたは関数を使用します。

この例では、AWS KMS 暗号化コマンドレットが返す暗号テキストを使用するため、CiphertextBlob パラメータの値には MemoryStream オブジェクトを使用します。ただし、Invoke-KMSDecrypt の CiphertextBlob パラメータはバイト配列 (byte[]) を受けとります。MemoryStream オブジェクトは必要ありません。AWSPowerShell バージョン 4.0 以降、バイト配列と MemoryStream オブジェクトを受け取るすべての AWSPowerShell モジュールのパラメータは、バイト配列、MemoryStream オブジェクト、文字列、文字列配列FileInfo (System.IO.FileInfo)オブジェクトを受け入れます。これらのタイプのいずれも Invoke-KMSDecrypt に渡すことができます。

# Decrypt a data key

[System.IO.MemoryStream]$ciphertext = Read-Host 'Place your cipher text blob here'

$response = Invoke-KMSDecrypt -CiphertextBlob $ciphertext$plaintext = $response.Plaintext

異なるカスタマーマスターキーによるデータキーの再暗号化暗号化されたデータキーを復号し、続いてすぐに異なるカスタマーマスターキー (CMK) でデータキーを再暗号化するには、再暗号化オペレーションを使用します。このオペレーションは AWS KMS 内のサーバー側で完全に実行されるため、プレーンテキストが AWS KMS の外部に公開されることはありません。

指定する ciphertextBlob は、GenerateDataKey、GenerateDataKeyWithoutPlaintext、または Encrypt 応答からの CiphertextBlob フィールドの値、または GenerateDataKeyPair またはGenerateDataKeyPairWithoutPlaintext からの PrivateKeyCiphertextBlob フィールドの値である必

347

Page 356: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド異なるカスタマーマスターキーによるデータキーの再暗号化

要があります。また、ReEncrypt オペレーションを使用して、非対称 CMK のパブリックキーによってAWS KMS 外部で暗号化されたデータを暗号化することもできます。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「reEncrypt メソッド」を参照してください。

// Re-encrypt a data key

ByteBuffer sourceCiphertextBlob = Place your ciphertext here;

// ###### CMK ARN #### CMK ID ### ARN ########String destinationKeyId = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321";

ReEncryptRequest req = new ReEncryptRequest();req.setCiphertextBlob(sourceCiphertextBlob);req.setDestinationKeyId(destinationKeyId);ByteBuffer destinationCipherTextBlob = kmsClient.reEncrypt(req).getCiphertextBlob();

C#

詳細については、『AWS SDK for .NET』の「ReEncrypt メソッド」を参照してください。

// Re-encrypt a data key

MemoryStream sourceCiphertextBlob = new MemoryStream();// Write ciphertext to memory stream

// ###### CMK ARN #### CMK ID ### ARN ########String destinationKeyId = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321";

ReEncryptRequest reEncryptRequest = new ReEncryptRequest(){ CiphertextBlob = sourceCiphertextBlob, DestinationKeyId = destinationKeyId};MemoryStream destinationCipherTextBlob = kmsClient.ReEncrypt(reEncryptRequest).CiphertextBlob;

Python

詳細については、『AWS SDK for Python (Boto3)』の「re_encrypt メソッド」を参照してください。

# Re-encrypt a data keyciphertext = 'Place your ciphertext here'

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'

response = kms_client.re_encrypt( CiphertextBlob=ciphertext, DestinationKeyId=key_id)

destination_ciphertext_blob = response['CiphertextBlob']

348

Page 357: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド異なるカスタマーマスターキーによるデータキーの再暗号化

Ruby

詳細については、『AWS SDK for Ruby』の「re_encrypt」インスタンスメソッドを参照してください。

# Re-encrypt a data key

ciphertext = 'Place your ciphertext here'ciphertext_packed = [ciphertext].pack("H*")

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'

response = kmsClient.re_encrypt({ ciphertext_blob: ciphertext_packed, destination_key_id: keyId})

destination_ciphertext_blob = response.ciphertext_blob.unpack('H*')

PHP

詳細については、『AWS SDK for PHP』の「ReEncrypt メソッド」を参照してください。

// Re-encrypt a data key

$ciphertextBlob = 'Place your ciphertext here';

// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321';

$result = $KmsClient->reEncrypt([ 'CiphertextBlob' => $ciphertextBlob, 'DestinationKeyId' => $keyId, ]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「reEncrypt プロパティ」を参照してください。

// Re-encrypt a data keyconst CiphertextBlob = 'Place your cipher text blob here';// ###### CMK ARN #### CMK ID ### ARN ########const DestinationKeyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321';kmsClient.reEncrypt({ CiphertextBlob, DestinationKeyId }, (err, data) => { ...});

PowerShell

同じ CMK または異なる CMK で暗号テキストを再暗号化するには、 Invoke-KMSReEncrypt コマンドレットを使用します。

この例では、AWS KMS 暗号化コマンドレットが返す暗号テキストを使用するため、CiphertextBlob パラメータの値には MemoryStream オブジェクトを使用します。ただし、Invoke-KMSReEncrypt の CiphertextBlob パラメータはバイト配列 (byte[]) を受けとります。MemoryStream オブジェクトは必要ありません。AWSPowerShell バージョン 4.0 以降、バイト配列と MemoryStream オブジェクトを受け取るすべての AWSPowerShell モジュールのパラメータ

349

Page 358: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの使用

は、バイト配列、MemoryStream オブジェクト、文字列、文字列配列FileInfo (System.IO.FileInfo)オブジェクトを受け入れます。これらのタイプのいずれも Invoke-KMSReEncrypt に渡すことができます。

# Re-encrypt a data key

[System.IO.MemoryStream]$ciphertextBlob = Read-Host 'Place your cipher text blob here'

# ###### CMK ARN #### CMK ID ### ARN ########$destinationKeyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'

$response = Invoke-KMSReEncrypt -Ciphertext $ciphertextBlob -DestinationKeyId $destinationKeyId$reEncryptedCiphertext = $response.CiphertextBlob

キーポリシーの使用このトピックの例では、AWS KMS API を使用して AWS KMS カスタマーマスターキー (CMK) のキーポリシーを表示して変更します。CMK へのアクセスを管理するキーポリシーおよび IAM ポリシーを使用する方法についての詳細は、「AWS KMS の認証とアクセスコントロール (p. 51)」を参照してください。

トピック• キーポリシー名のリスト化 (p. 350)• キーポリシーの取得 (p. 352)• キーポリシーの設定 (p. 354)

キーポリシー名のリスト化カスタマーマスターキーのキーポリシーの名前を取得するには、ListKeyPolicies オペレーションを使用します。返される唯一のキーポリシー名は、default です。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

Java の実装の詳細については、『AWS SDK for Java API Reference』の「listKeyPolicies メソッド」を参照してください。

// List key policies//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

ListKeyPoliciesRequest req = new ListKeyPoliciesRequest().withKeyId(keyId);ListKeyPoliciesResult result = kmsClient.listKeyPolicies(req);

C#

詳細については、『AWS SDK for .NET』の「ListKeyPolicies メソッド」を参照してください。

// List key policies

350

Page 359: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシー名のリスト化

//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

ListKeyPoliciesRequest listKeyPoliciesRequest = new ListKeyPoliciesRequest(){ KeyId = keyId};ListKeyPoliciesResponse listKeyPoliciesResponse = kmsClient.ListKeyPolicies(listKeyPoliciesRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「list_key_policies メソッド」を参照してください。

# List key policies

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.list_key_policies( KeyId=key_id)

Ruby

詳細については、『AWS SDK for Ruby』の「list_key_policies」インスタンスメソッドを参照してください。

# List key policies

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.list_key_policies({ key_id: keyId})

PHP

詳細については、『AWS SDK for PHP』の「ListKeyPolicies メソッド」を参照してください。

// List key policies//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

$result = $KmsClient->listKeyPolicies([ 'KeyId' => $keyId]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「listKeyPolicies プロパティ」を参照してください。

// List key policies//

351

Page 360: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの取得

// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

kmsClient.listKeyPolicies({ KeyId }, (err, data) => { ...});

PowerShell

デフォルトのキーポリシーの名前を一覧表示するには、Get-KMSKeyPolicyList コマンドレットを使用します。

# List key policies

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'$response = Get-KMSKeyPolicyList -KeyId $keyId

キーポリシーの取得カスタマーマスターキーのキーポリシーを取得するには、GetKeyPolicy オペレーションを使用します。

GetKeyPolicy ではポリシー名が必要です。唯一の有効なポリシー名は、default です。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「getKeyPolicy メソッド」を参照してください。

// Get the policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";String policyName = "default";

GetKeyPolicyRequest req = new GetKeyPolicyRequest().withKeyId(keyId).withPolicyName(policyName);GetKeyPolicyResult result = kmsClient.getKeyPolicy(req);

C#

詳細については、『AWS SDK for .NET』の「GetKeyPolicy メソッド」を参照してください。

// Get the policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";String policyName = "default";

GetKeyPolicyRequest getKeyPolicyRequest = new GetKeyPolicyRequest(){ KeyId = keyId,

352

Page 361: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの取得

PolicyName = policyName};GetKeyPolicyResponse getKeyPolicyResponse = kmsClient.GetKeyPolicy(getKeyPolicyRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「get_key_policy メソッド」を参照してください。

# Get the policy for a CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'policy_name = 'default'

response = kms_client.get_key_policy( KeyId=key_id, PolicyName=policy_name)

Ruby

詳細については、『AWS SDK for Ruby』の「get_key_policy」インスタンスメソッドを参照してください。

# Get the policy for a CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'policyName = 'default'

response = kmsClient.get_key_policy({ key_id: keyId, policy_name: policyName})

PHP

詳細については、『AWS SDK for PHP』の「GetKeyPolicy メソッド」を参照してください。

// Get the policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';$policyName = "default";

$result = $KmsClient->getKeyPolicy([ 'KeyId' => $keyId, 'PolicyName' => $policyName]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「getKeyPolicy プロパティ」を参照してください。

// Get the policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########

353

Page 362: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの設定

const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';const PolicyName = 'default';kmsClient.getKeyPolicy({ KeyId, PolicyName }, (err, data) => { ...});

PowerShell

CMK のキーポリシーを取得するには、Get-KMSKeyPolicy コマンドレットを使用します。このコマンドレットは、キーポリシーを文字列 (System.String) 形式で返します。この文字列は、Write-KMSKeyPolicy (PutKeyPolicy) コマンドで使用できます。JSON 文字列のポリシーをPSCustomObject オブジェクトに変換するには、ConvertFrom-JSON コマンドレットを使用します。

# Get the policy for a CMK

# Replace the following fictitious CMK ARN with a valid CMK ID or ARN$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'$policyName = 'default'

$response = Get-KMSKeyPolicy -KeyId $keyId -PolicyName $policyName

キーポリシーの設定CMK のキーポリシーを作成または置き換えるには、PutKeyPolicy オペレーションを使用します。

PutKeyPolicy では、ポリシー名が必要です。唯一の有効なポリシー名は、default です。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「putKeyPolicy メソッド」を参照してください。

// Set a key policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";String policyName = "default";String policy = "{" + " \"Version\": \"2012-10-17\"," + " \"Statement\": [{" + " \"Sid\": \"Allow access for ExampleUser\"," + " \"Effect\": \"Allow\"," + // Replace the following user ARN with one for a real user. " \"Principal\": {\"AWS\": \"arn:aws:iam::111122223333:user/ExampleUser\"}," + " \"Action\": [" + " \"kms:Encrypt\"," + " \"kms:GenerateDataKey*\"," + " \"kms:Decrypt\"," + " \"kms:DescribeKey\"," + " \"kms:ReEncrypt*\"" + " ]," + " \"Resource\": \"*\"" + " }]" +

354

Page 363: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの設定

"}"; PutKeyPolicyRequest req = new PutKeyPolicyRequest().withKeyId(keyId).withPolicy(policy).withPolicyName(policyName);kmsClient.putKeyPolicy(req);

C#

詳細については、『AWS SDK for .NET』の「PutKeyPolicy メソッド」を参照してください。

// Set a key policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";String policyName = "default";String policy = "{" + " \"Version\": \"2012-10-17\"," + " \"Statement\": [{" + " \"Sid\": \"Allow access for ExampleUser\"," + " \"Effect\": \"Allow\"," + // Replace the following user ARN with one for a real user. " \"Principal\": {\"AWS\": \"arn:aws:iam::111122223333:user/ExampleUser\"}," + " \"Action\": [" + " \"kms:Encrypt\"," + " \"kms:GenerateDataKey*\"," + " \"kms:Decrypt\"," + " \"kms:DescribeKey\"," + " \"kms:ReEncrypt*\"" + " ]," + " \"Resource\": \"*\"" + " }]" + "}"; PutKeyPolicyRequest putKeyPolicyRequest = new PutKeyPolicyRequest(){ KeyId = keyId, Policy = policy, PolicyName = policyName};kmsClient.PutKeyPolicy(putKeyPolicyRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「put_key_policy メソッド」を参照してください。

# Set a key policy for a CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'policy_name = 'default'policy = """{ "Version": "2012-10-17", "Statement": [{ "Sid": "Allow access for ExampleUser", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"}, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*",

355

Page 364: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの設定

"kms:Decrypt", "kms:DescribeKey", "kms:ReEncrypt*" ], "Resource": "*" }]}"""

response = kms_client.put_key_policy( KeyId=key_id, Policy=policy, PolicyName=policy_name)

Ruby

詳細については、『AWS SDK for Ruby』の「put_key_policy」インスタンスメソッドを参照してください。

# Set a key policy for a CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'policyName = 'default'policy = "{\n\n "Version": "2012-10-17",\n "Statement": [{\n "Sid": "Allow access for ExampleUser",\n "Effect": "Allow",\n "Principal": {"AWS": "arn:aws:iam::111122223333:user/ExampleUser"},\n "Action": [\n "kms:Encrypt",\n "kms:GenerateDataKey*",\n "kms:Decrypt",\n "kms:DescribeKey",\n "kms:ReEncrypt*"\n ],\n "Resource": "*"\n }]\n}\n"

response = kmsClient.put_key_policy({ key_id: keyId, policy: policy, policy_name: policyName})

PHP

詳細については、『AWS SDK for PHP』の「PutKeyPolicy メソッド」を参照してください。

// Set a key policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';$policyName = "default";

$result = $KmsClient->putKeyPolicy([ 'KeyId' => $keyId, 'PolicyName' => $policyName, 'Policy' => '{ "Version": "2012-10-17", "Id": "custom-policy-2016-12-07",

356

Page 365: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシーの設定

"Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/root" }, "Action": [ "kms:*" ], "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt*", "kms:GenerateDataKey*", "kms:Decrypt*", "kms:DescribeKey*", "kms:ReEncrypt*" ], "Resource": "*" } ] } ' ]);

Node.js

詳細については、『AWS SDK for Node.js』の「putKeyPolicy プロパティ」を参照してください。

// Set a key policy for a CMK//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';const PolicyName = 'default';const Policy = `{ "Version": "2012-10-17", "Id": "custom-policy-2016-12-07", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt*", "kms:GenerateDataKey*", "kms:Decrypt*", "kms:DescribeKey*", "kms:ReEncrypt*" ], "Resource": "*" } ]}`; // The key policy document kmsClient.putKeyPolicy({ KeyId, Policy, PolicyName }, (err, data) => {

357

Page 366: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の使用

...});

PowerShell

CMK のキーポリシーを設定するには、Write-KMSKeyPolicy コマンドレットを使用します。このコマンドレットは出力を返しません。コマンドが有効であることを確認するには、Get-KMSKeyPolicy コマンドレットを使用します。

Policy パラメータは文字列を受け取ります。リテラル文字列にするには、文字列を一重引用符で囲みます。リテラル文字列で継続文字やエスケープ文字を使用する必要はありません。

# Set a key policy for a CMK

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'$policyName = 'default'$policy = '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:Encrypt*", "kms:GenerateDataKey*", "kms:Decrypt*", "kms:DescribeKey*", "kms:ReEncrypt*" ], "Resource": "*" }] }'

Write-KMSKeyPolicy -KeyId $keyId -PolicyName $policyName -Policy $policy

許可の使用このトピックの例では、AWS KMS API を使用して AWS KMS カスタマーマスターキー (CMK) を作成、表示、廃止、および権限付与を解除します。AWS KMS での許可の使用の詳細については、「許可の使用 (p. 123)」を参照してください。

トピック• 許可の作成 (p. 359)• 許可の表示 (p. 361)• 許可の廃止 (p. 363)• 許可の取り消し (p. 365)

358

Page 367: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の作成

許可の作成AWS KMS カスタマーマスターキーの許可を作成するには、CreateGrant オペレーションを使用します。応答には、許可 ID と許可トークンのみが含まれます。許可の詳細情報を取得するには、「許可の表示 (p. 361)」に示されるように ListGrants オペレーションを使用します。

これらの例では、アカウントの IAM ユーザーである Alice が KeyId パラメータによって識別される CMKで GenerateDataKey オペレーションを呼び出す許可を作成します。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「createGrant メソッド」を参照してください。

// Create a grant//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";String granteePrincipal = "arn:aws:iam::111122223333:user/Alice";String operation = GrantOperation.GenerateDataKey.toString();

CreateGrantRequest request = new CreateGrantRequest() .withKeyId(keyId) .withGranteePrincipal(granteePrincipal) .withOperations(operation);

CreateGrantResult result = kmsClient.createGrant(request);

C#

詳細については、『AWS SDK for .NET』の「createGrant メソッド」を参照してください。

// Create a grant//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";String granteePrincipal = "arn:aws:iam::111122223333:user/Alice";String operation = GrantOperation.GenerateDataKey;

CreateGrantRequest createGrantRequest = new CreateGrantRequest(){ KeyId = keyId, GranteePrincipal = granteePrincipal, Operations = new List<string>() { operation }};

CreateGrantResponse createGrantResult = kmsClient.CreateGrant(createGrantRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「create_grant メソッド」を参照してください。

# Create a grant

359

Page 368: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の作成

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'grantee_principal = 'arn:aws:iam::111122223333:user/Alice'operation = ['GenerateDataKey']

response = kms_client.create_grant( KeyId=key_id, GranteePrincipal=grantee_principal, Operations=operation)

Ruby

詳細については、『AWS SDK for Ruby』の「create_grant」インスタンスメソッドを参照してください。

# Create a grant

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'granteePrincipal = 'arn:aws:iam::111122223333:user/Alice'operation = ['GenerateDataKey']

response = kmsClient.create_grant({ key_id: keyId, grantee_principal: granteePrincipal, operations: operation})

PHP

詳細については、『AWS SDK for PHP』の「createGrant メソッド」を参照してください。

// Create a grant//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';$granteePrincipal = "arn:aws:iam::111122223333:user/Alice";$operation = ['GenerateDataKey']

$result = $KmsClient->createGrant([ 'GranteePrincipal' => $granteePrincipal, 'KeyId' => $keyId, 'Operations' => $operation ]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「createGrant プロパティ」を参照してください。

// Create a grant//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';const GranteePrincipal = 'arn:aws:iam::111122223333:user/Alice';const Operations: ["GenerateDataKey"];kmsClient.createGrant({ KeyId, GranteePrincipal, Operations }, (err, data) => { ...});

360

Page 369: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の表示

PowerShell

許可を作成するには、New-KMSGrant コマンドレットを使用します。

# Create a grant # ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'$granteePrincipal = 'arn:aws:iam::111122223333:user/Alice'$operation = 'GenerateDataKey'

$response = New-KMSGrant -GranteePrincipal $granteePrincipal -KeyId $keyId -Operation $operation

許可の表示AWS KMS カスタマーマスターキーの許可の詳細情報を取得するには、ListGrants オペレーションを使用します。これらの例では、オプションの Limits パラメータを使用して、オペレーションが返す許可の数を決定します。

Note

通常、ListGrants レスポンスの GranteePrincipal フィールドには、許可の被付与者プリンシパルが含まれます。ただし、許可の被付与者プリンシパルが AWS サービスの場合、GranteePrincipal フィールドにはサービスプリンシパルが含まれます。サービスプリンシパルは、複数の異なる被付与者プリンシパルを表す場合があります。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

Java の実装の詳細については、『AWS SDK for Java API Reference』の「listGrants メソッド」を参照してください。

// Listing grants on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";Integer limit = 10;

ListGrantsRequest req = new ListGrantsRequest().withKeyId(keyId).withLimit(limit);ListGrantsResult result = kmsClient.listGrants(req);

C#

詳細については、『AWS SDK for .NET』の「ListGrants メソッド」を参照してください。

// Listing grants on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";int limit = 10;

ListGrantsRequest listGrantsRequest = new ListGrantsRequest(){ KeyId = keyId, Limit = limit

361

Page 370: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の表示

};ListGrantsResponse listGrantsResponse = kmsClient.ListGrants(listGrantsRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「list_grants メソッド」を参照してください。

# Listing grants on a CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.list_grants( KeyId=key_id, Limit=10)

Ruby

詳細については、『AWS SDK for Ruby』の「list_grants」インスタンスメソッドを参照してください。

# Listing grants on a CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.list_grants({ key_id: keyId, limit: 10})

PHP

詳細については、『AWS SDK for PHP』の「ListGrants メソッド」を参照してください。

// Listing grants on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';$limit = 10;

$result = $KmsClient->listGrants([ 'KeyId' => $keyId, 'Limit' => $limit,]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「listGrants プロパティ」を参照してください。

// Listing grants on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';const Limit = 10;kmsClient.listGrants({ KeyId, Limit }, (err, data) => { ...});

362

Page 371: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の廃止

PowerShell

CMK のすべての AWS KMS 許可の詳細を表示するには、Get-KMSGrantList コマンドレットを使用します。

出力オブジェクト数を制限するために、この例では、Limit パラメータの代わりに Select-Objectコマンドレットを使用します。このパラメータは、リストのコマンドレットでは非推奨です。AWSTools for PowerShell での出力のページ分割については、「AWS Tools for PowerShell での出力ページ分割」を参照してください。

# Listing grants on a CMK

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'$limit = 10

$response = Get-KMSGrantList -KeyId $keyId | Select-Object -First $limit

許可の廃止AWS KMS カスタマーマスターキーの許可を廃止するには、RetireGrant オペレーションを使用します。許可の使用が完了した後でクリーンアップを実行する場合に、許可を無効にする必要があります。

許可を解除するには、許可トークン、または許可 ID と CMK ID の両方を指定します。このオペレーションでは、CMK ID は CMK の Amazon リソースネーム (ARN) (p. 36) である必要があります。許可トークンは、CreateGrant オペレーションによって返されます。許可 ID は、CreateGrant オペレーションとListGrants オペレーションによって返されます。

RetireGrant は応答を返しません。有効であることを確認するには、ListGrants オペレーションを使用します。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「retireGrant メソッド」を参照してください。

// Retire a grant//String grantToken = Place your grant token here;

RetireGrantRequest req = new RetireGrantRequest().withGrantToken(grantToken);kmsClient.retireGrant(req);

C#

詳細については、『AWS SDK for .NET』の「RetireGrant メソッド」を参照してください。

// Retire a grant//String grantToken = "Place your grant token here";

RetireGrantRequest retireGrantRequest = new RetireGrantRequest(){ GrantToken = grantToken};

363

Page 372: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の廃止

kmsClient.RetireGrant(retireGrantRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「retire_grant メソッド」を参照してください。

# Retire a grant

grant_token = Place your grant token here

response = kms_client.retire_grant( GrantToken=grant_token)

Ruby

詳細については、『AWS SDK for Ruby』の「retire_grant」インスタンスメソッドを参照してください。

# Retire a grant

grantToken = Place your grant token here

response = kmsClient.retire_grant({ grant_token: grantToken})

PHP

詳細については、『AWS SDK for PHP』の「RetireGrant メソッド」を参照してください。

// Retire a grant//$grantToken = 'Place your grant token here';

$result = $KmsClient->retireGrant([ 'GrantToken' => $grantToken,]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「retireGrant プロパティ」を参照してください。

// Retire a grant//const GrantToken = 'Place your grant token here';kmsClient.retireGrant({ GrantToken }, (err, data) => { ...});

PowerShell

許可を解除するには、Disable-KMSGrant コマンドレットを使用します。許可トークンを取得するには、New-KMSGrant コマンドレットを使用します。GrantToken パラメータは文字列を受け取るため、Read-Host コマンドレットが返す出力を変換する必要はありません。

# Retire a grant

$grantToken = Read-Host -Message Place your grant token here

364

Page 373: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の取り消し

Disable-KMSGrant -GrantToken $grantToken

許可の取り消しAWS KMS カスタマーマスターキーの許可を取り消すには、RevokeGrant オペレーションを使用します。許可を取り消して、許可に依存しているオペレーションを明示的に拒否することができます。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「revokeGrant メソッド」を参照してください。

// Revoke a grant on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

// &fake-grant-id;String grantId = "grant1";

RevokeGrantRequest req = new RevokeGrantRequest().withKeyId(keyId).withGrantId(grantId);kmsClient.revokeGrant(req);

C#

詳細については、『AWS SDK for .NET』の「RevokeGrant メソッド」を参照してください。

// Revoke a grant on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

// &fake-grant-id;String grantId = "grant1";

RevokeGrantRequest revokeGrantRequest = new RevokeGrantRequest(){ KeyId = keyId, GrantId = grantId};kmsClient.RevokeGrant(revokeGrantRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「revoke_grant メソッド」を参照してください。

# Revoke a grant on a CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

# &fake-grant-id;

365

Page 374: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド許可の取り消し

grant_id = 'grant1'

response = kms_client.revoke_grant( KeyId=key_id, GrantId=grant_id)

Ruby

詳細については、『AWS SDK for Ruby』の「revoke_grant」インスタンスメソッドを参照してください。

# Revoke a grant on a CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

# &fake-grant-id;grantId = 'grant1'

response = kmsClient.revoke_grant({ key_id: keyId, grant_id: grantId})

PHP

詳細については、『AWS SDK for PHP』の「RevokeGrant メソッド」を参照してください。

// Revoke a grant on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

// ######## ID ##############$grantId = "grant1";

$result = $KmsClient->revokeGrant([ 'KeyId' => $keyId, 'GrantId' => $grantId,]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「revokeGrant プロパティ」を参照してください。

// Revoke a grant on a CMK//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

// ######## ID ##############const GrantId = 'grant1';kmsClient.revokeGrant({ GrantId, KeyId }, (err, data) => { ...});

PowerShell

許可を取り消すには、Revoke-KMSGrant コマンドレットを使用します。

366

Page 375: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの使用

# Revoke a grant on a CMK

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

# ######## ID ##############$grantId = 'grant1'

Revoke-KMSGrant -KeyId $keyId -GrantId $grantId

エイリアスの使用このトピックの例では、AWS KMS API を使用してエイリアスを作成、表示、更新、および削除します。

エイリアスは、カスタマーマスターキー (CMK) (p. 3) のオプションの表示名です。エイリアス名 (p. 12)またはエイリアス ARN (p. 12) を暗号化オペレーション (p. 10) (Encrypt や Decrypt など) で KeyId パラメータの値として使用できます。

各 CMK に複数のエイリアスを持つことができますが、各 CMK は 1 つの CMK のみを指します。エイリアス名は AWS アカウントおよびリージョン内で一意である必要があります。また、各エイリアスは、そのアカウントおよびリージョンの CMK と関連付ける必要があります。複数のリージョンで実行するコードを簡素化するために同じエイリアス名を使用できますが、各リージョンの異なる CMK を指してください。

AWS KMS API オペレーションを使用して、エイリアスを作成、一覧表示、および削除できます。エイリアスを更新することもできます。その場合、既存のエイリアスが別の CMK に関連付けられます。エイリアス名を編集または変更するオペレーションはありません。既にエイリアスがある CMK 用にエイリアスを作成した場合、同じ CMK 用の別のエイリアスが作成されます。エイリアス名を変更するには、現在のエイリアスを削除してから CMK 用の新しいエイリアスを作成します。

エイリアスは CMK のプロパティではないので、CMK のプロパティを変更することなく既存の CMK に関連付けることも、関連付けを解除することもできます。エイリアスを削除しても、基になる CMK は削除されません。

エイリアスを指定するには、以下の例に示すように、エイリアス名またはエイリアス ARN を使用します。どちらの場合も、エイリアス名の前に "alias/" を付けてください。

// Alias ARNarn:aws:kms:us-west-2:111122223333:alias/ExampleAlias

// Alias namealias/ExampleAlias

トピック• エイリアスの作成 (p. 367)• エイリアスのリスト化 (p. 370)• エイリアスの更新 (p. 373)• エイリアスの削除 (p. 375)

エイリアスの作成エイリアスを作成するには、CreateAlias オペレーションを使用します。エイリアスはアカウントとリージョンで一意であることが必要です。既にエイリアスがある CMK 用にエイリアスを作成した場

367

Page 376: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの作成

合、CreateAlias によって同じ CMK に対して別のエイリアスが作成されます。既存のエイリアスは置き換えられません。

エイリアス名は alias/ で始まり、その後に名前が続きます (alias/ExampleAlias など)。エイリアス名に使用できるのは、英数字、スラッシュ (/)、アンダースコア (_)、およびダッシュ (-) のみです。エイリアス名の先頭を alias/aws/ にすることはできません。alias/aws/ プレフィックスは、AWS 管理CMK (p. 3) のために予約されています。

CreateAlias オペレーションはどのような出力も返しません。エイリアスが作成されたことを確認するには、ListAliases オペレーションを使用します。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「createAlias メソッド」を参照してください。

// Create an alias for a CMK//String aliasName = "alias/projectKey1";// ###### CMK ARN #### CMK ID ### ARN ########String targetKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

CreateAliasRequest req = new CreateAliasRequest().withAliasName(aliasName).withTargetKeyId(targetKeyId);kmsClient.createAlias(req);

C#

詳細については、『AWS SDK for .NET』の「CreateAlias メソッド」を参照してください。

// Create an alias for a CMK//String aliasName = "alias/projectKey1";// ###### CMK ARN #### CMK ID ### ARN ########String targetKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

CreateAliasRequest createAliasRequest = new CreateAliasRequest(){ AliasName = aliasName, TargetKeyId = targetKeyId};kmsClient.CreateAlias(createAliasRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「create_alias メソッド」を参照してください。

# Create an alias for a CMK

alias_name = 'alias/projectKey1'# ###### CMK ARN #### CMK ID ### ARN ########target_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.create_alias( AliasName=alias_name,

368

Page 377: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの作成

TargetKeyId=key_id)

Ruby

詳細については、『AWS SDK for Ruby』の「create_alias」インスタンスメソッドを参照してください。

# Create an alias for a CMK

aliasName = 'alias/projectKey1'# ###### CMK ARN #### CMK ID ### ARN ########targetKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.create_alias({ alias_name: aliasName, target_key_id: targetKeyId})

PHP

詳細については、『AWS SDK for PHP』の「CreateAlias メソッド」を参照してください。

// Create an alias for a CMK//$aliasName = "alias/projectKey1";// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

$result = $KmsClient->createAlias([ 'AliasName' => $aliasName, 'TargetKeyId' => $keyId, ]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「createAlias プロパティ」を参照してください。

// Create an alias for a CMK//const AliasName = 'alias/projectKey1';

// ###### CMK ARN #### CMK ID ### ARN ########const TargetKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';kmsClient.createAlias({ AliasName, TargetKeyId }, (err, data) => { ...});

PowerShell

エイリアスを作成するには、New-KMSAlias コマンドレットを使用します。エイリアス名では、大文字と小文字が区別されます。

# Create an alias for a CMK

$aliasName = 'alias/projectKey1'# ###### CMK ARN #### CMK ID ### ARN ########

369

Page 378: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスのリスト化

$targetKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

New-KMSAlias -TargetKeyId $targetKeyId -AliasName $aliasName

エイリアスのリスト化アカウントとリージョンにエイリアスを一覧表示するには、ListAliases オペレーションを使用します。

デフォルトでは、ListAliases コマンドはアカウントとリージョンのすべてのエイリアスを返します。これには、作成してカスタマー管理の CMK (p. 3) に関連付けたエイリアスと、AWS が作成し、AWS 管理のCMK (p. 3) に関連付けたエイリアスが含まれます。レスポンスには、TargetKeyId フィールドがないエイリアスが含まれている場合もあります。これらは、AWS が作成したが、まだ CMK と関連付けられていない事前定義されたエイリアスです。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

Java の実装の詳細については、『AWS SDK for Java API Reference』の「listAliases メソッド」を参照してください。

// List the aliases in this AWS account//Integer limit = 10;

ListAliasesRequest req = new ListAliasesRequest().withLimit(limit);ListAliasesResult result = kmsClient.listAliases(req);

C#

詳細については、『AWS SDK for .NET』の「ListAliases メソッド」を参照してください。

// List the aliases in this AWS account//int limit = 10;

ListAliasesRequest listAliasesRequest = new ListAliasesRequest(){ Limit = limit};ListAliasesResponse listAliasesResponse = kmsClient.ListAliases(listAliasesRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「list_aliases メソッド」を参照してください。

# List the aliases in this AWS account

response = kms_client.list_aliases( Limit=10)

Ruby

詳細については、『AWS SDK for Ruby』の「list_aliases」インスタンスメソッドを参照してください。

370

Page 379: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスのリスト化

# List the aliases in this AWS account

response = kmsClient.list_aliases({ limit: 10})

PHP

詳細については、『AWS SDK for PHP』の「List Aliases メソッド」を参照してください。

// List the aliases in this AWS account//$limit = 10;

$result = $KmsClient->listAliases([ 'Limit' => $limit,]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「listAliases プロパティ」を参照してください。

// List the aliases in this AWS account//const Limit = 10;kmsClient.listAliases({ Limit }, (err, data) => { ...});

PowerShell

アカウントとリージョンのエイリアスをリスト化するには、Get-KMSAliasList コマンドレットを使用します。

出力オブジェクト数を制限するために、この例では、Limit パラメータの代わりに Select-Objectコマンドレットを使用します。このパラメータは、リストのコマンドレットでは非推奨です。AWSTools for PowerShell での出力のページ分割については、「AWS Tools for PowerShell での出力ページ分割」を参照してください。

# List the aliases in this AWS account$limit = 10

$result = Get-KMSAliasList | Select-Object -First $limit

特定の CMK に関連付けられているエイリアスのみをリストするには、KeyId パラメータを使用します。その値として、リージョン内の任意の CMK のキー ID (p. 12)またはキー ARN (p. 12) を指定できます。エイリアス名またはエイリアス ARN を指定することはできません。

Java

Java の実装の詳細については、『AWS SDK for Java API Reference』の「listAliases メソッド」を参照してください。

// List the aliases for one CMK//// ###### CMK ARN #### CMK ID ### ARN ########

371

Page 380: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスのリスト化

String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

ListAliasesRequest req = new ListAliasesRequest().withKeyId(keyId);ListAliasesResult result = kmsClient.listAliases(req);

C#

詳細については、『AWS SDK for .NET』の「ListAliases メソッド」を参照してください。

// List the aliases for one CMK//// ###### CMK ARN #### CMK ID ### ARN ########String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

ListAliasesRequest listAliasesRequest = new ListAliasesRequest(){ KeyId = keyId};ListAliasesResponse listAliasesResponse = kmsClient.ListAliases(listAliasesRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「list_aliases メソッド」を参照してください。

# List the aliases for one CMK

# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kms_client.list_aliases( KeyId=key_id)

Ruby

詳細については、『AWS SDK for Ruby』の「list_aliases」インスタンスメソッドを参照してください。

# List the aliases for one CMK

# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

response = kmsClient.list_aliases({ key_id: keyId})

PHP

詳細については、『AWS SDK for PHP』の「List Aliases メソッド」を参照してください。

// List the aliases for one CMK//// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';

$result = $KmsClient->listAliases([ 'KeyId' => $keyId,

372

Page 381: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの更新

]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「listAliases プロパティ」を参照してください。

// List the aliases for one CMK//// ###### CMK ARN #### CMK ID ### ARN ########const KeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab';kmsClient.listAliases({ KeyId }, (err, data) => { ...});

PowerShell

CMK のエイリアスをリスト化するには、Get-KMSAliasList コマンドレットの KeyId パラメータを使用します。

# List the aliases for one CMK

# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

$response = Get-KmsAliasList -KeyId $keyId

エイリアスの更新既存のエイリアスを別の CMK に関連付けるには、UpdateAlias オペレーションを使用します。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

Java の実装の詳細については、『AWS SDK for Java API Reference』の「updateAlias メソッド」を参照してください。

// Updating an alias//String aliasName = "alias/projectKey1";// ###### CMK ARN #### CMK ID ### ARN ########String targetKeyId = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321";

UpdateAliasRequest req = new UpdateAliasRequest() .withAliasName(aliasName) .withTargetKeyId(targetKeyId); kmsClient.updateAlias(req);

C#

詳細については、『AWS SDK for .NET』の「UpdateAlias メソッド」を参照してください。

// Updating an alias

373

Page 382: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの更新

//String aliasName = "alias/projectKey1";// ###### CMK ARN #### CMK ID ### ARN ########String targetKeyId = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321";

UpdateAliasRequest updateAliasRequest = new UpdateAliasRequest(){ AliasName = aliasName, TargetKeyId = targetKeyId};

kmsClient.UpdateAlias(updateAliasRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「update_alias メソッド」を参照してください。

# Updating an alias

alias_name = 'alias/projectKey1'# ###### CMK ARN #### CMK ID ### ARN ########key_id = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'

response = kms_client.update_alias( AliasName=alias_name, TargetKeyID=key_id)

Ruby

詳細については、『AWS SDK for Ruby』の「update_alias」インスタンスメソッドを参照してください。

# Updating an alias

aliasName = 'alias/projectKey1'# ###### CMK ARN #### CMK ID ### ARN ########keyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'

response = kmsClient.update_alias({ alias_name: aliasName, target_key_id: keyId})

PHP

詳細については、『AWS SDK for PHP』の「UpdateAlias メソッド」を参照してください。

// Updating an alias//$aliasName = "alias/projectKey1";

// ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321';

$result = $KmsClient->updateAlias([ 'AliasName' => $aliasName, 'TargetKeyId' => $keyId, ]);

374

Page 383: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの削除

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「updateAlias プロパティ」を参照してください。

// Updating an alias//const AliasName = 'alias/projectKey1'; // ###### CMK ARN #### CMK ID ### ARN ########const TargetKeyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321';kmsClient.updateAlias({ AliasName, TargetKeyId }, (err, data) => { ...});

PowerShell

エイリアスが指す CMK を変更するには、Update-KMSAlias コマンドレットを使用します。エイリアス名では、大文字と小文字が区別されます。

Update-KMSAlias コマンドレットは出力を返しません。コマンドが機能していることを確認するには、Get-KMSAliasList コマンドレットを使用します。

# Updating an alias

$aliasName = 'alias/projectKey1'# ###### CMK ARN #### CMK ID ### ARN ########$keyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321'

Update-KMSAlias -AliasName $aliasName -TargetKeyID $keyId

エイリアスの削除エイリアスを削除するには、DeleteAlias オペレーションを使用します。エイリアスを削除しても、関連付けられた CMK には影響しません。

クライアントオブジェクトを必要とする言語では、これらの例では「クライアントの作成 (p. 330)」で作成した AWS KMS クライアントオブジェクトを使用します。

Java

詳細については、『AWS SDK for Java API Reference』の「deleteAlias メソッド」を参照してください。

// Delete an alias for a CMK//String aliasName = "alias/projectKey1";

DeleteAliasRequest req = new DeleteAliasRequest().withAliasName(aliasName);kmsClient.deleteAlias(req);

C#

詳細については、『AWS SDK for .NET』の「DeleteAlias メソッド」を参照してください。

// Delete an alias for a CMK//String aliasName = "alias/projectKey1";

375

Page 384: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの削除

DeleteAliasRequest deleteAliasRequest = new DeleteAliasRequest(){ AliasName = aliasName};kmsClient.DeleteAlias(deleteAliasRequest);

Python

詳細については、『AWS SDK for Python (Boto3)』の「delete_alias メソッド」を参照してください。

# Delete an alias for a CMK

alias_name = 'alias/projectKey1'

response = kms_client.delete_alias( AliasName=alias_name)

Ruby

詳細については、『AWS SDK for Ruby』の「delete_alias」インスタンスメソッドを参照してください。

# Delete an alias for a CMK

aliasName = 'alias/projectKey1'

response = kmsClient.delete_alias({ alias_name: aliasName})

PHP

詳細については、『AWS SDK for PHP』の「DeleteAlias メソッド」を参照してください。

// Delete an alias for a CMK//$aliasName = "alias/projectKey1";

$result = $KmsClient->deleteAlias([ 'AliasName' => $aliasName, ]);

Node.js

詳細については、『AWS SDK for JavaScript in Node.js』の「deleteAlias プロパティ」を参照してください。

// Delete an alias for a CMK//const AliasName = 'alias/projectKey1';kmsClient.deleteAlias({ AliasName }, (err, data) => { ...});

PowerShell

エイリアスを削除するには、Remove-KMSAlias コマンドレットを使用します。エイリアス名では、大文字と小文字が区別されます。

376

Page 385: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドエイリアスの削除

このコマンドレットはエイリアスを完全に削除するため、PowerShell はコマンドの確認を求めるプロンプトを表示します。ConfirmImpact は High であるため、ConfirmPreference を使用してこのプロンプトを抑制することはできません。確認プロンプトを表示しないようにする必要がある場合は、Confirm 共通パラメータに -Confirm:$false の値を追加します (例: $false)。

Remove-KMSAlias コマンドレットは出力を返しません。コマンドが有効であることを確認するには、Get-KMSAliasList コマンドレットを使用します。

# Delete an alias for a CMK

$aliasName = 'alias/projectKey1'Remove-KMSAlias -AliasName $aliasName

377

Page 386: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドリソースクォータ

クォータすべてのユーザーに対して AWS KMS 応答性とパフォーマンスを向上させるために、AWS KMS では 2 種類のクォータが適用されます。各クォータは、各 AWS アカウントのリージョンごとに個別に計算されます。

Important

クォータを超える必要がある場合は、サービスクォータ でクォータの増加をリクエストします。サービスクォータ コンソールまたは RequestServiceQuotaIncrease オペレーションを使用します。詳細については、サービスクォータ ユーザーガイドの「クォータ引き上げのリクエスト」を参照してください。AWS リージョンで AWS KMS の サービスクォータ が利用できない場合は、AWS サポート センターにアクセスしてケースを作成してください。AWS KMS クォータの引き上げをリクエストする方法については、「AWS KMS クォータの引き上げをリクエストする (p. 386)」を参照してください。

• リソースクォータ (p. 378): AWS KMS リソースのタイプごとに数を制限します。• クォータのリクエスト (p. 380): 指定した間隔で AWS KMS API オペレーションのリクエスト数を制限

します。

リソースクォータAWS KMS は、リソースクォータを設け、すべてのお客様に迅速かつ回復力のあるサービスを提供できるようにします。一部のリソースクォータは、ユーザーが作成したリソースにのみ適用され、AWS のサービスによって作成されたリソースには適用されません。AWS 所有の CMK (p. 4) など、使用するリソースで、AWS アカウントに含まれていないものは、これらのクォータにはカウントされません。

リソースの上限に達した場合、そのタイプの追加リソースの作成を要求すると、LimitExceededException エラーメッセージが生成されます。

次の表に、各 AWS アカウントとリージョンの AWS KMS リソースクォータとその説明を示します。クォータを超える必要がある場合は、サービスクォータ でクォータの増加をリクエストします。サービスクォータ コンソールまたは RequestServiceQuotaIncrease オペレーションを使用します。詳細については、サービスクォータ ユーザーガイドの「クォータ引き上げのリクエスト」を参照してください。AWSリージョンで AWS KMS の サービスクォータ が利用できない場合は、AWS サポート センターにアクセスしてケースを作成してください。

AWS KMS クォータの引き上げをリクエストする方法については、「AWS KMS クォータの引き上げをリクエストする (p. 386)」を参照してください。

クォータ名 デフォルト値 Applies to

カスタマーマスターキー(CMK) (p. 379)

10,000 カスタマー管理の CMK

エイリアス (p. 379) 10,000 カスタマー作成のエイリアス

CMK あたりの許可 (p. 379) 10,000 カスタマー管理の CMK

CMK キーあたりの特定のプリンシパルの権限 (p. 379)

500 カスタマー管理の CMK

AWS 管理の CMK

キーポリシードキュメントのサイズ (p. 380)

32 KB (32,768 バイト) カスタマー管理の CMK

AWS 管理の CMK

378

Page 387: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドカスタマーマスターキー (CMK): 10,000

リソースクォータに加えて、AWS KMS は クォータのリクエスト を使用してサービスの応答性を確保します。詳細については、「the section called “クォータのリクエスト” (p. 380)」を参照してください。

カスタマーマスターキー (CMK): 10,000AWS アカウントのリージョンごとに最大 1,000 個のカスタマー管理の CMK (p. 4) を設定できます。このクォータは、キーの状態 (p. 236)に関係なく、すべての対称および非対称のカスタマー管理の CMK に適用されます。各 CMK は — 対称か非対称かに関係なく — 1 つのリソースと見なされます。AWS 管理のCMK (p. 4) および AWS 所有の CMK (p. 4) は、このクォータにはカウントされません。

このクォータを超える必要がある場合は、サービスクォータ でクォータの増加をリクエストします。ただし、AWS マネジメントコンソール から大量の CMK を管理すると、パフォーマンスが許容できる速度を下回る可能性があります。AWS リージョンに大量の CMK がある場合は、AWS SDK または AWS コマンドラインツールによりプログラムで管理することをお勧めします。

エイリアス: 10,000アカウントのリージョンごとに最大 10,000 個のエイリアスを作成できます。アカウントで AWS が作成するエイリアス (aws/<service-name> など) は、このクォータに含まれません。

エイリアスとは、CMK にマッピングできる表示名です。各エイリアスは 1 つの CMK だけにマッピングされ、複数のエイリアスを同じ CMK にマッピングできます。

CMK リソースクォータを増やす場合は、エイリアスのリソースクォータを増やす必要もあります。クォータ増加のリクエストについては、サービスクォータ ユーザーガイド の「クォータ増加のリクエスト」を参照してください。

CMK あたりの許可: 10,000各カスタマー管理の CMK (p. 4) は、AWS KMS と統合される AWS サービスによって作成される権限を含めて、最大 10,000 個の権限を持つことができます。このクォータは、AWS 管理の CMK (p. 4) またはAWS 所有の CMK (p. 4) には適用されません。

このクォータの 1 つの効果は、同じ CMK を同時に使用する 10,000 を超える許可されたオペレーションを実行できないことです。このクォータに達した場合、アクティブな許可がリタイアまたは取り消された場合にのみ、CMK で新しい許可を作成できます。

たとえば、Amazon Elastic Block Store (Amazon EBS) ボリュームを Amazon Elastic Compute Cloud(Amazon EC2) インスタンスにアタッチするとき、ボリュームは読めるように復号されます。データを復号するアクセス許可を取得するため、Amazon EBS はボリュームごとに許可を作成します。ただし、各 CMK に 10,000 個を超える許可を設定することはできません。したがって、すべての Amazon EBS ボリュームで同じ CMK が使用されている場合、一度に 10,000 個を超えるボリュームはアタッチできません。

権限付与 (p. 123)はキーポリシー (p. 55)に代わるものです。キーポリシーと同様に、許可は CMK にアタッチされます。ユーザー(またはAWS KMS と統合された AWS サービス)は、許可を使用して、プリンシパルが CMK を使用または管理できるようにします。各権限には、CMK、CMK の ID、および非付与者が実行できるオペレーションのリストを使用する許可を受けるプリンシパルが含まれます。

CMK キーあたりの特定のプリンシパルの権限: 500CMK は、同じ被付与者プリンシパルに対して 500 を超える許可を持つことはできません。被付与者プリンシパルは、付与のアクセス許可を取得する ID です。

このクォータは、アカウントで CMK ごとに個別に計算されます。これは、カスタマー管理の CMK (p. 4)および AWS 管理の CMK (p. 4) に適用されますが、AWS 所有の CMK (p. 4) には適用されません。

379

Page 388: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドキーポリシードキュメントのサイズ: 32 KB

Note

ListGrants オペレーションの出力を使用して、同じ被付与者プリンシパルを持つ権限の数を計算するときは、注意してください。通常、ListGrants レスポンスの GranteePrincipal フィールドには、許可の被付与者プリンシパルが含まれます。ただし、許可の被付与者プリンシパルが AWS サービスの場合、GranteePrincipal フィールドにはサービスプリンシパルが含まれます。サービスプリンシパルは、複数の異なる被付与者プリンシパルを表す場合があります。

このクォータは、AWS リソースの使用に実際的な影響を与える可能性があります。たとえば、AmazonEC2 インスタンスに 500 を超える Amazon EBS ボリュームを同時にアタッチしないようにできます。Amazon EC2 インスタンスに Amazon EBS ボリュームをアタッチすると、EBS はボリュームを復号して読み取ることができる許可を作成します。各許可は一意ですが、すべての許可が同じ被付与者プリンシパルを持ちます。このクォータのため、すべてのボリュームに同じ CMK を使用する場合、一度に 500を超えるボリュームをアタッチすることはできません。

キーポリシードキュメントのサイズ: 32 KB各キーポリシードキュメントの最大長は 32 KB (32,768 バイト) です。より大きなポリシードキュメントを使用して CMK のキーポリシーを作成または更新すると、オペレーションは失敗します。

このクォータを超える必要がある場合は、サービスクォータ でクォータの増加をリクエストします。詳細については、サービスクォータ ユーザーガイド の「クォータ増加のリクエスト」を参照してください。

キーポリシードキュメント (p. 55)は JSON 形式のポリシーステートメントの集合です。キーポリシードキュメントのステートメントは、CMK の使用を許可されているユーザーとその使用方法を決定します。CMK へのアクセスをコントロールするために IAM のポリシーとアクセス許可を使用することもできますが、すべての CMK にはキーポリシードキュメントが必要です。

キーポリシードキュメントは、AWS マネジメントコンソール のデフォルトのビュー (p. 71)またはポリシービュー (p. 71)、または PutKeyPolicy オペレーションを使用してキーポリシーを作成または変更するときに使用します。このクォータは、JSON ステートメントを直接編集しない AWS KMS コンソールでデフォルトビュー (p. 71)を使用する場合でも、キーポリシードキュメントに適用されます。

クォータのリクエストAWS KMS は、1 秒あたりに要求される API オペレーションの数にクォータを設定します。各 API オペレーションの 1 秒あたりの クォータのリクエスト を示す表については、「各 AWS KMS API オペレーションの クォータのリクエスト (p. 383)」を参照してください。

API の クォータのリクエスト を超えると、リクエストが AWS KMS調整されます。つまり、有効なリクエストを拒否し、次のような ThrottlingException エラーを返します。応答するには、バックオフと再試行戦略を使用します。

You have exceeded the rate at which you may call KMS. Reduce the frequency of your calls. (Service: AWSKMS; Status Code: 400; Error Code: ThrottlingException; Request ID: <ID>

クォータのリクエスト は、API オペレーション、AWS リージョン、および CMK タイプなどのその他の要因によって異なります。

Note

クォータを超える必要がある場合は、サービスクォータ でクォータの増加をリクエストします。サービスクォータ コンソールまたは RequestServiceQuotaIncrease オペレーションを使用します。詳細については、サービスクォータ ユーザーガイドの「クォータ引き上げのリクエスト」を参照してください。AWS リージョンで AWS KMS の サービスクォータ が利用できない場合は、AWS サポート センターにアクセスしてケースを作成してください。

380

Page 389: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドクォータのリクエスト を適用する

AWS KMS クォータの引き上げをリクエストする方法については、「AWS KMS クォータの引き上げをリクエストする (p. 386)」を参照してください。GenerateDataKey オペレーションの クォータのリクエスト を超えている場合は、AWS 暗号化 SDK のデータキーキャッシュ機能の使用を検討してください。データキーを再利用することで、AWS KMS へのリクエストの頻度が低下することがあります。

クォータのリクエスト に加えて、AWS KMS では、リソースクォータを使用して、すべてのユーザーの容量を確保します。詳細については、「リソースクォータ (p. 378)」を参照してください。

トピック• クォータのリクエスト を適用する (p. 381)• 暗号化オペレーションの共有クォータ (p. 381)• ユーザーに代わって API が実行するリクエスト (p. 382)• クロスアカウントリクエスト (p. 382)• カスタムキーストアのクォータ (p. 382)• 各 AWS KMS API オペレーションの クォータのリクエスト (p. 383)

クォータのリクエスト を適用するクォータのリクエスト を確認する際には、次の点に注意してください。

• クォータのリクエスト は、カスタマー管理 CMK (p. 4) とAWS 管理 CMK (p. 4) の両方に適用されます。AWS 所有の CMK (p. 4) の使用は、アカウント内のリソースを保護するために使用されている場合でも、AWS アカウントの クォータのリクエスト にはカウントされません。

• スロットリングは、リージョン内のすべてのタイプの CMK に対するすべてのリクエストに基づいています。この合計には、ユーザーに代わる AWS のサービスからのリクエストを含む、AWS アカウント内のすべてのプリンシパルからのリクエストが含まれます。

• それぞれ クォータのリクエスト が個別に計算されます。たとえば、CreateKey オペレーションに対するリクエストは、CreateAlias オペレーションに対するリクエストの クォータのリクエスト には影響しません。CreateAlias リクエストが調整されていても、CreateKey リクエストは正常に完了できます。

• 暗号化オペレーションはクォータを共有しますが、共有クォータは他のオペレーションのクォータとは無関係に計算されます。たとえば、Encrypt および Decrypt オペレーションの呼び出しは クォータのリクエスト を共有しますが、そのクォータは EnableKey などの管理オペレーションのクォータとは無関係です。たとえば、欧州 (ロンドン) リージョン では、対称 CMK に対して 10,000 の暗号化オペレーションと 1 秒あたり 5 回の EnableKey オペレーションを調整なしで実行できます。

暗号化オペレーションの共有クォータAWS KMS 暗号化オペレーション (p. 10)は クォータのリクエスト を共有します。CMK でサポートされている暗号化オペレーションの任意の組み合わせをリクエストできます。これにより、暗号化オペレーションの総数がその種類の CMK に対する クォータのリクエスト を超えないようにできます。例外は、別個のクォータを共有する GenerateDataKeyPair と GenerateDataKeyPairWithoutPlaintext です。

異なるタイプの CMK のクォータは、個別に計算されます。各クォータは、1 秒ごとに指定されたキータイプを持つ AWS アカウントおよびリージョンにおけるこれらのオペレーションに対するすべてのリクエストに適用されます。

• 暗号化オペレーション (対称) リクエストの頻度は、アカウントとリージョンで対称 CMK を使用する暗号化オペレーションの共有リクエストクォータです。

たとえば、1 秒あたり 10,000 リクエストの共有クォータを持つ AWS リージョンで対称 CMK (p. 139)を使用しているとします。毎秒 7,000 件の GenerateDataKey リクエストと毎秒 2,000 件の Decryptリクエストを行う場合、AWS KMS はリクエストを制限しません。ただし、毎秒 9,500 件の

381

Page 390: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドユーザーに代わって API が実行するリクエスト

GenerateDataKey リクエストと 1,000 件の Encrypt およびリクエストを行うと、共有クォータを超えているため、AWS KMS はリクエストを制限します。

• 暗号化オペレーション (RSA) リクエストの頻度は、RSA 非対称 CMK (p. 143) を使用する暗号化オペレーションの共有リクエストクォータです。

たとえば、リクエストクォータが 1 秒あたり 500 オペレーションであれば、暗号化と復号が可能なRSA CMK で 200 件の暗号化リクエストと 100 件の復号リクエスト、さらに署名と検証が可能な RSACMK で 50 件の署名リクエストと 150 件の検証リクエストを行うことができます。

• 暗号化オペレーション (ECC) リクエストの頻度は、楕円曲線 (ECC) 非対称 CMK (p. 146) を使用する暗号化オペレーションの共有リクエストクォータです。

たとえば、リクエストクォータが 1 秒あたり 300 オペレーションであれば、署名と検証が可能な RSACMK を使用して、100 件の署名リクエストと 200 件の検証リクエストを行うことができます。

異なるキータイプのクォータも個別に計算されます。たとえば、アジアパシフィック (シンガポール) リージョン で、対称 CMK と非対称 CMK の両方を使用する場合、対称 CMK で 1 秒あたり最大 10,000 件の呼び出しと RSA 非対称 CMK で 1 秒あたり最大 500 件の追加呼び出し、さらに ECC ベースの CMK を使用して 1 秒あたり最大 300 件の追加リクエストを行うことができます。

ユーザーに代わって API が実行するリクエストAPI が直接リクエストを行うこと、あるいは統合された AWS サービスを使用して、ユーザーに代わってAPI が AWS KMS にリクエストを行うようにできます。クォータはどちらの種類のリクエストにも適用されます。

たとえば、AWS KMS (SSE-KMS) でサーバー側の暗号化を使用して、Amazon S3 にデータを保存するとします。SSE-KMS で暗号化された S3 オブジェクトをアップロードまたはダウンロードするたびに、Amazon S3 はユーザーに代わって GenerateDataKey (アップロードの場合) または Decrypt (ダウンロードの場合) リクエストを AWS KMS に対して行います。これらのリクエストはクォータに対してカウントされるため、SSE-KMS を使って暗号化された S3 オブジェクトの 1 秒あたりのアップロード数またはダウンロード数の総数が合計 5,500 件(または AWS リージョンにより 10,000 件または 30,000 件)を超えた場合、AWS KMS はリクエストを調整します。

クロスアカウントリクエスト1 つの AWS アカウントのアプリケーションが異なるアカウントが所持する CMK を使用する場合、これはクロスアカウントリクエストと呼ばれます。クロスアカウントリクエストでは、AWS KMS は、CMK を所有するアカウントではなく、リクエストを行うアカウントを調整します。たとえば、アカウント A のアプリケーションがアカウント B の CMK を使用する場合、CMK の使用はアカウント A のクォータにのみ適用されます。

カスタムキーストアのクォータAWS KMS カスタムキーストアは、対称 CMK のみをサポートしています。カスタムキーストア (p. 182)のCMK を使用する暗号化オペレーションでは、カスタムキーストアごとに 1 秒あたり 1,800 オペレーションの クォータのリクエスト を共有します。ただし、このクォータが持つ意味は、オペレーションによって異なります。GenerateDataKey、GenerateDataKeyWithoutPlaintext や、GenerateRandom といったオペレーションは、Encrypt、Decrypt や ReEncrypt オペレーションの 1 秒あたりおよそ 3 倍のクォータを消費します。

たとえば、Encrypt や Decrypt のオペレーションのみをリクエストしていれば、1 秒あたり約 1,800 オペレーションを実行できます。一方、GenerateDataKey オペレーションを繰り返しリクエストした場合、パフォーマンスは 1 秒あたり約 600 オペレーションになります。GenerateDataKey と Decryptのオペレーションをおよそ半々の割合で実行した場合、1 秒あたり約 1,200 オペレーションを実行できます。

382

Page 391: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド各 AWS KMS API オペレーションの クォータのリクエスト

他の AWS KMS クォータとは異なり、カスタムキーストアのクォータは調整できません。サービスクォータ を使用したり、AWS サポート でケースを作成したりして、引き上げることはできません。

Note

カスタムキーストアに関連付けられている AWS CloudHSM クラスターが、カスタムキーストアに関連しないものを含む多数のコマンドを処理している場合、予想よりも低い速度で AWS KMSThrottlingException が発生する可能性があります。この問題が発生した場合は、AWS KMSへのリクエストの頻度を下げる、関連のないコマンドの処理を減らす、またはカスタムキーストアに専用の AWS CloudHSM クラスターを使用するなどの対策を取ります。

各 AWS KMS API オペレーションの クォータのリクエストこの表では、サービスクォータのクォータコードと、各 AWS KMS リクエストクォータのデフォルト値を示しています。

クォータ名 デフォルト値 (1 秒あたり)

Cryptographic operations (symmetric)request rate

適用先..

• Decrypt

• Encrypt

• GenerateDataKey

• GenerateDataKeyWithoutPlaintext

• GenerateRandom

• ReEncrypt

これらの共有クォータは、AWS のリージョンおよびリクエストで使用される CMK タイプによって異なります。各クォータは個別に計算されます。

• 5,500 (共有)• 以下のリージョンでは 10,000(共有):

• 米国東部 (オハイオ), us-east-2• アジアパシフィック (シンガポール), ap-

southeast-1• アジアパシフィック (シドニー), ap-

southeast-2• アジアパシフィック (東京), ap-northeast-1• 欧州 (フランクフルト), eu-central-1• 欧州 (ロンドン), eu-west-2

• 以下のリージョンでは 30,000(共有):• 米国東部(バージニア北部), us-east-1• 米国西部 (オレゴン), us-west-2• 欧州 (アイルランド), eu-west-1

カスタムキーストアのクォータ (対称 CMK):

• カスタムキーストアごとに 1,800 (共有)。詳細については、「カスタムキーストアのクォータ (p. 382)」を参照してください。

Cryptographic operations (RSA) requestrate

適用先..

• Decrypt

• Encrypt

• ReEncrypt

• Sign

RSA CMK の場合は 500(共有)

383

Page 392: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド各 AWS KMS API オペレーションの クォータのリクエスト

クォータ名 デフォルト値 (1 秒あたり)• Verify

Cryptographic operations (ECC) requestrate

適用先..

• Sign

• Verify

楕円曲線 (ECC) CMK の場合は 300 (共有)

CancelKeyDeletion request rate 5

ConnectCustomKeyStore request rate 5

CreateAlias request rate 5

CreateCustomKeyStore request rate 5

CreateGrant request rate 50

CreateKey request rate 5

DeleteAlias request rate 5

DeleteCustomKeyStore request rate 5

DeleteImportedKeyMaterial request rate 5

DescribeCustomKeyStores request rate 5

DescribeKey request rate 100

DisableKey request rate 5

DisableKeyRotation request rate 5

DisconnectCustomKeyStore request rate 5

EnableKey request rate 5

EnableKeyRotation request rate 5

GenerateDataKeyPair (ECC_NIST_P256)request rate

適用先..

• GenerateDataKeyPair

• GenerateDataKeyPairWithoutPlaintext

25

GenerateDataKeyPair (ECC_NIST_P384)request rate

適用先..

• GenerateDataKeyPair

• GenerateDataKeyPairWithoutPlaintext

10

384

Page 393: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド各 AWS KMS API オペレーションの クォータのリクエスト

クォータ名 デフォルト値 (1 秒あたり)

GenerateDataKeyPair (ECC_NIST_P521)request rate

適用先..

• GenerateDataKeyPair

• GenerateDataKeyPairWithoutPlaintext

5

GenerateDataKeyPair (ECC_SECG_P256K1)request rate

適用先..

• GenerateDataKeyPair

• GenerateDataKeyPairWithoutPlaintext

25

GenerateDataKeyPair (RSA_2048) requestrate

適用先..

• GenerateDataKeyPair

• GenerateDataKeyPairWithoutPlaintext

1

GenerateDataKeyPair (RSA_3072) requestrate

適用先..

• GenerateDataKeyPair

• GenerateDataKeyPairWithoutPlaintext

0.5 (2 秒に 1 回)

GenerateDataKeyPair (RSA_4096) requestrate

適用先..

• GenerateDataKeyPair

• GenerateDataKeyPairWithoutPlaintext

0.1 (10 秒に 1 回)

GetKeyPolicy request rate 30

GetKeyRotationStatus request rate 30

GetParametersForImport request rate 0.25 (4 秒に 1 回)

GetPublicKey request rate 5

ImportKeyMaterial request rate 5

ListAliases request rate 100

ListGrants request rate 100

ListKeyPolicies request rate 100

ListKeys request rate 100

385

Page 394: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドAWS KMS クォータの引き上げをリクエストする

クォータ名 デフォルト値 (1 秒あたり)

ListResourceTags request rate 100

ListRetirableGrants request rate 5

PutKeyPolicy request rate 5

RetireGrant request rate 15

RevokeGrant request rate 15

ScheduleKeyDeletion request rate 5

TagResource request rate 5

UntagResource request rate 5

UpdateAlias request rate 5

UpdateCustomKeyStore request rate 5

UpdateKeyDescription request rate 5

AWS KMS クォータの引き上げをリクエストするAWS KMS リソースクォータとリクエストクォータは、カスタムキーストアクォータ (p. 382)を除いて調整可能です。

クォータを超える必要がある場合は、サービスクォータ でクォータの増加をリクエストします。サービスクォータ コンソールまたは RequestServiceQuotaIncrease オペレーションを使用します。詳細については、サービスクォータ ユーザーガイドの「クォータ引き上げのリクエスト」を参照してください。AWSリージョンで AWS KMS の サービスクォータ が利用できない場合は、AWS サポート センターにアクセスしてケースを作成してください。

サービスクォータコンソールの使用AWS KMS クォータの引き上げをリクエストするには、サービスクォータ コンソールを使用できます。手順については、サービスクォータ ユーザーガイド の「クォータ増加のリクエスト」を参照してください。

1. サービス名として、[AWS Key Management Service (AWS KMS)] を選択します。2. 引き上げるクォータの名前を選択します。クォータに関する詳細情報を使用して、引き上げるクォータ

を選択したことを確認します。

クォータ名は サービスクォータ コンソールで検索できます。AWS KMS クォータには複数のページがあります。リソースクォータ (p. 378)とリクエストクォータ (p. 380)の表で、クォータの名前とAWS KMS クォータの説明も確認できます。

たとえば、対称 CMK での暗号化オペレーションのクォータの引き上げをリクエストするには、[Cryptographic operations (symmetric) request rate (暗号化オペレーション (対称) リクエストの頻度)] を選択します。

3. [Request quota increase (クォータの引き上げのリクエスト)] を選択します。

386

Page 395: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドService Quotas API の使用

Service Quotas API の使用AWS KMS クォータの引き上げをリクエストするには、サービスクォータ API を使用できます。リクエストを送信する RequestServiceQuotaIncrease オペレーションには、クォータのクォータコードが必要です。したがって、クォータコードを取得することから始めます。

1. 引き上げるクォータのクォータ名を見つけます。AWS KMS クォータのクォータ名と説明は、リソースクォータ (p. 378)とリクエストクォータ (p. 380)の表にあります。

2. AWS KMS クォータのクォータコードを取得するには、ListServiceQuotas オペレーションを使用します。

ServiceCode を kms に設定します。

レスポンスには、クォータごとに QuotaName および QuotaCode が含まれています。

たとえば、Cryptographic operations (RSA) request rate クォータのクォータ情報のみを取得するには、以下のようなコマンドを使用します。AWS Command Line Interface (AWS CLI) の queryパラメータを使用して、指定したクォータ名のクォータのみを取得します。

$ aws service-quotas list-service-quotas \ --service-code kms \ --query 'Quotas[?QuotaName==`Cryptographic operations (RSA) request rate`]'

{ "Quotas": [ { "ServiceCode": "kms", "ServiceName": "AWS Key Management Service (AWS KMS)", "QuotaArn": "arn:aws:servicequotas:us-east-2:111122223333:kms/L-2AC98190", "QuotaCode": "L-2AC98190", "QuotaName": "Cryptographic operations (RSA) request rate", "Value": 500, "Unit": "None", "Adjustable": true, "GlobalQuota": false } ]}

3. AWS KMS クォータの引き上げをリクエストするには、RequestServiceQuotaIncrease オペレーションを使用します。クォータを指定するには、クォータコードを使用します。

たとえば、以下のコマンドは、Cryptographic operations (RSA) request rate クォータを 1秒あたり 700 リクエストに引き上げることをリクエストします。必要なクォータコード L-2AC98190を使用して、クォータを指定します。

コマンドが正常に完了すると、Status フィールドにリクエストの現在のステータスが表示されます。リクエストの更新ステータスを取得するには、GetRequestedServiceQuotaChange、ListRequestedServiceQuotaChangeHistory、またはListRequestedServiceQuotaChangeHistoryByQuota オペレーションを使用します。

$ aws service-quotas request-service-quota-increase \ --service-code kms \ --quota-code L-2AC98190 \ --desired-value 700

{ "RequestedQuota": { "Id": "a12345", "ServiceCode": "kms",

387

Page 396: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイドService Quotas API の使用

"ServiceName": "AWS Key Management Service (AWS KMS)", "QuotaCode": "L-2AC98190", "QuotaName": "Cryptographic operations (RSA) request rate", "DesiredValue": 700, "Status": "PENDING", "Created": 1580446904.067, "Requester": "{\"accountId\":\"111122223333\",\"callerArn\":\"arn:aws:iam::111122223333:root\"}", "QuotaArn": "arn:aws:servicequotas:us-east-2:111122223333:kms/L-2AC98190", "GlobalQuota": false, "Unit": "None" }}

388

Page 397: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド最新の更新

ドキュメント履歴このトピックでは、AWS Key Management Service Developer Guide の重要な更新を説明しています。

トピック• 最新の更新 (p. 389)• 以前の更新 (p. 390)

最新の更新以下の表は、このドキュメントの 2018 年 1 月以降の大きな変更点をまとめたものです。ここに表示されている主要な変更に加えて、その内容の説明と例を向上し、ユーザーから寄せられるフィードバックにも応える目的で、このドキュメントは頻繁に更新されます。重要な変更についての通知を受け取るには、右上隅にあるリンクを使用して、RSS フィードをサブスクライブします。

現在の API バージョン: 2014-11-01

update-history-change update-history-description update-history-date

新機能 非対称顧客マスターキーと非対称データキーのサポートが追加されました。

November 25, 2019

更新された機能 AWS 管理対象 CMK のキーポリシーは、AWS KMS コンソールで表示できます。この機能は、以前はカスタマー管理の CMK に限定されていました。

November 15, 2019

新機能 AWS KMS への呼び出しに TLSでハイブリッドポスト量子キー交換アルゴリズムを使用する方法を説明します。

November 4, 2019

クォータの変更 CMK を管理する一部の API のリソースクォータを増やしました。

September 18, 2019

クォータの変更 カスタマーマスターキー(CMK)、エイリアス、およびCMK あたりの許可に対するリソースのクォータを変更しました。

March 27, 2019

クォータの変更 カスタムキーストアのカスタマーマスターキー (CMK) を使用する暗号化オペレーションに対して、1 秒あたりの共有 クォータのリクエスト を変更しました。

March 7, 2019

新機能 AWS KMS カスタムキーストアを作成して管理する方法について説明します。各キーストアは、ユーザーが所有し、制御する AWSCloudHSM クラスターによってサポートされています。

November 26, 2018

389

Page 398: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド以前の更新

新しいコンソール 新しい AWS KMS コンソールを使用する方法について説明します。このコンソールは IAM コンソールからは独立しています。元のコンソールとその使用方法は、新しいコンソールに精通できるように、短期間ですが引き続き参照できます。

November 7, 2018

クォータの変更 カスタマーマスターキーを使用するための共有 クォータのリクエスト を変更しました。

August 21, 2018

新しいコンテンツ AWS Secrets Manager が AWSKMS カスタマーマスターキーを使用して、シークレットのシークレット値を暗号化する方法について説明します。

July 13, 2018

新しいコンテンツ DynamoDB が AWS KMS を使用して (カスタマーマスターキー)、サーバー側の暗号化オプションをサポートする方法を説明します。

May 23, 2018

新機能 VPC でプライベートエンドポイントを使用して、インターネット接続を介する代わりに、AWSKMS に直接接続する方法を説明します。

January 22, 2018

以前の更新以下の表は 2018 年以前の AWS Key Management Service Developer Guide の重要な変更点をまとめたものです。

変更 説明 日付

新しい コンテンツ キーのタグ付け (p. 44) に関するドキュメントを追加しました。

2017 年 2 月 15 日

新しい コンテンツ カスタマーマスターキーをモニタリングする (p. 302) およびAmazon CloudWatch によるモニタリング (p. 304) に関するドキュメントを追加しました。

2016 年  8 月 31 日

新しい コンテンツ キーマテリアルのインポート (p. 156) に関するドキュメントを追加しました。

2016 年 8 月 11 日

新しい コンテンツ アクセス管理の概要 (p. 52)、IAMポリシーの使用 (p. 74)、AWSKMS API アクセス許可のリファレンス (p. 84)、および ポリシー

2016 年 7 月 5 日

390

Page 399: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド以前の更新

変更 説明 日付条件の使用 (p. 94) のドキュメントを追加しました。

更新 ドキュメントの「認証とアクセスコントロール (p. 51)」章の一部を更新しました。

2016 年 7 月 5 日

更新 「クォータ (p. 378)」ページを更新して、新しいデフォルトのクォータを反映しました。

2016 年 5 月 31 日

更新 新しいデフォルトのクォータを反映するため、クォータ (p. 378)ページを更新し、明確性と正確性を向上させるため、許可トークン (p. 19) ドキュメントを更新しました。

2016 年 4 月 11 日

新しい コンテンツ CMK へのアクセスを複数の IAMユーザーに許可する (p. 72) および IP アドレス条件の使用 (p. 95)に関するドキュメントを追加しました。

2016 年 2 月 17 日

更新 明確さと正確性を向上させるため、「AWS KMS でのキーポリシーの使用 (p. 55)」および「キーポリシーの変更 (p. 70)」ページを更新しました。

2016 年 2 月 17 日

更新 内容をより明確にするために「開始方法 (p. 20)」トピックのページが更新されました。

2016 年 1 月 5 日

新しい コンテンツ AWS CloudTrail で AWS KMS を使用する方法 (p. 241) に関するドキュメントを追加しました。

2015 年 11 月 18 日

新しい コンテンツ 「キーポリシーの変更 (p. 70)」の手順を追加しました。

2015 年 11 月 18 日

更新 「Amazon Relational DatabaseService (Amazon RDS) で AWSKMS を使用する方法 (p. 268)」に関するドキュメントが更新されました。

2015 年 11 月 18 日

新しい コンテンツ Amazon WorkSpaces で AWSKMS を使用する方法 (p. 298) に関するドキュメントを追加しました。

2015 年 11 月 6 日

更新 内容をより明確にするために[AWS KMS でのキーポリシーの使用 (p. 55)] ページが更新されました。

2015 年 10 月 22 日

391

Page 400: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド以前の更新

変更 説明 日付

新しい コンテンツ カスタマーマスターキーを削除する (p. 170) に関するドキュメント (Amazon CloudWatch アラームを作成する (p. 176)、カスタマーマスターキーの過去の使用状況を確認する (p. 179) の関連ドキュメントなど) を追加しました。

2015 年 10 月 15 日

新しい コンテンツ AWS KMS カスタマーマスターキーへのアクセスの確認 (p. 127)に関するドキュメントを追加しました。

2015 年 10 月 15 日

新しい コンテンツ キー状態: CMK への影響 (p. 236)に関するドキュメントを追加しました。

2015 年 10 月 15 日

新しい コンテンツ Amazon Simple Email Service(Amazon SES) で AWS KMS を使用する方法 (p. 277) に関するドキュメントを追加しました。

2015 年 10 月 1 日

更新 クォータ (p. 378) ページを更新して、新しい クォータのリクエスト について説明しました。

2015 年 8 月 31 日

新しい コンテンツ AWS KMS の使用料金に関する情報を追加しました。「AWSKMS 料金表 (p. 2)」を参照してください。

2015 年 8 月 14 日

新しい コンテンツ クォータのリクエスト が AWSKMS クォータ (p. 378) に追加されました。

2015 年 6 月 11 日

新しい コンテンツ UpdateAlias オペレーションの使用方法を示す新しい Java コードサンプルを追加しました。「エイリアスの更新 (p. 373)」を参照してください。

2015 年 6 月 1 日

更新 AWS Key Management Serviceリージョンの一覧を『AWSGeneral Reference』に移動しました。

2015 年 5 月 29 日

新しい コンテンツ Amazon EMR で AWS KMS を使用する方法 (p. 263) に関するドキュメントを追加しました。

2015 年 1 月 28 日

新しい コンテンツ Amazon WorkMail で AWS KMSを使用する方法 (p. 290) に関するドキュメントを追加しました。

2015 年 1 月 28 日

392

Page 401: AWS Key Management Service - 開発者ガイド...AWS Key Management Service 開発者ガイド 例: OpenSSL でキーマテリアルを暗号化する..... 165 ステップ 4: キーマテリアルの

AWS Key Management Service 開発者ガイド以前の更新

変更 説明 日付

新しい コンテンツ Amazon Relational DatabaseService (Amazon RDS) で AWSKMS を使用する方法 (p. 268) に関するドキュメントを追加しました。

2015 年 1 月 6 日

新しい コンテンツ Amazon Elastic Transcoderで AWS KMS を使用する方法 (p. 258) に関するドキュメントを追加しました。

2014 年 11 月 24 日

新規 ガイド 『AWS Key ManagementService Developer Guide』が導入されました。

2014 年 11 月 12 日

393