はじめに
* こちらの手順に則って作業します。
* (けど、上記の手順は昔のコンソール用の手順)
* 構築が終わったら、Resource Policyをガチャガチャいじる予定
Custom CMKを作る
- KMS のコンソールにアクセス
-
Create Key
をクリック - Key typeは
Symmetric
を選択し、Key Material OriginはKMS
を選択する - Aliasに
MyCustomCMK
を入力する - Key Administratorに
IAM_ROLE_DEFAULT
(自分で作ったIAM ROLEかIAM USER)を選択する - Key Usage Permissionに
IAM_ROLE_DEFAULT
(キーの使用者に該当。検証用なので、Administratorと同一)を選択する - Reviewで、SNSをPrincipal指定したStatementを追加する
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:: xxxxxxxxxxxx:role/IAM_ROLE_DEFAULT"
},
"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"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:: xxxxxxxxxxxx:role/IAM_ROLE_DEFAULT"
},
"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:: xxxxxxxxxxxx:role/IAM_ROLE_DEFAULT"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
},
{
"Sid": "Allow Amazon SNS to use this key",
"Effect": "Allow",
"Principal": {
"Service": "sns.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*"
}
]
}
SSEが有効なSNS Topicを作る
- SNSのコンソールにアクセス
-
Create Topic
をクリックする - Topic Nameに
MyEncryptedTopic
を入力する - Encryptionで
Enable encryption
を選択し、フォームにalias/MyCustomCMK
(さっき作ったCMKのalias)を入力する -
Create Topic
をクリックする
SSEが有効なSQS Queueを作る
- SQSのコンソールにアクセス
-
Create New Queue
をクリックする - Queue Nameに
MyEncryptedQueue
を入力し、Configure Queue
をクリックする - SSE Settingsで
Use SSE
をチェックし、AWS KMS CMKでMyCustomCMK
(さっき作ったCMKの名前)を選択する -
Create Queue
をクリックする
SNS Topicへのサブスクライブ
- SQSのコンソールにアクセスする
-
MyEncryptedQueue
を選択、Queue Action
からSubscribe Queue to SNS Topic
をクリックする - Choose a Topicから
MyEncrypted
を選択する -
Subscribe
をクリックする
SSEが有効なSNS Topicにメッセージをパブリッシュする
- SNSのコンソールにアクセスする
- Topicsから
MyEncryptedTopic
を選択し、Publish Message
をクリックする - Subjectに
Test Message Subject
、Message BodyにTest Message Body
を入力し、Publish Message
をクリックする
SSEが有効なSQS Queueにキューイングされていることを確認する
- SQSのコンソールにアクセスする
-
MyEncryptedQueue
を選択し、Queue Action
からView/Delete Messages
をクリックする -
Start Polling for Messages
をクリックし、Test Message Subject
がキューイングされていることを確認できる
(参考)各オブジェクトのJSON
sqs get-queue-attributes
{
"Attributes": {
"ApproximateNumberOfMessagesNotVisible": "0",
"Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"arn:aws:sqs:ap-northeast-1: xxxxxxxxxxxx:MyEncryptedQueue/SQSDefaultPolicy\",\"Statement\":[{\"Sid\":\"Sid1594222624729\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":\"SQS:SendMessage\",\"Resource\":\"arn:aws:sqs:ap-northeast-1: xxxxxxxxxxxx:MyEncryptedQueue\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:sns:ap-northeast-1: xxxxxxxxxxxx:MyEncryptedTopic\"}}}]}",
"KmsMasterKeyId": "arn:aws:kms:ap-northeast-1: xxxxxxxxxxxx:key/73f9e34b-a538-4049-91e0-yyyyyyyyyyyy",
"MessageRetentionPeriod": "345600",
"ApproximateNumberOfMessagesDelayed": "0",
"KmsDataKeyReusePeriodSeconds": "300",
"MaximumMessageSize": "262144",
"CreatedTimestamp": "1594222364",
"ApproximateNumberOfMessages": "1",
"ReceiveMessageWaitTimeSeconds": "0",
"DelaySeconds": "0",
"VisibilityTimeout": "30",
"LastModifiedTimestamp": "1594222626",
"QueueArn": "arn:aws:sqs:ap-northeast-1:xxxxxxxxxxxx:MyEncryptedQueue"
}
}
sns get-topic-attributes
{
"Attributes": {
"KmsMasterKeyId": "arn:aws:kms:ap-northeast-1: xxxxxxxxxxxx:key/73f9e34b-a538-4049-91e0-yyyyyyyyyyyy",
"DisplayName": "",
"SubscriptionsDeleted": "0",
"EffectiveDeliveryPolicy": "{\"http\":{\"defaultHealthyRetryPolicy\":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3,\"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0,\"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}",
"Owner": "xxxxxxxxxxxx",
"SubscriptionsConfirmed": "1",
"Policy": "{\"Version\":\"2008-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"],\"Resource\":\"arn:aws:sns:ap-northeast-1: xxxxxxxxxxxx:MyEncryptedTopic\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"xxxxxxxxxxxx\"}}}]}",
"TopicArn": "arn:aws:sns:ap-northeast-1:xxxxxxxxxxxx:MyEncryptedTopic",
"SubscriptionsPending": "0"
}
}
おしまい。