Erste Schritte mit Outbound Identity Federation - AWS Identitäts- und Zugriffsverwaltung

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erste Schritte mit Outbound Identity Federation

In dieser Anleitung erfahren Sie, wie Sie den ausgehenden Identitätsverbund für Ihr AWS Konto aktivieren und Ihr erstes JSON Web Token (JWT) (mithilfe der GetWebIdentityTokenAPI) abrufen. Sie aktivieren die Funktion, richten eine Vertrauensbeziehung mit einem externen Dienst ein, konfigurieren IAM-Berechtigungen und fordern mithilfe von AWS CLI oder AWS SDK for Python (Boto3) ein Token an.

Voraussetzungen

Stellen Sie vor Beginn sicher, dass Sie über Folgendes verfügen:

  • Aktuelle Version der AWS CLI oder Python 3.8 (oder höher) und Boto3 installiert (für AWS SDK-Beispiele)

  • Ein externes Dienstkonto, in dem Sie Vertrauensbeziehungen konfigurieren können (z. B. ein externer Cloud-Anbieter, SaaS-Anbieter oder eine Testanwendung)

Anmerkung
  • Die GetWebIdentityToken API ist auf dem STS Global-Endpunkt nicht verfügbar.

  • Die von der GetWebIdentityToken API generierten JSON-Web-Tokens (JWTs) können nicht für den OpenID Connect (OIDC) -Verbund AWS (über die AssumeRoleWithWebIdentityAPI) verwendet werden.

Aktivieren Sie den ausgehenden Identitätsverbund für Ihr Konto

Sie müssen den ausgehenden Identitätsverbund aktivieren, bevor Sie Token anfordern können. Sie können die Funktion mithilfe der AWS Management Console oder programmgesteuert mithilfe der API aktivieren. EnableOutboundWebIdentityFederation

Verwenden der AWS CLI

aws iam enable-outbound-web-identity-federation

AWS SDK für Python verwenden

import boto3 # Create IAM client iam_client = boto3.client('iam') # Enable outbound identity federation response = iam_client.enable_outbound_web_identity_federation() print(f"Feature enabled. Issuer URL: {response['IssuerUrl']}") print(f"Status: {response['Status']}")

Die AWS Konsole verwenden

Navigieren Sie zu IAM und wählen Sie im linken Navigationsmenü im Bereich Access Management die Option Kontoeinstellungen

Notieren Sie sich nach der Aktivierung der Funktion Ihre kontospezifische Aussteller-URL. Sie werden diese URL verwenden, wenn Sie Vertrauensbeziehungen in externen Diensten konfigurieren. Sie können diese Aussteller-URL bei Bedarf auch über die GetOutboundWebIdentityFederationInfoAPI abrufen.

Stellen Sie eine Vertrauensbeziehung im externen Dienst her

Konfigurieren Sie den externen Dienst so, dass er von Ihrem AWS Konto ausgegebene Token als vertrauenswürdig einstuft und akzeptiert. Die spezifischen Schritte variieren je nach Dienst, beinhalten aber im Allgemeinen:

  • Registrierung der URL Ihres AWS Kontoausstellers als vertrauenswürdiger Identitätsanbieter

  • Konfiguration der zu validierenden Behauptungen (Zielgruppe, Betreffmuster)

  • Zuordnung von Token-Ansprüchen zu Berechtigungen im externen Dienst

Ausführliche Anweisungen zur Konfiguration finden Sie in der Dokumentation zum externen Dienst.

Konfigurieren Sie die IAM-Berechtigungen.

Erstellen Sie eine IAM-Richtlinie, die die Berechtigung zum Aufrufen der GetWebIdentityTokenAPI erteilt, und fügen Sie die Richtlinie einer IAM-Rolle hinzu, die Token generieren muss.

Diese Beispielrichtlinie gewährt Zugriff auf die Token-Generierung mit bestimmten Einschränkungen. Sie erlaubt das Anfordern von Token nur für https://api.example.com "" als Zielgruppe und erzwingt eine maximale Token-Lebensdauer von 5 Minuten (300 Sekunden). Eine Liste von Bedingungsschlüsseln, mit denen Sie Token-Eigenschaften erzwingen können, finden Sie unter. IAM- und AWS STS Bedingungskontextschlüssel

Beispiel für eine IAM-Richtlinie

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:GetWebIdentityToken", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "sts:IdentityTokenAudience": "https://api.example.com" }, "NumericLessThanEquals": { "sts:DurationSeconds": 300 } } } ] }

Fordern Sie Ihr erstes JSON Web Token (JWT) an

Sie können über die GetWebIdentityTokenAPI ein JSON-Webtoken anfordern. Sie können beim Aufrufen der API die folgenden Parameter angeben:

  • Zielgruppe (erforderlich): Der beabsichtigte Empfänger des Tokens. Dieser Wert füllt den Anspruch „aud“ im JWT auf. Externe Dienste validieren diesen Anspruch, um sicherzustellen, dass das Token für sie bestimmt war.

  • SigningAlgorithm (erforderlich): Der kryptografische Algorithmus, der zum Signieren des Tokens verwendet wurde. Gültige Werte sind ES384 und RS256. Verwenden Sie diese Option ES384 für optimale Sicherheit und Leistung oder RS256 für eine umfassendere Kompatibilität mit Systemen, die ECDSA nicht unterstützen.

  • DurationSeconds (optional): Die Lebensdauer des Tokens in Sekunden. Gültige Werte liegen im Bereich von 60 bis 3600. Der Standardwert ist 300 (5 Minuten). Aus Sicherheitsgründen empfehlen wir kürzere Token-Lebenszeiten.

  • Tags (optional): Eine Liste von Schlüssel-Wert-Paaren, die als benutzerdefinierte Ansprüche in das Token aufgenommen werden sollen. Externe Dienste können diese Ansprüche für eine detaillierte Autorisierung verwenden.

