Mig*_*ejo 6 amazon-web-services amazon-ecs aws-cloudformation aws-lambda aws-sam-cli
随着最近发布的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
Run Code Online (Sandbox Code Playgroud)
我使用的是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
Run Code Online (Sandbox Code Playgroud)
但是,在IAM成功创建角色后,该Lambda函数创建失败并出现以下错误
Lambda does not have permission to access the ECR image. Check the ECR permissions. (Service: AWSLambdaInternal; Status Code: 403; Error Code: AccessDeniedException;
Run Code Online (Sandbox Code Playgroud)
即使该角色有权访问任何ecs资源。我尝试过的另一种方法是创建一个单独的角色并将其分配给 lambda 通过Role: !GetAtt Role.Arn,这种方法也不起作用。
对于账户 222222222222 中的 lambda 使用 11111111111 中的 ECR 映像,您需要遵循https://aws.amazon.com/blogs/compute/introducing-cross-account-amazon-ecr-access-for-aws-lambda/
最重要的 IAM 部分是在 11111111111 存储库上设置以下存储库策略:
RepositoryPolicyText:
Version: "2012-10-17"
Statement:
- Sid: CrossAccountPermission
Effect: Allow
Action:
- ecr:BatchGetImage
- ecr:GetDownloadUrlForLayer
Principal:
AWS:
- arn:aws:iam::222222222222:root
- Sid: LambdaECRImageCrossAccountRetrievalPolicy
Effect: Allow
Action:
- ecr:BatchGetImage
- ecr:GetDownloadUrlForLayer
Principal:
Service: lambda.amazonaws.com
Condition:
StringLike:
aws:sourceArn:
- arn:aws:lambda:us-east-1:222222222222:function:*
Run Code Online (Sandbox Code Playgroud)
您必须将以下策略添加到将与 AWS Lambda 关联的用户和角色。此策略支持 ECR 操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ecr:SetRepositoryPolicy",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:CompleteLayerUpload",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:UploadLayerPart",
"ecr:ListImages",
"ecr:InitiateLayerUpload",
"ecr:BatchCheckLayerAvailability",
"ecr:GetRepositoryPolicy",
"ecr:PutImage"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3314 次 |
| 最近记录: |