Создание перекрестной учетной записи IAM Lambda-роли с использованием CDK

#amazon-web-services #aws-cdk

#amazon-web-services #aws-cdk

Вопрос:

В моем сценарии у меня есть 2 учетные записи (11111111, 22222222), которым необходимо вызвать лямбду в 3-й учетной записи: 33333333. Лямбды в 3-й учетной записи будут вызываться из лямбд в первых 2.

Лямбды в 3-й учетной записи создаются «на лету», но мне нужно дать им роль, которую я хочу создать с помощью CDK (что я буду делать, используя кредиты 3-й учетной записи — здесь нет перекрестных учетных записей).

Я следую инструкциям здесь — вызов lambda с использованием STS кажется простым. Что мне не совсем понятно, так это как определить 3-ю роль учетной записи в cdk.

Вот мой стек:

 
export class ModuleIAMStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    const lambdaModuleRole = new Role(this, 'moduleRole', {
      roleName: 'moduleRole',
      assumedBy: new AccountPrincipal({ accountId: '111111111' }),
      managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole')] // My lambdas in 3X... will not need to access any resources so this should be enough to execute
    })
  }
}

  

Я неясен в assumedBy строке. AccountPrincipal Правильная ли запись? и если да, то как мне войти в учетную запись 22222222?

Комментарии:

1. «Что мне не совсем понятно, так это как определить роль 3-й учетной записи в cdk» — вы ожидаете создать роль в 3-й учетной записи, выполнив код cdk в одном из других? Если это так, я сомневаюсь, что это возможно, если только в вашей 3-й учетной записи вы уже не предоставили другим своим учетным записям доступ ко всем необходимым ресурсам. Мы выполняем операции с x-account между несколькими учетными записями, но у нас уже есть роли, определенные в различных учетных записях, и разрешения, позволяющие этим ролям присваиваться учетной записью, которая выполняет операции с x-account. Бегло взглянул на ссылку, и, похоже, она такая же, как и у нас.

2. Нет, я буду создавать роль в 3-й учетной записи, используя cdk и 3-й учетные записи creds. Никаких проблем нет. Подробнее о том, как определить роль в 3-й учетной записи, ARN которой я буду использовать в учетной записи 1/2 для вызова лямбд 3-й учетной записи. В основном мне неясно, assumedBy правильно ли это — как я могу использовать это для 2 учетных записей? Я немного расплывчат в этой части IAM в целом.

3. Я никогда не использовал cdk, но из документов кажется AccountPrincipal , что это для отдельной учетной записи, тогда как с шаблонами CF / sam (которые мы используем) соответствующее свойство принимает массив номеров учетных записей для применения этого (см. docs.aws.amazon.com/IAM/latest/UserGuide /… ). Возможно, это ограничение cdk?

4. Или посмотрите Эту ошибку, зарегистрированную некоторое время назад (по-видимому, теперь исправленную), которая показывает использование этого класса с несколькими идентификаторами учетных записей: github.com/aws/aws-cdk/issues/924

5. Для тех, кто приходит сюда и пытается следить за сообщением в блоге, на которое ссылается вопрос, вот сообщение в блоге, очень похожее на это, но с использованием CDK: faun.pub / …

Ответ №1:

AccountPrincipal сгенерирует принципал, подобный этому: arn:aws:iam::123456789012:root . Этого достаточно, чтобы разрешить всю учетную запись.

А что касается CDK — вы почти у цели:

 assumedBy: new iam.CompositePrincipal(
    new iam.AccountPrincipal('111111111'),
    new iam.AccountPrincipal('22222222')
),
  

Комментарии:

1. Как решить, хочу ли я использовать пользователя вместе с основным пользователем учетной записи?

2. @Judi Вам, вероятно, следует задать новый вопрос, а не добавлять комментарий.

3. означает ли это «предоставить доступ к учетным записям 1 и 2»?

4. @GeoffLangenderfer Да, это правильно.