J'ai deux comptes AWS - disons A et B.
Dans le compte B, j'ai un rôle défini qui permet d'accéder à un autre rôle à partir du compte A. Appelons-le Role-B
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::********:role/RoleA"
},
"Action": "sts:AssumeRole"
}]
}
Dans le compte A, j'ai défini un rôle qui permet à l'utilisateur root d'assumer le rôle. Appelons-le Role-A
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::********:root"
},
"Action": "sts:AssumeRole"
}]
}
Le rôle A est associé à la stratégie suivante
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::****:role/RoleB",
"Effect": "Allow"
}]
}
En tant qu'utilisateur du compte A, j'ai assumé le rôle A. Maintenant, en utilisant ces informations d'identification temporaires, je veux assumer le rôle B et accéder à la ressource appartenant au compte B. J'ai le code ci-dessous
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'])
Ce code fonctionne pour l'ensemble des rôles que j'ai obtenus de mon client, mais ne fonctionne pas pour les rôles que j'ai définis entre deux des comptes AWS auxquels j'ai accès.
Finalement, cela a fonctionné. La configuration ci-dessus est correcte. Il y avait une faute d'orthographe dans la politique.
Je garderai cette question ici car cela peut aider quelqu'un qui souhaite réaliser une authentification double saut en utilisant des rôles.