📝
[小ネタ] 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