IAM-Tutorial: Verwenden Sie eine AWS CloudFormation Vorlage, um eine SAML-föderierte IAM-Rolle 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 eine SAML-föderierte IAM-Rolle zu erstellen

Wenn Sie in Ihrem AWS Konto einen vorhandenen SAML Identity Provider (IdP) konfiguriert haben, können Sie föderierte IAM-Rollen erstellen, die diesem IdP vertrauen. In diesem Tutorial erfahren Sie, wie Sie mithilfe einer AWS CloudFormation Vorlage eine SAML-Verbund-IAM-Rolle erstellen, die von Benutzern übernommen werden kann, die über Ihren externen IdP authentifiziert wurden.

Die Vorlage erstellt eine föderierte IAM-Rolle mit einer Vertrauensrichtlinie, die es Ihrem SAML-IdP ermöglicht, die Rolle zu übernehmen. Benutzer, die von Ihrem externen IdP authentifiziert wurden, können diese Rolle übernehmen, um auf AWS Ressourcen zuzugreifen, basierend auf den mit der Rolle verknüpften Berechtigungen.

Die bereitgestellte Ressource besteht aus den folgenden Komponenten:

  • Eine föderierte IAM-Rolle, die Ihrem vorhandenen SAML-IdP vertraut.

  • Konfigurierbare verwaltete Richtlinien, die an die Rolle angehängt werden können, um bestimmte Berechtigungen zu gewähren.

  • Optionale Einstellungen für die Berechtigungsgrenze und die Sitzungsdauer.

Voraussetzungen

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

Erstellen Sie eine SAML-Verbundrolle mit AWS CloudFormation

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

Erstellen der -Vorlage

Erstellen Sie zunächst die CloudFormation Vorlage.

  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. Geben Sie für SAMLProviderARN den ARN Ihres vorhandenen SAML-IdP ein. Dies sollte im folgenden Format sein. arn:aws:iam::123456789012:saml-provider/YourProviderName

      Beispiel: arn:aws:iam::123456789012:saml-provider/CompanyIdP

      Anmerkung

      Wenn Sie Ihren SAML-IdP mithilfe des IAM-Tutorial: Verwenden Sie eine AWS CloudFormation Vorlage, um einen SAML Identity Provider (IdP) zu erstellen Tutorials erstellt haben, finden Sie den Provider-ARN auf der Registerkarte Ausgaben dieses CloudFormation Stacks.

    3. Denn Sie können dieses Feld leer lassen RoleName, um automatisch einen Namen basierend auf dem Stacknamen zu generieren, oder einen benutzerdefinierten Namen für die IAM-Rolle eingeben.

      Beispiel: oder SAML-Developer-Access SAML-ReadOnly-Role

    4. Akzeptieren Sie für andere Parameter die Standardwerte oder geben Sie Ihre eigenen Werte ein, die Ihren Anforderungen entsprechen:

      • RoleSessionDuration- Maximale Sitzungsdauer in Sekunden (3600-43200, Standard 7200)

        Beispiel: 14400 (4 Stunden)

      • RolePermissionsBoundary- Optionaler ARN einer Berechtigungsgrenzrichtlinie

        Beispiel: arn:aws:iam::123456789012:policy/DeveloperBoundary

      • RolePath— Pfad für die IAM-Rolle (Standard ist/)

        Beispiel: /saml-roles/

      • ManagedPolicy1-5 — Optional können bis ARNs zu 5 verwaltete Richtlinien angehängt werden

        Beispiel für ManagedPolicy 1: arn:aws:iam::aws:policy/ReadOnlyAccess

        Beispiel für ManagedPolicy 2: arn:aws:iam::123456789012:policy/CustomPolicy

    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 den folgenden Wert aus, den Sie auf der Registerkarte Ausgaben einsehen können:

  • RoleARN: Der ARN der erstellten IAM-Rolle (z. B. arn:aws:iam::123456789012:role/SAML-Developer-Access oder arn:aws:iam::123456789012:role/stack-name-a1b2c3d4 wenn ein automatisch generierter Name verwendet wird).

Sie benötigen diesen Rollen-ARN, wenn Sie Ihren IdP konfigurieren, um die entsprechenden SAML-Attribute für die Rollenübernahme zu senden.

Testen Sie die SAML-Verbundrolle

