Tutorial IAM: utilizza un AWS CloudFormation modello per creare un provider di identità SAML (IdP) - AWS Identity and Access Management

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial IAM: utilizza un AWS CloudFormation modello per creare un provider di identità SAML (IdP)

Per configurare la federazione SAML per il tuo AWS account, devi creare un provider di identità SAML (IdP). Questo tutorial mostra come utilizzare un AWS CloudFormation modello per creare un IdP SAML che stabilisca la fiducia AWS tra e il tuo IdP esterno.

Il modello crea un IdP SAML configurato con il documento di metadati del tuo IdP. I ruoli IAM federati possono quindi fare riferimento a questo IdP per consentire agli utenti autenticati del tuo IdP esterno di accedere alle risorse. AWS

La risorsa distribuita è costituita da un IdP SAML configurato con il documento di metadati del tuo IdP e impostazioni di crittografia opzionali.

Prerequisiti

Questo tutorial presuppone che tu abbia a disposizione quanto segue:

  • Python 3.6 o versione successiva installato sul computer locale per eseguire il comando Python utilizzato in questo tutorial per formattare il file XML dei metadati SAML del tuo IdP.

  • Un documento di metadati SAML del tuo IdP esterno salvato come file XML.

Crea un IdP SAML utilizzando AWS CloudFormation

Per creare l'IdP SAML, creerai CloudFormation un modello e lo utilizzerai per creare uno stack contenente la risorsa IdP.

Crea il modello

Per prima cosa, crea il CloudFormation modello.

  1. Nella Modello sezione, fai clic sull'icona di copia nella scheda JSON o YAML per copiare il contenuto del modello.

  2. Incolla il contenuto del modello in un nuovo file.

  3. Salva il file localmente.

Creazione dello stack

Quindi, usa il modello che hai salvato per effettuare il provisioning di uno CloudFormation stack.

  1. Apri la AWS CloudFormation console in https://console.aws.amazon.com/cloudformation.

  2. Nella pagina Stacks, dal menu Crea stack, scegli con nuove risorse (standard).

  3. Specificate il modello:

    1. In Prerequisito, scegli Scegli un modello esistente.

    2. In Specificare il modello, scegli Carica un file modello.

    3. Scegli il file, vai al file modello e selezionalo.

    4. Scegli Next (Successivo).

  4. Specificate i seguenti dettagli dello stack:

    1. Immettete un nome per lo stack.

    2. Infatti IdentityProviderName, puoi lasciare vuoto questo campo per generare automaticamente un nome basato sul nome dello stack o inserire un nome personalizzato per il tuo IdP SAML. I nomi personalizzati devono contenere solo caratteri alfanumerici, punti, caratteri di sottolineatura e trattini.

    3. Per IdentityProviderSAMLMetadataDocument, devi formattare il file XML di metadati SAML come una singola riga prima di incollarlo in questo campo. Ciò è necessario perché la CloudFormation console richiede che il contenuto XML venga formattato come una singola riga quando viene passato attraverso i parametri della console.

      Usa il seguente comando Python per riformattare il tuo file XML:

      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
      Nota

      Il documento di metadati SAML dell'IdP deve essere formattato come una singola riga per l'immissione dei parametri della console. Il comando Python rimuove le interruzioni di riga e gli spazi bianchi aggiuntivi per creare il formato richiesto mantenendo tutto il contenuto e la struttura originali.

      Copia l'output dal comando Python e incollalo nel campo IdentityProviderSAMLMetadataDocumento.

      Esempio di documento di metadati SAML formattato (abbreviato):

      <?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. Per gli altri parametri, accetta i valori predefiniti o inserisci i tuoi in base alle tue esigenze:

      • IdentityProviderAddPrivateKey- Chiave privata opzionale per decrittografare le asserzioni SAML

      • IdentityProviderAssertionEncryptionMode- Facoltativo, imposta la modalità di crittografia per le asserzioni SAML (consentita, obbligatoria o vuota)

    5. Scegli Next (Successivo).

  5. Configura le opzioni dello stack:

    1. In Opzioni di errore dello stack, scegli Elimina tutte le risorse appena create.

      Nota

      La scelta di questa opzione evita che ti vengano addebitate le risorse la cui politica di eliminazione specifica che tali risorse vengano mantenute anche se la creazione dello stack fallisce.

    2. Accetta tutti gli altri valori predefiniti.

    3. In Capacità, seleziona la casella per confermare che CloudFormation potresti creare risorse IAM nel tuo account.

    4. Scegli Next (Successivo).

  6. Controlla i dettagli dello stack e scegli Invia.

