Как взять роль AWS из другой роли AWS?

У меня есть два аккаунта AWS - скажем, A и B.

В учетной записи B у меня есть определенная роль, которая разрешает доступ к другой роли из учетной записи A. Давайте назовем ее Role-B

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:role/RoleA"
     },
    "Action": "sts:AssumeRole"
  }]
}

В учетной записи A я определил роль, которая позволяет пользователю root принимать роль. Давайте назовем это Role-A

{
  "Version": "2012-10-17",
  "Statement": [
  {
     "Effect": "Allow",
     "Principal": {
         "AWS": "arn:aws:iam::********:root"
     },
    "Action": "sts:AssumeRole"
  }]
}

К роли A прикреплена следующая политика

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::****:role/RoleB",
            "Effect": "Allow"
       }]
 }

Как пользователь в учетной записи A, я принял на себя роль A. Теперь, используя эти временные учетные данные, я хочу получить роль B и получить доступ к ресурсу, принадлежащему учетной записи B. У меня есть следующий код

client = boto3.client('sts')

firewall_role_object = client.assume_role(
    RoleArn=INTERMEDIARY_IAM_ROLE_ARN,
    RoleSessionName=str("default"),
    DurationSeconds=3600)

firewall_credentials = firewall_role_object['Credentials']

firewall_client = boto3.client(
    'sts',
    aws_access_key_id=firewall_credentials['AccessKeyId'],
    aws_secret_access_key=firewall_credentials['SecretAccessKey'],
    aws_session_token=firewall_credentials['SessionToken'], )

optimizely_role_object = firewall_client.assume_role(
    RoleArn=CUSTOMER_IAM_ROLE_ARN,
    RoleSessionName=str("default"),
    DurationSeconds=3600)

print(optimizely_role_object['Credentials'])

Этот код работает для набора ролей, которые я получил от своего клиента, но не работает для ролей, которые я определил между двумя учетными записями AWS, к которым у меня есть доступ.

Ответы

Ответ 1

Наконец, эта работа. Вышеприведенная конфигурация верна. В политике была орфографическая ошибка.

Я буду держать этот вопрос здесь, потому что это может помочь кому-то, кто хочет добиться двойной аутентификации с использованием ролей.

Ответ 2

УДИВИТЕЛЬНЫЙ пример. Я искал пару дней для этого решения....