IAM-Tutorial: Verwenden Sie eine AWS CloudFormation Vorlage, um einen SAML Identity Provider (IdP) zu erstellen - 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.

IAM-Tutorial: Verwenden Sie eine AWS CloudFormation Vorlage, um einen SAML Identity Provider (IdP) zu erstellen

Um den SAML-Verbund für Ihr AWS Konto einzurichten, müssen Sie einen SAML Identity Provider (IdP) erstellen. In diesem Tutorial erfahren Sie, wie Sie mithilfe einer AWS CloudFormation Vorlage einen SAML-IdP erstellen, der Vertrauen zwischen Ihrem externen IdP 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 SAML-Metadaten-XML-Datei Ihres IdP verwendet wird.

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

Erstellen Sie einen SAML-IdP mit AWS CloudFormation

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

Erstellen der -Vorlage

Erstellen Sie zunächst die Vorlage. CloudFormation

  1. Klicken Sie in Vorlage diesem Abschnitt auf der Registerkarte JSON oder YAML auf das Kopiersymbol, 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 AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

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

  3. Geben Sie die Vorlage an:

    1. Wählen Sie unter Voraussetzung die Option Eine bestehende Vorlage auswählen aus.

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

    3. Wählen Sie Datei auswählen, navigieren Sie zur Vorlagendatei und wählen Sie sie aus.

    4. Wählen Sie Weiter aus.

  4. Geben Sie die folgenden Stack-Details an:

    1. Geben Sie einen Stacknamen ein.

    2. Denn Sie können dieses Feld leer lassen IdentityProviderName, um automatisch einen Namen basierend auf dem Stacknamen 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 SAML-Metadaten-XML-Datei als eine einzelne Zeile formatieren, bevor Sie sie in dieses Feld einfügen. Dies ist erforderlich, da die CloudFormation Konsole erfordert, dass XML-Inhalt als eine einzelne Zeile formatiert wird, wenn er über Konsolenparameter übergeben wird.

      Verwenden Sie den folgenden Python-Befehl, um Ihre XML-Datei neu zu formatieren:

      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 als einzelne Zeile für die Eingabe von Konsolenparametern formatiert werden. Der Python-Befehl entfernt Zeilenumbrüche und zusätzliche Leerzeichen, um das erforderliche Format zu erstellen und gleichzeitig den gesamten ursprünglichen Inhalt und die ursprüngliche Struktur beizubehalten.

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

      Beispiel für ein formatiertes SAML-Metadatendokument (abgekü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 Ihre eigenen Werte ein, die Ihren Anforderungen entsprechen:

      • 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 Sie die Stack-Optionen:

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

      Anmerkung

      Wenn Sie diese Option wählen, wird Ihnen möglicherweise verhindert, dass Ihnen Ressourcen in Rechnung gestellt werden, deren Löschrichtlinie vorsieht, dass sie auch dann beibehalten werden, wenn die Stack-Erstellung fehlschlägt.

    2. Akzeptieren Sie alle anderen Standardwerte.

    3. Markieren Sie unter Funktionen das Kästchen, um zu bestätigen, dass CloudFormation dadurch IAM-Ressourcen in Ihrem Konto erstellt werden könnten.

    4. Wählen Sie Weiter aus.

  6. Überprüfen Sie die Stack-Details und wählen Sie Senden aus.

AWS CloudFormation erstellt den Stapel. Sobald die Stack-Erstellung abgeschlossen ist, sind die Stack-Ressourcen einsatzbereit. Sie können den Tab Ressourcen auf der Stack-Detailseite verwenden, um die Ressourcen anzuzeigen, die in Ihrem Konto bereitgestellt wurden.

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 Funktion von anderen AWS CloudFormation Stacks importiert werden können. Fn::ImportValue

Überprüfen Sie den SAML-IdP

Sobald der SAML-IdP erstellt wurde, können Sie seine Konfiguration überprüfen und seinen ARN für die Verwendung mit Verbundrollen notieren.

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

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

    Sie sollten Ihren neu erstellten SAML-IdP in der Liste sehen.

  3. Wählen Sie den IdP-Namen, um seine Details anzuzeigen.

    Auf der IdP-Detailseite können Sie das SAML-Metadatendokument und andere Konfigurationsdetails sehen.

  4. Notieren Sie sich den Provider-ARN, der auf der Detailseite angezeigt wird.

    Sie benötigen diesen ARN, wenn Sie föderierte IAM-Rollen erstellen, die diesem IdP vertrauen.

  5. Überprüfen Sie das Metadatendokument, um sicherzustellen, dass es mit dem übereinstimmt, was Sie von Ihrem externen IdP bereitgestellt haben.

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

Aufräumen: Ressourcen löschen

Als letzten Schritt löschen Sie den Stapel und die darin enthaltenen Ressourcen.

  1. Öffnen Sie die AWS CloudFormation Konsole.

  2. Wählen Sie auf der Seite Stacks den aus der Vorlage erstellten Stack aus, wählen Sie Löschen und bestätigen Sie dann Löschen.

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

CloudFormation Details zur Vorlage

Ressourcen

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

AWS::IAM::SAMLProvider: Ein SAML-IdP, der Vertrauen zwischen AWS und Ihrem externen IdP herstellt.

Konfiguration

Die Vorlage enthält die folgenden konfigurierbaren Parameter:

  • IdentityProviderName- Der Name für Ihren SAML-IdP (leer lassen für den automatisch generierten Namen)

    Beispiel: oder CompanyIdP EnterpriseSSO

  • IdentityProviderSAMLMetadataDokument — Das 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'