Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

実践 Amazon KMS #cmdevio2015

2015年3月29日に開催されたDevelopers.IO 2015で発表しました。

  • Login to see the comments

実践 Amazon KMS #cmdevio2015

  1. 1. 自己紹介 2Ⓒ Classmethod, Inc. こんにちは,虎塚です Twitter & Hatena-id: torazuka 最近の趣味は昔の翻訳SFを読むことです AWSコンサルティング部で構築の仕事をしています 鳥形由希と申します おすすめがあれば教えてください.
  2. 2. 本日の内容 • Amazon KMSの仕組み • Amazon KMSの機能 • マスターキーの識別子 • Amazon KMSの権限管理 • AWSサービスとの連携 • まとめ 4Ⓒ Classmethod, Inc. このスライドの内容は2015年3月時点の情報に基づいています スライドは後日Web上で公開します
  3. 3. Amazon KMSの仕組み
  4. 4. Key Management Service (KMS) • re:Invent 2014で発表されました • 全リージョンで利用できます • データ暗号化と復号用の をAWS上で管理します 6Ⓒ Classmethod, Inc. 正確には,データの暗号化に使う (データキー)を
 暗号化するための (マスターキー)を管理できます
  5. 5. KMSが扱う2種類の の特徴 7Ⓒ Classmethod, Inc. マスターキー データキー AWS内部で永続化される AWS内部で永続化されない ユーザがローカルに
 エクスポートできない ユーザがローカルに エクスポートできる データキーを暗号化する データを暗号化する
  6. 6. 一般的なデータと暗号化の おさらい 8
  7. 7. データの暗号化 9Ⓒ Classmethod, Inc. データ 暗号化 暗号化されたデータ 秘
  8. 8. の保管場所が問題になる 10Ⓒ Classmethod, Inc. 暗号化された
 データ 暗号化されたデータと を一緒に保管するのは危険 秘 単独で盗まれても大丈夫だが と一緒に
 盗まれるとアウト
  9. 9. の暗号化 11Ⓒ Classmethod, Inc. データ 暗号化 暗号化された
 データ 暗号化 の 暗号化対象と同じ は
 使えないので,別の 
 を用意する 暗号化された
 秘 秘
  10. 10. の の保管場所が問題になる 12Ⓒ Classmethod, Inc. 暗号化された
 データ 問題が解決していない! 暗号化された 秘 暗号化された と暗号化されたデータを
 盗まれても大丈夫だが の と一緒に
 盗まれるとアウト の 秘
  11. 11. 解決法: の を安全な場所で保管する 13Ⓒ Classmethod, Inc. 暗号化された
 データ 暗号化された 秘 の 秘 安全な場所 OK
  12. 12. 安全な場所 = Amazon KMS 14Ⓒ Classmethod, Inc. 暗号化された
 データ 暗号化された データキー 秘 マスターキー 秘 Amazon KMS OK AWS/オンプレミス(場所を問わない) 自分で用意した
 安全な場所 より安全
  13. 13. マスターキーとデータキーの特徴(再掲) 15Ⓒ Classmethod, Inc. マスターキー データキー AWS内部で永続化される AWS内部で永続化されない ユーザがローカルに
 エクスポートできない ユーザがローカルに エクスポートできる データキーを暗号化する データを暗号化する
  14. 14. Amazon KMSの機能
  15. 15. マスターキーのライフサイクル 17Ⓒ Classmethod, Inc. 利用不能な状態 create disableenable updaterotate 利用可能な状態
  16. 16. マスターキーの管理 18Ⓒ Classmethod, Inc. マスターキー管理者 利用不能 利用可能利用可能 作成 無効化 有効化 削除 ※削除はサポート
 されていません 情報更新 マスターキーに対して可能な操作は,概ね次のとおりです マスターキーの状態 情報取得
  17. 17. マスターキーの管理操作に対応するKMS API 19Ⓒ Classmethod, Inc. 利用不能 利用可能利用可能 CreateKey DisableKey EnableKey ListKeyPolicies ListKeys ListAliases GetKeyPolicy GetKeyRotationStatus DescribeKey CreateAlias DeleteAlias DisableKeyRotation EnableKeyRotation UpdateKeyDescription PutKeyPolicy 情報取得 情報更新 作成 状態変更 マスターキーの状態 マスターキーに対して直接可能な操作は,次の4つのカテゴリ
 に分けられます
  18. 18. データキーのライフサイクル 20Ⓒ Classmethod, Inc. generate 平文の状態 暗号化状態 encryptdecrypt
  19. 19. データキーの利用 21Ⓒ Classmethod, Inc. 利用可能 データキーの利用者 データキーの生成 対応するマスターキーの状態 データキーの復号データキーの暗号化 データキーに対して可能な操作は,次のとおりです
  20. 20. データキーの利用操作に対応するKMS API 22Ⓒ Classmethod, Inc. 利用可能 Encrypt Decrypt ReEncrypt GenerateDataKey GenerateDataKeyWithoutPlaintext データキーの生成 データキーの復号データキーの暗号化
  21. 21. マスターキーの作成 23Ⓒ Classmethod, Inc. • Policy(権限)やDescription(説明)を指定して,マスターキーを生成します • 作成されたマスターキーはAWSに永続化されます AWS KMS CreateKey(Description, Policy) KeyID, ARN, 作成日, など マスターキーを
 生成して保管する マスターキー
 の管理者 マスターキーそのものは
 返却されない
  22. 22. データキーの生成 24Ⓒ Classmethod, Inc. • マスターキーのIDを指定して,データキーを生成します • 作成されたデータキーはAWS側に永続化されません AWS KMS GenerateDataKey(KeyID) 暗号化された
 データキー データキー 秘 データキー
 の利用者 指定された
 マスターキーで
 データキーを生成 データキー自体は
 保管しない データキー自体が
 返却される
  23. 23. データキーでデータを暗号化 25Ⓒ Classmethod, Inc. @ローカル データ 暗号化 データキー 暗号化された
 データ 秘 暗号化された
 データキー 秘 データキー
 の利用者 使い終わったら
 即座に捨てる 重要 大事に保管する 暗号化されたデータキーを 紛失すると,データを
 復号できなくなります! 超重要
  24. 24. データキーの復号 26Ⓒ Classmethod, Inc. • 暗号化されたデータキーを渡して,データキーを復号します AWS KMS Decrypt(CiphertextBlob) 暗号化された
 データキー データキー 秘データキー
 の利用者 暗号化に使われた
 マスターキーで
 データキーを復号 データキー自体は
 保管しない 秘
  25. 25. データキーでデータを復号 27Ⓒ Classmethod, Inc. @ローカル 暗号化された データ 復号 データキー データ データキー
 の利用者 秘使い終わったら
 即座に捨てる 重要
  26. 26. • GenerateDataKeyとEncryptの違い • GenerateDataKey: データキーの生成とデータキーの暗号化 • Encrypt: 渡されたデータの暗号化 (データキーに限らない) • 名前から想像しづらい対称性 • GenerateDataKeyとDecryptが対 • EncryptとDecryptが対 • ReEncryptの意義 • 古い で暗号化されたデータを復号し,別の で暗号化する 落とし穴: データキーのAPIが分かりづらい 28Ⓒ Classmethod, Inc.
  27. 27. マスターキーの有効化/無効化 29Ⓒ Classmethod, Inc. • マスターキーを無効化すると,そのマスターキーを利用する
 データキーの操作が,すべて失敗するようになります • データキーが復号できない=暗号化したデータの復号もできない 無効化 有効化 利用不能 利用可能利用可能 データキーの利用者 データキーの生成 データキーの復号データキーの暗号化 マスターキーの状態
  28. 28. マスターキーのローテーション 30Ⓒ Classmethod, Inc. • マスターキーには1年ごとのローテーションを設定できます • ローテーションされたキーは,それ以降,復号だけに利用されます 有効な active deactivated ローテーション ローテーション以降の
 すべてのリクエスト ローテーション以前の マスターキーで作成された
 データキーの復号リクエスト
  29. 29. マスターキーとデータキーの特徴(再掲) 31Ⓒ Classmethod, Inc. マスターキー データキー AWS内部で永続化される AWS内部で永続化されない ユーザがローカルに
 エクスポートできない ユーザがローカルに エクスポートできる データキーを暗号化する データを暗号化する
  30. 30. マスターキーの識別子
  31. 31. マスターキー • Amazon managedなデフォルトマスターキー • ユーザが作成したカスタマーマスターキー 33Ⓒ Classmethod, Inc.
  32. 32. マスターキーの4種類の識別子 (Identifier) 34Ⓒ Classmethod, Inc. KeyID KeyIDのARN エイリアス名 エイリアスのARN ARN(Amazon Resource Name)
 =AWSの様々なリソースを一意に識別する名前 1 1 1 0∼n 0∼n
  33. 33. エイリアス名とは • マスターキーの表示名 • 「alias/」から始まる文字列 • 「alias/aws」から始まるエイリアスはAWSが予約済み • (例) 「alias/aws/s3」はS3のデフォルトマスターキー • アカウント内のリージョンで一意になる • 1つのアカウントの1つのリージョンに同じエイリアス名は
 2つ存在できない • 一度削除してから同じ名前で作り直すことはできる • 同一のエイリアス名を別リージョンに作ることもできる • 操作ミスの原因になるので特に理由がなければ避けた方がよい 35Ⓒ Classmethod, Inc.
  34. 34. マスターキーの識別子 (1/2) • Key ID (Globally Unique Key ID) • 例: 1234abcd-12ab-34cd-12ab-123abc456dab • 一覧方法: • エイリアス名 • 例: alias/aws/s3 • 一覧方法: 36Ⓒ Classmethod, Inc. aws kms list-aliases ¦ jq '.Aliases[].AliasName' aws kms list-keys ¦ jq '.Keys[].KeyId KMSのAPIで,マスターキーを指定する際には,
 次の4種類の識別子のどれを使います
  35. 35. マスターキーの識別子 (2/2) • Key IDのARN • 例: arn:aws:kms:リージョン名:AWSアカウントID:key/ 1234abcd-12ab-34cd-12ab-123abc456dab • 一覧方法: • エイリアスのARN • 例: arn:aws:kms:リージョン名:AWSアカウントID:alias/aws/ s3 • 一覧方法: 37Ⓒ Classmethod, Inc. aws kms list-aliases ¦ jq '.Aliases[].AliasArn' aws kms list-keys ¦ jq '.Keys[].KeyArn'
  36. 36. KeyIDとエイリアスの関係性 38Ⓒ Classmethod, Inc. KeyID KeyIDのARN エイリアス名 エイリアスのARN 参照 (target key id) エイリアスはただ1つのKey IDと関連づけられる (これをエイリアスから見てtarget key idという)
  37. 37. エイリアスは複数付けたり,付け替えたりできる 39Ⓒ Classmethod, Inc. KeyID KeyIDのARN エイリアス名 エイリアスのARN エイリアス名 エイリアスのARN NEW NEW
  38. 38. AMCでのカスタマーマスターキー作成: エイリアスも作成 40Ⓒ Classmethod, Inc. AMC(Amazon Management Console) から作成する場合,同時にエイリアス名 の作成が必須
  39. 39. CLIでのカスタマーマスターキー作成: エイリアス作成は任意 41Ⓒ Classmethod, Inc. % aws kms create-key { "KeyMetadata": { "KeyId": "1234abcd-12ab-34cd-12ab-123abc456dab", "Description": "", "Enabled": true, "KeyUsage": "ENCRYPT_DECRYPT", "CreationDate": 1427453438.697, "Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/ 1234abcd-12ab-34cd-12ab-123abc456dab", "AWSAccountId": "123456789012" } AWS-CLIを使うと,エイリアス名を
 作成せずにマスターキーを作成できる 実行結果
  40. 40. (補足) エイリアス名のない 42Ⓒ Classmethod, Inc. AWS-CLIでエイリアス名を指定せずに作成した を
 AMCで確認すると,エイリアス名の欄が空白になっている の作成時以外にエイリアス名を編集するには,AWS CLIを利用する
  41. 41. KeyIDとKeyIDのARNが作成された 43Ⓒ Classmethod, Inc. KeyID KeyIDのARN 1234abcd-12ab-34cd-12ab-123abc456dab arn:aws:kms:ap-northeast-1:012345678901:key/
 1234abcd-12ab-34cd-12ab-123abc456dab
  42. 42. エイリアスの作成方法 44Ⓒ Classmethod, Inc. % aws kms create-alias --alias-name alias/alias-test  --target-key-id 1234abcd-12ab-34cd-12ab-123abc456dab % aws kms list-aliases ¦ jq '.Aliases[]' 
 ¦ jq 'select(.AliasName == "alias/alias-test")' { "AliasArn": "arn:aws:kms:ap-northeast-1:012345678901:alias/alias-test", "AliasName": "alias/alias-test", "TargetKeyId": "1234abcd-12ab-34cd-12ab-123abc456dab" } 作成 確認 ※KeyIDは,キー作成時の戻り値に表示されています
  43. 43. エイリアス名とエイリアスのARNが作成された 45Ⓒ Classmethod, Inc. KeyID KeyIDのARN 1234abcd-12ab-34cd-12ab-123abc456dab arn:aws:kms:ap-northeast-1:012345678901:
 key/1234abcd-12ab-34cd-12ab-123abc456dab エイリアス名 エイリアスのARN 参照 (target-key-id) alias/alias-test arn:aws:kms:ap-northeast-1:012345678901:alias/alias-test
  44. 44. エイリアスの変更方法 46Ⓒ Classmethod, Inc. % aws kms delete-alias --alias-name alias/alias-test % aws kms list-aliases ¦ jq '.Aliases[]' 
 ¦ jq 'select(.AliasName == "alias/alias-changed")' { "AliasArn": "arn:aws:kms:ap-northeast-1:012345678901:alias/alias-changed", "AliasName": "alias/alias-changed", "TargetKeyId": "1234abcd-12ab-34cd-12ab-123abc456dab" } 削除 確認 % aws kms create-alias --alias-name alias/alias-changed  --target-key-id 1234abcd-12ab-34cd-12ab-123abc456dab 再作成
  45. 45. エイリアスが付け替えられた 47Ⓒ Classmethod, Inc. KeyID KeyIDのARN 1234abcd-12ab-34cd-12ab-123abc456dab arn:aws:kms:ap-northeast-1:012345678901:key/
 1234abcd-12ab-34cd-12ab-123abc456dab エイリアス名 エイリアスのARN 参照 alias/alias-test arn:aws:kms:ap-northeast-1:012345678901:
 alias/alias-test エイリアス名 エイリアスのARN NEW NEW alias/alias-changed arn:aws:kms:ap-northeast-1:012345678901:
 alias/alias-changed
  46. 46. エイリアス付け替えの役割 カスタマーマスターキーを明示的に入れ替える 48 Ⓒ Classmethod, Inc. KeyID 利用者 KeyID エイリアス名 NEW 以前と同一のエイリアス名で 新しいカスタマーマスターキーを
 使うことができる 付け替え 利用
  47. 47. エイリアスを付け替えるユースケース例 • 古いキーで暗号化したデータを復号させたくない場合 • ローテーションをしても古いキーでの復号がサポートされ
 続けるが,実体となるキーを切り替えることで,現在よりも
 古いキーを切り捨てられる • アプリケーションにエイリアス名を埋め込んで
 別リージョンでも動かしたい場合 • アプリケーション移行先のリージョンに同じエイリアス名の
 カスタマーマスターキーを用意する • ソースコードを変更しなくてよい 49Ⓒ Classmethod, Inc. ※既存の暗号化済みデータは,元のリージョンの で暗号化しているので,
 データ移行はできません
  48. 48. マスターキーの識別子: まとめ • マスターキーを特定する4種類の識別子 • Key ID,KeyIDのARN,エイリアス名,エイリアス名のARN • エイリアス名とは • 「alias/」から始まる表示名 • アカウント内のリージョンで一意 • AMCから を作成するときはエイリアス名も同時作成 • AWS CLIで を作成するときは同時作成でも後からでもOK • 付け外しできるエイリアス名の意義 • カスタマーマスターキーを明示的に切り替えることができる 50Ⓒ Classmethod, Inc.
  49. 49. Amazon KMSの権限管理
  50. 50. Amazon KMSの権限管理 • Key Policyとは • デフォルトKey Policy • よくある落とし穴 • KMSを安全に運用するために 53Ⓒ Classmethod, Inc. ※Grantの話は今回省略しました
  51. 51. Key Policy 54Ⓒ Classmethod, Inc. • キーに直接適用するアクセス可否の定義 • 「誰が」「どのキーを」使用可能かを指定する • AWSアカウントやユーザ,IAMユーザなどをPrincipalの
 値として指定する • IAM Policyと同じくAWS API単位で操作種別を限定できる • ベストプラクティス:
 カスタマーマスターキーの作成時にPolicyを与える • 明示的に与えない場合,デフォルトのKeyPolicyが適用される • 意図せずデフォルトPolicyのままにしてしまうのを避ける
  52. 52. 55Ⓒ Classmethod, Inc. { "Version" : "2012-10-17", "Id" : "key-default", "Statement" : [ { "Sid" : "Enable IAM User Permissions", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::012345678901:root" }, "Action" : "kms:*", "Resource" : "*" } ] } Allow / Deny ここではAWSアカウントの全ユーザ デフォルトのKey Policy キーを使うAPI操作 APIで操作対象とするキー キーへのアクセスが許可または拒否されるユーザ
  53. 53. 落とし穴: IAMユーザがキーを使えない場合 56Ⓒ Classmethod, Inc. A client error (AccessDeniedException) occurred when calling the GenerateDataKey operation: User: arn:aws:iam:: 012345678901:user/username is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:ap- northeast-1:012345678901:key/ 1234abcd-12ab-34cd-12ab-123abc456dab 権限不足のときのエラー例(AWS CLI) IAMユーザでカスタマーマスターキーを作成した場合, Policyの設定が原因でキーの利用時にエラーになることがある
  54. 54. IAMユーザがキーを使えない場合の確認事項 57Ⓒ Classmethod, Inc. • KMS APIを利用したAWSアカウントは正しいか • KMS APIを利用したユーザは正しいか • 選択したリージョンは正しいか • 利用しようとしたカスタマーマスターキーは正しいか • 異なるリージョンで同一のエイリアス名を利用できることに注意 • どのAction (API操作) に失敗したか • 利用しようとしたユーザのIAM Policyで,上記のActionを
 明示的に許可しているか • 利用しようとしたカスタマーマスターキーで,上記のユーザが
 Principalに含まれているか 落とし穴解説
  55. 55. Key Policyの確認方法 58Ⓒ Classmethod, Inc. % aws --output text kms get-key-policy --key-id 1234abcd-12ab-34cd-12ab-123abc456dab --policy-name default 出力結果はフォーマットされたJSON形式で,改行文字が
 含まれるため,text形式で出力すると見やすい キーの指定方法は,Key ID,
 またはKey IDのARNのみ (エイリアス名を使えない) Key Policyを明示的に与えて
 いない場合,defaultという
 名前でPolicyが適用されている
  56. 56. 解決法(1) IAM Policyの修正 IAMユーザ (あるいはユーザが所属するグループ) のPolicyを変更する 59Ⓒ Classmethod, Inc. AWS Managed Policyの「AWSKeyManagementServicePowerUser」 を採用している場合は特に注意 "Effect": "Allow", "Action": [ "kms:CreateAlias", "kms:CreateKey", "kms:DeleteAlias", "kms:Describe*", "kms:GenerateRandom", "kms:Get*", "kms:List*", "iam:ListGroups", "iam:ListRoles", "iam:ListUsers" ], "Resource": "*" KMSの一部の操作しか許可されない AWSKeyManagementServicePowerUserから抜粋 このPolicyはread onlyなので, 必要なPolicyを新規に作成して
 IAMユーザに関連づける 落とし穴解説
  57. 57. 利用するアカウントまたはIAMユーザをPrincipalに追加する 解決法(2) Key Policyの修正 利用するユーザがキーと別のAWSアカウントの時に忘れがち 60Ⓒ Classmethod, Inc. [...] "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::012345678901:root", "AWS" : "arn:aws:iam::555666777888:user/username" }, "Action" : "kms:*", "Resource" : "*" [...] 前掲のデフォルトKey Policyから抜粋 落とし穴解説 上のアカウントのユーザはすべて許可される 下のアカウントのユーザはusernameだけ許可される
  58. 58. KMSを安全に運用するために • の管理者と利用者を分けましょう • 権限ごとにユーザを分けるのがIAMのベストプラクティス • 利用者には最小の権限を付与する • AWSサービスと連携して使うときはDisableKeyを
 制限しましょう • RDSの暗号化に使用している をDisableしてしまうと,
 DBからデータを取り出せなくなる.そういった事態を
 未然に防ぐ 61Ⓒ Classmethod, Inc.
  59. 59. Key Policyで の管理と利用を分離 62Ⓒ Classmethod, Inc. { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::012345678901:user/Administrator"}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*" ], "Resource": "*" } { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::012345678901:user/User"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } 管理系API 利用系API
  60. 60. DisableKey操作を制限する(1) AWSサービスと連携してKMSを利用するときは,誤って を
 Disableする事故を防ぐため,Policyの変更を検討する たとえば,IAM PolicyにDisableKeyの明示Denyを追加する 63Ⓒ Classmethod, Inc. { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" } ] } { "Effect": "Deny", "Action": kms:DisableKey", "Resource": "*" } 追加 (例) PowerUser権限 Disableすると取り返しがつかないので, の管理者にも実施した方が安全
  61. 61. DisableKey操作を制限する(2) もしくは,AWSサービスと連携したカスタマーマスターキーの
 Key Policyに,DisableKeyの明示Denyを追加する 64Ⓒ Classmethod, Inc. { "Sid" : "Enable IAM User Permissions", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::012345678901:root" }, "Action" : "kms:*", "Resource" : "*" } { "Sid" : "Disable - DisableKey Action", "Effect" : "Deny", "Principal" : { "AWS" : "arn:aws:iam::012345678901:root" }, "Action" : "kms:DisableKey", "Resource" : "*" } 追加 デフォルトKey Policy
 から抜粋
  62. 62. • 自体に制約を与える(2)のKeyPolicy編集がベター • 将来IAMユーザが増えた時,個別に対処せずに済ますため • できれば,(1)のIAM Policy編集も併用する • ユーザにデフォルトのPolicyとしてDisableKeyを強制するため • Key PolicyまたはIAM Policyの変更権限がない場合,
 最低限どちらか可能な方を実施する DisableKey操作の制限方法の選択 紹介した2つの方法は片方を実施すれば用が足りる.どちらを使えばよいか 65Ⓒ Classmethod, Inc.
  63. 63. KMSの権限管理: まとめ 66Ⓒ Classmethod, Inc. • Key Policyとは • Keyに直接適用するアクセス可否定義 • カスタマーマスターキーの作成時に付与するのがベター • デフォルトKey Policy • カスタマーマスターキーの使用時にエラーが出るときは,
 IAM PolicyとKey Policyを見直す • KMSを安全に運用するために • の管理者と利用者を分けましょう • DisableKeyをIAM PolicyでもKey Policyでも制限しましょう
  64. 64. AWSサービスとの連携
  65. 65. KMSと連携可能なサービス • EBS • RDS • S3 • Redshift • Transcoder • WorkMail 68Ⓒ Classmethod, Inc. これらのサービスでKMSをデータ暗号化に
 利用できます 利用方法は公式ドキュメントを参照ください 利用にあたって注意すべきことは,スライド最後の参考資料に掲載した
 AWS公式のWebinar資料をご一読ください 複数の暗号化オプションの選択肢の1つ
 として,KMSを選べるサービスもあります
  66. 66. どんなときにKMSによる暗号化を選ぶか • を厳重に管理することが負担なとき • をCDに焼いて金庫にしまうのは面倒 • KMSならエクスポートの心配がない • マルチクラウドでのデザスタリカバリをしたいとき • の をエクスポートできないことが弱点に • 物理管理のセキュリティポリシーを変えられないとき • アメリカのパトリオット法による強制捜査のリスクを
 重視するとき 69Ⓒ Classmethod, Inc. 次の場合はKMSの利用に向かないと思われます
  67. 67. RDSのKMSによる暗号化 (検証) 70Ⓒ Classmethod, Inc. RDSインスタンスの起動 暗号化用キー(KMS)の指定 カスタマーマスターキーの無効化 CloudTrailログの確認 CloudTrailログの確認 実際の運用時には絶対に
 やってはいけません 起動時にだけ指定できます
  68. 68. 落とし穴: DBインスタンスが起動しない 暗号化用の として指定したKMSの が存在しない,
 またはRDSでKMSを使うための権限がKey Policyに
 足りない場合,DBインスタンスが起動しない 解決策: Key Policyに必要な定義を追加する 71Ⓒ Classmethod, Inc.
  69. 69. どんな権限が必要か AWS managedなRDS用のデフォルトキーを参考に 72Ⓒ Classmethod, Inc. 落とし穴解説 "Statement" : [ { "Sid" : "Allow access through RDS for all principals in the account that are authorized to use RDS", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:ListGrants", "kms:Decrypt", "kms:CreateGrant", "kms:GenerateDataKey*", "kms:ReEncrypt*", "kms:DescribeKey", "kms:Encrypt" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "rds.ap-northeast-1.amazonaws.com", "kms:CallerAccount" : "012345678901" } } }] RDSが透過的に暗号化/復号するためのPolicyが必要
  70. 70. 落とし穴: 暗号化に使った をDisableした 73Ⓒ Classmethod, Inc. DBインスタンスにクライアントからアクセスできなくなり,
 AMCからもDeleteかRestoreしかできなくなることがある Statusが「inaccessible-encryption-credentials」になる
  71. 71. 何が発生しているか RDSを暗号化すると,クライアントから書き込みがなくても
 AWS内部でGenerateDataKeyのイベントが定期的に発生する (おそらく の有効性を確認している) 74Ⓒ Classmethod, Inc. 落とし穴解説 { [...] "eventName":"GenerateDataKey", [...] "userAgent":"v1.0, aws-internal/3", [...] "eventType":"AwsServiceEvent", [...]
 } CloudTrailログから抜粋 APIコール以外で発生したイベントであることを示す
  72. 72. 何が発生しているか KeyをDisableにすると,このリクエストがエラーになる
 一定期間エラーが続いた後,DBインスタンスが無効になる 75Ⓒ Classmethod, Inc. 落とし穴解説 { [...] "eventSource":"kms.amazonaws.com", "eventName":"GenerateDataKey", [...] "userAgent":"v1.0, aws-internal/3", "errorCode":"DisabledException", "errorMessage":"arn:aws:kms:ap-northeast-1:012345678901:key/ 1234abcd-12ab-34cd-12ab-123abc456dab is disabled.", [...] "eventType":"AwsServiceEvent", [...]
 } CloudTrailログから抜粋
  73. 73. 誤ってDisableKeyしたときの対処 RDSの暗号化に使った をDisableしてしまった場合,
 内部のデータにアクセスできなくなる 次を実行する 1. マスターキーをEnableに戻す 2. DBインスタンスをDeleteする 3. スナップショットからDBをリストアする 76Ⓒ Classmethod, Inc. 落とし穴解説
  74. 74. AWSサービスとの連携: まとめ 77Ⓒ Classmethod, Inc. • KMSとAWSサービスの連携を利用したときは,
 のDisableに注意しましょう • RDSの場合は,KMSの利用とスナップショットの定期取得は
 セットであると考える • AWSサービスと連携してもKMSはKMS • 挙動の基本は同じ
  75. 75. まとめ
  76. 76. まとめ • KMSの仕組みを理解して,データキーを正しく
 取り扱いましょう • 暗号化されたデータキーは大切に保管しましょう • 平文のデータキーは使ったらすぐ捨てましょう • エイリアスを活用すると古いキーを捨てられます • Key Policyの活用でKMSを安全に運用しましょう • AWSサービスと連携したKMSの活用も,上記の
 延長線上です 79Ⓒ Classmethod, Inc.
  77. 77. 参考資料 • AWS Key Management Service • http://aws.amazon.com/jp/kms • AWS Key Management Service whitepaper • https://d0.awsstatic.com/whitepapers/KMS-Cryptographic-Details.pdf • AWS Black Belt Techシリーズ AWS Key Management Service • http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt- tech-aws-key-management-service • AWS Black Belt Tech Webinar - AWS Key Management Service を開催しました • http://aws.typepad.com/sajp/2015/02/black-belt-kms.html 80Ⓒ Classmethod, Inc.
  78. 78. Developer Day ご清聴ありがとうございました。 スライドは後日ブログで公開します。 81 H-1 Ⓒ Classmethod, Inc. #cmdevio2015

×