Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
KMSカスタマーマネージドキーのちょっと特殊な仕様3選
Search
Yuki Y
August 06, 2025
390
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
52
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
520
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
Making Projects Easy
brettharned
120
6.7k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
The Curse of the Amulet
leimatthew05
2
14k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
530
The Language of Interfaces
destraynor
162
27k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
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