📝

[小ネタ] ECS コンソールからクラスターを作成する際には CloudFormation の CreateStack の権限が必要

に公開

Fargate 起動タイプ用の Amazon ECS クラスターを作成する - Amazon Elastic Container Service

Amazon ECS コンソールでは、AWS CloudFormation スタックを作成することで、Amazon ECS クラスターに必要なリソースを作成します。

上記仕様があるため、ECS コンソールからクラスターを作成する IAM プリンシパルには cloudformation:CreateStack の権限が必要です。

1. ECS コンソールからクラスターを作成してみる

操作する IAM ユーザーに以下の権限を付与しました。

  • AdministratorAccess
  • cloudformation:CreateStack のみ拒否する IAM ポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": "cloudformation:CreateStack",
            "Resource": "*"
        }
    ]
}

上記ユーザーで ECS コンソールからクラスターの作成を試みたところ以下のエラーが発生しました。

クラスター favorable-crocodile-dlfzga の作成中にエラーが発生しました。
理由: User: arn:aws:sts::012345678901:assumed-role/xxx is not authorized to perform: cloudformation:CreateStack on resource: arn:aws:cloudformation:ap-northeast-1:012345678901:stack/Infra-ECS-Cluster-favorable-crocodile-dlfzga-b566a883/* with an explicit deny in an identity-based policy

CloudTrail にも CreateStack で AccessDenied が発生した記録が残っていました。

2. AWS CLI から作成してみる

1 のユーザーの権限で AWS CLI からクラスターを作成してみます。

$ aws ecs create-cluster --cluster-name my-fargate-cluster
{
    "cluster": {
        "clusterArn": "arn:aws:ecs:ap-northeast-1:012345678901:cluster/my-fargate-cluster",
        "clusterName": "my-fargate-cluster",
        "status": "ACTIVE",
        "registeredContainerInstancesCount": 0,
        "runningTasksCount": 0,
        "pendingTasksCount": 0,
        "activeServicesCount": 0,
        "statistics": [],
        "tags": [],
        "settings": [
            {
                "name": "containerInsights",
                "value": "disabled"
            }
        ],
        "capacityProviders": [],
        "defaultCapacityProviderStrategy": []
    }
}

AWS CLI からの作成であれば cloudformation:CreateStack の権限がなくてもクラスターを作成できました。

以上より、冒頭のドキュメント通りの挙動であることを確認できました。

まとめ

今回は ECS コンソールからクラスターを作成する際には CloudFormation の CreateStack の権限が必要であるという仕様を紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion