[PYTHON] Verwenden Sie boto3 mit temporären Anmeldeinformationen durch SAML-Authentifizierung

In unserem Unternehmen verfügen alle Mitarbeiter über ein G Suite-Konto. Beim Zugriff auf die AWS Management Console wird Google als Identitätsanbieter SAML-authentifiziert und Single Sign-On [^ sso] durchgeführt. In diesem Fall wird der STS-Mechanismus "Rolle übernehmen" [^ accept_role] verwendet, um temporäre Anmeldeinformationen abzurufen und als Verbundbenutzer auf die Verwaltungskonsole zuzugreifen. Da nicht für jeden Mitarbeiter ein IAM-Benutzer erstellt werden muss, um auf die Verwaltungskonsole zuzugreifen, kann der Aufwand für die Verwaltung von Konten verringert werden.

[^ sso]: Einmaliges Anmelden bei AWS mit dem G Suite-Konto | AWS Startup Blog [^ take_role]: Gründliches Verständnis der IAM-Rolle ~ Was AssumeRole ist | Developers \ .IO

Das einzige Problem bei der Einführung der einmaligen Anmeldung ist jedoch der Zugriffsschlüssel. Es ist nicht möglich, einen (dauerhaften) Zugriffsschlüssel auszugeben, da überhaupt keine IAM-Benutzer vorhanden sind. In vielen Fällen ist ein Zugriffsschlüssel erforderlich, z. B. wenn Sie eine Datei auf einem lokalen Terminal mithilfe der AWS-CLI an S3 übertragen möchten oder wenn Sie mit boto3 von einem Jupyter-Notizbuch aus auf AWS-Ressourcen zugreifen möchten. [^ access_key]

[^ access_key]: Es gibt eine Geschichte, dass das Speichern eines Zugriffsschlüssels mit starker Autorität auf einem lokalen Terminal in erster Linie nur ein Sicherheitsrisiko darstellt.

Daher werde ich dieses Mal zusammenfassen, wie boto3 mit temporären Authentifizierungsinformationen durch SAML-Authentifizierung verwendet wird.

Was den Inhalt betrifft, beschreibt das offizielle Dokument [^ awscli], wie die AWS CLI für die SAML-Authentifizierung verwendet wird. Deshalb habe ich sie einfach durch Python (boto3) ersetzt.

[^ awscli]: Verwenden Sie AWS CLI, um SAML-Anmeldeinformationen aufzurufen und zu speichern. [https://aws.amazon.com/jp/premiumsupport/knowledge-center/aws-cli-call-store-saml] -Referenzen /)

Bereiten Sie die Rollen-ARN und die IdP-ARN vor

Die Rollen-ARN ist die ARN der von der angenommenen Rolle verwendeten Rolle, und die IDP-ARN ist die ARN des Identitätsanbieters für die SAML-Authentifizierung.

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

SAML-Antwort abrufen

Anzeigen der SAML-Antwort im Browser zur Fehlerbehebung \ -AWS Identity and Access Management

Durch entsprechende SAML-Authentifizierung im Browser kann die Zeichenfolge SAML Resnponse abgerufen werden.

saml_response = '...Sehr lange Saite...'

SAML Response ist Base64-codiert und eine sehr lange Zeichenfolge. Seien Sie daher beim Kopieren vorsichtig.

Zugriffsschlüssel abrufen

Mit den bisherigen Informationen können Sie mithilfe der API [^ accept_role_with_saml] mit dem Namen AssumeRoleWithSAML einen temporären Zugriffsschlüssel erhalten. Dieser Vorgang muss innerhalb von 5 Minuten nach der SAML-Authentifizierung ausgeführt werden.

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

Verwenden Sie den Zugriffsschlüssel

Sie können dann den Zugriffsschlüssel verwenden, um wie gewohnt auf AWS-Ressourcen zuzugreifen.

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',
)

#Holen Sie sich eine Liste der EC2-Instanzen
ec2 = session.client('ec2')
ec2.describe_instances()

Recommended Posts

Verwenden Sie boto3 mit temporären Anmeldeinformationen durch SAML-Authentifizierung
Verwenden Sie boto3, um zu S3 zu gelangen
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
Verwenden Sie mit boto3 etwas anderes als das Standardprofil
Verwenden Sie mecab-ipadic-neologd mit igo-python
Verwenden Sie RTX 3090 mit PyTorch
Verwenden Sie ansible mit cygwin
Verwenden Sie pipdeptree mit virtualenv
[Python] Verwenden Sie JSON mit Python
Verwenden Sie Mock mit Pytest
Verwenden Sie den Indikator mit pd.merge
Verwenden Sie Gentelella mit Django
Getestet mit boto3 + mock
Verwenden Sie Mecab mit Python 3
Verwenden Sie Tensorboard mit Chainer
Verwenden Sie DynamoDB mit Python
Verwenden Sie pip mit MSYS2
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Copyright mit Spacemacs
Verwenden Sie Python mit Docker
Regionsspezifikation mit Boto
Verwenden Sie TypeScript mit Django-Kompressor
Verwenden Sie WENIGER mit Django
S3 Uploader mit Boto
Verwenden Sie MySQL mit Django
Verwenden Sie Enum mit SQLAlchemy
Verwenden Sie Tensorboard mit NNabla
Verwenden Sie GPS mit Edison
Verwenden Sie nim mit Jupyter
Verwenden Sie die Authentifizierung mit öffentlichem Schlüssel und privatem Schlüssel für ssh. Verbindung von wan verbinden.