

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Tutorial IAM: Gunakan CloudFormation template untuk membuat peran IAM federasi SAMP
<a name="tutorial_saml-federated-role"></a>

Jika Anda memiliki Penyedia Identitas SAMP (IDP) yang sudah dikonfigurasi di akun AWS Anda, Anda dapat membuat peran IAM federasi yang mempercayai IDP tersebut. Tutorial ini menunjukkan cara menggunakan CloudFormation template untuk membuat peran IAM federasi SAMP yang dapat diasumsikan oleh pengguna yang diautentikasi melalui IDP eksternal Anda.

Template membuat peran IAM federasi dengan kebijakan kepercayaan yang memungkinkan IDP SAMP Anda untuk mengambil peran tersebut. Pengguna yang diautentikasi oleh iDP eksternal Anda dapat mengambil peran ini untuk AWS mengakses sumber daya berdasarkan izin yang dilampirkan pada peran tersebut.

Sumber daya yang digunakan terdiri dari yang berikut:
+ Peran IAM federasi yang mempercayai IDP SAMP Anda yang ada.
+ Kebijakan terkelola yang dapat dikonfigurasi yang dapat dilampirkan ke peran untuk memberikan izin tertentu.
+ Pengaturan batas izin opsional dan durasi sesi.

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

Tutorial ini mengasumsikan bahwa Anda telah melakukan hal berikut:
+ IDP SAMP yang sudah ada dikonfigurasi di AWS akun Anda. Jika Anda tidak memilikinya, Anda dapat membuatnya menggunakan [Tutorial IAM: Gunakan CloudFormation template untuk membuat Penyedia Identitas SAMP (iDP)](tutorial_saml-idp.md) tutorial.
+ ARN dari SAMP iDP Anda, yang harus Anda tentukan sebagai parameter saat membuat tumpukan.
+ Python 3.6 atau yang lebih baru diinstal pada mesin lokal Anda untuk menjalankan perintah Python yang digunakan dalam tutorial ini untuk memformat file XHTML metadata SAMP IDP Anda.

## Buat peran federasi SAMP menggunakan CloudFormation
<a name="tutorial_saml-federated-role-create"></a>

Untuk membuat peran federasi SAMP, Anda akan membuat CloudFormation template dan menggunakannya untuk membuat tumpukan yang berisi peran.

### Buattemplat
<a name="tutorial_saml-federated-role-file"></a>

Pertama, buat CloudFormation template.

