Вот проблема: мне нужно использовать функцию Lambda в учетной записи AWS A (в корневой учетной записи AWS A), чтобы записать некоторые данные в таблицы DynamoDB в учетной записи AWS B (в корневой учетной записи AWS B). Весь проект написан с использованием Serverless Framework в Node.js.
Я знаю, что для этого мне нужно использовать Роль кросс-счета в функции Lambda. Поскольку Serverless использовать шаблон, который разделяет много вещей, похожих на шаблон облачной информации. Затем я провел исследование о том, как использовать роль кросс-аккаунта, вот документация AWS https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {"AWS": "Example Corp's AWS Account ID"},
"Condition": {"StringEquals": {"sts:ExternalId": "12345"}}
}
}
это пример спецификации iam для такой задачи. Шаблон yaml на сервере не выглядит так в моем проекте:
- Effect: Allow
Principal:
AWS: 'AWS Account B External ID'
Action:
- sts:AssumeRole
Resource:
- '*'
Но когда я попытался развернуть шаблон без сервера:
Я получил ошибку, как это:
Произошла ошибка: IamRoleLambdaExecution - в документе политики не должен указываться принципал. (Сервис: AmazonIdentityManagement; Код состояния: 400; Код ошибки: MalformedPolicyDocument; Идентификатор запроса: XXXX-XXXX-XXXX-XXXX-XXXX).
Мне интересно, как правильно указать шаблон в соответствии с требованием.
Ценим на помощь любые виды