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 /)
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'
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.
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']
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