IAM-Tutorial: Verwenden Sie eine CloudFormation-Vorlage, um einen SAML-Identitätsanbieter (IDP) zu erstellen. - AWS Identity and Access Management

IAM-Tutorial: Verwenden Sie eine CloudFormation-Vorlage, um einen SAML-Identitätsanbieter (IDP) zu erstellen.

Um den SAML-Verbund für Ihr AWS-Konto einzurichten, müssen Sie einen SAML-Identitätsanbieter (IDP) erstellen. In diesem Tutorial erfahren Sie, wie Sie mithilfe einer CloudFormation-Vorlage einen SAML-IDP erstellen, der Vertrauen zwischen AWS und Ihrem externen IDP herstellt.

Die Vorlage erstellt einen SAML-IDP, der mit dem Metadatendokument Ihres IDP konfiguriert ist. Föderierte IAM-Rollen können dann auf diesen IDP verweisen, um authentifizierten Benutzern von Ihrem externen IDP den Zugriff auf Ressourcen zu ermöglichen. AWS

Die bereitgestellte Ressource besteht aus einem SAML-IDP, der mit dem Metadatendokument Ihres IDP und optionalen Verschlüsselungseinstellungen konfiguriert ist.

Voraussetzungen

In diesem Tutorial wird davon ausgegangen, dass Folgendes bereits vorhanden ist:

  • Python 3.6 oder höher ist auf Ihrem lokalen Computer installiert, um den Python-Befehl auszuführen, der in diesem Tutorial zum Formatieren der XML-Datei für die SAML-Metadaten Ihres IDP verwendet wird.

  • Ein SAML-Metadatendokument von Ihrem externen IDP, das als XML-Datei gespeichert wurde.

Erstellen eines SAML-IDP mithilfe von CloudFormation

Um den SAML-IDP zu erstellen, erstellen Sie eine CloudFormation-Vorlage und verwenden diese, um einen Stack zu erstellen, der die IDP-Ressource enthält.

Erstellen der -Vorlage

Erstellen Sie zunächst die CloudFormation-Vorlage.

  1. Klicken Sie im Abschnitt „Vorlage“ auf das Kopiersymbol auf der Registerkarte JSON oder YAML, um den Inhalt der Vorlage zu kopieren.

  2. Fügen Sie den Inhalt der Vorlage in eine neue Datei ein.

  3. Speichern Sie die Datei lokal.

Erstellen Sie den -Stack

