SlideShare a Scribd company logo
実践 Amazon KMS #cmdevio2015
自己紹介
2Ⓒ Classmethod, Inc.
こんにちは,虎塚です
Twitter & Hatena-id: torazuka
最近の趣味は昔の翻訳SFを読むことです
AWSコンサルティング部で構築の仕事をしています
鳥形由希と申します
おすすめがあれば教えてください.
実践 Amazon KMS #cmdevio2015
本日の内容
• Amazon KMSの仕組み
• Amazon KMSの機能
• マスターキーの識別子
• Amazon KMSの権限管理
• AWSサービスとの連携
• まとめ
4Ⓒ Classmethod, Inc.
このスライドの内容は2015年3月時点の情報に基づいています
スライドは後日Web上で公開します
Amazon KMSの仕組み
Key Management Service (KMS)
• re:Invent 2014で発表されました
• 全リージョンで利用できます
• データ暗号化と復号用の をAWS上で管理します
6Ⓒ Classmethod, Inc.
正確には,データの暗号化に使う (データキー)を

暗号化するための (マスターキー)を管理できます
KMSが扱う2種類の の特徴
7Ⓒ Classmethod, Inc.
マスターキー データキー
AWS内部で永続化される AWS内部で永続化されない
ユーザがローカルに

エクスポートできない
ユーザがローカルに
エクスポートできる
データキーを暗号化する データを暗号化する
一般的なデータと暗号化の
おさらい
8
データの暗号化
9Ⓒ Classmethod, Inc.
データ
暗号化
暗号化されたデータ
秘
の保管場所が問題になる
10Ⓒ Classmethod, Inc.
暗号化された

データ
暗号化されたデータと を一緒に保管するのは危険
秘
単独で盗まれても大丈夫だが
と一緒に

盗まれるとアウト
の暗号化
11Ⓒ Classmethod, Inc.
データ
暗号化
暗号化された

データ
暗号化
の
暗号化対象と同じ は

使えないので,別の 

を用意する 暗号化された

秘
秘
の の保管場所が問題になる
12Ⓒ Classmethod, Inc.
暗号化された

データ
問題が解決していない!
暗号化された
秘
暗号化された と暗号化されたデータを

盗まれても大丈夫だが
の と一緒に

盗まれるとアウト
の
秘
解決法: の を安全な場所で保管する
13Ⓒ Classmethod, Inc.
暗号化された

データ
暗号化された
秘
の
秘
安全な場所
OK
安全な場所 = Amazon KMS
14Ⓒ Classmethod, Inc.
暗号化された

データ
暗号化された
データキー
秘
マスターキー
秘
Amazon KMS
OK
AWS/オンプレミス(場所を問わない)
自分で用意した

安全な場所 より安全
マスターキーとデータキーの特徴(再掲)
15Ⓒ Classmethod, Inc.
マスターキー データキー
AWS内部で永続化される AWS内部で永続化されない
ユーザがローカルに

エクスポートできない
ユーザがローカルに
エクスポートできる
データキーを暗号化する データを暗号化する
Amazon KMSの機能
マスターキーのライフサイクル
17Ⓒ Classmethod, Inc.
利用不能な状態
create
disableenable
updaterotate 利用可能な状態
マスターキーの管理
18Ⓒ Classmethod, Inc.
マスターキー管理者
利用不能 利用可能利用可能
作成
無効化 有効化 削除
※削除はサポート

されていません
情報更新
マスターキーに対して可能な操作は,概ね次のとおりです
マスターキーの状態
情報取得
マスターキーの管理操作に対応するKMS API
19Ⓒ Classmethod, Inc.
利用不能 利用可能利用可能
CreateKey DisableKey EnableKey
ListKeyPolicies
ListKeys
ListAliases
GetKeyPolicy
GetKeyRotationStatus
DescribeKey
CreateAlias
DeleteAlias
DisableKeyRotation
EnableKeyRotation
UpdateKeyDescription
PutKeyPolicy
情報取得 情報更新
作成 状態変更
マスターキーの状態
マスターキーに対して直接可能な操作は,次の4つのカテゴリ