1. Di [Templat](#tutorial_saml-federated-role-template) bagian ini, klik ikon salin pada tab **JSON** atau **YAMAL** untuk menyalin konten templat.

1. Tempelkan konten template ke file baru.

1. Simpan file secara lokal.

### Buat tumpukan
<a name="tutorial_saml-federated-role-stack"></a>

Selanjutnya, gunakan template yang telah Anda simpan untuk menyediakan CloudFormation tumpukan.

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Pada halaman **Stacks**, dari menu **Create stack**, pilih **dengan sumber daya baru (standar)**.

1. Tentukan template:

   1. Di bawah **Prasyarat**, pilih **Pilih templat yang ada**.

   1. Di bawah **Tentukan templat**, pilih **Unggah file templat**.

   1. Pilih **Pilih file**, navigasikan ke file template, dan pilih.

   1. Pilih **Berikutnya**.

1. Tentukan detail tumpukan berikut:

   1. Masukkan nama tumpukan.

   1. Untuk **SAMLProviderARN, masukkan ARN** dari IDP SAMP Anda yang ada. Ini harus dalam format`arn:aws:iam::123456789012:saml-provider/YourProviderName`.

      Contoh: `arn:aws:iam::123456789012:saml-provider/CompanyIdP`
**catatan**  
Jika Anda membuat SAMP IDP Anda menggunakan [Tutorial IAM: Gunakan CloudFormation template untuk membuat Penyedia Identitas SAMP (iDP)](tutorial_saml-idp.md) tutorial, Anda dapat menemukan penyedia ARN di tab Output dari tumpukan itu. CloudFormation

   1. Untuk **RoleName**, Anda dapat membiarkan ini kosong untuk menghasilkan nama secara otomatis berdasarkan nama tumpukan, atau memasukkan nama khusus untuk peran IAM.

      Contoh: `SAML-Developer-Access` atau `SAML-ReadOnly-Role`

   1. Untuk parameter lain, terima nilai default atau masukkan sendiri berdasarkan kebutuhan Anda:
      + **RoleSessionDuration**- Durasi sesi maksimum dalam hitungan detik (3600-43200, default 7200)

        Contoh: `14400` (4 jam)
      + **RolePermissionsBoundary**- ARN opsional dari kebijakan batas izin

        Contoh: `arn:aws:iam::123456789012:policy/DeveloperBoundary`
      + **RolePath**- Jalur untuk peran IAM (defaultnya adalah/)

        Contoh: `/saml-roles/`
      + **ManagedPolicy1-5** - Opsional ARNs hingga 5 kebijakan terkelola untuk dilampirkan

        Contoh untuk ManagedPolicy 1: `arn:aws:iam::aws:policy/ReadOnlyAccess`

        Contoh untuk ManagedPolicy 2: `arn:aws:iam::123456789012:policy/CustomPolicy`

   1. Pilih **Berikutnya**.

1. Konfigurasikan opsi tumpukan:

   1. Di bawah **Opsi kegagalan tumpukan**, pilih **Hapus semua sumber daya yang baru dibuat**.
**catatan**  
Memilih opsi ini mencegah Anda dari kemungkinan ditagih untuk sumber daya yang kebijakan penghapusan menentukan mereka dipertahankan bahkan jika pembuatan tumpukan gagal.

   1. Terima semua nilai default lainnya.

   1. Di bawah **Kemampuan**, centang kotak untuk mengetahui bahwa CloudFormation mungkin membuat sumber daya IAM di akun Anda.

   1. Pilih **Berikutnya**.

1. Tinjau detail tumpukan dan pilih **Kirim**.

CloudFormation menciptakan tumpukan. Setelah pembuatan tumpukan selesai, sumber daya tumpukan siap digunakan. Anda dapat menggunakan tab **Sumber Daya** di halaman detail tumpukan untuk melihat sumber daya yang disediakan di akun Anda.

Tumpukan akan menampilkan nilai berikut, yang dapat Anda lihat di tab **Output**:
+ **roLearn**: ARN dari peran IAM yang dibuat (misalnya, `arn:aws:iam::123456789012:role/SAML-Developer-Access` atau `arn:aws:iam::123456789012:role/stack-name-a1b2c3d4` jika menggunakan nama yang dibuat secara otomatis).

Anda akan memerlukan ARN peran ini saat mengonfigurasi IDP Anda untuk mengirim atribut SAMP yang sesuai untuk asumsi peran.

## Uji peran federasi SAMP
<a name="tutorial_saml-federated-role-using"></a>

Setelah peran federasi SAMP dibuat, Anda dapat memverifikasi konfigurasinya dan menguji pengaturan federasi.

1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di panel navigasi, pilih **Peran**.

1. Temukan dan pilih peran federasi Anda yang baru dibuat.

   Jika Anda memberikan nama peran khusus, cari nama itu. Jika Anda membiarkan RoleName parameter kosong, peran akan memiliki nama yang dibuat secara otomatis berdasarkan nama tumpukan dan pengidentifikasi unik.

1. Pilih tab **Hubungan kepercayaan** untuk meninjau kebijakan kepercayaan.

   Kebijakan kepercayaan harus menunjukkan bahwa IDP SAMP Anda dipercaya untuk mengambil peran ini dengan syarat bahwa audiens `SAML:aud` SAMP () cocok. `https://signin.aws.amazon.com/saml`

1. Pilih tab **Izin** untuk meninjau kebijakan terlampir.

   Anda dapat melihat kebijakan terkelola apa pun yang dilampirkan pada peran selama pembuatan.

1. Perhatikan **ARN Peran** yang ditampilkan di halaman ringkasan peran.

   Anda akan memerlukan ARN ini untuk mengonfigurasi iDP eksternal Anda agar pengguna dapat mengambil peran ini.

Peran federasi SAMP Anda sekarang siap digunakan. Konfigurasikan IDP eksternal Anda untuk menyertakan ARN peran ini dalam pernyataan SAMP, dan pengguna yang diautentikasi akan dapat mengambil peran ini untuk mengakses sumber daya. AWS 

## Bersihkan: hapus sumber daya
<a name="tutorial_saml-federated-role-delete"></a>

Sebagai langkah terakhir, Anda akan menghapus tumpukan dan sumber daya yang dikandungnya.

1. Buka CloudFormation konsol.

1. Pada halaman **Stacks**, pilih tumpukan yang dibuat dari templat, lalu pilih **Hapus**, lalu konfirmasikan **Hapus**.

   CloudFormation memulai penghapusan tumpukan dan semua sumber daya yang disertakan.

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

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

 CloudFormation Template untuk tutorial ini akan membuat sumber daya berikut di akun Anda:
+ [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): Peran IAM federasi yang dapat diasumsikan oleh pengguna yang diautentikasi melalui SAMP iDP Anda.

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

Template mencakup parameter yang dapat dikonfigurasi berikut:
+ **RoleName**- Nama Peran IAM (biarkan kosong untuk nama yang dihasilkan secara otomatis)
+ **SAMLProviderARN - ARN** dari SAMP iDP (wajib)
+ **RoleSessionDuration**- Durasi sesi maksimum dalam hitungan detik (3600-43200, default 7200)
+ **RolePermissionsBoundary**- ARN opsional kebijakan batas izin
+ **RolePath**- Jalur untuk peran IAM (default/)
+ **ManagedPolicy1-5** - Opsional ARNs hingga 5 kebijakan terkelola untuk dilampirkan

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

Simpan kode JSON atau YAMAL berikut sebagai file terpisah untuk digunakan sebagai CloudFormation template untuk tutorial ini.

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

------