

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 CloudFormation modello per creare un ruolo IAM federato SAML
<a name="tutorial_saml-federated-role"></a>

Se disponi di un provider di identità SAML (IdP) esistente configurato nel AWS tuo account, puoi creare ruoli IAM federati che si fidano di quell'IdP. Questo tutorial mostra come utilizzare un CloudFormation modello per creare un ruolo IAM federato SAML che può essere assunto dagli utenti autenticati tramite il tuo IdP esterno.

Il modello crea un ruolo IAM federato con una policy di attendibilità che consente all’IdP SAML di assumere tale ruolo. Gli utenti autenticati dal tuo IdP esterno possono assumere questo ruolo per accedere alle risorse AWS in base alle autorizzazioni associate al ruolo.

La risorsa implementata include i seguenti elementi:
+ Un ruolo IAM federato che ritiene attendibile il tuo IdP SAML esistente.
+ Policy gestite configurabili che possono essere associate al ruolo per concedere autorizzazioni specifiche.
+ Impostazioni facoltative del limite delle autorizzazioni e della durata della sessione.

## Prerequisiti
<a name="tutorial_saml-federated-role-prereqs"></a>

Questo tutorial presuppone che tu abbia a disposizione quanto segue:
+ Un IdP SAML esistente configurato nel AWS tuo account. Se non ne possiedi già uno, puoi crearlo utilizzando il tutorial [Tutorial IAM: utilizza un CloudFormation modello per creare un provider di identità SAML (IdP)](tutorial_saml-idp.md).
+ L’ARN del tuo IdP SAML, che dovrai specificare come parametro durante la creazione dello stack.
+ 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.

## Crea un ruolo federato SAML utilizzando CloudFormation
<a name="tutorial_saml-federated-role-create"></a>

Per creare il ruolo federato SAML, creerai un CloudFormation modello e lo utilizzerai per creare uno stack contenente il ruolo.

### Creazione del modello
<a name="tutorial_saml-federated-role-file"></a>

Per prima cosa, crea il modello. CloudFormation 

