CloudWatch Syntheticsでロールが作れないとき

概要

AWS CloudWatch SyntheticsのcanaryをGUIで作成するとき、 「Create a new role」がグレーアウトして押下できない。 f:id:mMQnaZ7vL2DWkoU:20210304010752p:plain

原因

S3のパスを変更していたから。
IAM Roleを自動作成するとき、ポリシーの設定がデフォルトのS3パスになっている。
そのため、S3のパスを変更するときは、自分でIAM Policyを作成し、それをアタッチしたIAM Roleを作らなければならない。

下記のようなポリシーが作られる。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::cw-syn-results-<ACCOUNT_ID>-<REGION>/canary/<REGION>/<CANARY_NAME>-<HASH>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::cw-syn-results-<HASH>-<REGION>"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:CreateLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:<REGION>:<ACCOUNT_ID>:log-group:/aws/lambda/cwsyn-<CANARY_NAME>-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "xray:PutTraceSegments"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": "cloudwatch:PutMetricData",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "CloudWatchSynthetics"
                }
            }
        }
    ]
}

まとめ

今回、Syntheticsを利用するに当たり、本番環境のみ利用し、一度作成した後に変更が殆どないことから、GUIで作った。
関連して作られるリソースの削除などが面倒だったので、IaCしても良いかも知れない。
Terraformで作っても消してくれないので、自分で作る必要がある。 https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/synthetics_canary

削除するときの手順は下記(これに加えIAM Policyも削除する必要がある。)
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/synthetics_canaries_deletion.html