如何使用 AWS SAM 将基于资源的策略添加到 lambda
How to add a resource based policy to a lambda using AWS SAM
我想使用 AWS SAM 为一些 lambda 函数创建部署脚本。其中两个函数将部署到一个账户(账户 A)中,但将由第二个账户(账户 B)中的 s3 存储桶对象创建事件触发。据我所知,唯一的方法是向我的 lambda 添加基于资源的策略。但我不知道如何在 AWS SAM 中做到这一点。我当前的 yaml 文件如下所示。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
deploy-test-s3-triggered-lambda
Parameters:
AppBucketName:
Type: String
Description: "REQUIRED: Unique S3 bucket name to use for the app."
Resources:
S3TriggeredLambda:
Type: AWS::Serverless::Function
Properties:
Role: arn:aws:iam::************:role/lambda-s3-role
Handler: src/handlers/s3-triggered-lambda.invokeAPI
CodeUri: src/handlers/s3-triggered-lambda.js.zip
Runtime: nodejs10.x
MemorySize: 128
Timeout: 60
Policies:
S3ReadPolicy:
BucketName: !Ref AppBucketName
Events:
S3NewObjectEvent:
Type: S3
Properties:
Bucket: !Ref AppBucket
Events: s3:ObjectCreated:*
AppBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref AppBucketName
我需要向此 yaml 文件添加什么才能绑定允许跨账户访问我的 lambda 函数的基于资源的策略?
如果您的存储桶和 Lambda 函数存在于不同的帐户中,我不知道是否可以从 SAM/单个 CloudFormation 模板修改它们。
不要认为 SAM 可以进行跨账户 s3 事件,可能需要返回 CFN。
这可以在 AWS::Lambda::Permission
using aws_cdk.aws_lambda.CfnPermission
的帮助下实现。
例如,要允许从另一个帐户中的角色调用您的 lambda,请将以下内容添加到您的 CDK:
from aws_cdk import aws_lambda
aws_lambda.CfnPermission(
scope,
"CrossAccountInvocationPermission",
action="lambda:InvokeFunction",
function_name="FunctionName",
principal="arn:aws:iam::111111111111:role/rolename",
)
我想使用 AWS SAM 为一些 lambda 函数创建部署脚本。其中两个函数将部署到一个账户(账户 A)中,但将由第二个账户(账户 B)中的 s3 存储桶对象创建事件触发。据我所知,唯一的方法是向我的 lambda 添加基于资源的策略。但我不知道如何在 AWS SAM 中做到这一点。我当前的 yaml 文件如下所示。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
deploy-test-s3-triggered-lambda
Parameters:
AppBucketName:
Type: String
Description: "REQUIRED: Unique S3 bucket name to use for the app."
Resources:
S3TriggeredLambda:
Type: AWS::Serverless::Function
Properties:
Role: arn:aws:iam::************:role/lambda-s3-role
Handler: src/handlers/s3-triggered-lambda.invokeAPI
CodeUri: src/handlers/s3-triggered-lambda.js.zip
Runtime: nodejs10.x
MemorySize: 128
Timeout: 60
Policies:
S3ReadPolicy:
BucketName: !Ref AppBucketName
Events:
S3NewObjectEvent:
Type: S3
Properties:
Bucket: !Ref AppBucket
Events: s3:ObjectCreated:*
AppBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref AppBucketName
我需要向此 yaml 文件添加什么才能绑定允许跨账户访问我的 lambda 函数的基于资源的策略?
如果您的存储桶和 Lambda 函数存在于不同的帐户中,我不知道是否可以从 SAM/单个 CloudFormation 模板修改它们。
不要认为 SAM 可以进行跨账户 s3 事件,可能需要返回 CFN。
这可以在 AWS::Lambda::Permission
using aws_cdk.aws_lambda.CfnPermission
的帮助下实现。
例如,要允许从另一个帐户中的角色调用您的 lambda,请将以下内容添加到您的 CDK:
from aws_cdk import aws_lambda
aws_lambda.CfnPermission(
scope,
"CrossAccountInvocationPermission",
action="lambda:InvokeFunction",
function_name="FunctionName",
principal="arn:aws:iam::111111111111:role/rolename",
)