Verwenden Sie als Nächstes die Vorlage, die Sie gespeichert haben, um einen CloudFormation-Stack bereitzustellen.

  1. Öffnen Sie die CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation.

  2. Auf der Seite Stacks wählen Sie im Menü Stack erstellen die Option Mit neuen Ressourcen (Standard) aus.

  3. Festlegen der Vorlage:

    1. Wählen Sie unter Voraussetzung die Option Vorhandene Vorlage wählen aus.

    2. Wählen Sie unter Vorlage angeben die Option Eine Vorlagendatei hochladen aus.

    3. Klicken Sie auf Datei auswählen, navigieren Sie zur gewünschten Vorlagendatei und wählen Sie diese aus.

    4. Wählen Sie Weiter aus.

  4. Geben Sie die folgenden Stack-Details an:

    1. Geben Sie einen Stack-Namen ein.

    2. Sie können das Feld IdentityProviderName leer lassen, um automatisch einen Namen basierend auf dem Stack-Namen zu generieren, oder einen benutzerdefinierten Namen für Ihren SAML-IDP eingeben. Benutzerdefinierte Namen dürfen nur alphanumerische Zeichen, Punkte, Unterstriche und Bindestriche enthalten.

    3. Für IdentityProviderSAMLMetadataDocument müssen Sie Ihre XML-Datei für die SAML-Metadaten als einzelne Zeile formatieren, bevor Sie sie in dieses Feld einfügen. Dies ist erforderlich, da die CloudFormation-Konsole XML-Inhalte als eine einzelne Zeile erwartet, wenn sie über Konsolenparameter übergeben werden.

      Formatieren Sie Ihre XML-Datei mit dem folgenden Python-Befehl neu:

      python3 -c "import sys, re; content=open(sys.argv[1]).read(); print(re.sub(r'>\s+<', '><', content.replace('\n', '').replace('\r', '').strip()))" saml-metadata.xml
      Anmerkung

      Das SAML-Metadatendokument des IDP muss für die Eingabe von Konsolenparametern als einzelne Zeile formatiert werden. Der Python-Befehl entfernt Zeilenumbrüche und überflüssige Leerzeichen, um das erforderliche Format zu erstellen und gleichzeitig den ursprünglichen Inhalt und die ursprüngliche Struktur beizubehalten.

      Kopieren Sie die Ausgabe des Python-Befehls und fügen Sie sie in das Feld IdentityProviderSAMLMetadataDocument ein.

      Beispiel eines formatierten SAML-Metadatendokuments (gekürzt):

      <?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://portal.sso.example.com/saml/assertion/CompanyIdP"><md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><md:KeyDescriptor use="signing"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiIMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV...</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://portal.sso.example.com/saml/logout/CompanyIdP"/><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://portal.sso.example.com/saml/assertion/CompanyIdP"/></md:IDPSSODescriptor></md:EntityDescriptor>
    4. Akzeptieren Sie für andere Parameter die Standardwerte oder geben Sie je nach Ihren Anforderungen Ihre eigenen ein:

      • IdentityProviderAddPrivateKey: optionaler privater Schlüssel zum Entschlüsseln von SAML-Assertionen

      • IdentityProviderAssertionEncryptionMode: optional, legt den Verschlüsselungsmodus für SAML-Assertionen fest (zulässig, erforderlich oder leer)

    5. Wählen Sie Weiter aus.

  5. Konfigurieren der Stack-Optionen:

    1. Wählen Sie unter Optionen für Stack-Fehler die Option Löschen aller neu erstellten Ressourcen aus.

      Anmerkung

      Durch Auswahl dieser Option vermeiden Sie möglicherweise anfallende Kosten für Ressourcen, deren Löschrichtlinie deren Beibehaltung auch bei einem Fehler bei der Stack-Erstellung vorsieht.

    2. Akzeptieren Sie alle anderen Standardwerte.

    3. Aktivieren Sie unter Funktionen das Kontrollkästchen, um zu bestätigen, dass CloudFormation IAM-Ressourcen in Ihrem Konto erstellen darf.

    4. Wählen Sie Weiter aus.

  6. Überprüfen Sie die Stack-Details und klicken Sie auf Absenden.

CloudFormation erstellt den Stack. Sobald die Stack-Erstellung abgeschlossen ist, können die Stack-Ressourcen verwendet werden. Auf der Registerkarte Ressourcen der Stack-Detailseite können Sie die in Ihrem Konto bereitgestellten Ressourcen anzeigen.

Der Stack gibt die folgenden Werte aus, die Sie auf der Registerkarte Ausgaben einsehen können:

  • ProviderARN: der ARN des erstellten SAML-IDP (z. B. arn:aws:iam::123456789012:saml-provider/CompanyIdP). Sie benötigen diesen ARN, wenn Sie Rollen erstellen, die diesem Anbieter vertrauen.

  • ProviderName: der Name des erstellten SAML-IDP (z. B. CompanyIdP, wenn Sie einen benutzerdefinierten Namen angegeben haben oder my-saml-stack-saml-provider, wenn Sie die Standardbenennung verwendet haben).

Diese Ausgaben werden ebenfalls exportiert, sodass sie mithilfe der Fn::ImportValue-Funktion von anderen CloudFormation-Stacks importiert werden können.

Überprüfen des SAML-IDP

