IAM может быть боль, чтобы получить право.Прежде всего, созданная вами роль должна иметь доверительные отношения с пользователем / учетными записями / группами, которые могут выполнять эту роль.Я не вижу, чтобы вы упомянули это в своем ОП.Я не знаю, что такое CDK, поэтому я не могу получить четкое представление о том, что вы делаете.
Роль имеет разрешения для действий, которые могут быть выполнены.Существует также часть доверительных отношений, которая определяет, кто или что может взять на себя эту роль.
Доверенные отношения должны иметь сопоставление с основной учетной записью orgs, например ....
Создание роли в основной учетной записис прикрепленными разрешениями:
My_Role_To_Assume
Assign Permissions in Master:
Trust Relationship(Master Account)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0123456789012:root"
},
"Action": "sts:AssumeRole"
}
]
}
Создайте группу в основной учетной записи и назначьте пользователей этой группе.Для групповых разрешений должен быть документ политики, в котором указано, какие роли и номера дополнительных учетных записей разрешено принимать пользователю.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::987654321098:role/My_Role_To_Assume",
"arn:aws:iam::567890123456:role/My_Other_Role_Assume"
]
}
]
}
Затем в учетной записи вы хотите, чтобы роль имела доступ.Создайте роль с тем же именем (необязательно, но гораздо проще запомнить, для чего нужны роли в дальнейшем).
My_Role_To_Assume
Assign Permissions for role in sub-account:
Attach Trust Realtionship policy for sub-account role to trust master account:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::0123456789012:root"
},
"Action": "sts:AssumeRole"
}
]
}
Можно настроить наборы разрешений в каждой учетной записи, чтобы датьгораздо более детальный контроль / доступ к ресурсам.Обычно в основной учетной записи у вас могут отсутствовать какие-либо разрешения, за исключением пароля IAM, управления ключами и т. Д.
Этот подход работает хорошо, и в целом вы создаете доверительные отношения на корневом уровне, ногрупповая политика в основной учетной записи диктует, какие роли могут занимать этот пользователь / группа в рамках дополнительных учетных записей.
Поскольку вы используете интерфейс командной строки, вам нужно будет выполнить вызов aws sts, чтобы принять на себя роль, прежде чем создавать или обновлять ресурсы в дополнительной учетной записи.Есть несколько сценариев, которые обрабатывают это для вас.
Пример:
#! /bin/bash
#
# Dependencies:
# yum install -y jq
#
# Setup:
# chmod +x ./assume_cloudadmin_role.sh
#
# Execute:
# source ./assume_cloudadmin_role.sh
#
# Description:
# Makes assuming an AWS IAM role (+ exporting new temp keys) easier. You're users access key and secret must allow you to assume the role in the sts CLI call.
unset AWS_SESSION_TOKEN
export AWS_ACCESS_KEY_ID=<place_your_key_here> #Master Account API Key
export AWS_SECRET_ACCESS_KEY=<place_your_secret_here>#Master Account API Secret
export AWS_REGION=us-east-1
temp_role=$(aws sts assume-role \
--role-arn "arn:aws:iam::0123456789012:role/My_Role_To_Assume" \
--role-session-name "temp_cli_role")
export AWS_ACCESS_KEY_ID=$(echo $temp_role | jq -r .Credentials.AccessKeyId)
export AWS_SECRET_ACCESS_KEY=$(echo $temp_role | jq -r .Credentials.SecretAccessKey)
export AWS_SESSION_TOKEN=$(echo $temp_role | jq -r .Credentials.SessionToken)
env | grep -i AWS_
Этот вызов установит ваш ключ доступа и секретный токен + токен сеанса для выполнения действий с дополнительной учетной записью.
Надеюсь, у вас все получится!