AWS Landing Zone (Control Tower) に適した KMS キーポリシーとはどのようなものでしょうか?

AWS Landing Zone (Control Tower) に適した KMS キーポリシーとはどのようなものでしょうか?

最近、Control Tower SNS トピックに KMS キーを手動で追加して、Control Tower を「破壊」しました。Control Tower がスタックのチェックやアップグレードを実行したときに、この方法がうまく機能しませんでした。キーを削除し、スタックの一部を操作して正常な状態にする必要がありましたが、SNS トピックが暗号化されておらず、Security Hub が不調です。

以前、SNS トピックで使用する KMS キーをすべての組織アカウント (各アカウントに 1 つずつ) にデプロイしましたが、ランディング ゾーンの作成または変更時にキーを付与すれば、Control Tower がこれを実行できることがわかりました。私の理解では、このキーは管理アカウント内の単一のキーである必要があり、少なくとも Config サービスと CloudTrail サービスを許可するポリシーが必要ですが、すべてのアカウントでも使用できます。

どなたか、それがどのように見えるかのテンプレートを教えていただければ、大変助かります。よろしくお願いします。:)

答え1

これを放っておくわけにはいかないので、テストしてみたところ、次の方法が良い解決策である可能性が高いことがわかりました。

私が学んだ重要なポイント:

  • サービスには「kms:GenerateDataKey」権限のみが必要なようです。
  • *ワイルドカードが必要な場合は、「StringEquals」ではなく「StringLike」条件を使用してください。

これドキュメンテーション非常に役に立ちました。「aws:SourceArn」または「aws:SourceAccount」を使用したポリシーの作成には成功しませんでしたが、「kms:EncryptionContext:context」では成功しました。

これが私のポリシーです。アカウント番号は編集されています。

{
    "Version": "2012-10-17",
    "Id": "SNS-KMS-Key",
    "Statement": [
        {
            "Sid": "Key admin in mgmt account",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::112211221122:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "AWS-services permissions in all accounts",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "config.amazonaws.com",
                    "cloudtrail.amazonaws.com"
                ]
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:ReEncrypt*"
            ],
            "Resource": "*"
        }
    ]
}

誰かの役に立つことを願っています。最後のステートメントを制限するために条件を使用できる、あるいは使用すべきであると思われることに注意してください。私自身はうまくいきませんでした。

答え2

上記の回答と、次の AWS サービスロールがキーを使用できるようにすることで、これを機能させることができました。

"arn:aws:iam::112211221122:role/service-role/AWSControlTowerConfigAggregatorRoleForOrganizations",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerStackSetRole",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerAdmin",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerCloudTrailRole"

これらすべてが必要かどうかはわかりませんが、推測しただけです。

関連情報