Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KMSカスタマーマネージドキーのちょっと特殊な仕様3選
Search
Yuki Y
August 06, 2025
370
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
KMSカスタマーマネージドキーのちょっと特殊な仕様3選
Yuki Y
August 06, 2025
More Decks by Yuki Y
See All by Yuki Y
はじめてのバイブコーディング with Amazon Q Developer CLI
yyamashita
1
50
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
We Have a Design System, Now What?
morganepeng
55
8.2k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Navigating Weather and Climate Data
rabernat
0
360
Six Lessons from altMBA
skipperchong
29
4.3k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
Typedesign – Prime Four
hannesfritz
42
3.1k
Transcript
KMSカスタマーマネージドキーの ちょっと特殊な仕様3選 2025年8月7日 日本アイ・ビー・エム システムズ・エンジニアリング株式会社 Technical Competency Center CloudPlatform 1
山下 祐樹
2 • 氏名 - 山下 祐樹(やました ゆうき) • 所属 -
日本アイ・ビー・エム システムズ・エンジニアリング 株式会社(ISE) • 普段の業務 - AWSインフラの設計構築案件に従事 • AWS資格 - 2023/2025 Japan AWS All Certifications Engineers 自己紹介
3 はじめにお断り • 本資料の内容は個人の見解です。所属組織を代表する意見ではありませんので、ご理解ご認識の程 よろしくお願いいたします。
KMSカスタマーマネージドキーについて
5 KMSカスタマーマネージドキーとは • (かいつまんで言うと)ユーザーがポリシー設定や削除を行えるKMSキー。 • ポリシーによる柔軟なアクセス制御が可能であり、キーの削除によってデータを復号不可能に出来 る(=安全なデータ廃棄が出来る)ため、セキュリティ要件の厳しい組織では導入が必須のケース もある。 • ただし、誤ってキーを削除するとデータを復元できないため、慎重な管理が求められる。
(※そのことが、これから紹介する仕様の一因であると思われる。) AWS Key Management Service (AWS KMS)
ちょっと特殊な仕様その1 キーポリシーで、明示的にIAMによるアクセスを許可する必要がある。
7 IAMポリシーとリソースベースポリシーの関係 • 通常、同一アカウント内であれば、(明示的な拒否が無い限りは)IAMポリシーかリソースベースポ リシーのどちらかに許可があればよい。(権限境界やVPCエンドポイントポリシーは設定されてない ものとする) • KMSは、「IAMの権限でキーにアクセスすること」をキーポリシーで明示的に許可する必要がある。 そうしないと、IAMポリシーの許可設定は有効とならない。 S3の場合
KMSの場合 IAMポリシーで S3の操作を許可 バケットポリシー でS3の操作を許可 IAMポリシーで キーの操作を許可 キーポリシーで キーの操作を許可 キーポリシーでIAM によるアクセスを 許可 IAMポリシーで キーの操作を許可
8 • 以下サンプルのようにキーポリシーを記載する。 • サンプルのPrincipal(赤枠)はrootユーザーのみではなく、アカウント全体を指している。(※1) • この状態で、IAMポリシーにKMSキーの許可設定を追加すれば、キーの操作が可能。(※2) KMSのキーポリシーでIAMによるアクセスを許可する方法 { "Id":
"sample-key-policy", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{accound-id}:root" }, "Action": "kms:*", "Resource": "*" } ] } (※1) https://docs.aws.amazon.com/IAM/lates t/UserGuide/reference_policies_element s_principal.html#principal-accounts (※2) https://docs.aws.amazon.com/ja_jp/kms /latest/developerguide/key-policy- default.html#key-policy-default-allow- root-enable-iam
ちょっと特殊な仕様その2 IAMユーザーにIP制限をかけていると、キーが利用できないケースがある。
10 • 具体例 - KMSカスタマーマネージドキーで暗号化したS3に対し、ファイルアップロード・ダウンロードができない。 - KMSカスタマーマネージドキーで暗号化したEBSボリュームを、EC2にアタッチできない。 (※) • 原因
- KMSで暗号化されたリソースを操作しようとした場合、送信元IPがIAMユーザーではなく、そのリソース に関連付けられたIPアドレスになる場合があるため。 - 上記の例では、S3やEC2に関連づけられたIPアドレス。 - CloudTrailログでは、具体的なアドレスは表示されず、”AWS Internal” と表示される。(次項参照) IAMユーザーにIP制限がかかった状態で、KMSが利用できない具体例と原因 (※) https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/conditions-aws.html#conditions-aws-ip-address
11 CloudTrailのログサンプル(関係ない項目は一部省略) { "eventVersion": "1.09", "userIdentity": { "type": "IAMUser", "principalId":
"AIDATO53XXXXXXXXKR5DN", "arn": "arn:aws:iam::xxxxxxxxxxxx:user/KMS-SourceIP-Limit-Test", "accountId": "xxxxxxxxxxxx", "accessKeyId": "ASIATO53XXXXXXXX4B3N", "userName": "KMS-SourceIP-Limit-Test", "sessionContext": { "attributes": { "creationDate": "2024-09-11T23:27:27Z", "mfaAuthenticated": "false" } }, "invokedBy": "AWS Internal" }, "eventTime": "2024-09-11T23:29:45Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "ap-northeast-1", "sourceIPAddress": "AWS Internal", "userAgent": "AWS Internal", "errorCode": "AccessDenied", "errorMessage": "User: arn:aws:iam::xxxxxxxxxxxx:user/KMS-SourceIP-Limit-Test is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:ap-northeast-1:xxxxxxxxxxxx:key/c9cdbfe6-xxxx- xxxx-xxxx-7adba90f5f3d with an explicit deny in an identity-based policy", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "sessionCredentialFromConsole": "true" } アクションの実行者は IAMユーザーになっている 送信元IPアドレスが “AWS Internal” になっている IAMポリシーでDenyされたと いうエラーメッセージが表示 されている
ちょっと特殊な仕様その3 暗号化する対象によって、キーポリシーの内容がかなり異なる。
13 ECRの場合 – 概要 • ECRにイメージプッシュを行う主体(図ではEC2)には、KMSキーの使用権限が必要ない。 • ECRを作成する主体(図ではIAM User)に、CreateGrant等の権限が必要。
14 ECRの場合 – キーポリシーサンプル • IAMユーザーに、kms:CreateGrant・ kms:DescribeKey・kms:RetireGrant権限が必要。 • kms:RetireGrantは、キーポリシーではなくIAM ポリシー側に付与する必要がある。(※)
(他の二つはIAMポリシーとキーポリシーのど ちらでも良い) { "Id": "sample-key-policy", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{accound-id}:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow Grant", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{accound-id}:user/{user-name}" }, "Action": [ "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" } ] } (※) https://docs.aws.amazon.com/AmazonECR/latest/userg uide/encryption-at-rest.html#encryption-at-rest-iam
15 Secrets Managerの場合 – 概要 • シークレットを取得する主体(図ではLambda)に、KMSキーの使用権限が必要。 • Decryptの処理はSecrets Managerが実行するが、その際に権限を借りて実行する。
16 Secrets Managerの場合 – キーポリシーサンプル • シークレットを利用する主体に、KMSの利用権 限を付与。 (左図の赤枠) •
IAMにKMSへのアクセス権限を与えたうえで、 IAMポリシーに権限を追加する方式でもOK。 • シークレットを取得するだけならDecrypt権限の みでOK。シークレット操作と必要なKMS権限の 関係性は下記公式ドキュメントを参照 (※) { "Version": "2012-10-17", "Id": “Secrets-Manager-sample-policy", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{accound-id}:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Enable IAM Role Permissions", "Effect": "Allow", "Principal": { “AWS": "arn:aws:iam::{accound-id}:role/{role-name}" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:Describe*" ], "Resource": "*" } ] } (※) https://docs.aws.amazon.com/ja_jp/secretsmanager/lat est/userguide/security-encryption.html#security- encryption-using-cmk
17 CloudWatch Logsの場合 – 概要 • ログを作成する主体、ログを格納する主体には、KMSキーの使用権限が必要ない。 • CloudWatch Logsのサービスプリンシパルが、直接KMSキーを利用する。
18 CloudWatch Logsの場合 – キーポリシーサンプル • PrincipalにCloudWatch Logsのサービスプリンシ パルを指定。 •
Condition句でEncriptionContextを指定すること で、KMSキーを利用可能なロググループを指定 することが可能。 { "Version": "2012-10-17", "Id": "logs-sample-policy", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.{region}.amazonaws.com" }, "Action": [ "kms:Encrypt*", "kms:Decrypt*", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:Describe*" ], "Resource": "*", "Condition": { "ArnEquals": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:{region}:{account-id}:log-group:{log-group- name}" } } } ] } https://docs.aws.amazon.com/ja_jp/AmazonCloudWatc h/latest/logs/encrypt-log-data-kms.html
まとめ
20 まとめ • KMSカスタマーマネージドキーには独特の仕様があるので、提案や設計時に実現不可能な案を採用してしまう リスクがあります。 • ミスリードを起こさぬよう、事前に調査・検証しておくことをお勧めします。
21 (おまけ)参考資料 • 今回ご紹介した仕様について検証した内容を、以下の個人ブログに記載しています。よろしければご参照くださ い。 - https://yuy-83.hatenablog.com/ - カテゴリー「AWS Key
Management Service」で検索ください。
FIN