オプトインリージョンでのAmazon GuardDutyの検出結果エクスポート設定エラーの解決方法

オプトインリージョンでのAmazon GuardDutyの検出結果エクスポート設定エラーの解決方法

Clock Icon2025.07.09

困っていること

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

cm-hirai-screenshot 2025-06-26 17.13.59

設定済みポリシー

S3バケットポリシー
{
    "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"
                }
            }
        }
    ]
}
KMSキーポリシー
{
  "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 エンドポイントとクォータ」を参照してください。

https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_exportfindings.html#guardduty-exporting-findings-kms-policy

修正版ポリシー

以下のようにポリシーを変更することで、エクスポート設定が成功します。

S3バケットポリシー
{
    "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"
                }
            }
        }
    ]
}
KMSキーポリシー
{
  "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": "*"
    }
  ]
}

以下の通り成功しました。
cm-hirai-screenshot 2025-07-09 8.10.59

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.