キーを制御するのは誰か

開発者のための AWS セキュリティ活用

Rahul Singh

Technical Product Manager

KMS キーの2つの種類

AWS 管理

  • サービスが作成、エイリアスは aws/s3
  • ポリシーは閲覧のみ、編集不可
  • 月額料金なし

AWS 管理キーとカスタマー管理キーを、キーポリシー、ローテーション、コストの3つの項目で比較する2枚のカード。カスタマー管理キーのカードではキーポリシーの行が強調表示されています。各カードにはエイリアス(aws/s3 と alias/reports)が記載されています。

開発者のための AWS セキュリティ活用

KMS キーの2つの種類

AWS 管理

  • サービスが作成、エイリアスは aws/s3
  • ポリシーは閲覧のみ、編集不可
  • 月額料金なし

カスタマー管理

  • 自分で作成、エイリアスは alias/reports、ポリシーも自分で記述
  • ローテーション期間も自分で設定
  • 1キーあたり月額1ドル

AWS 管理キーとカスタマー管理キーを、キーポリシー、ローテーション、コストの3つの項目で比較する2枚のカード。カスタマー管理キーのカードではキーポリシーの行が強調表示されています。各カードにはエイリアス(aws/s3 と alias/reports)が記載されています。

開発者のための AWS セキュリティ活用

2つのゲート、両方が開く必要がある

1つの復号リクエストが、2つのゲートのうち最初のゲートに近づいている図。IAMポリシーのゲートは実線で1番と番号が振られ、背後にあるキーポリシーのゲートは破線でグレー表示されており、どちらもまだ応答していません。

  1. IAM ポリシー: 呼び出し元が要求できる内容
開発者のための AWS セキュリティ活用

2つのゲート、両方が開く必要がある

1つの復号リクエストが左から右へ、番号付きの2つのゲートを通過してKMSキーに到達する図。マーカー1がIAMポリシー、マーカー2がキーポリシーです。2つのゲートの下の括弧は、それぞれが独立した応答であることを示しています。

  1. IAM ポリシー: 呼び出し元が要求できる内容
  2. キーポリシー: キーが応答する相手

デフォルトのキーポリシー: IAM に委任

グラント: 1つのプリンシパルに対する特定のキー操作、単独で取り消し可能

開発者のための AWS セキュリティ活用

キーがデータに直接触れることはない

Amazon S3 が代理でマーカー1においてAWS KMSを呼び出し、KMSはデータキーを平文のコピーと暗号化されたコピーの2つとして返す図。暗号化されたコピーはオブジェクトの暗号文と一緒に保存され、マーカー2の破線の戻り経路は復号呼び出しを通じてそれを引き戻します。

エンベロープ暗号化

直接暗号化: 4 KB が上限

開発者のための AWS セキュリティ活用

キーがデータに直接触れることはない

Amazon S3 が代理でマーカー1においてAWS KMSを呼び出し、KMSはデータキーを平文のコピーと暗号化されたコピーの2つとして返す図。暗号化されたコピーはオブジェクトの暗号文と一緒に保存され、マーカー2の破線の戻り経路は復号呼び出しを通じてそれを引き戻します。

エンベロープ暗号化

直接暗号化: 4 KB が上限

  1. GenerateDataKey で2つのコピーを返却
  2. 保存されたコピーに対して kms:Decrypt
開発者のための AWS セキュリティ活用

アカウントをまたぐと、両方を見通せる者はいない

呼び出し元のアカウント

  • IAM でアクションを許可
  • リソース: キーの ARN

アカウント境界で区切られた2つの破線パネル。上のパネルには呼び出し元のロールとIAMポリシーが、下のパネルにはキーポリシーとKMSキーが配置され、リクエストはその境界を越えます。

開発者のための AWS セキュリティ活用

アカウントをまたぐと、両方を見通せる者はいない

呼び出し元のアカウント

  • IAM でアクションを許可
  • リソース: キーの ARN

キー所有者のアカウント

  • 呼び出し元を指定したキーポリシー
  • アカウント、またはその中のロール

アカウント境界で区切られた2つの破線パネル。上のパネルには呼び出し元のロールとIAMポリシーが、下のパネルにはキーポリシーとKMSキーが配置され、リクエストはその境界を越えます。

開発者のための AWS セキュリティ活用

推測せず、拒否理由を読む

