Использовать внешний идентификатор в роли кросс-аккаунта AWS с использованием Serverless Framework - PullRequest
0 голосов
/ 24 июня 2019

Вот проблема: мне нужно использовать функцию 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).

Мне интересно, как правильно указать шаблон в соответствии с требованием. Ценим на помощь любые виды

...