Sobald der SAML-IDP erstellt wurde, können Sie dessen Konfiguration überprüfen und dessen ARN für die Verwendung mit verbundenen Rollen notieren.

  1. Öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/.

  2. Wählen Sie im Navigationsbereich Identitätsanbieter.

    Ihr neu erstellter SAML-IDP sollte in der Liste angezeigt werden.

  3. Wählen Sie den IDP-Namen aus, um die Details anzuzeigen.

    Auf der IDP-Detailseite sehen Sie das SAML-Metadatendokument und weitere Konfigurationsdetails.

  4. Notieren Sie sich den auf der Detailseite angezeigten Provider-ARN.

    Sie benötigen diesen ARN, wenn Sie verbundene IAM-Rollen erstellen, die diesem IDP vertrauen.

  5. Überprüfen Sie das Metadatendokument, um sicherzustellen, dass es mit den Angaben übereinstimmt, die Sie von Ihrem externen IDP erhalten haben.

Ihr SAML-IDP kann jetzt von IAM-Rollen verwendet werden. Sie können Rollen erstellen, die diesem IDP vertrauen, damit authentifizierte Benutzer Ihres externen IDP diese Rollen übernehmen und auf AWS-Ressourcen zugreifen können.

Bereinigung: Ressourcen löschen

Im letzten Schritt löschen Sie den Stack und die darin enthaltenen Ressourcen.

  1. Öffnen Sie die CloudFormation-Konsole.

  2. Wählen Sie auf der Seite Stacks den aus der Vorlage erstellten Stack aus und klicken Sie auf Löschen. Bestätigen Sie dann mit Löschen.

    CloudFormation initiiert nun das Löschen des Stacks und aller darin enthaltenen Ressourcen.

Details zur CloudFormation-Vorlage

Ressourcen

Die Vorlage von CloudFormation für dieses Tutorial erstellt die folgende Ressource in Ihrem Konto:

AWS::IAM::SAMLProvider: ein SAML-IDP, der eine Vertrauensbasis zwischen AWS und Ihrem externen IDP aufbaut.

Konfiguration

Die Vorlage enthält die folgenden konfigurierbaren Parameter:

  • IdentityProviderName: Name des SAML-IDP (leer lassen für automatisch generierten Namen)

    Beispiel: CompanyIdP oder EnterpriseSSO

  • IdentityProviderSamlMetadataDocument: SAML-Metadatendokument von Ihrem externen IDP (als einzelne Zeile formatiert)

  • IdentityProviderAddPrivateKey: optionaler privater Schlüssel zum Entschlüsseln von SAML-Assertionen

  • IdentityProviderAssertionEncryptionMode: optional, legt den Verschlüsselungsmodus für SAML-Assertionen fest

CloudFormation-Vorlage

