AWS: принимая роль в дочерней учетной записи, как я могу сохранить доступ к разрешениям в родительской учетной записи?

Я настраиваю архитектуру с несколькими аккаунтами в AWS. Мой домен размещен на route53 в учетной записи root. При создании инфраструктуры в дочерней учетной записи с помощью CDK мне нужно иметь возможность создавать записи route53 (например, корневой домен - test.com, и я хочу, чтобы dev.test.com контролировался дочерней учетной записью). AWS упоминает два способа сделать это: один - делегировать набор записей. Другой - использовать разрешения для нескольких учетных записей.

Я пытаюсь использовать для этого роль перекрестного аккаунта. Я создал роль в дочерней учетной записи и имею разрешение принимать эту роль в родительской учетной записи.

Когда я запускаю cdk deploy, вся инфраструктура развертывается успешно, за исключением набора записей, потому что роль явно не имеет разрешения.

Вот как выглядит мой код CDK:

    this.hostedZone = route53.HostedZone.fromHostedZoneAttributes(this, 'test.com hosted zone', {
      hostedZoneId: 'Z2H17K123M6123',
      zoneName: 'test.co'
    });

    new route53.TxtRecord(this, 'TXTRecord', {
      zone: this.hostedZone,
      recordName: '_foo', // If the name ends with a ".", it will be used as-is;
      // if it ends with a "." followed by the zone name, a trailing "." will be added automatically;
      // otherwise, a ".", the zone name, and a trailing "." will be added automatically.
      // Defaults to zone root if not specified.
      values: [
        // Will be quoted for you, and " will be escaped automatically.
        'Bar!',
        'Baz?'
      ],
      ttl: cdk.Duration.minutes(90) // Optional - default is 30 minutes
    });

Я получаю следующую ошибку:

API: route53:GetHostedZone User: arn:aws:sts::123:assumed-role/ROLENAME/123 is not authorized to access this resource
new RecordSet (.../infrastructure/node_modules/@aws-cdk/aws-route53/lib/record-set.ts:122:23)

Это политика, которая у меня есть для роли (изначально у меня она была привязана к размещенной зоне в корневой учетной записи, но затем была сделана *):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "route53:*"
            ],
            "Resource": "*"
        }
    ]
}

Как я могу предоставить этой роли (которая предполагается из родительской учетной записи) доступ к route53 в родительской учетной записи?

Команда, которую я использую для запуска cdk deploy:

aws-vault exec myorg-prestaging -- npx cdk deploy backend-api

Где myorg-prestaging - это профиль, настроенный следующим образом:

[profile myorg]
region=ap-southeast-2
mfa_serial=arn:aws:iam::12332:mfa/[email protected]

[profile myorg-prestaging]
region=ap-southeast-2
role_arn = arn:aws:iam::12333:role/GOFARPRESTAGINGROLE
source_profile = myorg

person jeznag    schedule 12.12.2019    source источник
comment
Можете ли вы опубликовать политику, которую вы назначили роли, которая дает разрешение на действия Route53   -  person Arun K    schedule 12.12.2019
comment
Сможете ли вы взять на себя роль. Вы пытались взять на себя роль в консоли?   -  person Arun K    schedule 12.12.2019
comment
Да, я могу взять на себя роль в консоли и через cdk. Я могу без проблем создать инфраструктуру в дочерней учетной записи.   -  person jeznag    schedule 12.12.2019
comment
Все работает, кроме создания route53, создания набора записей?   -  person Arun K    schedule 12.12.2019
comment
Ага. Если я использую размещенную зону в дочерней учетной записи, весь стек создается без проблем.   -  person jeznag    schedule 12.12.2019


Ответы (2)


вы должны назначить разрешения для дочерней роли, которую предполагает родитель.

Вот как это работает 1. Родительский Пользователь должен иметь разрешение на принятие роли (политика IAM) 2. Роль в дочерней учетной записи должна позволять родительской учетной записи принимать роль (политика доверия). 3. к роли в дочерней учетной записи должна быть прикреплена другая политика, позволяющая этой роли выполнять действия с ресурсами.

Я не думаю, что у родителей есть способ определить эти разрешения.

person Arun K    schedule 12.12.2019
comment
У меня есть политика в отношении роли в дочерней учетной записи, которая разрешает все действия на route53 без каких-либо ограничений. - person jeznag; 12.12.2019

Мне не удалось заставить его работать, поэтому я делегировал поддомен дочерней учетной записи (установив записи NS в корневой учетной записи на серверы имен дочерней учетной записи). Это сработало отлично.

person jeznag    schedule 23.01.2020