“AWSCloudFormationStackSetsExecution role has insufficient SNS permissions” について

概要

AWS Organizations と CloudFormation StackSets を使い、
特定の OU (Organizational Unit) に参加したメンバー AWS アカウントに
CloudFormation Stack がデプロイされるように設定しています。

ある時、AWS アカウントが OU に参加して Stack のデプロイが実施されるはずでしたが
StackSets 側で対象のメンバーアカウントが以下のようなエラーとなってしまいました。
(少し古い事象でキャプチャが残っておらず恐縮です)

AWSCloudFormationStackSetsExecution role has insufficient SNS permissions

こちらのエラーについて調査・対処した内容を紹介します。

調査

対象のメンバー AWS アカウントの CloudTrail で、以下のようなログが確認できました。

{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAxxxx:xxxx",
        "arn": "arn:aws:sts::111122223333:assumed-role/stacksets-exec-xxxx/xxxx",
        "accountId": "111122223333",
        "accessKeyId": "ASIAxxxx",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAxxxx",
                "arn": "arn:aws:iam::111122223333:role/stacksets-exec-xxxx",
                "accountId": "111122223333",
                "userName": "stacksets-exec-xxxx"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2022-02-02T02:53:46Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "cloudformation.amazonaws.com"
    },
    "eventTime": "2022-02-02T02:53:47Z",
    "eventSource": "cloudformation.amazonaws.com",
    "eventName": "CreateStack",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "cloudformation.amazonaws.com",
    "userAgent": "cloudformation.amazonaws.com",
    "errorCode": "ValidationException",
    "errorMessage": "User: arn:aws:sts::111122223333:assumed-role/stacksets-exec-xxxx/xxxx is not authorized to perform the operation (Service: AmazonSNS; Status Code: 403; Error Code: AuthorizationError; Request ID: xxxx; Proxy: null)",
    "requestParameters": null,
    "responseElements": null,
    "requestID": "xxxx",
    "eventID": "xxxx",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}

CloudFormation StackSets が、Stack をデプロイ (CreateStack) しようとした際に
SNS の権限不足による ValidationException が発生したように見えます。

AWSサポートにも調査いただいたところ、Stack をデプロイする為のロール (stacksets-exec-xxxx) に
IAM ポリシーをアタッチするまで時間がかかったことにより上記エラーが発生したとのことでした。

対処

対象のメンバー AWS アカウントを OU に出し入れすることで Stack デプロイを再実行し、デプロイ成功しました。

エラー内容からまれに起こるエラー(=運が悪かっただけ)と思われるので、
こういう場合はとりあえず再実行してしまうのが良いかなと思いました。
以上です!