Qu'est-ce que je fais mal ici? Je suis en mesure d'assumer les rôles via aws cli ainsi que Boto si j'utilise:Boto3 STS AssumeRole dans un autre compte Exemple de travail
boto3.setup_default_session(profile_name="ROLE_TO_ASSUME")
Ce que je suis en train de faire: j'ai un certain nombre de comptes AWS a besoin de mon script à exécuter dans I ». Je suis fatigué de taper mon fichier mfa chaque fois que j'ai besoin d'exécuter le script sur un autre profil/rôle.
Je reçois ce message d'erreur avec le code ci-dessous:
User: arn:aws:iam::<management account>:user/Ops/<my user> is not authorized to perform: sts:AssumeRole on resource
Notre AWS est la configuration comme ceci: Je suis un utilisateur, une partie d'un groupe sur un compte de gestion. Le groupe a une relation d'approbation définie avec le rôle ROLE_TO_ASSUME sur chaque compte.
Voici mon python:
import boto3
def main():
boto3.setup_default_session(profile_name="default")
ec2 = boto3.client('ec2')
get_assumerole_credentials('arn:aws:iam::<REPLACE WITH ACCOUNTID>:role/ROLE_TO_ASSUME')
def get_assumerole_credentials(arn):
sts_client = boto3.client('sts')
# Use client object and pass the role ARN
assumedRoleObject = sts_client.assume_role(RoleArn=arn,
RoleSessionName="AssumeRoleCredstashSession1")
credentials = assumedRoleObject['Credentials']
return dict(aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'])
if __name__ == "__main__":
main()
Voici mon ~/.AWS/config
[profile default]
region = us-west-2
output = json
aws_access_key_id=<censored>
aws_secret_access_key=<censored>
[profile ROLE_TO_ASSUME]
region = us-west-2
source_profile = default
role_arn = arn:aws:iam::<accountid>:role/ROLE_TO_ASSUME
mfa_serial = arn:aws:iam::<accountid>:mfa/<my_user>
EDIT basé sur la première réponse:
Pour être clair, je suis en mesure de jouer un rôle si Je spécifie l'argument 'profile' comme dans l'exemple suivant:
boto3.setup_default_session(profile_name='ROLE_TO_ASSUME')
ec2 = boto3.resource('ec2', region_name='us-west-1')
Mais j'ai besoin d'assumer un rôle et dans le script en utilisant STS de Boto3 pour obtenir des informations d'identification temporaires.
J'ai remarqué qu'il n'y a pas d'invite MFA lorsque j'utilise la méthode de connexion boto3 STS assumée.
Il est pas aussi simple. AssumeRoles ne fonctionne pas uniquement au niveau du compte d'utilisateur, vous devez également attribuer des rôles à tous les services AWS que vous souhaitez accorder. – mootmoot
ok mais je pensais que je l'ai fait parce que je peux assumer le rôle en utilisant aws config "profils". Juste boto mts ne fonctionne pas. Je ne comprends pas ce que vous essayez de dire. – buildmaestro
C'est assez difficile, je vais juste vous donner la référence. Vous devez tester ces contraintes. http://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html – mootmoot