我的用例是:
我想为现有S3存储桶的PUT事件执行一个lambda函数。
问题是,在CloudForm或CDK中,您不能为现有存储桶添加通知,只能为已创建的存储桶添加通知。
为了解决这个问题,我尝试使用一个自定义资源,将Lambda函数添加到putda通知中。我在CloudFormation中工作得很好,但我现在正尝试使用CDK来做类似的事情。
为了模拟我在Cloud形成中拥有的内容,我需要在现有的桶中添加一个桶策略,向lambda执行角色主体授予操作s3: PutBucketNotify的权限。
在云形成中,我这样做:
NotificationBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref BucketName
PolicyDocument:
Statement:
- Effect: "Allow"
Action:
- 's3:PutBucketNotification'
Resource: !Sub "arn:aws:s3:::${BucketName}"
Principal:
AWS: !GetAtt LambdaExecutionRole.Arn
我试图创建bucket策略并在CDK中将语句添加到其中,但我需要Lambda函数的Arn的Arn
const bucket = Bucket.fromBucketName(this, "Bucket", "my-bucket-name");
const bucketConfigurationFunction = new lambda.SingletonFunction(this, "bucketConfigurationFunction ", {
runtime: lambda.Runtime.NODEJS_8_10,
code: lambda.Code.asset('lambda/bucket-configuration'),
handler: 'lambda_function.handler',
timeout: cdk.Duration.seconds(300),
uuid: '72561a5f-e772-4365-b3d1-f59e8ddc60b1'
})
const bucketPolicy = new BucketPolicy(this, "TargetBucketPolicy", {
bucket: bucket
})
const bucketPolicyStatement = new PolicyStatement()
bucketPolicyStatement.addActions("s3:PutBucketNotification");
//Need to put the execution role arn here but role is undefined
bucketPolicyStatement.addArnPrincipal(bucketConfigurationFunction.role.roleArn)
我读过CDK自动创建lambda函数执行角色,但是当我试图访问角色Arn以将其添加为策略语句中的主体时,它是未定义的。
我这样做完全是错误的吗?
因为TypeScript对检查可选变量非常严格,并且角色
是在运行时生成的,所以需要使用和if
将其框起来,但这仍然可以。例如,这项工作:
const bucketPolicyStatement = new iam.PolicyStatement()
bucketPolicyStatement.addActions("s3:PutBucketNotification");
if (bucketConfigurationFunction.role) {
bucketPolicyStatement.addArnPrincipal(bucketConfigurationFunction.role.roleArn)
}
const bucketPolicy = new s3.BucketPolicy(this, "TargetBucketPolicy", {
bucket: bucket,
})
bucketPolicy.document.addStatements(bucketPolicyStatement);
我想做的是: > 我有一个应用程序可以接收登录凭据:用户的用户名和密码。我有一个rest api,它在内部调用keydape rest api:/auth/realms/realmname/protocol/openid connect/token,并获取该用户的访问令牌。 现在,我正在构建另一个RESTAPI来访问我希望执行以下操作的资源:doSomething(accesstoken,data
我有两个AWS帐户(A和B)。在我的帐户A上,我有一个lambda功能,需要访问帐户B的资源。确切地说,我的帐户A上的lambda需要更新我帐户B上托管的Route53区域中的记录。 与S3相反,我在Route53中没有看到任何资源访问策略。所以我有点迷路了。我试图扮演IAM的跨账户角色,但这似乎对lambda不起作用。 如何允许帐户a上的lambda函数访问我的帐户B的资源?
我正在使用AWS Lambda+API网关+无服务器(Python)。太神奇了!
我想知道为用户分配的站点角色名称列表。所以我试着如下, 我只能看到用户的常规类型角色。不是网站类型。但在我的情况下,用户是网站管理员。那么如何使用api调用获取用户的站点角色名称呢?
我试图制作一个命令,显示提及用户的角色。这个命令是一个测试命令,我将在mute命令中实现它。(命令将删除成员的当前角色并添加静音角色) 这就是我所拥有的: 希望有人能帮我。 谢了!
运行lambda函数时,我得到一个Boto3无效参数异常。我正试图找到一种方法来处理这个异常。 我遇到了以下解决方案: 我使用的是python3,我知道boto现在已被弃用,并被boto3取代。但我在boto3中找不到等效的解决方案。 有人能帮我解决这个问题吗?