2016-11-17 5 views
4

У меня есть два счета AWS - позволяет сказать, что А и В.Как взять роль AWS из другой роли AWS?

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

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

В учетной записи A я определил роль, которая позволяет пользователю root взять на себя роль. Назовём его роль-A

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

Роль А имеет следующую политику прилагается к нему

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

Как пользователь в аккаунте, я взял на себя роль-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, к которым у меня есть доступ.

ответ

4

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

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

+0

Это было действительно полезно, спасибо. Я предполагаю, что вы исправили орфографическую ошибку в политике. :-) – pcurry