ECSやLambdaで自作のImageを参照する際、クロスアカウントでECRリポジトリを参照したい場合のメモ。
結局、どちらもECR側にPermissionを設定するだけで可能。
重要な注意点は、リージョンを跨いでクロスアカウント参照することは不可能という点です。
Lambda
公式手順: https://aws.amazon.com/jp/blogs/compute/introducing-cross-account-amazon-ecr-access-for-aws-lambda/
ECRのPermission
今回のLambdaが置いてあるアカウントのIDを222222222222とした際の例。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CrossAccountPermission",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:root"
},
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
]
},
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Condition": {
"StringLike": {
"aws:sourceArn": "arn:aws:lambda:eu-west-1:222222222222:function:*"
}
}
}
]
}
特にLambda側に何か権限などの設定は必要ありません。
これだけで、クロスアカウントでECRリポジトリの参照が可能なはずです。
ECS
公式手順: https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html
ECRのPermission
同様にアカウントのIDは222222222222とした際の例。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CrossAccountPermission",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:root"
},
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
]
}
]
}
こちらも同様にこれだけで動くはず。
よく見ていただけるとわかる通り、Lambdaの項で記載したPermissionの1個目と同じなので、Lambda用Permissionを記載するだけでECSからもPullが可能になります。
あとは案件や会社のセキュリティポリシー的にStatement[].Pricipal.AWSをより絞り込むかどうか、というぐらい。