【发布时间】:2019-02-15 05:19:48
【问题描述】:
我需要担任跨账户角色才能访问 ElasticSearch 域以登录 AWS。这是我所做的:
首先,我在 ACCOUNT1 中创建了一个跨账户角色。角色名称为LoggerAccessToES,信任关系如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
},
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::ACCOUNT1:root",
"arn:aws:iam::ACCOUNT2:root"
]
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
然后,在 ACCOUNT2 上,我创建了一个 Lambda 函数来使用以下代码承担上述角色:
sts_client = boto3.client('sts', region_name=Config.AWS_ES_REGION)
assumed_role_object=sts_client.assume_role(
RoleArn="arn:aws:iam::ACCOUNT1:role/LoggerAccessToES",
RoleSessionName="AssumeLoggerAccessToESSession1"
)
当我调用 lambda(基本上 lambda 附加到 SNS 主题)时,我收到错误:
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied
我已经尝试了其他人在其他问题中提出的所有建议,我也用谷歌搜索了这个问题,但我找不到解决方案。我在这里做错了什么?
【问题讨论】:
-
尝试更改 Trust 策略中的 Principal 以使用分配给 Account-2 Lambda 函数的角色的 ARN(而不是使用
Account:root)。
标签: amazon-web-services aws-lambda