オプトインリージョンでのAmazon GuardDutyの検出結果エクスポート設定エラーの解決方法
困っていること
AWS KMSキー管理アカウントの東京リージョンで発行したAWS KMSキーを使用し、各メンバーアカウントの全リージョンにおけるAmazon GuardDuty検出結果を、東京リージョンのS3バケットにエクスポートする設定を実施しました。
各メンバーアカウントにおいて、東京リージョンおよび大阪リージョンでは正常に設定できましたが、タイリージョンにおいては以下のエラーが発生しています。原因を教えてください。
The request failed because the GuardDuty service principal does not have permission to the KMS key or the resource specified by the destinationArn parameter. Refer to
設定済みポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow GetBucketLocation",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::S3バケット名"
},
{
"Sid": "Allow PutObject",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "KMS ARN"
}
}
},
{
"Sid": "Deny unencrypted object uploads",
"Effect": "Deny",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
},
{
"Sid": "Deny incorrect encryption header",
"Effect": "Deny",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "KMS ARN"
}
}
},
{
"Sid": "Deny non-HTTPS access",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::KMSキー管理アカウントID:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow GuardDuty to use the key",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "kms:GenerateDataKey",
"Resource": "*"
}
]
}
解決方法
原因
現在、S3バケットポリシーおよびKMSキーポリシーでは、以下のように設定されています。
"Principal": {
"Service": "guardduty.amazonaws.com"
},
タイリージョンのようなオプトインリージョン(デフォルトでは無効化されているリージョン)を利用する場合、"Service"
を"guardduty.ap-southeast-7.amazonaws.com"
のように、そのリージョンのリージョンエンドポイントに置き換える必要があります。
"Principal": {
"Service": [
"guardduty.amazonaws.com",
"guardduty.ap-southeast-7.amazonaws.com"
]
},
オプトインリージョンで GuardDuty を使用している場合は、「Service」の値をそのリージョンのリージョンエンドポイントに置き換えます。例えば、中東 (バーレーン) (me-south-1) リージョンで GuardDuty を使用している場合は、"Service": "guardduty.amazonaws.com" を "Service": "guardduty.me-south-1.amazonaws.com" に置き換えます。オプトインリージョンごとのエンドポイントの詳細については、「GuardDuty エンドポイントとクォータ」を参照してください。
修正版ポリシー
以下のようにポリシーを変更することで、エクスポート設定が成功します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow GetBucketLocation",
"Effect": "Allow",
"Principal": {
"Service": [
"guardduty.amazonaws.com",
"guardduty.ap-southeast-7.amazonaws.com"
]
},
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::S3バケット名"
},
{
"Sid": "Allow PutObject",
"Effect": "Allow",
"Principal": {
"Service": [
"guardduty.amazonaws.com",
"guardduty.ap-southeast-7.amazonaws.com"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "KMS ARN"
}
}
},
{
"Sid": "Deny unencrypted object uploads",
"Effect": "Deny",
"Principal": {
"Service": [
"guardduty.amazonaws.com",
"guardduty.ap-southeast-7.amazonaws.com"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
},
{
"Sid": "Deny incorrect encryption header",
"Effect": "Deny",
"Principal": {
"Service": [
"guardduty.amazonaws.com",
"guardduty.ap-southeast-7.amazonaws.com"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "KMS ARN"
}
}
},
{
"Sid": "Deny non-HTTPS access",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::S3バケット名/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
]
}
{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::KMSキー管理アカウントID:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow GuardDuty to use the key",
"Effect": "Allow",
"Principal": {
"Service": [
"guardduty.ap-southeast-7.amazonaws.com",
"guardduty.amazonaws.com"
]
},
"Action": "kms:GenerateDataKey",
"Resource": "*"
}
]
}
以下の通り成功しました。