【发布时间】:2018-05-17 07:52:08
【问题描述】:
我有 2 个 AWS 账户。账户 1 有一个 CloudSearch 域,我需要从账户 2 中的 Lambda 函数查询该域。我遵循tutorial here 在账户 1 中创建一个允许跨账户访问的角色。
因此,在帐户 1 中,我有一个角色 arn:aws:iam::111111111111:role/my_cloudsearch_query_role,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudsearch:search",
"Resource": "*"
}
]
}
此角色有一个受信任实体,即账户 2,我可以在 IAM 控制台中的“受信任实体”部分下看到该角色的正确账户 ID。
在账户 2 中,我创建了一个具有如下执行角色的 Lambda 函数:
{
"roleName": "my_cloudsearch_query_role",
"policies": [
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::111111111111:role/my_cloudsearch_query_role"
}
]
},
"name": "oneClick_lambda_basic_execution_1526469274620",
"type": "inline"
}
]
}
我的 Lambda 函数 (Python 3) 代码尝试像这样查询 CloudSearch:
client = boto3.client('cloudsearchdomain', endpoint_url=endpoint)
response = client.search(
query="(and name:'foobar')",
queryParser='structured',
returnFields='curr_addr',
size=1
)
对 Lambda 函数的所有调用都失败并出现以下错误:
调用搜索操作时发生错误 (AccessDenied):用户:arn:aws:sts::222222222222:assumed-role/my_cloudsearch_query_role/my_lambda_func 无权执行:cloudsearch:search on resource:myCSDomain
我确定我的帐户 ID 正确无误,因此没有混淆。我还需要做些什么才能使其正常工作吗?
【问题讨论】:
-
您需要承担账户 111111111111 中的角色,然后使用返回的凭据创建您的客户端对象。使用
assume_roleboto3 API 调用获取凭据。 -
啊,我以为这个角色会自动承担。如果您想将其放入答案中,我会为您接受
-
当然。我会添加一个答案。
标签: amazon-web-services amazon-iam