Speichern Sie den folgenden JSON- oder YAML-Code als separate Datei, um ihn als CloudFormation-Vorlage für dieses Tutorial zu verwenden.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "[AWSDocs] IAM: tutorial_saml-idp", "Parameters": { "IdentityProviderName": { "Type": "String", "Description": "Name of the SAML Identity Provider (leave empty for auto-generated name like '{StackName}-{UniqueId}')", "Default": "", "AllowedPattern": "^$|^[a-zA-Z0-9._-]+$", "ConstraintDescription": "Must be empty or contain only alphanumeric characters, periods, underscores, and hyphens" }, "IdentityProviderSAMLMetadataDocument": { "Type": "String", "Description": "SAML metadata document from identity provider" }, "IdentityProviderAddPrivateKey": { "Type": "String", "Description": "Optional private key for decrypting SAML assertions. The private key must be a .pem file that uses AES-GCM or AES-CBC encryption algorithm to decrypt SAML assertions.", "Default": "" }, "IdentityProviderAssertionEncryptionMode": { "Type": "String", "Description": "Optional, sets encryption mode for SAML assertions", "Default": "", "AllowedValues": ["", "Allowed", "Required"] } }, "Conditions": { "HasPrivateKey": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderAddPrivateKey"}, ""]}]}, "HasEncryptionMode": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderAssertionEncryptionMode"}, ""]}]}, "HasCustomName": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderName"}, ""]}]} }, "Resources": { "SAMLProvider": { "Type": "AWS::IAM::SAMLProvider", "Properties": { "Name": {"Fn::If": ["HasCustomName", {"Ref": "IdentityProviderName"}, {"Ref": "AWS::NoValue"}]}, "SamlMetadataDocument": {"Ref": "IdentityProviderSAMLMetadataDocument"}, "Tags": [ { "Key": "Name", "Value": {"Fn::If": ["HasCustomName", {"Ref": "IdentityProviderName"}, {"Fn::Sub": "${AWS::StackName}-saml-provider"}]} } ], "AddPrivateKey": {"Fn::If": ["HasPrivateKey", {"Ref": "IdentityProviderAddPrivateKey"}, {"Ref": "AWS::NoValue"}]}, "AssertionEncryptionMode": {"Fn::If": ["HasEncryptionMode", {"Ref": "IdentityProviderAssertionEncryptionMode"}, {"Ref": "AWS::NoValue"}]} } } }, "Outputs": { "ProviderARN": { "Description": "ARN of the created SAML Identity Provider", "Value": {"Ref": "SAMLProvider"}, "Export": { "Name": {"Fn::Sub": "${AWS::StackName}-ProviderARN"} } }, "ProviderName": { "Description": "Name of the SAML Identity Provider", "Value": {"Fn::If": ["HasCustomName", {"Ref": "IdentityProviderName"}, {"Fn::Sub": "${AWS::StackName}-saml-provider"}]}, "Export": { "Name": {"Fn::Sub": "${AWS::StackName}-ProviderName"} } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] IAM: tutorial_saml-idp' Parameters: IdentityProviderName: Type: String Description: Name of the SAML Identity Provider (leave empty for auto-generated name like '{StackName}-{UniqueId}') Default: "" AllowedPattern: '^$|^[a-zA-Z0-9._-]+$' ConstraintDescription: 'Must be empty or contain only alphanumeric characters, periods, underscores, and hyphens' IdentityProviderSAMLMetadataDocument: Type: String Description: SAML metadata document from identity provider IdentityProviderAddPrivateKey: Type: String Description: Optional private key for decrypting SAML assertions. The private key must be a .pem file that uses AES-GCM or AES-CBC encryption algorithm to decrypt SAML assertions. Default: "" IdentityProviderAssertionEncryptionMode: Type: String Description: Optional, sets encryption mode for SAML assertions Default: "" AllowedValues: - "" - "Allowed" - "Required" Conditions: HasPrivateKey: !Not [!Equals [!Ref IdentityProviderAddPrivateKey, ""]] HasEncryptionMode: !Not [!Equals [!Ref IdentityProviderAssertionEncryptionMode, ""]] HasCustomName: !Not [!Equals [!Ref IdentityProviderName, ""]] Resources: SAMLProvider: Type: 'AWS::IAM::SAMLProvider' Properties: Name: !If - HasCustomName - !Ref IdentityProviderName - !Ref AWS::NoValue SamlMetadataDocument: !Ref IdentityProviderSAMLMetadataDocument Tags: - Key: Name Value: !If - HasCustomName - !Ref IdentityProviderName - !Sub '${AWS::StackName}-saml-provider' AddPrivateKey: !If - HasPrivateKey - !Ref IdentityProviderAddPrivateKey - !Ref AWS::NoValue AssertionEncryptionMode: !If - HasEncryptionMode - !Ref IdentityProviderAssertionEncryptionMode - !Ref AWS::NoValue Outputs: ProviderARN: Description: 'ARN of the created SAML Identity Provider' Value: !Ref SAMLProvider Export: Name: !Sub '${AWS::StackName}-ProviderARN' ProviderName: Description: 'Name of the SAML Identity Provider' Value: !If - HasCustomName - !Ref IdentityProviderName - !Sub '${AWS::StackName}-saml-provider' Export: Name: !Sub '${AWS::StackName}-ProviderName'