1. Nella sezione [Modello](#tutorial_saml-federated-role-template), fai clic sull’icona di copia nella scheda **JSON** o **YAML** per copiare i contenuti del modello.

1. Copia i contenuti del modello in un nuovo file.

1. Salva il file localmente.

### Creazione dello stack
<a name="tutorial_saml-federated-role-stack"></a>

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

1. Apri la CloudFormation console in [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Nella pagina **Stack**, scegli **Con nuove risorse (standard)** nel menu **Crea stack**.

1. Specifica il modello:

   1. In **Prerequisito**, seleziona **Scegli un modello esistente**.

   1. In **Specifica modello**, seleziona **Carica un file di modello**.

   1. Seleziona **Scegli file**, quindi passa al file del modello e selezionalo.

   1. Scegli **Next (Successivo)**.

1. Specifica i seguenti dettagli dello stack:

   1. Inserisci un nome dello stack.

   1. Per **SAMLProviderARN, inserisci l'ARN** del tuo IdP SAML esistente. Dovrebbe essere nel formato `arn:aws:iam::123456789012:saml-provider/YourProviderName`.

      Ad esempio: `arn:aws:iam::123456789012:saml-provider/CompanyIdP`
**Nota**  
Se hai creato il tuo IdP SAML utilizzando [Tutorial IAM: utilizza un CloudFormation modello per creare un provider di identità SAML (IdP)](tutorial_saml-idp.md) il tutorial, puoi trovare l'ARN del provider nella scheda Output di quello stack. CloudFormation

   1. Infatti **RoleName**, puoi lasciare vuoto questo campo per generare automaticamente un nome basato sul nome dello stack o inserire un nome personalizzato per il ruolo IAM.

      Esempio: `SAML-Developer-Access` o `SAML-ReadOnly-Role`

   1. Per gli altri parametri, accetta i valori predefiniti o inseriscine altri in base ai tuoi requisiti:
      + **RoleSessionDuration**- Durata massima della sessione in secondi (3600-43200, impostazione predefinita 7200)

        Esempio: `14400` (4 ore)
      + **RolePermissionsBoundary**- ARN opzionale di una politica sui limiti delle autorizzazioni

        Ad esempio: `arn:aws:iam::123456789012:policy/DeveloperBoundary`
      + **RolePath**- Percorso per il ruolo IAM (l'impostazione predefinita è/)

        Ad esempio: `/saml-roles/`
      + **ManagedPolicy1-5** - Possibilità ARNs di allegare fino a 5 policy gestite

        Esempio per ManagedPolicy 1: `arn:aws:iam::aws:policy/ReadOnlyAccess`

        Esempio per ManagedPolicy 2: `arn:aws:iam::123456789012:policy/CustomPolicy`

   1. Scegli **Next (Successivo)**.

1. Configura le opzioni dello stack:

   1. In **Opzioni di errore dello stack**, scegli **Elimina tutte le nuove risorse create**.
**Nota**  
Scegliendo questa opzione si evita di ricevere addebiti per risorse la cui policy di eliminazione specifica che devono essere mantenute anche se la creazione dello stack non riesce.

   1. Accetta tutti gli altri valori predefiniti.

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

   1. Scegli **Next (Successivo)**.

1. Rivedi i dettagli dello stack e scegli **Invia**.

CloudFormation crea lo stack. Una volta completata la creazione dello stack, le relative risorse 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à il seguente valore, che puoi visualizzare nella scheda **Output**:
+ **RoleARN**: l’ARN del ruolo IAM creato (ad esempio, `arn:aws:iam::123456789012:role/SAML-Developer-Access` o `arn:aws:iam::123456789012:role/stack-name-a1b2c3d4` se si utilizza un nome generato automaticamente).

Avrai bisogno di questo ARN del ruolo quando configuri il tuo IdP per inviare gli attributi SAML appropriati per l’assunzione del ruolo.

## Prova del ruolo federato SAML
<a name="tutorial_saml-federated-role-using"></a>

Una volta creato il ruolo federato SAML, puoi verificarne la configurazione e testare l’impostazione della federazione.

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

1. Nel riquadro di navigazione, seleziona **Ruoli**.

1. Trova e scegli il ruolo federato appena creato.

   Se hai fornito un nome di ruolo personalizzato, cerca quel nome. Se hai lasciato il RoleName parametro vuoto, il ruolo avrà un nome generato automaticamente basato sul nome dello stack e un identificatore univoco.

1. Scegli la scheda **Relazioni di attendibilità** per rivedere la policy di attendibilità.

   La policy di attendibilità dovrebbe mostrare che il tuo IdP SAML è affidabile per assumere questo ruolo a condizione che il pubblico SAML (`SAML:aud`) corrisponda a `https://signin.aws.amazon.com/saml`.

1. Scegli la scheda **Autorizzazioni** per esaminare le policy collegate.

   Puoi vedere tutte le policy gestite collegate al ruolo durante la creazione.

1. Prendi nota dell’**ARN del ruolo** visualizzato nella pagina di riepilogo del ruolo.

   Questo ARN ti servirà per configurare il tuo IdP esterno e consentire agli utenti di assumere questo ruolo.

Il tuo ruolo federato SAML è ora pronto per essere utilizzato. Configura il tuo IdP esterno per includere l'ARN di questo ruolo nelle asserzioni SAML e gli utenti autenticati potranno assumere questo ruolo per accedere alle risorse. AWS 

## Pulizia: eliminazione delle risorse
<a name="tutorial_saml-federated-role-delete"></a>

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

1. Apri la CloudFormation console.

1. Nella pagina **Stack**, scegli lo stack creato dal modello, poi scegli **Elimina**, quindi conferma con **Elimina**.

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

## CloudFormation dettagli del modello
<a name="tutorial_saml-federated-role-template-details"></a>

### Resources
<a name="tutorial_saml-federated-role-template-resources"></a>

Il CloudFormation modello di questo tutorial creerà la seguente risorsa nel tuo account:
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html): un ruolo IAM federato che può essere assunto dagli utenti autenticati tramite il tuo IdP SAML.

### Configurazione
<a name="tutorial_saml-federated-role-configuration"></a>

Il modello include i seguenti parametri configurabili:
+ **RoleName**- Nome del ruolo IAM (lasciare vuoto il campo per il nome generato automaticamente)
+ **SAMLProviderARN - ARN** dell'IdP SAML (obbligatorio)
+ **RoleSessionDuration**- Durata massima della sessione in secondi (3600-43200, impostazione predefinita 7200)
+ **RolePermissionsBoundary**- ARN opzionale della politica dei limiti delle autorizzazioni
+ **RolePath**- Percorso per il ruolo IAM (default/)
+ **ManagedPolicy1-5** - Possibilità ARNs di allegare fino a 5 policy gestite

## CloudFormation modello
<a name="tutorial_saml-federated-role-template"></a>

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-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'
```

------