コンテナイメージを使用して AWS Lambda 関数を作成しようとしましたが、Amazon Elastic Container Registry (Amazon ECR) の権限エラーが発生しました。
簡単な説明
コンテナイメージから Lambda 関数を作成するには、関数を作成するユーザーまたはロールと Amazon ECR リポジトリに、アクセスを許可するポリシーが必要です。
**メモ:**Lambda 関数を作成する前に、まず Lambda コンテナイメージを作成します。次に、そのイメージを Amazon ECRリポジトリにアップロードします。
詳細については、「Lambda 関数をコンテナイメージとしてデプロイする」を参照してください。
解像度
プライベートリポジトリポリシーステートメントを設定するには、次の手順に従います。
**メモ:**タスクの実行に必要な権限のみに最小限の権限を付与するのがベストプラクティスです。詳細については、「最小権限権限の適用」を参照してください。
1.同じ AWS アカウントの Amazon ECR イメージ URI から Lambda 関数を作成します
次の例では、Amazon ECR リポジトリのアクセス権限で、Lambda サービスに対するecr:BatchGetImage とecr:GetDownloadUrlForLayer API アクションを許可する必要があります。
Amazon ECR リポジトリポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "LambdaECRImageRetrievalPolicy",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
]
}
]
}
2.クロスアカウントの Amazon ECR イメージ URI から Lambda 関数を作成する
次の例では、Lambda関数は AWS アカウント111111111111 で作成され、Amazon ECR リポジトリは AWS アカウント222222222222にあります。
Lambda 関数を作成または更新したユーザーまたはロールには、ECR リポジトリに対するECR: BatchGetImage とECR: getDownloadUrlForLayer の権限が必要です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ECR Repository Access Permissions",
"Effect": "Allow",
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
],
"Resource": "arn:aws:ecr:us-east-1:222222222222:repository/hello-repository"
}
]
}
次の例では、CrossAccountPermission 指示文により、AWS アカウント111111111111 が Amazon ECR リポジトリのイメージを使用する Lambda 関数を作成および更新できるようになります。
Amazon ECRリポジトリのクロスアカウントポリシーの例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CrossAccountPermission",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:root"
},
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
]
},
{
"Sid": "LambdaECRImageCrossAccountRetrievalPolicy",
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": [
"ecr:BatchGetImage",
"ecr:GetDownloadUrlForLayer"
],
"Condition": {
"StringLike": {
"aws:sourceARN": "arn:aws:lambda:us-east-1:111111111111:function:*"
}
}
}
]
}
Lambda は、関数が長期間呼び出されないと、最終的に関数の状態を非アクティブに設定します。
メモ:Lambda が AWS アカウント 111111111111** のコンテナイメージを取得できるようにするには、TheTheLambdaeCrimageCrossAccountRetrievalPolicy **ステートメントが必要です。
詳細については、「Amazon ECR のクロスアカウントアクセス権限」を参照してください。
関連情報
AWS Lambda向けのクロスアカウント Amazon ECR アクセスのご紹介
Lambda のアクセス権限の問題をトラブルシューティングする方法を教えてください。