Sobald die SAML-Verbundrolle erstellt wurde, können Sie ihre Konfiguration überprüfen und die Verbundeinrichtung testen.

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

  2. Wählen Sie im Navigationsbereich Rollen.

  3. Suchen Sie Ihre neu erstellte Verbundrolle und wählen Sie sie aus.

    Wenn Sie einen benutzerdefinierten Rollennamen angegeben haben, suchen Sie nach diesem Namen. Wenn Sie den RoleName Parameter leer gelassen haben, hat die Rolle einen automatisch generierten Namen, der auf dem Stacknamen und einer eindeutigen Kennung basiert.

  4. Wählen Sie den Tab Vertrauensbeziehungen, um die Vertrauensrichtlinie zu überprüfen.

    Die Vertrauensrichtlinie sollte zeigen, dass Ihrem SAML-IdP vertraut wird, diese Rolle zu übernehmen, vorausgesetzt, dass die SAML-Zielgruppe () SAML:aud übereinstimmt. https://signin.aws.amazon.com/saml

  5. Wählen Sie den Tab „Berechtigungen“, um die angehängten Richtlinien zu überprüfen.

    Sie können alle verwalteten Richtlinien sehen, die der Rolle bei der Erstellung zugewiesen wurden.

  6. Notieren Sie sich den Rollen-ARN, der auf der Seite mit der Rollenzusammenfassung angezeigt wird.

    Sie benötigen diesen ARN, um Ihren externen IdP so zu konfigurieren, dass Benutzer diese Rolle übernehmen können.

Ihre SAML-Verbundrolle kann jetzt verwendet werden. Konfigurieren Sie Ihren externen IdP so, dass er den ARN dieser Rolle in SAML-Assertionen einbezieht, und authentifizierte Benutzer können diese Rolle übernehmen, um auf Ressourcen zuzugreifen. 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::Role: Eine föderierte IAM-Rolle, die von Benutzern übernommen werden kann, die über Ihren SAML-IdP authentifiziert wurden.

Konfiguration

