我在帐户A中有一个lambda函数,试图从帐户B访问资源。创建了一个新的lambda角色,具有基本的执行权限,可以将日志上传到云监视。
下面是我在Python 3.7中的函数代码:
import boto3
allProfiles = ['account2']
def lambda_handler(event, context):
sts_connection = boto3.client('sts')
acct_b = sts_connection.assume_role(
RoleArn="arn:aws:iam::2222222222:role/role-on-source-account",
RoleSessionName="account2"
)
for profiles in allProfiles:
print("\nusing profile %s" % profiles)
newMethod..
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
还修改了帐户B中假定角色的信任策略,如文档中所述:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-assume-iam-role/
错误:调用AssumeRole操作时发生错误(AccessDenied):用户:arn:aws:sts::1111111:assumed-role/lambda-role/lambda-function未被授权执行:sts:资源上的AssumeRole:arn:aws:iam::2222222222:role/role-on-source-account”
注意:我可以在我的本地成功运行这个,但不能在lambda中运行。
3条答案
按热度按时间v2g6jxz61#
创建了一个新的lambda角色,具有基本的执行权限,可以将日志上传到云监视
lambda的基本执行角色是不够的。您需要显式地允许您的函数到
AssumeRole
。执行角色中的以下语句应该有所帮助:vc9ivgsu2#
好的,我们有:
你提到你的lambda有基本的执行,光是这是不够的...
解决方案:
1.创建角色“UpdateBucket”:您需要在AccountB(帐户ID号:999)和AccountA之间建立信任。
创建IAM角色并将AccountA定义为可信实体,指定允许可信用户更新AccountB_resource(AccountBBucket)的权限策略。
我们现在在A账户
1.授予访问权限:
我们现在将使用我们之前创建的角色,即(UpdateBucket)角色
这需要添加到您的AccountB权限中
我们现在在帐户B:``
请注意,上面的999是AccountB帐户ID,UpdateBucket是在AccountA中创建的角色
这将创建您所需的信任,以便您的lambda访问AccountB上的存储桶
更多信息在这里:Delegate Access Across AWS Accounts Using IAM Roles
pu3pd22g3#
解决方案:等待几分钟。
原因:返回的STS信息已缓存。它可以在容器上持续一段时间。要在本地删除缓存(在Mac上),可以运行