まず結論
権限は要らないけど経路は要る
前提
- privatesunetに配置したECSサービスのタスク定義で、ECRのイメージを指定した
- タスク実行ロールは
AmazonECSTaskExecutionRolePolicyを使用(下記)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
- ECRへの経路として、
com.amazonaws.ap-northeast-1.ecr.api,com.amazonaws.ap-northeast-1.ecr.dkrのインターフェース型のVPCEを設置
起こったこと
ecsサービスが起動しない!
サポートに問い合わせた結果
- ecrのdockerイメージをpullするためには、S3への経路が必要。
- AWS側でS3の経由してdocker pullするらしい。
- それに際してpresignedURLを内部的に使用している
- 従って、AmazonECSTaskExecutionRolePolicyにS3への権限がなくてもpullできるし、当然経路も必要
ECS タスクが ECR プライベートリポジトリからコンテナイメージをプルするための権限につきましては、ドキュメント[1]をご参照いただければと存じます。
[1] Amazon ECR のアクセス許可| Amazon ECS タスク実行IAM ロール - Amazon Elastic Container Service
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_execution_IAM_role.html#task-execution-ecr-permissions
ECS タスクは ECR プライベートリポジトリにアクセスするために、内部的に GetDownloadUrlForLayer API を使用します[2]。
GetDownloadUrlForLayer は、S3 にアクセスするための署名付き URL を取得します[3]。
ECS タスクは上記 API のアクセス権限により、実質的に S3 へのアクセス権限が確認されます。
タスク実行ロールに必要な権限につきましては、ドキュメント[4]をあわせてご確認いただけますと幸いです。
まとめ
S3への経路も作ってあげよう!