アイデンティティベース

  • AccessDeniedException の後に、ゲートを示す節が続く

  • no identity-based policy allows

  • 呼び出し元のIAMポリシーを修正

 

最初のゲートで停止した復号リクエストの図。IAMポリシーには赤い×印が付き、背後のキーポリシーはグレー表示のまま到達していません。図の下のキャプションには「no identity-based policy allows」と記載されています。

 

開発者のための AWS セキュリティ活用

推測せず、拒否理由を読む

アイデンティティベース

  • AccessDeniedException の後に、ゲートを示す節が続く

  • no identity-based policy allows

  • 呼び出し元のIAMポリシーを修正

リソースベース

  • no resource-based policy allows
  • キーポリシーを修正

最初のゲートで停止した復号リクエストの図。IAMポリシーには赤い×印が付き、背後のキーポリシーはグレー表示のまま到達していません。図の下のキャプションには「no identity-based policy allows」と記載されています。

緑のチェックが付いたIAMポリシーを通過した後、2番目のゲートで停止した復号リクエストの図。キーポリシーには赤い×印が付いています。図の下のキャプションには「no resource-based policy allows」と記載されています。

開発者のための AWS セキュリティ活用

ローテーションが実際に変えるもの

自動ローテーション

  • デフォルトは 365 日
  • 範囲は 90 から 2,560 日

自動ローテーション期間の最小・デフォルト・最大日数を示す3枚のカード。その下に、どの種類のキーが誰のスケジュールでローテーションするかを示す3行があります。

開発者のための AWS セキュリティ活用

ローテーションが実際に変えるもの

自動ローテーション

  • デフォルトは 365 日
  • 範囲は 90 から 2,560 日

オンデマンド

  • RotateKeyOnDemand、1キーあたり最大25回

2つの制限

  • AWS 管理キーは年次固定
  • 自動ローテーションは対称キー、KMS生成のキーマテリアルのみ対象

自動ローテーション期間の最小・デフォルト・最大日数を示す3枚のカード。その下に、どの種類のキーが誰のスケジュールでローテーションするかを示す3行があります。

開発者のための AWS セキュリティ活用

ローテーションが解決しないもの

ローテーションの線を挟んで比較された4つの行の図。キーマテリアルの行はバージョン1からバージョン2へ変化しますが、キー識別子、エイリアスとキーポリシー、以前に書き込まれたオブジェクトは両側で変わりません。

変わるもの: 裏付けとなるキーマテリアル

変わらないもの: キーID、ARN、エイリアス、キーポリシー

開発者のための AWS セキュリティ活用

ローテーションが解決しないもの

ローテーションの線を挟んで比較された4つの行の図。キーマテリアルの行はバージョン1からバージョン2へ変化しますが、キー識別子、エイリアスとキーポリシー、以前に書き込まれたオブジェクトは両側で変わりません。

変わるもの: 裏付けとなるキーマテリアル

変わらないもの: キーID、ARN、エイリアス、キーポリシー

  • コードを変更する必要はない
  • 古いオブジェクトと、広すぎるポリシー: どちらも変わらない
開発者のための AWS セキュリティ活用

では、なぜ有効にするのか

得られるもの

  • 1つのバージョンがすべてのデータをカバーすることはない
  • ローテーションを義務付けるコンプライアンスや契約上のルール

「ローテーションを有効にする」というラベルの下に表示される、「得られるもの」という見出しの緑のカード。緑のチェック付きで「365日ごとにローテーション」という監査ルールが記載され、v1、v2、v3という3つの連続したバージョンとして描かれた1つのキーには、それぞれが書き込んだデータのみをカバーするとのキャプションが付いています。

開発者のための AWS セキュリティ活用

では、なぜ有効にするのか

得られるもの

  • 1つのバージョンがすべてのデータをカバーすることはない
  • ローテーションを義務付けるコンプライアンスや契約上のルール

 

かかるコスト

  • コード変更不要、再暗号化も不要

先ほどと同じ緑の「得られるもの」カードの下に、「かかるコスト」という見出しの2枚目のカードが追加された図。そのカードには2行あり、「コードは変わらない」と「古いオブジェクトは再暗号化不要」です。

開発者のための AWS セキュリティ活用

練習しましょう!

開発者のための AWS セキュリティ活用

Preparing Video For Download...