AWS KMSのキーポリシーとアイデンティティベースポリシー
AWS KMSのCMKを作成する際に、管理者とキーユーザーを選択することで、以下のようなキーポリシーが生成されます。
以下は管理者にOrganizationAccountAccessRole、キーユーザーにuser1を指定した例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
{ "Id": "key-consolepolicy-3", "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/OrganizationAccountAccessRole" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion", "kms:ReplicateKey", "kms:UpdatePrimaryRegion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/user1" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/user1" }, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } } ] } |
これでIAMユーザーのuser1は、IAMポリシーで許可をしなくてもこのCMKに対しての基本操作は許可されます。
例えばgenerate-data-keyを実行すると、データキーが生成されます。
1 2 3 4 5 6 7 8 9 10 |
$ aws kms generate-data-key \ --key-id mrk-1234567890123abcdefghsd \ --key-spec AES_256 { "CiphertextBlob": "AQIDAHj2R4mtaSrV3i4Yti1b1+CH7K+dDHdozvgyqIGbHQolLAEknPs6sjrMjPaSe0zpTN59AAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMTvnhmj6vG0/UHHY4AgEQgDvG5Yfoyt+NwnEO3BKpGbwModiOugQS10iWr8Vdpa/NM024pRAu8gNwr7MolqfYcYJTUqVnMXLQDEJKkQ==", "Plaintext": "R6HU1W8txBVAfQbi61fbZwcsw2D5EIjgACM8lRJc7kk=", "KeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/mrk-1234567890123abcdefghsd" } |
新規でIAMユーザーuser2を作成して、インラインポリシーで以下を設定したとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "arn:aws:kms:ap-northeast-1:123456789012:key/mrk-1234567890123abcdefghsd" } ] } |
user2も同様にkms:GenerateDataKeyなどの操作が許可されます。
これはCMK作成時にキーポリシーに以下のポリシーが含まれているためです。
1 2 3 4 5 6 7 8 9 10 |
{ "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "kms:*", "Resource": "*" } |
キーポリシーからこのステートメントを削除すると、user2の操作は暗黙的に拒否されます。
CMKは同じアカウントだからアイデンティティベースのポリシーだけで使えるというわけではなく、キーポリシーにそのアカウントがデフォルトで許可されているからなのですね。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2023/01/9784815617929-1-407x596.jpg)
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2024/01/9784815625382-3-420x596.jpg)
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
![](https://www.shuwasystem.co.jp//images/book/637791.jpg)
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
![](https://book.mynavi.jp/files/topics/135344_ext_06_0.jpg?v=1673514682)
「AWSではじめるLinux入門ガイド」という本を書きました。
![](https://www.yamamanx.com/wp-content/uploads/2023/12/81Rp5O9We6L._SY522_.jpg)
![@yamamanx](https://www.yamamanx.com/wp-content/plugins/lazy-load/images/1x1.trans.gif)
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
AWS Lambda(Python3.7)でPandocを実行する
昨日まで(AWS Batch) 昨日までは、Pandocを実行して、S3バケット …
-
-
AWS Lambda(Python)からAmazon Connectで電話を発信する
自動で電話を発信する必要がありまして、電話発信APIを開発することになりましたの …
-
-
Amazon S3バケットでMFA Deleteを有効にする
バージョニングが有効なバケットでバージョン削除でMFA Deleteを有効にして …
-
-
Amazon Kinesis Data StreamsにTwitter検索データを送信する
Kinesis Data Streamsの作成 ストリーム名とシャード数を決定す …
-
-
Amazon CloudWatch RUMはじめました
新機能 – Amazon CloudWatch RUM をご紹介 2021年12 …
-
-
AWS Lambdaで「Process exited before completing request」
AWS lambdaで「Process exited before comple …
-
-
Cloud9でCodeWhispererを使用する
アクセス権限 Cloud9のEC2に設定するIAMロールのIAMポリシーで co …
-
-
百聞は一見にしかず!AWSセルフペースラボの無料ラボ!
※2019年5月12日現在に試してみた記録です。 AWSセルフペースラボとは A …
-
-
AWS Savings Plansを検討しました
今、個人でAWSアカウントを7つ使っています。 Savings Plansが使え …
-
-
API Gatewayから直接 DynamoDBに書き込む
やりたいこと WebページでOやXを押したときに、どっちを押したかをDynamo …