Die Vorlage enthält die folgenden konfigurierbaren Parameter:

  • RoleName- Name der IAM-Rolle (leer lassen für den automatisch generierten Namen)

  • SAMLProviderARN — ARN des SAML-IdP (erforderlich)

  • RoleSessionDuration- Maximale Sitzungsdauer in Sekunden (3600-43200, Standard 7200)

  • RolePermissionsBoundary- Optionaler ARN der Grenzrichtlinie für Berechtigungen

  • RolePath— Pfad für die IAM-Rolle (Standard/)

  • ManagedPolicy1-5 — Optional können bis ARNs zu 5 verwaltete Richtlinien angehängt werden

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-federated-role", "Parameters": { "RoleName": { "Type": "String", "Description": "Name of the IAM Role (leave empty for auto-generated name like '{StackName}-{UniqueId}')", "Default": "", "AllowedPattern": "^$|^[\\w+=,.@-]{1,64}$", "ConstraintDescription": "Must be empty or 1-64 characters and can contain alphanumeric characters and +=,.@-" }, "SAMLProviderARN": { "Type": "String", "Description": "ARN of the SAML Identity Provider", "AllowedPattern": "^arn:aws:iam::\\d{12}:saml-provider/[a-zA-Z0-9._-]+$", "ConstraintDescription": "Must be a valid SAML provider ARN" }, "RoleSessionDuration": { "Type": "Number", "Description": "The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)", "MinValue": 3600, "MaxValue": 43200, "Default": 7200 }, "RolePermissionsBoundary": { "Type": "String", "Description": "Optional ARN of the permissions boundary policy (leave empty for none)", "Default": "" }, "RolePath": { "Type": "String", "Description": "Path for the IAM role (must start and end with /)", "Default": "/", "AllowedPattern": "^\/.*\/$|^\/$", "ConstraintDescription": "Role path must start and end with forward slash (/)" }, "RoleManagedPolicy1": { "Type": "String", "Description": "Optional managed policy ARN 1", "Default": "" }, "RoleManagedPolicy2": { "Type": "String", "Description": "Optional managed policy ARN 2", "Default": "" }, "RoleManagedPolicy3": { "Type": "String", "Description": "Optional managed policy ARN 3", "Default": "" }, "RoleManagedPolicy4": { "Type": "String", "Description": "Optional managed policy ARN 4", "Default": "" }, "RoleManagedPolicy5": { "Type": "String", "Description": "Optional managed policy ARN 5", "Default": "" } }, "Conditions": { "HasCustomRoleName": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleName"}, ""]}]}, "HasPermissionsBoundary": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RolePermissionsBoundary"}, ""]}]}, "HasPolicy1": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy1"}, ""]}]}, "HasPolicy2": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy2"}, ""]}]}, "HasPolicy3": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy3"}, ""]}]}, "HasPolicy4": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy4"}, ""]}]}, "HasPolicy5": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy5"}, ""]}]} }, "Resources": { "SAMLFederatedRole": { "Type": "AWS::IAM::Role", "Properties": { "RoleName": {"Fn::If": ["HasCustomRoleName", {"Ref": "RoleName"}, {"Ref": "AWS::NoValue"}]}, "Description": "IAM role with SAML provider trust", "MaxSessionDuration": {"Ref": "RoleSessionDuration"}, "PermissionsBoundary": {"Fn::If": ["HasPermissionsBoundary", {"Ref": "RolePermissionsBoundary"}, {"Ref": "AWS::NoValue"}]}, "Path": {"Ref": "RolePath"}, "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": {"Ref": "SAMLProviderARN"} }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml" } } } ] }, "ManagedPolicyArns": { "Fn::Split": [ ",", { "Fn::Join": [ ",", [ {"Fn::If": ["HasPolicy1", {"Ref": "RoleManagedPolicy1"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy2", {"Ref": "RoleManagedPolicy2"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy3", {"Ref": "RoleManagedPolicy3"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy4", {"Ref": "RoleManagedPolicy4"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy5", {"Ref": "RoleManagedPolicy5"}, {"Ref": "AWS::NoValue"}]} ] ] } ] } } } }, "Outputs": { "RoleARN": { "Description": "ARN of the created IAM Role", "Value": {"Fn::GetAtt": ["SAMLFederatedRole", "Arn"]}, "Export": { "Name": {"Fn::Sub": "${AWS::StackName}-RoleARN"} } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] IAM: tutorial_saml-federated-role' Parameters: RoleName: Type: String Description: 'Name of the IAM Role (leave empty for auto-generated name like ''{StackName}-{UniqueId}'')' Default: "" AllowedPattern: '^$|^[\w+=,.@-]{1,64}$' ConstraintDescription: 'Must be empty or 1-64 characters and can contain alphanumeric characters and +=,.@-' SAMLProviderARN: Type: String Description: 'ARN of the SAML Identity Provider' AllowedPattern: '^arn:aws:iam::\d{12}:saml-provider/[a-zA-Z0-9._-]+$' ConstraintDescription: 'Must be a valid SAML provider ARN' RoleSessionDuration: Type: Number Description: 'The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)' MinValue: 3600 MaxValue: 43200 Default: 7200 RolePermissionsBoundary: Type: String Description: Optional ARN of the permissions boundary policy (leave empty for none) Default: "" RolePath: Type: String Description: 'Path for the IAM role (must start and end with /)' Default: "/" AllowedPattern: '^\/.*\/$|^\/$' ConstraintDescription: 'Role path must start and end with forward slash (/)' RoleManagedPolicy1: Type: String Description: Optional managed policy ARN 1 Default: "" RoleManagedPolicy2: Type: String Description: Optional managed policy ARN 2 Default: "" RoleManagedPolicy3: Type: String Description: Optional managed policy ARN 3 Default: "" RoleManagedPolicy4: Type: String Description: Optional managed policy ARN 4 Default: "" RoleManagedPolicy5: Type: String Description: Optional managed policy ARN 5 Default: "" Conditions: HasCustomRoleName: !Not [!Equals [!Ref RoleName, ""]] HasPermissionsBoundary: !Not [!Equals [!Ref RolePermissionsBoundary, ""]] HasPolicy1: !Not [!Equals [!Ref RoleManagedPolicy1, ""]] HasPolicy2: !Not [!Equals [!Ref RoleManagedPolicy2, ""]] HasPolicy3: !Not [!Equals [!Ref RoleManagedPolicy3, ""]] HasPolicy4: !Not [!Equals [!Ref RoleManagedPolicy4, ""]] HasPolicy5: !Not [!Equals [!Ref RoleManagedPolicy5, ""]] Resources: SAMLFederatedRole: Type: 'AWS::IAM::Role' Properties: RoleName: !If - HasCustomRoleName - !Ref RoleName - !Ref AWS::NoValue Description: 'IAM role with SAML provider trust' MaxSessionDuration: !Ref RoleSessionDuration PermissionsBoundary: !If - HasPermissionsBoundary - !Ref RolePermissionsBoundary - !Ref AWS::NoValue Path: !Ref RolePath AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Federated: !Ref SAMLProviderARN Action: 'sts:AssumeRoleWithSAML' Condition: StringEquals: 'SAML:aud': 'https://signin.aws.amazon.com/saml' ManagedPolicyArns: !Split - ',' - !Join - ',' - - !If [HasPolicy1, !Ref RoleManagedPolicy1, !Ref 'AWS::NoValue'] - !If [HasPolicy2, !Ref RoleManagedPolicy2, !Ref 'AWS::NoValue'] - !If [HasPolicy3, !Ref RoleManagedPolicy3, !Ref 'AWS::NoValue'] - !If [HasPolicy4, !Ref RoleManagedPolicy4, !Ref 'AWS::NoValue'] - !If [HasPolicy5, !Ref RoleManagedPolicy5, !Ref 'AWS::NoValue'] Outputs: RoleARN: Description: 'ARN of the created IAM Role' Value: !GetAtt SAMLFederatedRole.Arn Export: Name: !Sub '${AWS::StackName}-RoleARN'