我在帐户A中创建了一个DynamoDB表,并在同一帐户中创建了一个角色,以便在该表上执行一些操作。
此角色将由部署在帐户B中的lambda函数承担。现在我只在帐户A中部署具有上述代码的堆栈。稍后将部署帐户B的堆栈以及lambda函数的cdk。这是部署在帐户A中的堆栈的相关角色代码,如下所示:
self._ddb_table = ddb.Table(
self,
id,
.
.
.
)
ddb_lambda_role = iam.Role(self, "ddb_lambda_role",
assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
role_name="ddb_lambda_role"
)
ddb_policy_stmt = iam.PolicyStatement(
effect=iam.Effect.ALLOW,
actions=[
'dynamodb:Query',
'dynamodb:GetItem',
'dynamodb:GetRecords',
'dynamodb:PutItem',
'dynamodb:UpdateItem',
'dynamodb:BatchGetItem',
],
resources=[self._ddb_table.table_arn]
)
ddb_lambda_role.add_to_policy(ddb_policy_stmt)
这会产生一个错误,说明:The following resource(s) failed to create: [ddblambdarole...].
在cli和web控制台中没有提供更多信息。您看到上面创建的角色有什么问题吗?如果没有采用上面的方法,如何在当前帐户A中创建一个跨帐户角色,该角色可以由另一个帐户中的lambda函数承担?
- 编辑**
添加屏幕截图
2条答案
按热度按时间9rygscc11#
检查您的CloudTrail日志中来自
iam.amazonaws.com
的事件,您会发现失败的真正原因。https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-log-file-examples.html#cloudtrail-log-file-examples-iam
sqyvllje2#
你应该仔细检查你的角色能力。
帐户A中的角色(由帐户B中的lambda承担)必须具有正确的受信任实体,在本例中是Lambda的执行角色
帐户B中Lambda的执行角色必须具有AssumeRole策略
我想你们都需要