AWS CloudFormation crea lo stack. Una volta completata la creazione dello stack, le risorse dello stack sono pronte per l'uso. Puoi utilizzare la scheda Risorse nella pagina dei dettagli dello stack per visualizzare le risorse che sono state fornite nel tuo account.

Lo stack produrrà i seguenti valori, che puoi visualizzare nella scheda Output:

  • providerARN: l'ARN dell'IdP SAML creato (ad esempio,). arn:aws:iam::123456789012:saml-provider/CompanyIdP Avrai bisogno di questo ARN per creare ruoli che si affidano a questo provider.

  • ProviderName: il nome dell'IdP SAML creato (ad esempioCompanyIdP, se hai specificato un nome personalizzato my-saml-stack-saml-provider o se hai utilizzato la denominazione predefinita).

Questi output vengono inoltre esportati, consentendo loro di essere importati da altri AWS CloudFormation stack utilizzando la funzione. Fn::ImportValue

Verifica l'IdP SAML

Una volta creato l'IdP SAML, puoi verificarne la configurazione e prendere nota del relativo ARN da utilizzare con i ruoli federati.

  1. Aprire la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel pannello di navigazione, scegli Identity providers (Provider di identità).

    Dovresti vedere il tuo IdP SAML appena creato nell'elenco.

  3. Scegli il nome dell'IdP per visualizzarne i dettagli.

    Nella pagina dei dettagli dell'IdP, puoi vedere il documento di metadati SAML e altri dettagli di configurazione.

  4. Nota il Provider ARN visualizzato nella pagina dei dettagli.

    Avrai bisogno di questo ARN per creare ruoli IAM federati che si fidano di questo IdP.

  5. Esamina il documento di metadati per assicurarti che corrisponda a quello che hai fornito dal tuo IdP esterno.

Il tuo IdP SAML è ora pronto per essere utilizzato dai ruoli IAM federati. Puoi creare ruoli che si fidano di questo IdP per consentire agli utenti autenticati del tuo IdP esterno di assumere tali ruoli e accedere alle risorse. AWS

Pulisci: elimina le risorse

Come passaggio finale, eliminerai lo stack e le risorse in esso contenute.

  1. Apri la AWS CloudFormation console.

  2. Nella pagina Pile, scegli lo stack creato dal modello, quindi scegli Elimina, quindi conferma Elimina.

    CloudFormation avvia l'eliminazione dello stack e di tutte le risorse che include.

CloudFormation dettagli del modello

Risorse

Il AWS CloudFormation modello di questo tutorial creerà la seguente risorsa nel tuo account:

AWS::IAM::SAMLProvider: un IdP SAML che stabilisce un rapporto di fiducia AWS tra e il tuo IdP esterno.

Configurazione

Il modello include i seguenti parametri configurabili:

  • IdentityProviderName- Il nome del tuo IdP SAML (lascia vuoto il nome generato automaticamente)

    Esempio: o CompanyIdP EnterpriseSSO

  • IdentityProviderSAMLMetadataDocumento: il documento di metadati SAML del tuo IdP esterno (formattato come una singola riga)

  • IdentityProviderAddPrivateKey- Chiave privata opzionale per decrittografare le asserzioni SAML

  • IdentityProviderAssertionEncryptionMode- Facoltativo, imposta la modalità di crittografia per le asserzioni SAML

CloudFormation modello

Salva il seguente codice JSON o YAML come file separato da utilizzare come CloudFormation modello per questo tutorial.

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'