に分けられます
データキーのライフサイクル
20Ⓒ Classmethod, Inc.
generate
平文の状態
暗号化状態
encryptdecrypt
データキーの利用
21Ⓒ Classmethod, Inc.
利用可能
データキーの利用者
データキーの生成
対応するマスターキーの状態
データキーの復号データキーの暗号化
データキーに対して可能な操作は,次のとおりです
データキーの利用操作に対応するKMS API
22Ⓒ Classmethod, Inc.
利用可能
Encrypt Decrypt
ReEncrypt
GenerateDataKey
GenerateDataKeyWithoutPlaintext
データキーの生成 データキーの復号データキーの暗号化
マスターキーの作成
23Ⓒ Classmethod, Inc.
• Policy(権限)やDescription(説明)を指定して,マスターキーを生成します
• 作成されたマスターキーはAWSに永続化されます
AWS KMS
CreateKey(Description, Policy)
KeyID, ARN, 作成日, など
マスターキーを

生成して保管する
マスターキー

の管理者
マスターキーそのものは

返却されない
データキーの生成
24Ⓒ Classmethod, Inc.
• マスターキーのIDを指定して,データキーを生成します
• 作成されたデータキーはAWS側に永続化されません
AWS KMS
GenerateDataKey(KeyID)
暗号化された

データキー
データキー
秘
データキー

の利用者
指定された

マスターキーで

データキーを生成
データキー自体は

保管しない
データキー自体が

返却される
データキーでデータを暗号化
25Ⓒ Classmethod, Inc.
@ローカル
データ
暗号化
データキー
暗号化された

データ
秘
暗号化された

データキー
秘
データキー

の利用者
使い終わったら

即座に捨てる
重要
大事に保管する
暗号化されたデータキーを
紛失すると,データを

復号できなくなります!
超重要
データキーの復号
26Ⓒ Classmethod, Inc.
• 暗号化されたデータキーを渡して,データキーを復号します
AWS KMS
Decrypt(CiphertextBlob)
暗号化された

データキー
データキー
秘データキー

の利用者
暗号化に使われた

マスターキーで

データキーを復号
データキー自体は

保管しない
秘
データキーでデータを復号
27Ⓒ Classmethod, Inc.
@ローカル
暗号化された
データ
復号
データキー
データ
データキー

の利用者
秘使い終わったら

即座に捨てる
重要
• GenerateDataKeyとEncryptの違い
• GenerateDataKey: データキーの生成とデータキーの暗号化
• Encrypt: 渡されたデータの暗号化 (データキーに限らない)
• 名前から想像しづらい対称性
• GenerateDataKeyとDecryptが対
• EncryptとDecryptが対
• ReEncryptの意義
• 古い で暗号化されたデータを復号し,別の で暗号化する
落とし穴: データキーのAPIが分かりづらい
28Ⓒ Classmethod, Inc.
マスターキーの有効化/無効化
29Ⓒ Classmethod, Inc.
• マスターキーを無効化すると,そのマスターキーを利用する

データキーの操作が,すべて失敗するようになります
• データキーが復号できない=暗号化したデータの復号もできない
無効化 有効化
利用不能 利用可能利用可能
データキーの利用者
データキーの生成 データキーの復号データキーの暗号化
マスターキーの状態
マスターキーのローテーション
30Ⓒ Classmethod, Inc.
• マスターキーには1年ごとのローテーションを設定できます
• ローテーションされたキーは,それ以降,復号だけに利用されます
有効な
active
deactivated
ローテーション
ローテーション以降の

すべてのリクエスト
ローテーション以前の
マスターキーで作成された

データキーの復号リクエスト
マスターキーとデータキーの特徴(再掲)
31Ⓒ Classmethod, Inc.
マスターキー データキー
AWS内部で永続化される AWS内部で永続化されない
ユーザがローカルに