Die API gibt die folgenden Felder zurück:

  • IdentityToken: Das signierte JWT als Base64URL-kodierte Zeichenfolge. Nehmen Sie dieses Token in Anfragen an externe Dienste auf.

  • Ablauf: Der UTC-Zeitstempel für das Ablaufen des Tokens.

Verwenden der AWS CLI

aws sts get-web-identity-token \ --audience "https://api.example.com" \ --signing-algorithm ES384 \ --duration-seconds 300 \ --tags Key=team,Value=data-engineering \ Key=environment,Value=production \ Key=cost-center,Value=analytics

AWS SDK für Python verwenden

import boto3 sts_client = boto3.client('sts') response = sts_client.get_web_identity_token( Audience=['https://api.example.com'], DurationSeconds=300, SigningAlgorithm='RS256', Tags=[ {'Key': 'team', 'Value': 'data-engineering'}, {'Key': 'environment', 'Value': 'production'}, {'Key': 'cost-center', 'Value': 'analytics'} ] ) token = response['WebIdentityToken']

Sie können das JWT auch dekodieren, um seinen Inhalt mit Standard-JWT-Bibliotheken wie PyJWT, Python-JOSE für Python, Nimbus JOSE+JWT für Java oder Debuggern wie jwt.io zu überprüfen. Grundlegendes zu Token-AnsprüchenWeitere Informationen zu den im Token enthaltenen Ansprüchen finden Sie unter.

Verwenden Sie das Token mit einem externen Dienst

Nachdem Sie das Token erhalten haben, fügen Sie es in Anfragen an den externen Dienst ein. Die Methode ist je nach Dienst unterschiedlich, aber die meisten Dienste akzeptieren Token im Authorization-Header. Der externe Dienst sollte eine Token-Validierungslogik implementieren, die die JWKS-Schlüssel vom bekannten Endpunkt Ihres Ausstellers abruft, die Signatur des Tokens überprüft und wichtige Ansprüche validiert, bevor der Zugriff auf Ihre Workloads gewährt wird. AWS

Rufen Sie Bestätigungsschlüssel und Metadaten von den OpenID Connect (OIDC) -Endpunkten ab

Die eindeutige Aussteller-URL für Ihr AWS Konto hostet die OpenID Connect (OIDC) Discovery-Endpunkte, die Bestätigungsschlüssel und Metadaten enthalten, die für die Tokenverifizierung erforderlich sind.

Die URL des OIDC-Discovery-Endpunkts enthält Metadaten, die einige Anbieter zur Überprüfung von Token verwenden. Sie ist verfügbar unter:

{issuer_url}/.well-known/openid-configuration

Der JWKS-Endpunkt (JSON Web Key Set) enthält Schlüssel, die zur Überprüfung von Tokensignaturen verwendet werden. Er ist verfügbar unter:

{issuer_url}/.well-known/jwks.json

Rufen Sie JWKS mit Curl ab

curl https://{issuer_url}/.well-known/jwks.json

Antwort:

{ "keys": [ { "kty": "EC", "use": "sig", "kid": "key-id-1", "alg": "ES384", "crv": "P-384", "x": "base64-encoded-x-coordinate", "y": "base64-encoded-y-coordinate" }, { "kty": "RSA", "use": "sig", "kid": "key-id-2", "n": "base64-encoded-modulus", "e": "AQAB" } ] }

AWS SDK für Python verwenden

import requests # Fetch Openid Configuration open_id_config_response = requests.get("https://{issuer_url}/.well-known/openid-configuration") open_id_config = open_id_config_response.json() # Fetch JWKS jwks_response = requests.get("https://{issuer_url}/.well-known/jwks.json") jwks = jwks_response.json()

Wir empfehlen, diese Schlüssel zwischenzuspeichern, um zu vermeiden, dass sie bei jeder Token-Überprüfung abgerufen werden.

Unerlässliche Validierungen von Ansprüchen

  • Betreff (Sub): Stellen Sie sicher, dass der Betreffanspruch das erwartete IAM-Prinzipal-ARN-Muster enthält.

  • Ablauf (exp): Stellen Sie sicher, dass das Token nicht abgelaufen ist. JWT-Bibliotheken behandeln dies normalerweise automatisch.

  • Zielgruppe (aud): Stellen Sie sicher, dass die Zielgruppe Ihrem erwarteten Wert entspricht. Dadurch wird verhindert, dass Token, die für andere Dienste bestimmt sind, mit Ihren verwendet werden.

  • Emittent (iss): Stellen Sie sicher, dass der Emittent mit den AWS Konten übereinstimmt, denen Sie vertrauen. Führen Sie eine Liste vertrauenswürdiger Emittenten. URLs

Wann immer möglich, sollten Sie zusätzliche AWS spezifische Behauptungen validieren, um eine differenzierte Zugriffskontrolle in Ihrem externen Dienst zu implementieren. Überprüfen Sie beispielsweise den Anspruch org_id, um den Zugriff auf IAM-Prinzipale in Ihrer AWS Organisation einzuschränken, aktivieren Sie principal_tags, um eine attributebasierte Zugriffskontrolle durchzusetzen (z. B. nur Produktionsumgebungen oder bestimmte Teams zuzulassen), oder überprüfen Sie Ansprüche im Sitzungskontext wie lambda_source_function_arn oder ec2_instance_source_vpc, um den Zugriff basierend auf der Rechenressource einzuschränken. Eine vollständige Liste der im Token enthaltenen Ansprüche finden Sie unter Grundlegendes zu Token-Ansprüchen.