У меня есть 2 аккаунта AWS.У учетной записи 1 есть домен CloudSearch, который мне нужно запросить из функции Lambda в учетной записи 2. Я следовал учебнику здесь для создания роли в учетной записи 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.
В учетной записи 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"
}
]
}
Моя лямбдаКод функции (Python 3) пытается выполнить запрос CloudSearch следующим образом:
client = boto3.client('cloudsearchdomain', endpoint_url=endpoint)
response = client.search(
query="(and name:'foobar')",
queryParser='structured',
returnFields='curr_addr',
size=1
)
Все вызовы лямбда-функции завершаются со следующей ошибкой:
Произошла ошибка (AccessDenied), когдавызов операции поиска: Пользователь: arn: aws: sts :: 222222222222: предполагаемая роль / my_cloudsearch_query_role / my_lambda_func не авторизован для выполнения: cloudsearch: поиск по ресурсу: myCSDomain
Я уверен, чтоЯ получил правильные идентификаторы аккаунта, так что никаких путаницЧто-то еще, что я должен сделать, чтобы заставить это работать?