エクスポートできない
ユーザがローカルに
エクスポートできる
データキーを暗号化する データを暗号化する
マスターキーの識別子
マスターキー
• Amazon managedなデフォルトマスターキー
• ユーザが作成したカスタマーマスターキー
33Ⓒ Classmethod, Inc.
マスターキーの4種類の識別子 (Identifier)
34Ⓒ Classmethod, Inc.
KeyID
KeyIDのARN
エイリアス名
エイリアスのARN
ARN(Amazon Resource Name)

=AWSの様々なリソースを一意に識別する名前
1
1
1
0∼n
0∼n
エイリアス名とは
• マスターキーの表示名
• 「alias/」から始まる文字列
• 「alias/aws」から始まるエイリアスはAWSが予約済み
• (例) 「alias/aws/s3」はS3のデフォルトマスターキー
• アカウント内のリージョンで一意になる
• 1つのアカウントの1つのリージョンに同じエイリアス名は

2つ存在できない
• 一度削除してから同じ名前で作り直すことはできる
• 同一のエイリアス名を別リージョンに作ることもできる
• 操作ミスの原因になるので特に理由がなければ避けた方がよい
35Ⓒ Classmethod, Inc.
マスターキーの識別子 (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種類の識別子のどれを使います
マスターキーの識別子 (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'
KeyIDとエイリアスの関係性
38Ⓒ Classmethod, Inc.
KeyID
KeyIDのARN
エイリアス名
エイリアスのARN
参照
(target key id)
エイリアスはただ1つのKey IDと関連づけられる
(これをエイリアスから見てtarget key idという)
エイリアスは複数付けたり,付け替えたりできる
39Ⓒ Classmethod, Inc.
KeyID
KeyIDのARN
エイリアス名
エイリアスのARN
エイリアス名
エイリアスのARN
NEW
NEW
AMCでのカスタマーマスターキー作成: エイリアスも作成
40Ⓒ Classmethod, Inc.
AMC(Amazon Management Console)
から作成する場合,同時にエイリアス名
の作成が必須
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を使うと,エイリアス名を

作成せずにマスターキーを作成できる
実行結果
(補足) エイリアス名のない
42Ⓒ Classmethod, Inc.
AWS-CLIでエイリアス名を指定せずに作成した を

AMCで確認すると,エイリアス名の欄が空白になっている
の作成時以外にエイリアス名を編集するには,AWS CLIを利用する
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
エイリアスの作成方法
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は,キー作成時の戻り値に表示されています
エイリアス名とエイリアスの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
エイリアスの変更方法
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
再作成
エイリアスが付け替えられた
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
エイリアス付け替えの役割
カスタマーマスターキーを明示的に入れ替える
48
Ⓒ Classmethod, Inc.
KeyID
利用者
KeyID
エイリアス名
NEW
以前と同一のエイリアス名で
新しいカスタマーマスターキーを

使うことができる
付け替え
利用
エイリアスを付け替えるユースケース例
• 古いキーで暗号化したデータを復号させたくない場合
• ローテーションをしても古いキーでの復号がサポートされ

続けるが,実体となるキーを切り替えることで,現在よりも

古いキーを切り捨てられる
• アプリケーションにエイリアス名を埋め込んで

別リージョンでも動かしたい場合
• アプリケーション移行先のリージョンに同じエイリアス名の

カスタマーマスターキーを用意する
• ソースコードを変更しなくてよい
49Ⓒ Classmethod, Inc.
※既存の暗号化済みデータは,元のリージョンの で暗号化しているので,

データ移行はできません
マスターキーの識別子: まとめ
• マスターキーを特定する4種類の識別子
• Key ID,KeyIDのARN,エイリアス名,エイリアス名のARN
• エイリアス名とは
• 「alias/」から始まる表示名
• アカウント内のリージョンで一意
• AMCから を作成するときはエイリアス名も同時作成
• AWS CLIで を作成するときは同時作成でも後からでもOK
• 付け外しできるエイリアス名の意義
• カスタマーマスターキーを明示的に切り替えることができる
50Ⓒ Classmethod, Inc.
実践 Amazon KMS #cmdevio2015
Amazon KMSの権限管理
Amazon KMSの権限管理
• Key Policyとは
• デフォルトKey Policy
• よくある落とし穴
• KMSを安全に運用するために
53Ⓒ Classmethod, Inc.
※Grantの話は今回省略しました
Key Policy
54Ⓒ Classmethod, Inc.
• キーに直接適用するアクセス可否の定義
• 「誰が」「どのキーを」使用可能かを指定する
• AWSアカウントやユーザ,IAMユーザなどをPrincipalの

値として指定する
• IAM Policyと同じくAWS API単位で操作種別を限定できる
• ベストプラクティス:

カスタマーマスターキーの作成時にPolicyを与える
• 明示的に与えない場合,デフォルトのKeyPolicyが適用される
• 意図せずデフォルトPolicyのままにしてしまうのを避ける
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で操作対象とするキー
キーへのアクセスが許可または拒否されるユーザ
落とし穴: 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の設定が原因でキーの利用時にエラーになることがある
IAMユーザがキーを使えない場合の確認事項
57Ⓒ Classmethod, Inc.
• KMS APIを利用したAWSアカウントは正しいか
• KMS APIを利用したユーザは正しいか
• 選択したリージョンは正しいか
• 利用しようとしたカスタマーマスターキーは正しいか
• 異なるリージョンで同一のエイリアス名を利用できることに注意
• どのAction (API操作) に失敗したか
• 利用しようとしたユーザのIAM Policyで,上記のActionを

明示的に許可しているか
• 利用しようとしたカスタマーマスターキーで,上記のユーザが

Principalに含まれているか
落とし穴解説
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が適用されている
解決法(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ユーザに関連づける
落とし穴解説
利用するアカウントまたは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だけ許可される
KMSを安全に運用するために
• の管理者と利用者を分けましょう
• 権限ごとにユーザを分けるのがIAMのベストプラクティス
• 利用者には最小の権限を付与する
• AWSサービスと連携して使うときはDisableKeyを

制限しましょう
• RDSの暗号化に使用している をDisableしてしまうと,

DBからデータを取り出せなくなる.そういった事態を

未然に防ぐ
61Ⓒ Classmethod, Inc.
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
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すると取り返しがつかないので,
の管理者にも実施した方が安全
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

から抜粋
• 自体に制約を与える(2)のKeyPolicy編集がベター
• 将来IAMユーザが増えた時,個別に対処せずに済ますため
• できれば,(1)のIAM Policy編集も併用する
• ユーザにデフォルトのPolicyとしてDisableKeyを強制するため
• Key PolicyまたはIAM Policyの変更権限がない場合,

最低限どちらか可能な方を実施する
DisableKey操作の制限方法の選択
紹介した2つの方法は片方を実施すれば用が足りる.どちらを使えばよいか
65Ⓒ Classmethod, Inc.
KMSの権限管理: まとめ
66Ⓒ Classmethod, Inc.
• Key Policyとは
• Keyに直接適用するアクセス可否定義
• カスタマーマスターキーの作成時に付与するのがベター
• デフォルトKey Policy
• カスタマーマスターキーの使用時にエラーが出るときは,

IAM PolicyとKey Policyを見直す
• KMSを安全に運用するために
• の管理者と利用者を分けましょう
• DisableKeyをIAM PolicyでもKey Policyでも制限しましょう
AWSサービスとの連携
KMSと連携可能なサービス
• EBS
• RDS
• S3
• Redshift
• Transcoder
• WorkMail
68Ⓒ Classmethod, Inc.
これらのサービスでKMSをデータ暗号化に

利用できます
利用方法は公式ドキュメントを参照ください
利用にあたって注意すべきことは,スライド最後の参考資料に掲載した

AWS公式のWebinar資料をご一読ください
複数の暗号化オプションの選択肢の1つ

として,KMSを選べるサービスもあります
どんなときにKMSによる暗号化を選ぶか
• を厳重に管理することが負担なとき
• をCDに焼いて金庫にしまうのは面倒
• KMSならエクスポートの心配がない
• マルチクラウドでのデザスタリカバリをしたいとき
• の をエクスポートできないことが弱点に
• 物理管理のセキュリティポリシーを変えられないとき
• アメリカのパトリオット法による強制捜査のリスクを

重視するとき
69Ⓒ Classmethod, Inc.
次の場合はKMSの利用に向かないと思われます
RDSのKMSによる暗号化 (検証)
70Ⓒ Classmethod, Inc.
RDSインスタンスの起動
暗号化用キー(KMS)の指定
カスタマーマスターキーの無効化
CloudTrailログの確認
CloudTrailログの確認
実際の運用時には絶対に

やってはいけません
起動時にだけ指定できます
落とし穴: DBインスタンスが起動しない
暗号化用の として指定したKMSの が存在しない,

またはRDSでKMSを使うための権限がKey Policyに

足りない場合,DBインスタンスが起動しない
解決策: Key Policyに必要な定義を追加する
71Ⓒ Classmethod, Inc.
どんな権限が必要か
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が必要
落とし穴: 暗号化に使った をDisableした
73Ⓒ Classmethod, Inc.
DBインスタンスにクライアントからアクセスできなくなり,

AMCからもDeleteかRestoreしかできなくなることがある
Statusが「inaccessible-encryption-credentials」になる
何が発生しているか
RDSを暗号化すると,クライアントから書き込みがなくても

AWS内部でGenerateDataKeyのイベントが定期的に発生する
(おそらく の有効性を確認している)
74Ⓒ Classmethod, Inc.
落とし穴解説
{
[...]
"eventName":"GenerateDataKey",
[...]
"userAgent":"v1.0, aws-internal/3",
[...]
"eventType":"AwsServiceEvent",
[...]

}
CloudTrailログから抜粋
APIコール以外で発生したイベントであることを示す
何が発生しているか
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ログから抜粋
誤ってDisableKeyしたときの対処
RDSの暗号化に使った をDisableしてしまった場合,

内部のデータにアクセスできなくなる
次を実行する
1. マスターキーをEnableに戻す
2. DBインスタンスをDeleteする
3. スナップショットからDBをリストアする
76Ⓒ Classmethod, Inc.
落とし穴解説
AWSサービスとの連携: まとめ
77Ⓒ Classmethod, Inc.
• KMSとAWSサービスの連携を利用したときは,

のDisableに注意しましょう
• RDSの場合は,KMSの利用とスナップショットの定期取得は

セットであると考える
• AWSサービスと連携してもKMSはKMS
• 挙動の基本は同じ
まとめ
まとめ
• KMSの仕組みを理解して,データキーを正しく

取り扱いましょう
• 暗号化されたデータキーは大切に保管しましょう
• 平文のデータキーは使ったらすぐ捨てましょう
• エイリアスを活用すると古いキーを捨てられます
• Key Policyの活用でKMSを安全に運用しましょう
• AWSサービスと連携したKMSの活用も,上記の

延長線上です
79Ⓒ Classmethod, Inc.
参考資料
• 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.
Developer Day
ご清聴ありがとうございました。
スライドは後日ブログで公開します。
81
H-1
Ⓒ Classmethod, Inc.
#cmdevio2015

More Related Content

PDF
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
Amazon Web Services Japan
 
PDF
20190814 AWS Black Belt Online Seminar AWS Serverless Application Model
Amazon Web Services Japan
 
PDF
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
Amazon Web Services Japan
 
PDF
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...
Amazon Web Services Japan
 
PDF
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
Amazon Web Services Japan
 
PDF
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
 
PDF
20190911 AWS Black Belt Online Seminar AWS Batch
Amazon Web Services Japan
 
PDF
20210119 AWS Black Belt Online Seminar AWS CloudTrail
Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
Amazon Web Services Japan
 
20190814 AWS Black Belt Online Seminar AWS Serverless Application Model
Amazon Web Services Japan
 
20190130 AWS Black Belt Online Seminar AWS Identity and Access Management (AW...
Amazon Web Services Japan
 
20180704(20190520 Renewed) AWS Black Belt Online Seminar Amazon Elastic File ...
Amazon Web Services Japan
 
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS...
Amazon Web Services Japan
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
 
20190911 AWS Black Belt Online Seminar AWS Batch
Amazon Web Services Japan
 
20210119 AWS Black Belt Online Seminar AWS CloudTrail
Amazon Web Services Japan
 

What's hot (20)

PDF
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
Amazon Web Services Japan
 
PDF
AWS Black Belt Online Seminar 2016 AWS Key Management Service
Amazon Web Services Japan
 
PDF
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
Amazon Web Services Japan
 
PDF
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
Amazon Web Services Japan
 
PDF
AWS BlackBelt AWS上でのDDoS対策
Amazon Web Services Japan
 
PDF
AWS BlackBelt Online Seminar 2017 Amazon CloudFront + AWS Lambda@Edge
Amazon Web Services Japan
 
PDF
20190326 AWS Black Belt Online Seminar Amazon CloudWatch
Amazon Web Services Japan
 
PDF
AWS Black Belt Techシリーズ AWS Key Management Service
Amazon Web Services Japan
 
PDF
20190821 AWS Black Belt Online Seminar AWS AppSync
Amazon Web Services Japan
 
PDF
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
Amazon Web Services Japan
 
PDF
20200623 AWS Black Belt Online Seminar Amazon Elasticsearch Service
Amazon Web Services Japan
 
PDF
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
Masaya Tahara
 
PDF
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
Amazon Web Services Japan
 
PDF
AWS Black Belt Online Seminar 2017 AWS OpsWorks
Amazon Web Services Japan
 
PDF
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
Amazon Web Services Japan
 
PDF
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
Amazon Web Services Japan
 
PDF
20190320 AWS Black Belt Online Seminar Amazon EBS
Amazon Web Services Japan
 
PDF
Black Belt Online Seminar Amazon Cognito
Amazon Web Services Japan
 
PDF
20190319 AWS Black Belt Online Seminar Amazon FSx for Windows Server
Amazon Web Services Japan
 
PDF
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
Amazon Web Services Japan
 
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2016 AWS Key Management Service
Amazon Web Services Japan
 
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
Amazon Web Services Japan
 
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
Amazon Web Services Japan
 
AWS BlackBelt AWS上でのDDoS対策
Amazon Web Services Japan
 
AWS BlackBelt Online Seminar 2017 Amazon CloudFront + AWS Lambda@Edge
Amazon Web Services Japan
 
20190326 AWS Black Belt Online Seminar Amazon CloudWatch
Amazon Web Services Japan
 
AWS Black Belt Techシリーズ AWS Key Management Service
Amazon Web Services Japan
 
20190821 AWS Black Belt Online Seminar AWS AppSync
Amazon Web Services Japan
 
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
Amazon Web Services Japan
 
20200623 AWS Black Belt Online Seminar Amazon Elasticsearch Service
Amazon Web Services Japan
 
OSS+AWSでここまでできるDevSecOps (Security-JAWS第24回)
Masaya Tahara
 
202202 AWS Black Belt Online Seminar AWS Managed Rules for AWS WAF の活用
Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 AWS OpsWorks
Amazon Web Services Japan
 
ElastiCacheを利用する上でキャッシュをどのように有効に使うべきか
Amazon Web Services Japan
 
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
Amazon Web Services Japan
 
20190320 AWS Black Belt Online Seminar Amazon EBS
Amazon Web Services Japan
 
Black Belt Online Seminar Amazon Cognito
Amazon Web Services Japan
 
20190319 AWS Black Belt Online Seminar Amazon FSx for Windows Server
Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2016 AWS上でのActive Directory構築
Amazon Web Services Japan
 
Ad

Viewers also liked (11)

PPTX
AWS KMSと鍵の話
Takeru Ujinawa
 
PDF
Implementing SoftNAS Cloud with Docker
Buurst
 
PDF
Ebook Panduan Windows 8
Al Marson
 
PPTX
Dockerが抱えるネットワークの課題
Asuka Suzuki
 
PPTX
Dockerのネットワークについて
Nobuyuki Matsui
 
PDF
JAWS-UG CLI専門支部 #58 KMS入門
Nobuhiro Nakayama
 
PDF
AWS Black Belt Online Seminar 2017 動画配信 on AWS
Amazon Web Services Japan
 
PDF
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
Amazon Web Services Japan
 
PDF
Black Belt Online Seminar AWS上の暗号化ソリューション
Amazon Web Services Japan
 
PDF
Black Belt Online Seminar AWS Amazon S3
Amazon Web Services Japan
 
PPTX
64ヶ月オンプレ運用したシステムを aws移行した話
Ryota Kuroki
 
AWS KMSと鍵の話
Takeru Ujinawa
 
Implementing SoftNAS Cloud with Docker
Buurst
 
Ebook Panduan Windows 8
Al Marson
 
Dockerが抱えるネットワークの課題
Asuka Suzuki
 
Dockerのネットワークについて
Nobuyuki Matsui
 
JAWS-UG CLI専門支部 #58 KMS入門
Nobuhiro Nakayama
 
AWS Black Belt Online Seminar 2017 動画配信 on AWS
Amazon Web Services Japan
 
AWS 初心者向けWebinar 利用者が実施するAWS上でのセキュリティ対策
Amazon Web Services Japan
 
Black Belt Online Seminar AWS上の暗号化ソリューション
Amazon Web Services Japan
 
Black Belt Online Seminar AWS Amazon S3
Amazon Web Services Japan
 
64ヶ月オンプレ運用したシステムを aws移行した話
Ryota Kuroki
 
Ad

Similar to 実践 Amazon KMS #cmdevio2015 (7)

PDF
AWS Black Belt Online Seminar AWS Key Management Service (KMS)
Amazon Web Services Japan
 
PDF
Demystifying Identities for Azure Kubernetes Service
Toru Makabe
 
PDF
[AWSマイスターシリーズ]Identity and Access Management (IAM)
Amazon Web Services Japan
 
PDF
aws kms poiints
kota tomimatsu
 
PDF
AWS Black Belt Techシリーズ AWS IAM
Amazon Web Services Japan
 
PDF
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
SORACOM, INC
 
PDF
20120201 aws meister-reloaded-iam-and-billing-public
Amazon Web Services Japan
 
AWS Black Belt Online Seminar AWS Key Management Service (KMS)
Amazon Web Services Japan
 
Demystifying Identities for Azure Kubernetes Service
Toru Makabe
 
[AWSマイスターシリーズ]Identity and Access Management (IAM)
Amazon Web Services Japan
 
aws kms poiints
kota tomimatsu
 
AWS Black Belt Techシリーズ AWS IAM
Amazon Web Services Japan
 
IAM & Consolidated Billing -ほぼ週刊AWSマイスターシリーズ第4回
SORACOM, INC
 
20120201 aws meister-reloaded-iam-and-billing-public
Amazon Web Services Japan
 

More from y torazuka (6)

PDF
Javaクラスファイルの読み方
y torazuka
 
PDF
AWSを利用したメカ管理部長-プロトタイプ
y torazuka
 
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
 
PDF
JavaScript The Good Parts Chapter 7
y torazuka
 
PDF
『入門 ソーシャルデータ』9章
y torazuka
 
PDF
20110224jggug
y torazuka
 
Javaクラスファイルの読み方
y torazuka
 
AWSを利用したメカ管理部長-プロトタイプ
y torazuka
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
 
JavaScript The Good Parts Chapter 7
y torazuka
 
『入門 ソーシャルデータ』9章
y torazuka
 
20110224jggug
y torazuka
 

実践 Amazon KMS #cmdevio2015