[AWS] CloudWatchFullAccessV2とV1の違い

2023/10/23（月）の深夜に「[Action Required] Changes to AWS Managed Policy 」というメールが来ていたので見てみると、AWSマネージドポリシーの CloudWatchFullAccess を何かに使っているので**CloudWatchFullAccessV2** に変えてねというメッセージでした。

ということで CloudWatchFullAccessV2 と V1 の中身を比較してみました。

## 違い
結論から言うと、表のように Allow（許可） されるアクションが変更されていました。

AutoScalling と SNS について、V1では * でまるっと Allow されていたのが、V2 ではより細かくアクションが絞られたという感じですね。
|  V1  |  V2  |
| ---- | ---- |
|  autoscaling:Describe*  |  application-autoscaling:DescribeScalingPolicies<br>autoscaling:DescribeAutoScalingGroups<br>autoscaling:DescribePolicies |
|  sns:*  |  sns:CreateTopic<br>sns:ListSubscriptions<br>sns:ListSubscriptionsByTopic<br>sns:ListTopics<br>sns:Subscribe |

あとは細かいですが、それぞれのステートメントに「"Sid": "CloudWatchFullAccessPermissions"」のような内容を表す Sid が付加されています。

## CloudWatchFullAccessV2
新しい方の CloudWatchFullAccessV2 の中身は以下の通りです。
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CloudWatchFullAccessPermissions",
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:DescribeScalingPolicies",
                "autoscaling:DescribeAutoScalingGroups",
                "autoscaling:DescribePolicies",
                "cloudwatch:*",
                "logs:*",
                "sns:CreateTopic",
                "sns:ListSubscriptions",
                "sns:ListSubscriptionsByTopic",
                "sns:ListTopics",
                "sns:Subscribe",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "oam:ListSinks"
            ],
            "Resource": "*"
        },
        {
            "Sid": "EventsServicePermissions",
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::*:role/aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "events.amazonaws.com"
                }
            }
        },
        {
            "Sid": "OAMReadPermissions",
            "Effect": "Allow",
            "Action": [
                "oam:ListAttachedLinks"
            ],
            "Resource": "arn:aws:oam:*:*:sink/*"
        }
    ]
}
```

## CloudWatchFullAccessV1
こちらが従来の CloudWatchFullAccessです。
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:Describe*",
                "cloudwatch:*",
                "logs:*",
                "sns:*",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "oam:ListSinks"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:CreateServiceLinkedRole",
            "Resource": "arn:aws:iam::*:role/aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents*",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "events.amazonaws.com"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "oam:ListAttachedLinks"
            ],
            "Resource": "arn:aws:oam:*:*:sink/*"
        }
    ]
}
```  

警告メールには
「何もしなかった場合、ユーザー、グループ、またはロールにポリシーがアタッチされているアカウントには、アカウントのポリシーが引き続き表示されますが、新しいユーザー、グループ、またはロールにポリシーをアタッチしたり、AWS IAM コンソールで廃止されたポリシーを表示したりすることはできません。 」（日本語訳）
とあるので既存リソースについて取り急ぎ対応は不要かと思っています。※

ただ、新規には利用できないようなので、Terraform のモジュールで extend_policy しているものがある場合には修正しておかないといけないのかなと考えています。

他にこんな対応が必要などあれば教えていただけると嬉しいです。

ありがとうございました。

※追記
AWSサポートに問い合わせて、正式に「V1ポリシーも引き続き完全にサポートされます。」という趣旨の回答をもらえました。ただし、将来的（時期未定）には廃止予定なので、急ぎの対応は必要ないものの、やはりV2への移行を推奨するとのことでした。