Lambda无权访问ECR映像
随着最近发布的Lambda功能Docker 映像,我决定使用CloudFormation.
因此,下面的 lambda 考虑了存储在 中的 docker 图像Elastic Container Registry,并有权按照文档中的示例访问该图像。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: lambda-docker-image
Globals:
Function:
Timeout: 180
Resources:
DockerAsImage:
Type: AWS::Serverless::Function
Properties:
FunctionName: DockerAsImage
ImageUri: ??????????????.dkr.ecr.us-west-2.amazonaws.com/????:latest
PackageType: Image
Policies:
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- ecr:*
- ecr-public:*
- sts:GetServiceBearerToken
Resource: "*"
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: post
我使用的是sam部署在模板us-west-2与
sam deploy -t template.yaml --capabilities "CAPABILITY_NAMED_IAM" --region "us-west-2" --stack-name "lambda-docker-example" --s3-bucket "my-bucket" --s3-prefix "sam_templates/lambda-docker-example" --force-upload --no-confirm-changeset
但是,在IAM成功创建角色后,该Lambda函数创建失败并出现以下错误
Lambda does not have permission to access the ECR image. Check the ECR permissions. (Service: AWSLambdaInternal; Status Code: 403; Error Code: AccessDeniedException;
即使该角色有权访问任何ecs资源。我尝试过的另一种方法是创建一个单独的角色并将其分配给 lambda 通过Role: !GetAtt Role.Arn,这种方法也不起作用。
回答
根据评论。
要使用基于图像的 lambda,需要 ECR 权限的是 IAM 用户/角色,而不是函数本身。从文档:
确保创建函数的 AWS Identity and Access Management (IAM)用户或角色的权限包含 AWS 托管策略GetRepositoryPolicy和SetRepositoryPolicy。
除了上面列出的两个权限之外,ecr: InitiateLayerUpload还需要 。