[PYTHON] Utilisez boto3 avec des informations d'identification temporaires par authentification SAML

Dans notre entreprise, tous les employés disposent d'un compte G Suite et, lorsqu'ils accèdent à AWS Management Console, Google est authentifié SAML en tant que fournisseur d'identité et une connexion unique [^ sso] est effectuée. Dans ce cas, le mécanisme Assume Role [^ assume_role] de STS est utilisé pour obtenir des informations d'identification temporaires et accéder à la console de gestion en tant qu'utilisateur de la fédération. Puisqu'il n'est pas nécessaire de créer un utilisateur IAM pour chaque employé pour accéder à la console de gestion, les problèmes de gestion des comptes peuvent être réduits.

[^ sso]: Authentification unique à AWS à l'aide d'un compte G Suite | Blog AWS Startup [^ assume_role]: Compréhension approfondie du rôle IAM ~ What AssumeRole is | Developers \ .IO

Cependant, le seul problème avec l'introduction de l'authentification unique est la clé d'accès. Il n'est pas possible d'émettre une clé d'accès (persistante) car il n'y a pas d'utilisateurs IAM en premier lieu. Il existe de nombreux cas où une clé d'accès est requise, par exemple lorsque vous souhaitez transférer un fichier sur un terminal local vers S3 à l'aide de l'AWS CLI, ou lorsque vous souhaitez accéder aux ressources AWS à l'aide de boto3 à partir d'un Jupyter Notebook. [^ access_key]

[^ access_key]: Il y a une histoire selon laquelle la sauvegarde d'une clé d'accès avec une forte autorité sur un terminal local n'est qu'un risque de sécurité en premier lieu.

Par conséquent, cette fois, je vais résumer comment utiliser boto3 avec des informations d'authentification temporaires par authentification SAML.

En ce qui concerne le contenu, le document officiel [^ awscli] décrit comment utiliser l'AWS CLI pour l'authentification SAML, je l'ai donc remplacé par Python (boto3).

[^ awscli]: utilisez l'AWS CLI pour appeler et enregistrer les informations d'identification SAML [https://aws.amazon.com/jp/premiumsupport/knowledge-center/aws-cli-call-store-saml] -identifiants /)

Préparer l'ARN du rôle et l'ARN de l'IdP

Role ARN est l'ARN du rôle utilisé par Assume Role et IdP ARN est l'ARN du fournisseur d'identité pour l'authentification SAML.

role_arn = 'arn:aws:iam::123456789012:role/GSuiteMember'
idp_arn = 'arn:aws:iam::123456789012:saml-provider/Google'

Obtenir une réponse SAML

Comment afficher la réponse SAML dans le navigateur pour le dépannage \ -AWS Identity and Access Management

En effectuant une authentification SAML sur le navigateur conformément à cela, la chaîne de caractères SAML Resnponse peut être obtenue.

saml_response = '...Très longue chaîne...'

La réponse SAML est encodée en Base64 et est une très longue chaîne, soyez donc prudent lors de la copie.

Obtenir la clé d'accès

Avec les informations à ce jour, vous pouvez obtenir une clé d'accès temporaire à l'aide de l'API [^ assume_role_with_saml] appelée AssumeRoleWithSAML. Cette opération doit être effectuée dans les 5 minutes suivant l'authentification SAML.

sts = boto3.client('sts')
response = sts.assume_role_with_saml(RoleArn=role_arn, PrincipalArn=idp_arn, SAMLAssertion=saml_response)
credentials = response['Credentials']

Utilisez la clé d'accès

Vous pouvez ensuite utiliser la clé d'accès pour accéder aux ressources AWS comme vous le feriez normalement.

session = boto3.session.Session(
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
    region_name='ap-northeast-1',
)

#Obtenir une liste des instances EC2
ec2 = session.client('ec2')
ec2.describe_instances()

Recommended Posts

Utilisez boto3 avec des informations d'identification temporaires par authentification SAML
Utilisez boto3 pour accéder à S3
Je souhaite utiliser le répertoire temporaire avec Python2
utiliser autre chose que le profil par défaut avec boto3
Utilisez mecab-ipadic-neologd avec igo-python
Utilisez RTX 3090 avec PyTorch
Utiliser ansible avec cygwin
Utiliser pipdeptree avec virtualenv
[Python] Utiliser JSON avec Python
Utilisez Mock avec pytest
Utiliser l'indicateur avec pd.merge
Utiliser Gentelella avec Django
Testé avec boto3 + mock
Utiliser mecab avec Python 3
Utiliser tensorboard avec Chainer
Utiliser DynamoDB avec Python
Utiliser pip avec MSYS2
Utilisez Python 3.8 avec Anaconda
Utiliser les droits d'auteur avec Spacemacs
Utiliser python avec docker
Spécification de la région avec boto
Utiliser TypeScript avec django-compresseur
Utilisez LESS avec Django
Téléchargeur S3 avec boto
Utiliser MySQL avec Django
Utiliser Enum avec SQLAlchemy
Utiliser tensorboard avec NNabla
Utiliser le GPS avec Edison
Utilisez nim avec Jupyter
Utilisez l'authentification par clé publique par clé privée pour ssh. Connectez-vous depuis WAN.