

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

# Tutorial IAM
<a name="tutorials"></a>

Tutorial berikut menyajikan end-to-end prosedur lengkap untuk tugas-tugas umum untuk AWS Identity and Access Management (IAM). Tutorial ini dimaksudkan untuk lingkungan tipe lab, dengan nama perusahaan fiktif , nama pengguna fiktif, dan sebagainya. Tujuannya adalah untuk memberikan pedoman umum. Produk ini tidak dimaksudkan untuk penggunaan langsung di lingkungan produksi tanpa tinjauan dan adaptasi cermat untuk memenuhi kebutuhan unik di lingkungan organisasi Anda.

**Topics**
+ [Mendelegasikan akses di seluruh Akun AWS menggunakan peran](tutorial_cross-account-with-roles.md)
+ [Buat kebijakan terkelola pelanggan](tutorial_managed-policies.md)
+ [Gunakan kontrol akses berbasis atribut (ABAC)](tutorial_attribute-based-access-control.md)
+ [Mengizinkan pengguna mengelola kredensial dan pengaturan MFA mereka](tutorial_users-self-manage-mfa-and-creds.md)
+ [Buat SAMP iDP dengan CloudFormation](tutorial_saml-idp.md)
+ [Buat peran federasi SAMP dengan CloudFormation](tutorial_saml-federated-role.md)
+ [Buat SAMP iDP dan peran federasi dengan CloudFormation](tutorial_saml-idp-and-federated-role.md)

# Tutorial IAM: Delegasikan akses di seluruh AWS akun menggunakan peran IAM
<a name="tutorial_cross-account-with-roles"></a>

**penting**  
 [Praktik terbaik](best-practices.md) IAM merekomendasikan agar Anda mengharuskan pengguna manusia untuk menggunakan federasi dengan penyedia identitas untuk mengakses AWS menggunakan kredensil sementara alih-alih menggunakan pengguna IAM dengan kredensil jangka panjang. Kami menyarankan Anda hanya menggunakan pengguna IAM untuk [kasus penggunaan tertentu](gs-identities-iam-users.md) yang tidak didukung oleh pengguna federasi.

Tutorial ini mengajarkan Anda bagaimana menggunakan peran untuk mendelegasikan akses ke sumber daya yang berbeda Akun AWS disebut **Destination** and **Originating**. Anda berbagi sumber daya di satu akun dengan pengguna di akun yang berbeda. Dengan mengatur akses lintas akun dengan cara ini, Anda tidak perlu membuat pengguna IAM individual di setiap akun. Selain itu, pengguna tidak perlu keluar dari satu akun dan masuk ke akun lain untuk mengakses sumber daya yang berbeda Akun AWS. Setelah mengonfigurasi peran, Anda melihat cara menggunakan peran dari Konsol Manajemen AWS, the AWS CLI, dan API.

Dalam tutorial ini, akun **Tujuan** mengelola data aplikasi yang diakses oleh berbagai aplikasi dan tim. Di setiap akun, Anda menyimpan informasi aplikasi di ember Amazon S3. **Anda mengelola pengguna IAM di akun **Originating**, di mana Anda memiliki dua peran pengguna IAM: **Pengembang** dan Analis.** Pengembang dan Analis menggunakan akun **Originating** untuk menghasilkan data yang dibagikan oleh beberapa layanan mikro. Kedua peran memiliki izin untuk bekerja di akun Originating dan mengakses sumber daya di sana. Dari waktu ke waktu, pengembang harus memperbarui data bersama di akun **Tujuan**. Pengembang menyimpan data ini dalam ember Amazon S3 yang disebut. `amzn-s3-demo-bucket-shared-container` 

Di akhir tutorial ini, Anda memiliki hal berikut:
+ Pengguna di akun **Originating** (akun tepercaya) diizinkan untuk mengambil peran tertentu dalam akun **Tujuan**.
+ Peran di akun **Tujuan** (akun kepercayaan) diizinkan untuk mengakses bucket Amazon S3 tertentu. 
+ `amzn-s3-demo-bucket-shared-container`Bucket di akun **Tujuan**.

Pengembang dapat menggunakan peran dalam Konsol Manajemen AWS untuk mengakses `amzn-s3-demo-bucket-shared-container` bucket di akun **Destination**. Mereka juga dapat mengakses bucket dengan menggunakan panggilan API yang diautentikasi oleh kredensi sementara yang disediakan oleh peran. Upaya serupa oleh seorang Analis untuk menggunakan peran gagal.

Alur kerja ini memiliki tiga langkah dasar:

**[Membuat peran di Akun Tujuan](#tutorial_cross-account-with-roles-1)**  
Pertama, Anda menggunakan Konsol Manajemen AWS untuk membangun kepercayaan antara akun **Tujuan** (nomor ID 999999999999) dan akun **Originating** (nomor ID 1111111111). Anda mulai dengan membuat peran IAM bernama *UpdateData*. Saat membuat peran, Anda menentukan akun **Originating** sebagai entitas tepercaya dan menentukan kebijakan izin yang memungkinkan pengguna tepercaya memperbarui bucket. `amzn-s3-demo-bucket-shared-container`

**[Berikan akses ke peran tersebut](#tutorial_cross-account-with-roles-2)**  
Di bagian ini, Anda mengubah kebijakan peran untuk menolak akses Analis ke `UpdateData` peran tersebut. Karena Analis memiliki PowerUser akses dalam skenario ini, dan Anda harus secara eksplisit *menolak* kemampuan untuk menggunakan peran tersebut.

**[Akses uji dengan mengalihkan peran](#tutorial_cross-account-with-roles-3)**  
Terakhir, sebagai Pengembang, Anda menggunakan `UpdateData` peran untuk memperbarui `amzn-s3-demo-bucket-shared-container` bucket di akun **Tujuan**. Anda melihat cara mengakses peran melalui AWS konsol, the AWS CLI, dan API.

## Pertimbangan-pertimbangan
<a name="tutorial_cross-account-with-roles-considerations"></a>

Sebelum Anda menggunakan peran IAM untuk mendelegasikan akses sumber daya Akun AWS, penting untuk mempertimbangkan hal berikut:
+ Anda tidak dapat beralih ke peran ketika Anda masuk sebagai Pengguna root akun AWS.
+ Peran IAM dan kebijakan berbasis sumber daya mendelegasikan akses ke seluruh akun hanya dengan satu partisi. Misalnya, anggap saja Anda memiliki akun di AS Barat (California Utara) di partisi `aws` standar. Anda juga memiliki rekening di Tiongkok (Beijing) di partisi `aws-cn` tersebut. Anda tidak dapat menggunakan kebijakan berbasis sumber daya Amazon S3 di akun Anda di Tiongkok (Beijing) untuk mengizinkan akses bagi pengguna dalam akun standar `aws` Anda.
+ Anda dapat menggunakan AWS IAM Identity Center untuk memfasilitasi single sign-on (SSO) untuk eksternal Akun AWS (akun di luar Anda) menggunakan Security Assertion Markup Language (SALL AWS Organizations). Untuk detailnya, lihat [Mengintegrasikan eksternal Akun AWS ke dalam AWS IAM Identity Center untuk manajemen akses pusat dengan penagihan independen menggunakan SAFL 2.0](https://community.aws/content/2dIMI8N7w7tGxbE0KQMrkSBfae4/aws-iam-identity-center-integration-with-external-aws-accounts-for-independent-billing?lang=en) 
+ Anda dapat mengaitkan peran ke AWS sumber daya seperti instans atau fungsi Amazon EC2. AWS Lambda Lihat perinciannya di [Membuat peran untuk mendelegasikan izin ke layanan AWS](id_roles_create_for-service.md).
+ Jika Anda ingin aplikasi mengambil peran di aplikasi lain Akun AWS, Anda dapat menggunakan AWS SDK untuk asumsi peran lintas akun. Untuk informasi selengkapnya, lihat [Otentikasi dan akses](https://docs.aws.amazon.com//sdkref/latest/guide/access.html) di *Panduan Referensi Alat AWS SDKs dan Alat*.
+ Beralih peran menggunakan Konsol Manajemen AWS satu-satunya berfungsi dengan akun yang tidak memerlukan file`ExternalId`. Misalnya, Anda memberikan akses untuk akun Anda ke pihak ketiga dan memerlukan `ExternalId` dalam elemen `Condition` dalam kebijakan izin Anda. Dalam hal ini, pihak ketiga dapat mengakses akun Anda hanya dengan menggunakan AWS API atau alat baris perintah. Pihak ketiga tidak dapat menggunakan konsol karena harus memberikan nilai untuk`ExternalId`. Untuk informasi selengkapnya tentang skenario ini[Akses ke Akun AWS yang dimiliki oleh pihak ketiga](id_roles_common-scenarios_third-party.md), lihat, dan [Cara mengaktifkan akses lintas akun ke Konsol Manajemen AWS](https://aws.amazon.com/blogs/security/how-to-enable-cross-account-access-to-the-aws-management-console) dalam Blog AWS Keamanan.

## Prasyarat
<a name="tutorial_cross-account-with-roles-prereqs"></a>

Tutorial ini mengasumsikan bahwa Anda telah melakukan hal berikut:
+ **Dua** terpisah Akun AWS yang dapat Anda gunakan, satu untuk mewakili akun **Originating**, dan satu untuk mewakili akun **Tujuan**.
+ Pengguna dan peran dalam akun **Originating** dibuat dan dikonfigurasi sebagai berikut:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)
+ Anda tidak perlu membuat pengguna apa pun di akun **Tujuan**.
+ Bucket Amazon S3 yang dibuat di akun **Tujuan**. Anda dapat menyebutnya `amzn-s3-demo-bucket-shared-container` dalam tutorial ini, tetapi karena nama bucket S3 harus unik secara global, Anda harus menggunakan bucket dengan nama yang berbeda.

## Membuat peran di Akun Tujuan
<a name="tutorial_cross-account-with-roles-1"></a>

Anda dapat mengizinkan pengguna dari satu Akun AWS untuk mengakses sumber daya di sumber lain Akun AWS. Dalam tutorial ini, kita akan melakukan ini dengan membuat peran yang mendefinisikan siapa yang dapat mengaksesnya dan izin apa yang diberikannya kepada pengguna yang beralih ke sana.

Pada langkah tutorial ini, Anda membuat peran di akun **Tujuan** dan menentukan akun **Originating** sebagai entitas tepercaya. Anda juga membatasi izin peran untuk hanya membaca dan menulis akses ke `amzn-s3-demo-bucket-shared-container` bucket. Siapa pun yang diberi izin untuk menggunakan peran dapat membaca dan menulis ke `shared-container` ember.

Sebelum Anda dapat membuat peran, Anda memerlukan *ID akun* dari **Originating.** Akun AWS Masing-masing Akun AWS memiliki ID ID akun unik yang ditetapkan untuk itu.

**Untuk mendapatkan Originating ID Akun AWS**

1. Masuk ke Konsol Manajemen AWS sebagai administrator akun **Originating**, dan buka konsol IAM di. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. Di konsol IAM, pilih nama pengguna Anda di bilah navigasi di kanan atas. Biasanya terlihat seperti ini: ***username*@ *account\$1ID\$1number\$1or\$1alias***.

   **Untuk skenario ini, Anda dapat menggunakan ID akun 111111111111 untuk akun Originating.** Namun, Anda harus menggunakan ID akun yang valid jika Anda menggunakan skenario ini di lingkungan pengujian Anda.

**Untuk membuat peran di akun Tujuan yang dapat digunakan oleh akun Originating**

1. Masuk ke Konsol Manajemen AWS sebagai administrator akun **Tujuan**, dan buka konsol IAM.

1. Sebelum membuat peran, siapkan kebijakan terkelola yang menentukan izin untuk persyaratan peran. Anda kemudian perlu melampirkan kebijakan ini ke peran tersebut pada langkah berikutnya. 

   Anda ingin mengatur akses baca dan tulis ke bucket `amzn-s3-demo-bucket-shared-container`. Meskipun AWS menyediakan beberapa kebijakan terkelola Amazon S3, tidak ada satu pun yang menyediakan akses baca dan tulis ke satu bucket Amazon S3. Anda dapat membuat kebijakan Anda sendiri.

   Pada panel navigasi, silakan pilih **Kebijakan** dan kemudian pilih **Buat kebijakan**.

1. Pilih tab **JSON** dan salin teks dari dokumen kebijakan JSON berikut. Rekatkan teks ini ke dalam kotak teks **JSON**, ganti sumber daya ARN `arn:aws:s3:::shared-container` () dengan yang asli untuk bucket Amazon S3 Anda.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": "s3:ListAllMyBuckets",
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-shared-container"
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject"
         ],
         "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-shared-container/*"
       }
     ]
   }
   ```

------

   `ListAllMyBuckets`Tindakan tersebut memberikan izin untuk mencantumkan semua bucket yang dimiliki oleh pengirim permintaan yang diautentikasi. Izin `ListBucket` memungkinkan pengguna melihat objek dalam bucket `amzn-s3-demo-bucket-shared-container`. Izin `GetObject`, `PutObject`, `DeleteObject` memungkinkan pengguna melihat, memperbarui, dan menghapus konten di bucket `amzn-s3-demo-bucket-shared-container`.
**catatan**  
Anda dapat beralih antara opsi editor **Visual** dan **JSON** kapan saja. Namun, jika Anda melakukan perubahan atau memilih **Berikutnya** di editor **Visual**, IAM dapat merestrukturisasi kebijakan Anda untuk mengoptimalkannya bagi editor visual. Untuk informasi selengkapnya, lihat [Restrukturisasi kebijakan](troubleshoot_policies.md#troubleshoot_viseditor-restructure).

1. Pada halaman **Tinjau dan buat**, ketik **read-write-app-bucket** nama kebijakan. Tinjau izin yang diberikan oleh kebijakan Anda, lalu pilih **Buat kebijakan** untuk menyimpan pekerjaan Anda.

   Kebijakan baru muncul di daftar kebijakan terkelola.

1. Pada panel navigasi, silakan pilih **Peran** lalu pilih **Buat peran**.

1. Pilih tipe ** Akun AWS peran**.

1. Untuk **Account ID, ketik** **Originating** Account ID.

   Tutorial ini menggunakan contoh ID akun **111111111111** untuk akun **Originating**. Anda harus menggunakan ID akun yang valid. Jika Anda menggunakan ID akun yang tidak valid, seperti **111111111111**, IAM tidak mengizinkan Anda membuat peran baru.

   Untuk saat ini, Anda tidak perlu memerlukan ID eksternal, atau mewajibkan pengguna untuk memiliki Multi-Factor Authentication (MFA) untuk menjalankan peran tersebut. Biarkan opsi ini tidak dipilih. Untuk informasi selengkapnya, lihat [AWS Otentikasi multi-faktor di IAM](id_credentials_mfa.md).

1. Pilih **Berikutnya: Izin** untuk mengatur izin yang terkait dengan peran.

1. Pilih kotak centang di samping kebijakan yang Anda buat sebelumnya.
**Kiat**  
Untuk **Filter**, pilih **Pelanggan berhasil** memfilter daftar agar hanya menyertakan kebijakan yang Anda buat. Ini menyembunyikan kebijakan yang AWS dibuat dan membuatnya lebih mudah untuk menemukan yang Anda butuhkan.

   Lalu, pilih **Selanjutnya**. 

1. (Opsional) Tambahkan metadata ke peran dengan melampirkan tag sebagai pasangan nilai kunci. Untuk informasi selengkapnya tentang menggunakan tanda di IAM, lihat [Tag untuk AWS Identity and Access Management sumber daya](id_tags.md).

1. (Opsional) Untuk **Deskripsi**, masukkan deskripsi untuk peran baru ini.

1. Setelah meninjau peran, klik **Buat peran**.

    

   Peran `UpdateData` muncul di daftar peran.

Sekarang Anda harus mendapatkan Nama Sumber Daya Amazon (ARN) dari peran tersebut, pengidentifikasi unik untuk peran tersebut. Saat Anda mengubah peran Pengembang di akun Originating, Anda menentukan peran ARN dari akun Tujuan untuk memberikan atau menolak izin.

**Untuk mendapatkan ARN untuk UpdateData**

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

1. Dalam daftar peran, pilih peran `UpdateData`.

1. Di bagian **Ringkasan** di panel perincian, salin nilai **ARN Peran**.

   Akun Tujuan memiliki ID akun 99999999999999, jadi peran ARN adalah. `arn:aws:iam::999999999999:role/UpdateData` Pastikan Anda memberikan Akun AWS ID asli untuk akun Tujuan.

Pada titik ini, Anda telah membangun kepercayaan antara akun **Tujuan** dan **Asal**. Anda melakukan ini dengan membuat peran di akun **Tujuan** yang mengidentifikasi akun **Originating** sebagai prinsipal tepercaya. Anda juga menentukan apa yang dapat dilakukan oleh pengguna yang beralih ke `UpdateData` peran tersebut.

Selanjutnya, ubah izin untuk peran Pengembang.

## Berikan akses ke peran tersebut
<a name="tutorial_cross-account-with-roles-2"></a>

Pada titik ini, baik Analis dan Pengembang memiliki izin yang memungkinkan mereka mengelola data di akun **Originating**. Gunakan langkah-langkah berikut yang diperlukan untuk menambahkan izin agar dapat beralih ke peran.

**Untuk memodifikasi peran Pengembang agar mereka dapat beralih ke UpdateData peran**

1. Masuk sebagai administrator di akun **Originating**, dan buka konsol IAM.

1. Pilih **Peran**, lalu pilih **Pengembang**.

1. Pilih tab **Permissions** (Izin), pilih **Add permissions** (Tambahkan izin), lalu pilih **Create inline policy** (Membuat kebijakan inline).

1. Pilih tab **JSON**.

1. Tambahkan pernyataan kebijakan berikut untuk mengizinkan `AssumeRole` tindakan pada `UpdateData` peran di akun Tujuan. Pastikan bahwa Anda mengubah *DESTINATION-ACCOUNT-ID* `Resource` elemen ke Akun AWS ID aktual dari akun Tujuan.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": "sts:AssumeRole",
           "Resource": "arn:aws:iam::111122223333:role/UpdateData"
       }
   }
   ```

------

   `Allow`Efeknya secara eksplisit memungkinkan grup Pengembang mengakses `UpdateData` peran di akun Tujuan. Setiap pengembang yang mencoba mengakses peran berhasil.

1. Pilih **Tinjau kebijakan**.

1. Ketik **Nama** seperti**allow-assume-S3-role-in-destination**.

1. Pilih **Buat kebijakan**.

Di sebagian besar lingkungan, Anda mungkin tidak memerlukan prosedur berikut. Namun, jika Anda menggunakan PowerUserAccess izin, maka beberapa grup mungkin sudah dapat beralih peran. Prosedur berikut menunjukkan cara menambahkan `"Deny"` izin ke grup Analis untuk memastikan bahwa mereka tidak dapat mengambil peran tersebut. Jika Anda tidak memerlukan prosedur ini di lingkungan Anda, maka kami sarankan Anda tidak menambahkannya. `"Deny"`izin membuat gambaran perizinan keseluruhan lebih rumit untuk dikelola dan dipahami. Gunakan `"Deny"` izin hanya jika Anda tidak memiliki opsi yang lebih baik.

**Untuk memodifikasi peran Analis untuk menolak izin untuk mengambil `UpdateData` peran**

1. Pilih **Peran**, lalu pilih **Analis**.

1. Pilih tab **Permissions** (Izin), pilih **Add permissions** (Tambahkan izin), lalu pilih **Create inline policy** (Membuat kebijakan inline).

1. Pilih tab **JSON**.

1. Tambahkan pernyataan kebijakan berikut untuk menolak tindakan `AssumeRole` di peran `UpdateData`. Pastikan bahwa Anda mengubah *DESTINATION-ACCOUNT-ID* `Resource` elemen ke Akun AWS ID aktual dari akun Tujuan.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Deny",
           "Action": "sts:AssumeRole",
           "Resource": "arn:aws:iam::111122223333:role/UpdateData"
       }
   }
   ```

------

   `Deny`Efeknya secara eksplisit menyangkal akses grup Analis ke `UpdateData` peran dalam akun Tujuan. Setiap analis yang mencoba mengakses peran menerima pesan yang ditolak akses.

1. Pilih **Tinjau kebijakan**.

1. Ketik **Nama** seperti**deny-assume-S3-role-in-destination**.

1. Pilih **Buat kebijakan**.

Peran Pengembang sekarang memiliki izin untuk menggunakan `UpdateData` peran di akun Tujuan. Peran analis dicegah dari menggunakan `UpdateData` peran tersebut.

Selanjutnya, Anda dapat melihat bagaimana David, seorang pengembang, dapat mengakses `amzn-s3-demo-bucket-shared-container` bucket di akun Tujuan. David dapat mengakses bucket dari Konsol Manajemen AWS, the AWS CLI, atau AWS API.

## Akses uji dengan mengalihkan peran
<a name="tutorial_cross-account-with-roles-3"></a>

Setelah menyelesaikan dua langkah pertama tutorial ini, Anda memiliki peran yang memberikan akses ke sumber daya di akun **Tujuan**. Anda juga memiliki satu peran di akun **Originating** dengan pengguna diizinkan untuk menggunakan peran itu. Langkah ini membahas cara menguji peralihan ke peran itu dari Konsol Manajemen AWS, the AWS CLI, dan AWS API.

Untuk mendapatkan bantuan terkait masalah umum yang mungkin Anda temui saat bekerja dengan peran IAM, lihat[Memecahkan masalah peran IAM](troubleshoot_roles.md).

### Beralih peran (konsol)
<a name="switch-tutorial_cross-account-with-roles"></a>

Jika David perlu memperbarui data di akun **Destination** di Konsol Manajemen AWS, ia dapat melakukannya dengan menggunakan **Switch Role**. Dia menentukan ID akun atau alias dan nama peran, dan izinnya segera dialihkan kepada mereka yang diizinkan oleh peran tersebut. Dia kemudian dapat menggunakan konsol untuk bekerja dengan `amzn-s3-demo-bucket-shared-container` ember, tetapi tidak dapat bekerja dengan sumber daya lain di **Destination**. **Sementara David menggunakan peran itu, dia juga tidak dapat memanfaatkan hak istimewa penggunanya di akun Originating.** Itu karena hanya satu set izin yang dapat berlaku pada satu waktu.

IAM menyediakan dua cara yang dapat digunakan David untuk masuk ke halaman **Switch Role**:
+ David menerima tautan dari administrator mereka yang menunjuk ke konfigurasi Switch Role yang telah ditentukan sebelumnya. Tautan ini diberikan ke administrator di halaman terakhir dari panduan **Buat peran** atau pada halaman **Ringkasan Peran** untuk peran lintas akun. Memilih tautan ini membawa David ke halaman **Alihkan Peran** dengan bidang **ID Akun** dan **Nama peran** yang sudah diisi. Yang perlu dilakukan David adalah memilih **Switch Roles**.
+ Administrator tidak mengirim tautan di surel, tetapi mengirim nilai **ID Akun** dan **Nama Peran**. Untuk beralih peran, David harus memasukkan nilai secara manual. Hal ini digambarkan dalam prosedur berikut.

**Untuk mengambil peran**

1. David masuk ke Konsol Manajemen AWS menggunakan pengguna normalnya di akun **Originating**.

1. Mereka memilih tautan yang dikirim melalui email administrator kepada mereka. Ini membawa David ke halaman **Beralih Peran** dengan ID akun atau alias dan informasi nama peran yang sudah diisi.

   — atau —

   David memilih nama mereka (menu Identity) pada bilah navigasi, dan kemudian memilih **Switch** Roles. 

   Jika ini adalah pertama kalinya David mencoba mengakses halaman Switch Role dengan cara ini, dia pertama kali mendarat di halaman **Switch Role** yang dijalankan pertama kali. Halaman ini memberikan informasi tambahan tentang bagaimana peralihan peran dapat memungkinkan pengguna untuk mengelola sumber daya Akun AWS. David harus memilih **Switch Role** di halaman ini untuk menyelesaikan sisa prosedur ini.

1. Selanjutnya, untuk mengakses peran, David harus secara manual mengetikkan nomor ID akun Tujuan (`999999999999`) dan nama peran (`UpdateData`).

   Selain itu, David ingin memantau peran dan izin terkait yang saat ini aktif di IAM. Untuk melacak informasi ini, dia mengetik `Destination` di kotak teks **Display Nama** (Nama Tampilan), memilih opsi warna merah, lalu memilih **Switch Role** (Alihkan Peran).

1. Sekarang, David dapat menggunakan konsol Amazon S3 untuk bekerja menggunakan bucket Amazon S3 atau sumber daya lain yang peran `UpdateData`nya memiliki izin.

1. Setelah selesai, David dapat kembali ke izin aslinya. Untuk melakukan itu, mereka memilih nama tampilan peran **Tujuan** pada bilah navigasi dan kemudian memilih **Kembali ke David @ 1111111111**.

1. Lain kali David ingin beralih peran dan memilih menu **Identitas** di bilah navigasi, dia melihat entri Tujuan masih ada dari terakhir kali. Dia cukup memilih entri itu untuk segera beralih peran tanpa memasukkan kembali ID akun dan nama peran.

### Beralih peran (AWS CLI)
<a name="switch-cli-tutorial_cross-account-with-roles"></a>

 Jika David perlu bekerja di lingkungan **Tujuan** di baris perintah, dia dapat melakukannya dengan menggunakan file [AWS CLI](https://aws.amazon.com/cli/). Dia menjalankan perintah `aws sts assume-role` dan meneruskan peran ARN untuk mendapatkan kredensial keamanan sementara untuk peran tersebut. Dia kemudian mengonfigurasi kredensil tersebut dalam variabel lingkungan sehingga AWS CLI perintah selanjutnya bekerja menggunakan izin peran. Sementara David menggunakan peran tersebut, ia tidak dapat menggunakan hak istimewa penggunanya di akun **Originating**, karena hanya satu set izin yang dapat berlaku pada satu waktu.

Perhatikan bahwa semua access key dan token hanyalah contoh dan tidak dapat digunakan seperti yang ditunjukkan. Ganti dengan nilai yang sesuai dari lingkungan langsung Anda.

**Untuk mengambil peran**

1. David membuka jendela command prompt, dan mengonfirmasi bahwa AWS CLI klien bekerja dengan menjalankan perintah:

   ```
   aws help
   ```
**catatan**  
Lingkungan default David menggunakan kredensial pengguna `David` dari profil default yang ia buat dengan perintah `aws configure`. Untuk informasi lebih lanjut, lihat [Mengonfigurasi AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-quick-configuration) di *Panduan Pengguna AWS Command Line Interface *.

1. Dia memulai proses peralihan peran dengan menjalankan perintah berikut untuk beralih ke `UpdateData` peran di akun **Tujuan**. Dia menerima peran ARN dari administrator yang menciptakan peran tersebut. Perintah ini mengharuskan Anda memberikan nama sesi, Anda juga dapat memilih teks apa pun yang Anda suka untuk itu.

   ```
   aws sts assume-role --role-arn "arn:aws:iam::999999999999:role/UpdateData" --role-session-name "David-ProdUpdate"
   ```

   David kemudian melihat hal-hal berikut di output:

   ```
   {
       "Credentials": {
           "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
           "SessionToken": "AQoDYXdzEGcaEXAMPLE2gsYULo+Im5ZEXAMPLEeYjs1M2FUIgIJx9tQqNMBEXAMPLE
   CvSRyh0FW7jEXAMPLEW+vE/7s1HRpXviG7b+qYf4nD00EXAMPLEmj4wxS04L/uZEXAMPLECihzFB5lTYLto9dyBgSDy
   EXAMPLE9/g7QRUhZp4bqbEXAMPLENwGPyOj59pFA4lNKCIkVgkREXAMPLEjlzxQ7y52gekeVEXAMPLEDiB9ST3Uuysg
   sKdEXAMPLE1TVastU1A0SKFEXAMPLEiywCC/Cs8EXAMPLEpZgOs+6hz4AP4KEXAMPLERbASP+4eZScEXAMPLEsnf87e
   NhyDHq6ikBQ==",
           "Expiration": "2014-12-11T23:08:07Z",
           "AccessKeyId": "AKIAIOSFODNN7EXAMPLE"
       }
   }
   ```

1. David melihat tiga bagian yang mereka butuhkan di bagian Credentials dari output.
   + `AccessKeyId`
   + `SecretAccessKey`
   + `SessionToken`

   David perlu mengkonfigurasi AWS CLI lingkungan untuk menggunakan parameter ini dalam panggilan berikutnya. Untuk informasi tentang berbagai cara mengonfigurasi kredensial Anda, lihat [Mengonfigurasi AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#config-settings-and-precedence). Anda tidak dapat menggunakan perintah `aws configure` karena ia tindak mendukung perekaman token sesi. Namun, Anda dapat memasukkan informasi secara manual ke dalam file konfigurasi. Karena ini adalah kredensial sementara dengan waktu kedaluwarsa yang relatif singkat, paling mudah menambahkannya ke lingkungan sesi baris perintah Anda saat ini.

1. Untuk menambahkan tiga nilai ke lingkungan, David memotong dan menempelkan output langkah sebelumnya ke perintah berikutnya. Anda mungkin ingin memotong dan menempel ke dalam editor teks sederhana untuk mengatasi masalah line wrap dalam output token sesi. Ia harus ditambahkan sebagai satu string panjang, meskipun line wrap ditampilkan di sini untuk kejelasan.

   Contoh berikut menunjukkan perintah yang diberikan di lingkungan Windows, di mana “set” adalah perintah untuk membuat variabel lingkungan. Di komputer Linux atau macOS, Anda akan menggunakan perintah “ekspor” sebagai gantinya. Semua bagian contoh lainnya valid di ketiga lingkungan.

   Untuk detail tentang menggunakan Alat untuk Windows Powershell, lihat [Beralih ke peran IAM (Alat untuk Windows PowerShell)](id_roles_use_switch-role-twp.md)

   ```
   set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
   set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   set AWS_SESSION_TOKEN=AQoDYXdzEGcaEXAMPLE2gsYULo+Im5ZEXAMPLEeYjs1M2FUIgIJx9tQqNMBEXAMPLECvS
   Ryh0FW7jEXAMPLEW+vE/7s1HRpXviG7b+qYf4nD00EXAMPLEmj4wxS04L/uZEXAMPLECihzFB5lTYLto9dyBgSDyEXA
   MPLEKEY9/g7QRUhZp4bqbEXAMPLENwGPyOj59pFA4lNKCIkVgkREXAMPLEjlzxQ7y52gekeVEXAMPLEDiB9ST3UusKd
   EXAMPLE1TVastU1A0SKFEXAMPLEiywCC/Cs8EXAMPLEpZgOs+6hz4AP4KEXAMPLERbASP+4eZScEXAMPLENhykxiHen
   DHq6ikBQ==
   ```

   Pada titik ini, setiap perintah berikut dijalankan di bawah izin peran yang diidentifikasi oleh kredensial tersebut. Dalam kasus David, peran `UpdateData`.
**penting**  
Anda dapat menyimpan pengaturan konfigurasi dan kredensional yang sering digunakan dalam file yang dikelola oleh file. AWS CLI Untuk informasi selengkapnya, lihat [Menggunakan file konfigurasi dan kredensial yang ada](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-existing) di *AWS Command Line Interface Panduan Pengguna*. 

1. Jalankan perintah untuk mengakses sumber daya di akun Tujuan. Dalam contoh ini, David mencantumkan isi bucket S3 mereka dengan perintah berikut.

   ```
   aws s3 ls s3://shared-container
   ```

   Karena nama bucket Amazon S3 unik secara universal, tidak perlu menentukan ID akun yang memiliki bucket. Untuk mengakses sumber daya untuk AWS layanan lain, lihat AWS CLI dokumentasi untuk layanan tersebut untuk perintah dan sintaks yang diperlukan untuk mereferensikan sumber dayanya.

### Menggunakan AssumeRole (AWS API)
<a name="api-tutorial_cross-account-with-roles"></a>

Ketika David perlu membuat pembaruan ke akun **Tujuan** dari kode, dia membuat `AssumeRole` panggilan untuk mengambil `UpdateData` peran. Panggilan mengembalikan kredensi sementara yang dapat dia gunakan untuk mengakses `amzn-s3-demo-bucket-shared-container` bucket di akun **Tujuan**. Dengan kredensial tersebut, David dapat melakukan panggilan API untuk memperbarui bucket `amzn-s3-demo-bucket-shared-container`. **Namun, dia tidak dapat melakukan panggilan API untuk mengakses sumber daya lain di akun **Tujuan**, meskipun dia memiliki izin pengguna daya di akun Originating.**

**Untuk mengambil peran**

1. David memanggil `AssumeRole` sebagai bagian dari aplikasi. Mereka harus menentukan `UpdateData` ARN:. `arn:aws:iam::999999999999:role/UpdateData`

   Respond dari panggilan `AssumeRole` mencakup kredensial sementara dengan `AccessKeyId` dan `SecretAccessKey`. Informasi ini juga mencakup waktu `Expiration` yang menunjukkan kapan kredensial kedaluwarsa dan Anda harus meminta yang baru. Saat Anda mengatur rantai peran dengan AWS SDK, banyak penyedia kredensi secara otomatis menyegarkan kredensil sebelum kedaluwarsa.

1. Dengan kredensial sementara, David membuat panggilan `s3:PutObject` untuk memperbarui bucket `amzn-s3-demo-bucket-shared-container`. Mereka akan meneruskan kredensil ke panggilan API sebagai parameter. `AuthParams` Karena kredenal peran sementara hanya memiliki akses baca dan tulis ke `amzn-s3-demo-bucket-shared-container` bucket, tindakan lain apa pun di akun Tujuan ditolak.

Untuk contoh kode (menggunakan Python), lihat [Beralih ke peran IAM (AWS API)](id_roles_use_switch-role-api.md).

## Sumber daya tambahan
<a name="tutorial_cross-account-with-roles-related"></a>

Sumber daya berikut dapat membantu Anda mempelajari lebih lanjut tentang topik dalam tutorial ini:
+ Untuk informasi selengkapnya tentang pengguna IAM, lihat[Identitas IAM](id.md).
+ Untuk informasi selengkapnya tentang bucket Amazon S3, lihat [Membuat Bucket di Panduan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) Pengguna *Layanan Penyimpanan Sederhana Amazon*.
+  Untuk mempelajari apakah prinsip di akun di luar zona kepercayaan (organisasi atau akun tepercaya) memiliki akses untuk menjalankan peran Anda, lihat [Apa yang dimaksud dengan Penganalisis Akses IAM?](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html).

## Ringkasan
<a name="tutorial_cross-account-with-roles-summary"></a>

Anda telah menyelesaikan tutorial akses API lintas akun. Anda menciptakan peran untuk membangun kepercayaan dengan akun lainnya dan menetapkan tindakan apa yang dapat dilakukan oleh entitas tepercaya. Kemudian, Anda mengubah kebijakan peran untuk mengontrol pengguna IAM mana yang dapat mengakses peran tersebut. Akibatnya, pengembang dari akun **Originating** dapat melakukan pembaruan ke `amzn-s3-demo-bucket-shared-container` bucket di akun **Destination** dengan menggunakan kredensi sementara.

# Tutorial IAM: Buat dan lampirkan kebijakan yang dikelola pelanggan pertama Anda
<a name="tutorial_managed-policies"></a>

Dalam tutorial ini, Anda menggunakan Konsol Manajemen AWS untuk membuat [kebijakan yang dikelola pelanggan](access_policies_managed-vs-inline.md#customer-managed-policies) dan kemudian melampirkan kebijakan itu ke pengguna IAM di Anda Akun AWS. Kebijakan yang Anda buat memungkinkan pengguna uji IAM untuk masuk langsung ke Konsol Manajemen AWS dengan izin hanya-baca. 

Alur kerja ini memiliki tiga langkah dasar:

**[Langkah 1: Buat kebijakan](#step1-create-policy)**  
Secara default, pengguna IAM tidak memiliki izin untuk melakukan apa pun. Mereka tidak dapat mengakses AWS Management Console atau mengelola data di dalamnya, kecuali jika Anda mengizinkannya. Pada langkah ini, Anda membuat kebijakan yerkelola pelanggan yang memungkinkan setiap pengguna yang melekat untuk masuk ke konsol.

**[Langkah 2: Lampirkan kebijakan](#step2-attach-policy)**  
Saat Anda melampirkan kebijakan kepada pengguna, pengguna menurunkan semua izin akses yang terkait dengan kebijakan tersebut. Pada langkah ini, Anda melampirkan kebijakan baru ke pengguna pengujian.

**[Langkah 3: Uji akses pengguna](#step3-test-access)**  
Setelah kebijakan tersebut dilampirkan, Anda dapat masuk sebagai pengguna dan menguji kebijakan tersebut. 

## Prasyarat
<a name="tutorial-managed-policies-prereqs"></a>

Untuk melakukan langkah-langkah di tutorial ini, Anda harus sudah memiliki hal-hal berikut:
+ Sebuah Akun AWS yang dapat Anda masuk sebagai pengguna IAM dengan izin administratif.
+ Pengguna IAM uji yang tidak memiliki izin yang diberikan atau keanggotaan grup sebagai berikut:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/tutorial_managed-policies.html)

## Langkah 1: Buat kebijakan
<a name="step1-create-policy"></a>

Pada langkah ini, Anda membuat kebijakan terkelola pelanggan yang memungkinkan pengguna terlampir masuk Konsol Manajemen AWS dengan akses hanya-baca ke data IAM.

**Untuk membuat kebijakan bagi pengguna uji Anda**

1. Masuk ke konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)dengan pengguna Anda yang memiliki izin administrator.

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

1. Di panel konten, pilih **Buat kebijakan**. 

1. Pilih opsi **JSON** dan salin teks dari dokumen kebijakan JSON berikut. Tempel teks ini ke kotak teks **JSON**. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [ {
           "Effect": "Allow",
           "Action": [
               "iam:GenerateCredentialReport",
               "iam:Get*",
               "iam:List*"
           ],
           "Resource": "*"
       } ]
   }
   ```

------

1.  Selesaikan peringatan keamanan, kesalahan, atau peringatan umum yang dihasilkan selama [validasi kebijakan](access_policies_policy-validator.md), lalu pilih **Berikutnya**. 
**catatan**  
Anda dapat beralih antara opsi editor **Visual** dan **JSON** kapan saja. Namun, jika Anda membuat perubahan atau memilih **Tinjau kebijakan** di **Editor visual**, IAM mungkin merestrukturisasi kebijakan Anda untuk mengoptimalkannya untuk editor visual. Untuk informasi selengkapnya, lihat [Restrukturisasi kebijakan](troubleshoot_policies.md#troubleshoot_viseditor-restructure).

1. Pada halaman **Tinjau dan buat**, ketik **UsersReadOnlyAccessToIAMConsole** nama kebijakan. Tinjau izin yang diberikan oleh kebijakan Anda, lalu pilih **Buat kebijakan** untuk menyimpan pekerjaan Anda.

   Kebijakan baru muncul di daftar kebijakan terkelola dan siap dilampirkan.

## Langkah 2: Lampirkan kebijakan
<a name="step2-attach-policy"></a>

Selanjutnya, Anda melampirkan kebijakan yang baru saja Anda buat ke pengguna IAM uji Anda. 

**Untuk melampirkan kebijakan ke pengguna uji Anda**

1. Di konsol IAM, di panel navigasi, pilih **Kebijakan**.

1. Di bagian atas daftar kebijakan, di kotak pencarian, mulailah mengetik **UsersReadOnlyAccesstoIAMConsole** hingga Anda dapat melihat kebijakan Anda. Kemudian pilih tombol radio **UsersReadOnlyAccessToIAMConsole**di sebelah dalam daftar. 

1. Pilih tombol **Tindakan**, lalu pilih **Lampirkan**. 

1. Dalam entitas IAM pilih opsi untuk memfilter untuk **Pengguna**. 

1. Di kotak pencarian, mulailah mengetik **PolicyUser** hingga pengguna terlihat di daftar. Lalu centang kotak di samping pengguna tersebut di daftar.

1. Pilih **Lampirkan kebijakan**. 

Anda telah melampirkan kebijakan tersebut ke pengguna uji IAM Anda, yang berarti bahwa pengguna sekarang memiliki akses hanya-baca ke konsol IAM. 

## Langkah 3: Uji akses pengguna
<a name="step3-test-access"></a>

Untuk tutorial ini, kami sarankan agar Anda menguji akses dengan masuk sebagai pengguna uji sehingga Anda dapat melihat apa yang pengguna mungkin alami. 

**Untuk menguji akses dengan masuk dengan pengguna pengujian**

1. Masuk ke konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)dengan pengguna `PolicyUser` pengujian Anda.

1. Jelajahi halaman konsol dan coba buat pengguna atau grup baru. Perhatikan bahwa `PolicyUser` dapat menampilkan data tetapi tidak dapat membuat atau memodifikasi data IAM yang ada.

## Sumber daya terkait
<a name="tutorial-managed-policies-addl-resources"></a>

Untuk informasi terkait, lihat sumber daya berikut:
+ [Kebijakan terkelola dan kebijakan inline](access_policies_managed-vs-inline.md)
+ [Kontrol akses pengguna IAM ke Konsol Manajemen AWS](console_controlling-access.md)

## Ringkasan
<a name="tutorial-managed-policies-summary"></a>

Anda telah berhasil menyelesaikan semua langkah yang diperlukan untuk membuat dan melampirkan kebijakan terkelola pelanggan. Oleh karena itu, Anda dapat masuk ke konsol IAM dengan akun uji Anda untuk melihat seperti apa pengalaman bagi pengguna Anda.

# Tutorial IAM: Tentukan izin untuk mengakses AWS sumber daya berdasarkan tag
<a name="tutorial_attribute-based-access-control"></a>

Kontrol akses berbasis atribut (ABAC) adalah strategi otorisasi yang menentukan izin berdasarkan atribut. Dalam AWS, atribut ini disebut *tag*. Anda dapat melampirkan tag ke sumber daya IAM, termasuk entitas IAM (pengguna atau peran) dan sumber daya. AWS Kemudian, Anda dapat menentukan kebijakan yang menggunakan kunci syarat tanda untuk memberikan izin kepada penanggung jawab Anda berdasarkan tanda mereka. Saat Anda menggunakan tag untuk mengontrol akses ke AWS sumber daya, Anda memungkinkan tim dan sumber daya tumbuh dengan lebih sedikit perubahan pada AWS kebijakan. Kebijakan ABAC lebih fleksibel daripada AWS kebijakan tradisional, yang mengharuskan Anda untuk mencantumkan setiap sumber daya individu. Untuk informasi selengkapnya tentang ABAC dan manfaatnya dibandingkan kebijakan tradisional, lihat [Tentukan izin berdasarkan atribut dengan otorisasi ABAC](introduction_attribute-based-access-control.md).

**catatan**  
Anda harus memberikan satu nilai untuk setiap tag sesi. AWS Security Token Service tidak mendukung tag sesi multi-nilai.

**Topics**
+ [Ikhtisar tutorial](#tutorial_attribute-based-access-control-overview)
+ [Prasyarat](#tutorial_abac_prereqs)
+ [Langkah 1: Buat pengguna uji](#tutorial_abac_step1)
+ [Langkah 2: Buat kebijakan ABAC](#tutorial_abac_step2)
+ [Langkah 3: Buat peran](#tutorial_abac_step3)
+ [Langkah 4: Uji pembuatan rahasia](#tutorial_abac_step4)
+ [Langkah 5: Uji menampilkan rahasia](#tutorial_abac_step5)
+ [Langkah 6: Uji skalabilitas](#tutorial_abac_step6)
+ [Langkah 7: Uji memperbarui dan menghapus rahasia](#tutorial_abac_step7)
+ [Ringkasan](#tutorial-abac-summary)
+ [Sumber daya terkait](#tutorial_abac_related)
+ [Tutorial IAM: Menggunakan tanda sesi SAML untuk ABAC](tutorial_abac-saml.md)

## Ikhtisar tutorial
<a name="tutorial_attribute-based-access-control-overview"></a>

Tutorial ini menunjukkan cara membuat dan menguji sebuah kebijakan yang memungkinkan peran IAM dengan tag penanggung jawab untuk mengakses sumberdaya dengan tag yang sesuai. Saat prinsipal mengajukan permintaan ke AWS, izin mereka diberikan berdasarkan apakah tanda prinsipal dan tanda sumber daya cocok. Strategi ini memungkinkan individu untuk melihat atau mengedit hanya AWS sumber daya yang diperlukan untuk pekerjaan mereka. 

**Skenario**  
Asumsikan bahwa Anda adalah pengembang utama di perusahaan besar bernama Perusahaan Contoh, dan Anda adalah administrator IAM berpengalaman. Anda akrab dengan membuat dan mengelola pengguna, peran, dan kebijakan IAM. Anda ingin memastikan bahwa anggota teknisi pengembangan dan tim jaminan kualitas Anda dapat mengakses sumber daya yang mereka butuhkan. Anda juga memerlukan strategi yang dapat menskalakan pertumbuhan perusahaan Anda.

Anda memilih untuk menggunakan tag AWS sumber daya dan tag utama peran IAM untuk menerapkan strategi ABAC untuk layanan yang mendukungnya, dimulai dengan. AWS Secrets Manager Untuk mempelajari layanan mana yang mendukung otorisasi berdasarkan tanda, lihat [AWS layanan yang bekerja dengan IAM](reference_aws-services-that-work-with-iam.md). Untuk mempelajari kunci kondisi penandaan yang dapat Anda gunakan dalam kebijakan dengan setiap tindakan dan sumber daya layanan, lihat [Tindakan, Sumber Daya, dan Kunci Kondisi untuk AWS Layanan](reference_policies_actions-resources-contextkeys.html). Anda dapat mengonfigurasi penyedia identitas web atau yang berbasis SAML untuk meneruskan [tanda sesi](id_session-tags.md) ke AWS. Ketika karyawan Anda bergabung AWS, atribut mereka diterapkan pada AWS prinsipal yang dihasilkan. Kemudian, Anda dapat menggunakan ABAC untuk mengizinkan atau menolak izin berdasarkan atribut tersebut. Untuk mempelajari cara menggunakan tanda sesi dengan identitas gabungan SAML yang berbeda dengan tutorial ini, lihat [Tutorial IAM: Menggunakan tanda sesi SAML untuk ABAC](tutorial_abac-saml.md).

Anggota tim Insinyur dan Jaminan Kualitas Anda berada di proyek **Pegasus** atau proyek**Unicorn** Anda. Anda memilih proyek 3 karakter dan nilai tanda tim berikut:
+ `access-project` = `peg` untuk proyek **Pegasus**
+ `access-project` = `uni` untuk proyek **Unicorn**
+ `access-team` = `eng` untuk tim Insinyur
+ `access-team` = `qas` untuk tim Jaminan Kualitas

Selain itu, Anda memilih untuk meminta tag alokasi `cost-center` biaya untuk mengaktifkan laporan AWS penagihan kustom. Untuk informasi selengkapnya, lihat [Penggunaan Tanda Alokasi Biaya](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html) dalam *Panduan Pengguna AWS Manajemen Penagihan dan Biaya *.

**Ringkasan keputusan penting**
+ Karyawan masuk dengan kredensial pengguna IAM dan kemudian mengambil peran IAM untuk tim dan proyek mereka. Jika perusahaan Anda memiliki sistem identitas tersendiri, Anda dapat mengatur federasi untuk memungkinkan karyawan mengambil peran tanpa pengguna IAM. Untuk informasi selengkapnya, lihat [Tutorial IAM: Menggunakan tanda sesi SAML untuk ABAC](tutorial_abac-saml.md).
+ Kebijakan yang sama terlampir pada semua peran. Tindakan diizinkan atau ditolak berdasarkan tanda.
+ Karyawan dapat membuat sumber daya baru, tetapi hanya jika mereka melampirkan tanda yang sama ke sumber daya yang diterapkan pada peran mereka. Hal ini memastikan bahwa karyawan dapat melihat sumber daya setelah mereka membuatnya. Administrator tidak lagi diwajibkan untuk memperbarui kebijakan dengan ARN dari sumber daya baru.
+ Karyawan dapat membaca sumber daya yang dimiliki oleh tim mereka, apa pun proyeknya.
+ Karyawan dapat memperbarui dan menghapus sumber daya yang dimiliki oleh tim dan proyek mereka sendiri. 
+ Administrator IAM dapat menambahkan peran baru untuk proyek baru. Mereka dapat membuat dan menandai pengguna IAM baru untuk memungkinkan akses ke peran yang sesuai. Administrator tidak diwajibkan untuk mengedit kebijakan untuk mendukung proyek atau anggota tim baru.

Di tutorial ini, Anda akan menandai setiap sumber daya, menandai peran proyek Anda, dan menambahkan kebijakan ke peran untuk memungkinkan perilaku yang dijelaskan sebelumnya. Kebijakan yang dihasilkan memungkinkan peran `Create`, `Read`, `Update`, dan `Delete` mengakses sumber daya yang ditandai dengan tanda proyek dan tanda tim yang sama. Kebijakan ini juga memungkinkan proyek silang `Read` untuk mengakses sumber daya yang ditandai dengan tim yang sama.

![\[Diagram menunjukkan dua proyek di mana peran terbatas untuk membaca hanya akses di luar proyek mereka sementara memiliki izin untuk membuat, membaca, memperbarui, dan menghapus sumber daya dalam proyek mereka sendiri.\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/images/tutorial-abac-cross-project.png)


## Prasyarat
<a name="tutorial_abac_prereqs"></a>

Untuk melakukan langkah-langkah di tutorial ini, Anda harus sudah memiliki hal-hal berikut:
+ Sebuah Akun AWS yang dapat Anda masuk sebagai pengguna dengan izin administratif.
+ ID akun 12 digit Anda, yang Anda gunakan untuk membuat peran di langkah 3.

  Untuk menemukan nomor ID AWS akun Anda menggunakan Konsol Manajemen AWS, pilih **Support** pada bilah navigasi di kanan atas, lalu pilih **Support Center**. Nomor akun (ID) muncul di panel navigasi di sebelah kiri.  
![\[Dukungan Halaman tengah yang menampilkan nomor akun.\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/images/account-id-support-center.console.png)
+ Pengalaman membuat dan mengedit pengguna, peran, dan kebijakan IAM di. Konsol Manajemen AWS Namun, jika Anda memerlukan bantuan mengingat proses manajemen IAM, tutorial ini menyediakan tautan di mana Anda dapat melihat step-by-step instruksi.

## Langkah 1: Buat pengguna uji
<a name="tutorial_abac_step1"></a>

Untuk pengujian, buat empat pengguna IAM dengan izin untuk menerima peran dengan tag yang sama. Ini memudahkan untuk menambahkan lebih banyak pengguna ke tim Anda. Saat Anda menandai pengguna, mereka secara otomatis mendapatkan akses untuk mengambil peran yang tepat. Anda tidak perlu menambahkan pengguna ke kebijakan kepercayaan peran tersebut jika mereka hanya menangani satu proyek dan tim.

1. Buat kebijakan yang dikelola pelanggan berikut bernama `access-assume-role`. Untuk informasi selengkapnya tentang membuat kebijakan JSON, lihat [Membuat kebijakan IAM](access_policies_create-console.md#access_policies_create-start).

**Kebijakan ABAC: Asumsikan peran ABAC apa pun, tetapi hanya ketika peran pengguna cocok dengan tanda peran**  
Kebijakan berikut memungkinkan pengguna mengambil peran apa pun di akun Anda dengan prefiks nama `access-`. Peran tersebut juga harus ditandai dengan tanda proyek, tim, dan pusat biaya yang sama dengan pengguna.

   Untuk menggunakan kebijakan ini, ganti *teks placeholder yang dicetak miring* dengan informasi akun Anda.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "TutorialAssumeRole",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": "arn:aws:iam::111122223333:role/access-*",
               "Condition": {
                   "StringEquals": {
                       "iam:ResourceTag/access-project": "${aws:PrincipalTag/access-project}",
                       "iam:ResourceTag/access-team": "${aws:PrincipalTag/access-team}",
                       "iam:ResourceTag/cost-center": "${aws:PrincipalTag/cost-center}"
                   }
               }
           }
       ]
   }
   ```

------

   Untuk menskalakan tutorial ini ke sejumlah besar pengguna, Anda dapat melampirkan kebijakan ke grup dan menambahkan setiap pengguna ke grup. Untuk informasi selengkapnya, lihat [Buat grup IAM](id_groups_create.md) dan [Mengedit pengguna dalam grup IAM](id_groups_manage_add-remove-users.md).

1. Buat pengguna IAM berikut, lampirkan kebijakan `access-assume-role` izin. Pastikan Anda memilih **Menyediakan akses pengguna ke Konsol Manajemen AWS**, dan kemudian menambahkan tag berikut.

       
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)

## Langkah 2: Buat kebijakan ABAC
<a name="tutorial_abac_step2"></a>

Buat kebijakan berikut bernama **access-same-project-team**. Anda akan menambahkan kebijakan ini ke peran tersebut pada langkah berikutnya. Untuk informasi selengkapnya tentang membuat kebijakan JSON, lihat [Membuat kebijakan IAM](access_policies_create-console.md#access_policies_create-start).

Untuk kebijakan tambahan yang dapat Anda sesuaikan untuk tutorial ini, lihat halaman berikut:
+ [Mengontrol akses untuk prinsipal IAM](access_iam-tags.md#access_iam-tags_control-principals)
+ [Amazon EC2: Memungkinkan memulai atau menghentikan instans EC2 yang telah ditandai pengguna, secara terprogram, dan di konsol](reference_policies_examples_ec2_tag-owner.md)
+ [EC2: Mulai atau hentikan instans berdasarkan pada pencocokan prinsipal dan tanda sumber daya](reference_policies_examples_ec2-start-stop-match-tags.md)
+ [EC2: Mulai atau hentikan instance berdasarkan tag](reference_policies_examples_ec2-start-stop-tags.md)
+ [IAM: Asumsikan peran yang memiliki tag tertentu](reference_policies_examples_iam-assume-tagged-role.md)

**Kebijakan ABAC: Akses Sumber Daya Secrets Manager Hanya Saat Prinsipal dan Tag Sumber Daya Cocokkan**  
Kebijakan berikut memungkinkan penanggung jawab membuat, membaca, mengedit, dan menghapus sumber daya, tetapi hanya jika sumber daya tersebut ditandai dengan pasangan nilai kunci yang sama dengan penanggung jawab. Saat prinsipal membuat sumber daya, mereka harus menambahkan tanda `access-project`, `access-team`, dan `cost-center` dengan nilai yang cocok dengan tanda prinsipal. Kebijakan juga memungkinkan penambahan opsi tanda `Name` atau `OwnedBy`.

------
#### [ JSON ]

****  

```
{
 "Version":"2012-10-17",		 	 	 
 "Statement": [
     {
         "Sid": "AllActionsSecretsManagerSameProjectSameTeam",
         "Effect": "Allow",
         "Action": "secretsmanager:*",
         "Resource": "*",
         "Condition": {
             "StringEquals": {
                 "aws:ResourceTag/access-project": "${aws:PrincipalTag/access-project}",
                 "aws:ResourceTag/access-team": "${aws:PrincipalTag/access-team}",
                 "aws:ResourceTag/cost-center": "${aws:PrincipalTag/cost-center}"
             },
             "ForAllValues:StringEquals": {
                 "aws:TagKeys": [
                     "access-project",
                     "access-team",
                     "cost-center",
                     "Name",
                     "OwnedBy"
                 ]
             },
             "StringEqualsIfExists": {
                 "aws:RequestTag/access-project": "${aws:PrincipalTag/access-project}",
                 "aws:RequestTag/access-team": "${aws:PrincipalTag/access-team}",
                 "aws:RequestTag/cost-center": "${aws:PrincipalTag/cost-center}"
             }
         }
     },
     {
         "Sid": "AllResourcesSecretsManagerNoTags",
         "Effect": "Allow",
         "Action": [
             "secretsmanager:GetRandomPassword",
             "secretsmanager:ListSecrets"
         ],
         "Resource": "*"
     },
     {
         "Sid": "ReadSecretsManagerSameTeam",
         "Effect": "Allow",
         "Action": [
             "secretsmanager:Describe*",
             "secretsmanager:Get*",
             "secretsmanager:List*"
         ],
         "Resource": "*",
         "Condition": {
             "StringEquals": {
                 "aws:ResourceTag/access-team": "${aws:PrincipalTag/access-team}"
             }
         }
     },
     {
         "Sid": "DenyUntagSecretsManagerReservedTags",
         "Effect": "Deny",
         "Action": "secretsmanager:UntagResource",
         "Resource": "*",
         "Condition": {
             "ForAnyValue:StringLike": {
                 "aws:TagKeys": "access-*"
             }
         }
     },
     {
         "Sid": "DenyPermissionsManagement",
         "Effect": "Deny",
         "Action": "secretsmanager:*Policy",
         "Resource": "*"
     }
 ]
}
```

------

**Apa yang dilakukan kebijakan ini?**
+ Pernyataan `AllActionsSecretsManagerSameProjectSameTeam` memungkinkan semua tindakan layanan ini pada semua sumber daya terkait, tetapi hanya jika tanda sumber daya cocok dengan tanda prinsipal. Dengan menambahkan `"Action": "secretsmanager:*"` ke kebijakan, akan menumbuhkan kebijakan seiring bertumbuhnya Secrets Manager. Jika Secrets Manager menambahkan operasi API baru, Anda tidak perlu menambahkan tindakan tersebut ke pernyataan. Pernyataan tersebut menerapkan ABAC menggunakan tiga blok kondisi. Permintaan hanya diperbolehkan jika ketiga blok dikembalikan dengan benar.
  + Blok kondisi pertama dari pernyataan ini dikembalikan dengan benar jika kunci tanda yang ditentukan ada pada sumber daya, dan nilainya cocok dengan tanda prinsipal. Blok ini mengembalikan kesalahan tanda yang tidak sesuai, atau tindakan yang tidak mendukung penandaan sumber daya. Untuk mempelajari tindakan mana yang tidak diizinkan oleh blok ini, lihat [Tindakan, Sumber Daya, dan Kunci Kondisi untuk AWS Secrets Manager](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awssecretsmanager.html). Halaman tersebut menunjukkan bahwa tindakan yang dilakukan pada [tipe sumber daya **Rahasia**](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awssecretsmanager.html#awssecretsmanager-resources-for-iam-policies) mendukung `secretsmanager:ResourceTag/tag-key` kunci kondisi. Beberapa [tindakan Secrets Manager](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awssecretsmanager.html#awssecretsmanager-actions-as-permissions) tidak mendukung tipe sumber daya tersebut, termasuk `GetRandomPassword` dan `ListSecrets`. Anda harus membuat pernyataan tambahan untuk mengizinkan tindakan tersebut.
  + Blok kondisi kedua menjadi benar jika setiap kunci tanda yang diteruskan di permintaan disertakan dalam daftar yang ditentukan. Hal ini dilakukan menggunakan `ForAllValues` dengan operator kondisi `StringEquals`. Jika tidak ada kunci atau subset dari set kunci yang diteruskan, kondisi menjadi benar. Hal ini memungkinkan operasi `Get*` yang tidak memungkinkan tanda diteruskan di permintaan. Jika pemohon menyertakan kunci tanda yang tidak ada dalam daftar, kondisi menjadi salah. Setiap kunci tanda yang diteruskan di permintaan harus sesuai dengan anggota daftar ini. Untuk informasi selengkapnya, lihat [Tetapkan operator untuk kunci konteks multivaluasi](reference_policies_condition-single-vs-multi-valued-context-keys.md#reference_policies_condition-multi-valued-context-keys).
  + Blok kondisi ketiga menjadi benar jika permintaan mendukung tanda yang lolos, jika ketiga tanda hadir, dan jika sesuai dengan nilai tanda prinsipal. Blok ini juga menjadi benar jika permintaan tidak mendukung tanda yang diteruskan. Ini berkat [`...IfExists`](reference_policies_elements_condition_operators.md#Conditions_IfExists) di operator kondisi. Blok menjadi salah jika tidak ada tanda yang diteruskan selama tindakan yang mendukungnya, atau jika kunci dan nilai tanda tidak cocok.
+ Pernyataan `AllResourcesSecretsManagerNoTags` memungkinkan tindakan `GetRandomPassword` dan `ListSecrets` yang tidak diperbolehkan oleh pernyataan pertama.
+ Pernyataan `ReadSecretsManagerSameTeam` memungkinkan operasi hanya baca jika prinsipal ditandai dengan tanda access-team yang sama sebagai sumber daya. Hal ini diperbolehkan terlepas dari tanda proyek atau tanda pusat biaya. 
+ Pernyataan `DenyUntagSecretsManagerReservedTags` menolak permintaan untuk menghapus tanda dengan kunci yang dimulai dengan "access-" dari Secrets Manager. Tanda ini digunakan untuk mengontrol akses ke sumber daya, sehingga menghapus tanda dapat menghapus izin.
+ Pernyataan `DenyPermissionsManagement` menolak akses untuk membuat, mengedit, atau menghapus kebijakan berbasis sumber daya Secrets Manager. Kebijakan ini dapat digunakan untuk mengubah izin rahasia. 

**penting**  
Kebijakan ini menggunakan strategi untuk memungkinkan semua tindakan untuk layanan, tetapi dengan tegas menolak tindakan yang melanggar izin. Menolak tindakan akan membatalkan kebijakan lain yang memungkinkan penanggung jawab melakukan tindakan tersebut. Ini dapat menimbulkan hasil yang tidak diinginkan. Sebagai praktik terbaik, gunakanlah penolakan eksplisit hanya jika tidak ada keadaan yang mengizinkan tindakan tersebut. Jika tidak, izinkan daftar tindakan individu, dan tindakan yang tidak diinginkan ditolak secara default.

## Langkah 3: Buat peran
<a name="tutorial_abac_step3"></a>

Buat peran IAM berikut dan lampirkan kebijakan **access-same-project-team** yang Anda buat pada langkah sebelumnya. Untuk informasi selengkapnya tentang cara membuat peran IAM, lihat [Buat peran untuk memberikan izin kepada pengguna IAM](id_roles_create_for-user.md). Jika Anda memilih untuk menggunakan federasi daripada pengguna dan peran IAM, lihat [Tutorial IAM: Menggunakan tanda sesi SAML untuk ABAC](tutorial_abac-saml.md).


| Fungsi pekerjaan | Nama peran | Tanda peran | Deskripsi peran | 
| --- | --- | --- | --- | 
|  Proyek Teknik Pegasus  |  access-peg-engineering  |  akses-proyek = `peg` tim akses = `eng` pusat biaya = `987654`   | Memungkinkan insinyur membaca semua sumber daya teknik dan membuat serta mengelola sumber daya teknik Pegasus. | 
|  Jaminan Kualitas Proyek Pegasus  |  access-peg-quality-assurance  |  akses-proyek = `peg` tim akses = `qas` pusat biaya = `987654`  |  Memungkinkan tim QA untuk membaca semua sumber daya QA dan membuat, serta mengelola semua sumber daya QA Pegasus.  | 
|  Proyek Teknik Unicorn  |  access-uni-engineering  |  akses-proyek = `uni` tim akses = `eng` pusat biaya = `123456`  | Memungkinkan insinyur membaca semua sumber daya teknik dan membuat, serta mengelola sumber daya teknik Unicorn. | 
|  Jaminan Kualitas Proyek Unicorn  |  access-uni-quality-assurance  |  akses-proyek = `uni` tim akses = `qas` pusat biaya = `123456`   |  Memungkinkan tim QA untuk membaca semua sumber daya QA dan membuat, serta mengelola semua sumber daya QA Unicorn.  | 

## Langkah 4: Uji pembuatan rahasia
<a name="tutorial_abac_step4"></a>

Kebijakan izin yang terlampir pada peran memungkinkan karyawan untuk membuat rahasia. Hal ini hanya diperbolehkan jika rahasia ditandai dengan proyek, tim, dan pusat biaya mereka. Konfirmasikan bahwa izin Anda bekerja sesuai harapan dengan masuk sebagai pengguna Anda, dengan asumsi peran yang benar, dan menguji aktivitas di Secrets Manager.

**Untuk mencoba membuat rahasia dengan dan tanpa tag yang diperlukan**

1. Di jendela browser utama Anda, tetap masuk sebagai pengguna administrator sehingga Anda dapat meninjau pengguna, peran, dan kebijakan di IAM. Gunakan jendela penyamaran peramban atau peramban terpisah untuk pengujian Anda. Di sana, masuk sebagai pengguna `access-Arnav-peg-eng` IAM dan buka konsol Secrets Manager di [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Upayakan untuk beralih ke peran `access-uni-engineering`.

   Operasi ini gagal karena nilai tanda `access-project` dan `cost-center` tidak cocok dengan pengguna `access-Arnav-peg-eng` dan peran `access-uni-engineering`.

   Untuk informasi selengkapnya tentang beralih peran di Konsol Manajemen AWS, lihat [Beralih dari pengguna ke peran IAM (konsol)](id_roles_use_switch-role-console.md)

1. Beralih ke peran `access-peg-engineering`.

1. Simpan rahasia baru menggunakan informasi berikut. Untuk mempelajari cara menyimpan rahasia, lihat [Membuat Rahasia Dasar](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) di *Panduan Pengguna AWS Secrets Manager *.
**penting**  
Secrets Manager menampilkan peringatan bahwa Anda tidak memiliki izin untuk AWS layanan tambahan yang bekerja dengan Secrets Manager. Misalnya, untuk membuat kredensial basis data Amazon RDS, Anda harus memiliki izin untuk menjelaskan instans RDS, klaster RDS, dan klaster Amazon Redshift. Anda dapat mengabaikan peringatan ini karena Anda tidak menggunakan AWS layanan khusus ini dalam tutorial ini. 

   1. Di bagian **Pilih tipe rahasia**, pilih **Tipe rahasia lainnya**. Di dua kotak teks, masukkan `test-access-key` dan `test-access-secret`.

   1. Masukkan `test-access-peg-eng` untuk bidang **Nama rahasia**. 

   1. Tambahkan kombinasi tanda yang berbeda dari tabel berikut dan lihat perilaku yang diharapkan.

   1. Pilih **Toko** untuk mencoba membuat rahasia. Jika penyimpanan gagal, kembali ke laman konsol Secrets Manager sebelumnya dan gunakan set tag berikutnya dari tabel berikut. Set tag terakhir dizinkan dan akan berhasil membuat rahasia.

   Tabel berikut menunjukkan kombinasi tag ABAC untuk `test-access-peg-eng` peran tersebut.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)

1. Keluar dan ulangi tiga langkah pertama dalam prosedur ini untuk setiap peran dan nilai tanda berikut. Pada langkah keempat dalam prosedur ini, uji setiap set tanda yang hilang, tanda opsional, tanda yang tidak diizinkan, dan nilai tanda tidak valid yang Anda pilih. Kemudian gunakan tanda yang diperlukan untuk membuat rahasia dengan tanda dan nama berikut.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)

## Langkah 5: Uji menampilkan rahasia
<a name="tutorial_abac_step5"></a>

Kebijakan yang Anda lampirkan ke setiap peran memungkinkan karyawan melihat rahasia apa pun yang ditandai dengan nama tim mereka, apa pun proyek mereka. Konfirmasikan bahwa izin Anda bekerja sesuai harapan dengan menguji peran Anda di Secrets Manager. 

**Untuk uji melihat rahasia dengan dan tanpa tag yang diperlukan**

1. Masuk sebagai salah satu pengguna IAM berikut:
   + `access-Arnav-peg-eng`
   + `access-Mary-peg-qas`
   + `access-Saanvi-uni-eng`
   + `access-Carlos-uni-qas`

1. Beralih ke peran yang sesuai:
   + `access-peg-engineering`
   + `access-peg-quality-assurance`
   + `access-uni-engineering`
   + `access-uni-quality-assurance`

   Untuk informasi selengkapnya tentang beralih peran di Konsol Manajemen AWS, lihat[Beralih dari pengguna ke peran IAM (konsol)](id_roles_use_switch-role-console.md).

1. Di panel navigasi sebelah kiri, pilih ikon menu untuk memperluas menu lalu pilih **Rahasia**. 

1. Anda akan melihat keempat rahasia di tabel, apa pun peran Anda saat ini. Ini diharapkan karena kebijakan bernama `access-same-project-team` memungkinkan tindakan `secretsmanager:ListSecrets` untuk semua sumber daya.

1. Pilih nama salah satu rahasia.

1. Pada halaman detail rahasia, tanda peran Anda menentukan apakah Anda dapat melihat isi halaman tersebut. Bandingkan nama peran Anda dengan nama rahasia Anda. Jika mereka memiliki nama tim yang sama, tanda `access-team` cocok. Jika tidak cocok, akses akan ditolak.

   Tabel berikut menunjukkan perilaku tampilan rahasia ABAC untuk setiap peran.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)

1. Dari breadcrumbs di bagian atas halaman, pilih **Rahasia** untuk kembali ke daftar rahasia. Ulangi langkah-langkah dalam prosedur ini menggunakan peran yang berbeda untuk menguji apakah Anda dapat melihat masing-masing rahasia.

## Langkah 6: Uji skalabilitas
<a name="tutorial_abac_step6"></a>

Alasan penting untuk menggunakan kontrol akses berbasis atribut (ABAC) daripada kontrol akses berbasis peran (RBAC) adalah skalabilitas. Saat perusahaan Anda menambahkan proyek, tim, atau orang baru AWS, Anda tidak perlu memperbarui kebijakan berbasis ABAC. Misalnya, anggaplah bahwa Example Corporation mendanai proyek baru dengan nama kode **Centaur**. Seorang insinyur bernama Saanvi Sarkar akan menjadi insinyur utama untuk **Centaur** sambil terus mengerjakan proyek **Unicorn**. Saanvi juga akan meninjau pekerjaan untuk proyek **Peg**. Ada juga beberapa insinyur yang baru direkrut, termasuk Nikhil Jayashankar, yang hanya akan mengerjakan proyek **Centaur**.

**Untuk menambahkan proyek baru ke AWS**

1. Masuk sebagai pengguna administrator IAM dan buka konsol IAM di. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. Di panel navigasi di sebelah kiri, pilih **Peran dan tambahkan peran** IAM bernama. `access-cen-engineering` Lampirkan kebijakan **access-same-project-team** izin ke peran dan tambahkan tag peran berikut:
   + `access-project` = `cen`
   + `access-team` = `eng`
   + `cost-center` = `101010`

1. Pada panel navigasi di sebelah kiri, pilih **Pengguna**.

1. Tambahkan pengguna baru bernama`access-Nikhil-cen-eng`, lampirkan kebijakan bernama`access-assume-role`, dan tambahkan tag pengguna berikut.
   + `access-project` = `cen`
   + `access-team` = `eng`
   + `cost-center` = `101010`

1. Gunakan prosedur di [Langkah 4: Uji pembuatan rahasia](#tutorial_abac_step4) dan [Langkah 5: Uji menampilkan rahasia](#tutorial_abac_step5). Di jendela peramban lain, uji apakah Nikhil hanya dapat membuat rahasia teknik **Centaur**, dan apakah dia dapat melihat semua rahasia teknik.

1. Di jendela browser utama tempat Anda masuk sebagai administrator, pilih pengguna`access-Saanvi-uni-eng`.

1. Pada tab **Izin**, hapus kebijakan **access-assume-role**izin.

1. Tambahkan kebijakan inline berikut bernama `access-assume-specific-roles`. Untuk informasi selengkapnya tentang menambahkan kebijakan inline ke pengguna, lihat [Untuk menyematkan kebijakan inline bagi pengguna atau peran (konsole)](access_policies_manage-attach-detach.md#embed-inline-policy-console).

**Kebijakan ABAC: Asumsikan hanya peran tertentu**  
**Kebijakan ini memungkinkan Saanvi untuk mengambil peran teknik untuk proyek **Pegasus** dan Centaur.** Perlu untuk membuat kebijakan kustom ini karena IAM tidak mendukung tag multinilai. Anda tidak dapat menandai pengguna Saanvi dengan `access-project` = `peg` dan `access-project` = `cen`. Selain itu, model AWS otorisasi tidak dapat mencocokkan kedua nilai. Untuk informasi selengkapnya, lihat [Aturan untuk menandai di IAM dan AWS STS](id_tags.md#id_tags_rules). Sebagai gantinya, Anda harus menentukan secara manual dua peran yang dapat dia tanggung.

   Untuk menggunakan kebijakan ini, ganti *teks placeholder yang dicetak miring* dengan informasi akun Anda.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "TutorialAssumeSpecificRoles",
               "Effect": "Allow",
               "Action": "sts:AssumeRole",
               "Resource": [
                   "arn:aws:iam::111122223333:role/access-peg-engineering",
                   "arn:aws:iam::111122223333:role/access-cen-engineering"
               ]
           }
       ]
   }
   ```

------

1. Gunakan prosedur di [Langkah 4: Uji pembuatan rahasia](#tutorial_abac_step4) dan [Langkah 5: Uji menampilkan rahasia](#tutorial_abac_step5). Pada jendela peramban lain, konfirmasikan bahwa Saanvi dapat mengambil kedua peran tersebut. Periksa bahwa dia dapat membuat rahasia hanya untuk proyek, tim, dan pusat biaya miliknya, bergantung pada tanda peran. Konfirmasi juga bahwa dia dapat melihat perincian tentang rahasia apa pun yang dimiliki oleh tim teknik, termasuk rahasia yang baru saja dia buat.

## Langkah 7: Uji memperbarui dan menghapus rahasia
<a name="tutorial_abac_step7"></a>

Kebijakan `access-same-project-team` yang terlampir pada peran memungkinkan karyawan memperbarui dan menghapus rahasia yang ditandai dengan proyek, tim, dan pusat biaya mereka. Konfirmasikan bahwa izin Anda bekerja sesuai harapan dengan menguji peran Anda di Secrets Manager.

**Untuk menguji pembaruan dan penghapusan rahasia dengan dan tanpa tag yang diperlukan**

1. Masuk sebagai salah satu pengguna IAM berikut:
   + `access-Arnav-peg-eng`
   + `access-Mary-peg-qas`
   + `access-Saanvi-uni-eng`
   + `access-Carlos-uni-qas`
   + `access-Nikhil-cen-eng`

1. Beralih ke peran yang sesuai:
   + `access-peg-engineering`
   + `access-peg-quality-assurance`
   + `access-uni-engineering`
   + `access-peg-quality-assurance`
   + `access-cen-engineering`

   Untuk informasi selengkapnya tentang beralih peran di Konsol Manajemen AWS, lihat[Beralih dari pengguna ke peran IAM (konsol)](id_roles_use_switch-role-console.md).

1. Untuk setiap peran, coba perbarui deskripsi rahasia, lalu coba hapus rahasia berikut. Untuk informasi selengkapnya, lihat, lihat [Memodifikasi Rahasia](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html) dan [Menghapus dan Memulihkan Rahasia](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_delete-restore-secret.html) di *Panduan Pengguna AWS Secrets Manager *.

   Tabel berikut menunjukkan perilaku pembaruan dan penghapusan rahasia ABAC untuk setiap peran.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)

## Ringkasan
<a name="tutorial-abac-summary"></a>

Anda telah berhasil menyelesaikan semua langkah yang diperlukan untuk menggunakan tanda untuk kontrol akses berbasis atribut (ABAC). Anda telah mempelajari cara mendefinisikan strategi penandaan. Anda menerapkan strategi tersebut ke penanggung jawab dan sumber daya Anda. Anda membuat dan menerapkan kebijakan yang menegakkan strategi untuk Secrets Manager. Anda juga mempelajari bahwa ABAC menskalakan dengan mudah ketika Anda menambahkan proyek dan anggota tim baru. Akibatnya, Anda dapat masuk ke konsol IAM dengan peran pengujian Anda dan mengalami cara menggunakan tag untuk ABAC in. AWS

**catatan**  
Anda menambahkan kebijakan yang memungkinkan tindakan hanya berdasarkan kondisi tertentu. Jika Anda menerapkan kebijakan yang berbeda kepada pengguna atau peran Anda yang memiliki izin lebih luas, maka tindakan tersebut mungkin tidak akan dibatasi untuk memerlukan penandaan. Misalnya, jika Anda memberi pengguna izin administratif penuh menggunakan kebijakan `AdministratorAccess` AWS terkelola, kebijakan ini tidak membatasi akses tersebut. Untuk informasi selengkapnya tentang bagaimana izin ditentukan saat beberapa kebijakan dilibatkan, lihat [Bagaimana logika kode AWS penegakan mengevaluasi permintaan untuk mengizinkan atau menolak akses](reference_policies_evaluation-logic_policy-eval-denyallow.md).

## Sumber daya terkait
<a name="tutorial_abac_related"></a>

Untuk informasi terkait, lihat sumber daya berikut:
+ [Tentukan izin berdasarkan atribut dengan otorisasi ABAC](introduction_attribute-based-access-control.md)
+ [AWS kunci konteks kondisi global](reference_policies_condition-keys.md)
+ [Buat peran untuk memberikan izin kepada pengguna IAM](id_roles_create_for-user.md)
+ [Tag untuk AWS Identity and Access Management sumber daya](id_tags.md)
+ [Mengontrol akses ke AWS sumber daya menggunakan tag](access_tags.md)
+ [Beralih dari pengguna ke peran IAM (konsol)](id_roles_use_switch-role-console.md)
+ [Tutorial IAM: Menggunakan tanda sesi SAML untuk ABAC](tutorial_abac-saml.md)

Untuk mempelajari cara memantau tag di akun Anda, lihat [Memantau perubahan tag pada AWS sumber daya dengan alur kerja tanpa server dan Acara Amazon](https://aws.amazon.com/blogs/mt/monitor-tag-changes-on-aws-resources-with-serverless-workflows-and-amazon-cloudwatch-events/). CloudWatch 

# Tutorial IAM: Menggunakan tanda sesi SAML untuk ABAC
<a name="tutorial_abac-saml"></a>

Kontrol akses berbasis atribut (ABAC) adalah strategi otorisasi yang mendefinisikan izin berdasarkan atribut. Dalam AWS, atribut ini disebut tag. Anda dapat melampirkan tag ke sumber daya IAM, termasuk entitas IAM (pengguna atau peran), dan ke AWS sumber daya. Ketika entitas digunakan untuk membuat permintaan AWS, mereka menjadi prinsipal dan prinsipal tersebut menyertakan tag.

Anda juga dapat meneruskan [tanda sesi](id_session-tags.md) saat Anda mengasumsikan peran atau menggabungkan pengguna. Anda dapat menentukan kebijakan yang menggunakan kunci tanda kondisi untuk memberikan izin kepada prinsipal Anda berdasarkan tanda mereka. Saat Anda menggunakan tanda untuk mengontrol akses ke sumber daya AWS , Anda memungkinkan tim dan sumber daya Anda tumbuh dengan lebih sedikit perubahan ke kebijakan AWS . Kebijakan ABAC lebih fleksibel daripada AWS kebijakan tradisional, yang mengharuskan Anda untuk mencantumkan setiap sumber daya individu. Untuk informasi selengkapnya tentang ABAC dan manfaatnya dibandingkan kebijakan tradisional, lihat [Tentukan izin berdasarkan atribut dengan otorisasi ABAC](introduction_attribute-based-access-control.md).

Jika perusahaan Anda menggunakan penyedia identitas (IdP) berbasis SAML untuk mengelola identitas pengguna perusahaan, Anda dapat menggunakan atribut SAML untuk kontrol akses yang lebih mendetail di AWS. Atribut dapat mencakup pengidentifikasi pusat biaya, alamat surel pengguna, klasifikasi departemen, dan penugasan proyek. Saat Anda meneruskan atribut tersebut sebagai tanda sesi, Anda dapat mengontrol akses ke AWS berdasarkan tanda sesi ini.

Untuk menyelesaikan [Tutorial ABAC](tutorial_attribute-based-access-control.md) dengan meneruskan atribut SAML ke penanggung jawab sesi Anda, selesaikan tugas di [Tutorial IAM: Tentukan izin untuk mengakses AWS sumber daya berdasarkan tag](tutorial_attribute-based-access-control.md), dengan perubahan yang disertakan di topik ini.

## Prasyarat
<a name="tutorial_abac-saml-prerequisites"></a>

Untuk melakukan langkah-langkah menggunakan tanda sesi SAML untuk ABAC, Anda harus sudah memiliki hal-hal berikut:
+ Akses ke IdP berbasis SAML tempat Anda dapat membuat uji pengguna dengan atribut khusus. 
+ Kemampuan untuk masuk sebagai pengguna dengan izin administratif.
+ Pengalaman membuat dan mengedit pengguna, peran, dan kebijakan IAM di. Konsol Manajemen AWS Namun, jika Anda memerlukan bantuan mengingat proses manajemen IAM, tutorial ABAC menyediakan tautan di mana Anda dapat melihat step-by-step instruksi.
+ Pengalaman menyiapkan IDP berbasis SAMP di IAM. Untuk melihat perincian lebih lanjut dan tautan ke dokumentasi IAM terperinci, lihat [Melewati tag sesi menggunakan AssumeRoleWith SALL](id_session-tags.md#id_session-tags_adding-assume-role-saml).

## Langkah 1: Buat pengguna uji
<a name="tutorial_abac-saml-step1"></a>

Lewati petunjuk di [Langkah 1: Buat pengguna uji](tutorial_attribute-based-access-control.md#tutorial_abac_step1). Karena identitas Anda ditentukan di penyedia, Anda tidak perlu menambahkan pengguna IAM untuk karyawan Anda. 

## Langkah 2: Buat kebijakan ABAC
<a name="tutorial_abac-saml-step2"></a>

Ikuti petunjuk di [Langkah 2: Buat kebijakan ABAC](tutorial_attribute-based-access-control.md#tutorial_abac_step2) untuk membuat kebijakan pengelolaan khusus di IAM. 

## Langkah 3: Buat dan konfigurasi peran SAML
<a name="tutorial_abac-saml-step3"></a>

Bila Anda menggunakan tutorial ABAC untuk SAMP, Anda harus melakukan langkah-langkah tambahan untuk membuat peran, mengkonfigurasi SAMP iDP, dan mengaktifkan akses. Konsol Manajemen AWS Untuk informasi selengkapnya, lihat [Langkah 3: Buat peran](tutorial_attribute-based-access-control.md#tutorial_abac_step3).

### Langkah 3A: Buat peran SAML.
<a name="tutorial_abac-saml-step3a"></a>

Buat peran tunggal yang memercayai penyedia identitas SAML Anda dan pengguna `test-session-tags` yang Anda buat pada langkah 1. Tutorial ABAC menggunakan peran yang berbeda dengan tanda peran yang berbeda. Karena Anda meneruskan tanda sesi dari IdP SAML Anda, Anda hanya perlu satu peran. Untuk mempelajari cara membuat peran berbasis SAML, lihat [Buat peran untuk federasi SAMP 2.0 (konsol)](id_roles_create_for-idp_saml.md). 

Beri nama peran `access-session-tags`. Lampirkan kebijakan izin `access-same-project-team` ke peran tersebut. Edit kebijakan kepercayaan peran untuk menggunakan kebijakan berikut. Untuk petunjuk terperinci tentang cara mengedit hubungan kepercayaan dari suatu peran, lihat [Memperbarui kebijakan kepercayaan peran](id_roles_update-role-trust-policy.md).

Kebijakan kepercayaan peran berikut memungkinkan penyedia identitas SAML Anda dan pengguna `test-session-tags` untuk mengambil peran tersebut. Saat mereka mengambil peran tersebut, mereka harus meneruskan tiga tanda sesi khusus. Diperlukan tindakan `sts:TagSession` untuk memungkinkan penerusan tanda sesi.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowSamlIdentityAssumeRole",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRoleWithSAML",
                "sts:TagSession"
            ],
            "Principal": {"Federated":"arn:aws:iam::123456789012:saml-provider/ExampleCorpProvider"},
            "Condition": {
                "StringLike": {
                    "aws:RequestTag/cost-center": "*",
                    "aws:RequestTag/access-project": "*",
                    "aws:RequestTag/access-team": [
                        "eng",
                        "qas"
                    ]
                },
                "StringEquals": {"SAML:aud": "https://signin.aws.amazon.com/saml"}
            }
        }
    ]
}
```

------

`AllowSamlIdentityAssumeRole`Pernyataan tersebut memungkinkan anggota tim Engineering and Quality Assurance untuk mengambil peran ini ketika mereka bergabung AWS dari Example Corporation IDP. Penyedia `ExampleCorpProvider` SALL didefinisikan dalam IAM. Administrator telah mengatur pernyataan SAML untuk meneruskan tiga tanda sesi yang diperlukan. Pernyataan ini dapat meneruskan tanda tambahan, tetapi ketiga tanda ini harus ada. Atribut identitas dapat memiliki nilai apa pun untuk tanda `cost-center` dan `access-project`. Tetapi, nilai atribut `access-team` harus cocok dengan `eng` atau `qas` untuk menunjukkan bahwa identitas ada pada tim Engineering atau Jaminan Kualitas. 

### Langkah 3B: Mengonfigurasi IdP SAML
<a name="tutorial_abac-saml-step3b"></a>

Konfigurasikan IdP SAML Anda untuk meneruskan atribut `cost-center`, `access-project`, dan `access-team` sebagai tanda sesi. Untuk informasi selengkapnya, lihat [Melewati tag sesi menggunakan AssumeRoleWith SALL](id_session-tags.md#id_session-tags_adding-assume-role-saml).

Untuk meneruskan atribut ini sebagai tanda sesi, sertakan elemen berikut dalam pernyataan SAML Anda.

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:cost-center">
  <AttributeValue>987654</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:access-project">
  <AttributeValue>peg</AttributeValue>
</Attribute>
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:access-team">
  <AttributeValue>eng</AttributeValue>
</Attribute>
```

### Langkah 3C: Aktifkan akses konsol
<a name="tutorial_abac-saml-step3b"></a>

Aktifkan akses konsol untuk pengguna SAML gabungan Anda. Untuk informasi selengkapnya, lihat [Mengaktifkan prinsip federasi SAMP 2.0 untuk mengakses Konsol Manajemen AWS](id_roles_providers_enable-console-saml.md).

## Langkah 4: Uji pembuatan rahasia
<a name="tutorial_abac-saml-step4"></a>

Federasi ke dalam Konsol Manajemen AWS menggunakan `access-session-tags` peran. Untuk informasi selengkapnya, lihat [Mengaktifkan prinsip federasi SAMP 2.0 untuk mengakses Konsol Manajemen AWS](id_roles_providers_enable-console-saml.md). Kemudian ikuti petunjuk di [Langkah 4: Uji pembuatan rahasia](tutorial_attribute-based-access-control.md#tutorial_abac_step4) untuk membuat rahasia. Gunakan identitas SAML yang berbeda dengan atribut untuk mencocokkan tanda yang ditunjukkan dalam tutorial ABAC. Untuk informasi selengkapnya, lihat [Langkah 4: Uji pembuatan rahasia](tutorial_attribute-based-access-control.md#tutorial_abac_step4).

## Langkah 5: Uji menampilkan rahasia
<a name="tutorial_abac-saml-step5"></a>

Ikuti petunjuk di [Langkah 5: Uji menampilkan rahasia](tutorial_attribute-based-access-control.md#tutorial_abac_step5) untuk melihat rahasia yang Anda buat di langkah sebelumnya. Gunakan identitas SAML yang berbeda dengan atribut untuk mencocokkan tanda yang ditunjukkan dalam tutorial ABAC.

## Langkah 6: Uji skalabilitas
<a name="tutorial_abac-saml-step6"></a>

Ikuti petunjuk di [Langkah 6: Uji skalabilitas](tutorial_attribute-based-access-control.md#tutorial_abac_step6) untuk menguji skalabilitas. Lakukan ini dengan menambahkan identitas baru di IdP berbasis SAML Anda dengan atribut berikut ini:
+ `cost-center = 101010`
+ `access-project = cen`
+ `access-team = eng`

## Langkah 7: Uji memperbarui dan menghapus rahasia
<a name="tutorial_abac-saml-step7"></a>

Ikuti petunjuk di [Langkah 7: Uji memperbarui dan menghapus rahasia](tutorial_attribute-based-access-control.md#tutorial_abac_step7) untuk memperbarui dan menghapus rahasia. Gunakan identitas SAML yang berbeda dengan atribut untuk mencocokkan tanda yang ditunjukkan dalam tutorial ABAC.

**penting**  
Hapus semua rahasia yang Anda buat untuk menghindari biaya tagihan. Untuk detail tentang harga di Secrets Manager, lihat [AWS Secrets Manager Harga](https://aws.amazon.com/secrets-manager/pricing/).

## Ringkasan
<a name="tutorial-abac-saml-summary"></a>

Anda telah berhasil menyelesaikan semua langkah yang diperlukan untuk menggunakan tanda sesi SAML dan tanda sumber daya untuk manajemen izin.

**catatan**  
Anda menambahkan kebijakan yang memungkinkan tindakan hanya berdasarkan kondisi tertentu. Jika Anda menerapkan kebijakan yang berbeda kepada pengguna atau peran Anda yang memiliki izin lebih luas, maka tindakan tersebut mungkin tidak akan dibatasi untuk memerlukan penandaan. Misalnya, jika Anda memberi pengguna izin administratif penuh menggunakan kebijakan `AdministratorAccess` AWS terkelola, kebijakan ini tidak membatasi akses tersebut. Untuk informasi selengkapnya tentang bagaimana izin ditentukan saat beberapa kebijakan dilibatkan, lihat [Bagaimana logika kode AWS penegakan mengevaluasi permintaan untuk mengizinkan atau menolak akses](reference_policies_evaluation-logic_policy-eval-denyallow.md).

# Tutorial IAM: Izinkan pengguna untuk mengelola kredensi dan pengaturan MFA mereka
<a name="tutorial_users-self-manage-mfa-and-creds"></a>

**Anda dapat mengizinkan pengguna untuk mengelola perangkat dan kredensialnya sendiri multi-faktor autentikasi (MFA) di halaman Kredensial Keamanan.** Anda dapat menggunakan Konsol Manajemen AWS untuk mengonfigurasi kredensi (kunci akses, kata sandi, sertifikat penandatanganan, dan kunci publik SSH), menghapus atau menonaktifkan kredenal yang tidak diperlukan, dan mengaktifkan perangkat MFA untuk pengguna Anda. Ini berguna untuk sejumlah kecil pengguna, tetapi tugas itu dapat dengan cepat memakan waktu seiring bertambahnya jumlah pengguna. Tutorial ini menunjukkan cara mengaktifkan praktik terbaik tersebut tanpa membebani administrator Anda.

Tutorial ini menunjukkan cara mengizinkan pengguna mengakses AWS layanan, tetapi **hanya** ketika mereka masuk dengan MFA. Jika mereka belum masuk dengan perangkat MFA, maka pengguna tidak dapat mengakses layanan lainnya.

Alur kerja ini memiliki tiga langkah dasar. 

**[Langkah 1: Buat kebijakan untuk menerapkan masuk MFA](#tutorial_mfa_step1)**  
Buat kebijakan terkelola pelanggan yang melarang semua tindakan ***kecuali*** beberapa tindakan IAM. **Pengecualian ini memungkinkan pengguna untuk mengubah kredensialnya sendiri dan mengelola perangkat MFA mereka di halaman kredensi Keamanan.** Untuk informasi selengkapnya tentang mengakses halaman tersebut, lihat [Cara pengguna IAM mengubah kata sandi mereka sendiri (konsol)](id_credentials_passwords_user-change-own.md#ManagingUserPwdSelf-Console).

**[Langkah 2: Lampirkan kebijakan ke grup pengguna uji Anda](#tutorial_mfa_step2)**  
Buat grup pengguna yang anggotanya memiliki akses penuh ke semua tindakan Amazon EC2 jika mereka masuk dengan MFA. Untuk membuat grup pengguna seperti itu, Anda melampirkan kebijakan AWS terkelola yang disebut `AmazonEC2FullAccess` dan kebijakan terkelola pelanggan yang Anda buat pada langkah pertama.

**[Langkah 3: Uji akses pengguna Anda](#tutorial_mfa_step3)**  
Masuk sebagai pengguna uji untuk memverifikasi bahwa akses ke Amazon EC2 diblokir *hingga* pengguna membuat perangkat MFA. Pengguna kemudian dapat masuk menggunakan perangkat tersebut. 

## Prasyarat
<a name="tutorial_mfa_prereqs"></a>

Untuk melakukan langkah-langkah di tutorial ini, Anda harus sudah memiliki hal-hal berikut:
+ Sebuah Akun AWS yang dapat Anda masuki sebagai pengguna IAM dengan izin administratif.
+ Nomor ID akun Anda, yang Anda ketikkan ke dalam kebijakan di Langkah 1. 

  Untuk menemukan nomor ID akun Anda, di bilah navigasi di bagian atas halaman, pilih **Dukungan** lalu pilih **Pusat Dukungan**. Anda dapat menemukan ID akun Anda di menu **Dukungan** di halaman ini. 
+ [Perangkat MFA [virtual (berbasis perangkat lunak), [kunci keamanan FIDO](id_credentials_mfa_enable_fido.md), atau perangkat MFA](id_credentials_mfa_enable_virtual.md) berbasis perangkat keras.](id_credentials_mfa_enable_physical.md)
+ Uji pengguna IAM yang merupakan anggota grup pengguna sebagai berikut:


| Nama pengguna | Instruksi nama pengguna | Nama grup pengguna | Tambahkan pengguna sebagai anggota | Instruksi grup pengguna | 
| --- | --- | --- | --- | --- | 
| MFAUser | Pilih hanya opsi untuk Aktifkan akses konsol — opsional, dan tetapkan kata sandi. | EC2MFA | MFAUser | JANGAN lampirkan kebijakan apa pun atau memberikan izin ke grup pengguna ini. | 

## Langkah 1: Buat kebijakan untuk menerapkan masuk MFA
<a name="tutorial_mfa_step1"></a>

Anda memulai dengan membuat kebijakan terkelola pelanggan IAM yang menolak semua izin kecuali izin yang diperlukan oleh pengguna IAM untuk mengelola kredensial dan perangkat MFA mereka sendiri.

1. Masuk ke Konsol AWS Manajemen sebagai pengguna dengan kredensi administrator. Untuk mematuhi praktik terbaik IAM, jangan masuk dengan Pengguna root akun AWS kredensi Anda.
**penting**  
 [Praktik terbaik](best-practices.md) IAM merekomendasikan agar Anda mengharuskan pengguna manusia untuk menggunakan federasi dengan penyedia identitas untuk mengakses AWS menggunakan kredensi sementara alih-alih menggunakan pengguna IAM dengan kredensi jangka panjang. Kami menyarankan Anda hanya menggunakan pengguna IAM untuk [kasus penggunaan tertentu](gs-identities-iam-users.md) yang tidak didukung oleh pengguna federasi.

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

   

1. Pada panel navigasi, pilih **Kebijakan**, lalu pilih **Buat kebijakan**.

1. Pilih tab **JSON** dan salin teks dari dokumen kebijakan JSON berikut: [AWS: Memungkinkan pengguna IAM yang diautentikasi MFA untuk mengelola kredensialnya sendiri di halaman kredensi Keamanan](reference_policies_examples_aws_my-sec-creds-self-manage.md).

1. Tempelkan teks kebijakan ke dalam kotak teks **JSON**. **Selesaikan peringatan keamanan, kesalahan, atau peringatan umum yang dihasilkan selama validasi kebijakan, lalu pilih Berikutnya.**
**catatan**  
Anda dapat beralih antara **editor Visual** dan opsi **JSON** kapan saja. Namun, kebijakan di atas mencakup unsur `NotAction` yang tidak didukung di editor visual. Untuk kebijakan ini, Anda akan melihat pemberitahuan di tab **Editor visual**. Kembali ke **JSON** untuk terus bekerja dengan kebijakan ini.  
Kebijakan contoh ini tidak mengizinkan pengguna untuk mengatur ulang kata sandi saat masuk Konsol Manajemen AWS untuk pertama kalinya. Kami menyarankan Anda untuk tidak memberikan izin kepada pengguna baru sampai setelah mereka masuk dan mengatur ulang kata sandi mereka.

1. Pada halaman **Tinjau dan buat**, ketik **Force\$1MFA** nama kebijakan. Untuk deskripsi kebijakan, ketik **This policy allows users to manage their own passwords and MFA devices but nothing else unless they authenticate with MFA.** Di area **Tag**, Anda dapat menambahkan pasangan nilai kunci tag secara opsional ke kebijakan yang dikelola pelanggan. Tinjau izin yang diberikan oleh kebijakan Anda, lalu pilih **Buat kebijakan** untuk menyimpan pekerjaan Anda.

   Kebijakan baru muncul di daftar kebijakan terkelola dan siap dilampirkan.

## Langkah 2: Lampirkan kebijakan ke grup pengguna uji Anda
<a name="tutorial_mfa_step2"></a>

Selanjutnya Anda melampirkan dua kebijakan ke grup pengguna IAM pengujian, yang akan digunakan untuk memberikan izin yang dilindungi MFA.

1. Pada panel navigasi, pilih **User groups** (Grup pengguna).

1. Di kotak pencarian, ketik **`EC2MFA`**, lalu pilih nama grup (bukan kotak centang) dalam daftar. 

1. Pilih tab **Izin**, pilih **Tambahkan izin**, lalu pilih **Lampirkan** kebijakan.

1. Pada halaman **Lampirkan kebijakan izin ke grup EC2 MFA**, di kotak pencarian, ketik. **EC2Full** Kemudian pilih kotak centang di sebelah **Amazon EC2 FullAccess** dalam daftar. Jangan menyimpan perubahan Anda.

1. Di kotak pencarian, ketik**Force**, lalu pilih kotak centang di sebelah **Force\$1MFA** dalam daftar. 

1. Pilih **Lampirkan kebijakan**.

## Langkah 3: Uji akses pengguna Anda
<a name="tutorial_mfa_step3"></a>

Di bagian tutorial ini, Anda masuk sebagai pengguna uji dan memverifikasi bahwa kebijakan berjalan sebagaimana mestinya.

1. Masuk ke Anda Akun AWS sebagai **MFAUser** dengan kata sandi yang Anda tetapkan di bagian sebelumnya. Gunakan URL: `https://<alias or account ID number>.signin.aws.amazon.com/console`

1. Pilih **EC2** untuk membuka konsol Amazon EC2 dan memverifikasi bahwa pengguna tidak memiliki izin untuk melakukan apa pun.

1. Di bilah navigasi di kanan atas, pilih nama `MFAUser` pengguna, lalu pilih **Kredensi keamanan**.   
![\[AWS Tautan kredensi Keamanan Konsol Manajemen.\]](http://docs.aws.amazon.com/id_id/IAM/latest/UserGuide/images/security-credentials-user.shared.console.png)

1. Sekarang, tambahkan perangkat MFA. Di bagian **Multi-Factor Authentication (MFA)**, pilih **Tetapkan perangkat MFA**.
**catatan**  
Anda mungkin menerima kesalahan bahwa Anda tidak berwenang untuk melakukan `iam:DeleteVirtualMFADevice`. Hal ini dapat terjadi jika sebelumnya seseorang mulai menetapkan perangkat MFA virtual ke pengguna ini dan membatalkan proses. Untuk melanjutkan, Anda atau administrator lain harus menghapus perangkat MFA virtual pengguna yang belum ditetapkan. Untuk informasi selengkapnya, lihat [Saya tidak berwenang untuk melakukan: iam: DeleteVirtual MFADevice](troubleshoot.md#troubleshoot_general_access-denied-delete-mfa).

1. Untuk tutorial ini, kami menggunakan perangkat MFA virtual (berbasis perangkat lunak), seperti aplikasi Google Authenticator di ponsel. Pilih **aplikasi Authenticator**, lalu klik **Berikutnya**.

   IAM menghasilkan dan menampilkan informasi konfigurasi untuk perangkat MFA virtual, termasuk grafik kode QR. Grafik adalah representasi kunci konfigurasi rahasia yang tersedia untuk entri manual pada perangkat yang tidak mendukung kode QR.

1. Buka aplikasi MFA virtual Anda. (Untuk daftar aplikasi yang dapat Anda gunakan untuk meng-host perangkat MFA virtual, lihat [Aplikasi MFA Virtual](https://aws.amazon.com/iam/details/mfa/#Virtual_MFA_Applications).) Jika aplikasi MFA virtual mendukung beberapa akun (beberapa perangkat MFA virtual), pilih opsi untuk membuat akun baru (perangkat MFA virtual baru).

1. Tentukan apakah aplikasi MFA mendukung kode QR, kemudian lakukan salah satu hal berikut:
   + Dari wizard, pilih **Tampilkan kode QR**. Lalu gunakan aplikasi untuk memindai kode QR. Misalnya, Anda dapat memilih ikon kamera atau memilih opsi yang mirip dengan **Pindai kode**, lalu gunakan kamera perangkat untuk memindai kode.
   + Di wizard **Siapkan perangkat**, pilih **Tampilkan kunci rahasia**, lalu ketik kunci rahasia ke dalam aplikasi MFA Anda.

   Saat Anda selesai, perangkat MFA virtual mulai membuat kata sandi sekali pakai. 

1. Di wizard **Menyiapkan perangkat**, di **Masukkan kode dari aplikasi autentikator Anda**. kotak, ketik kata sandi satu kali yang saat ini muncul di perangkat MFA virtual. Pilih **Daftar MFA**. 
**penting**  
Kirim permintaan Anda segera setelah membuat kode. Jika Anda membuat kode dan kemudian menunggu terlalu lama untuk mengirimkan permintaan, perangkat MFA berhasil dikaitkan dengan pengguna. Namun, perangkat MFA tidak sinkron. Hal ini terjadi karena kata sandi sekali pakai berbasis waktu (TOTP) kedaluwarsa setelah periode waktu yang singkat. Jika ini terjadi, Anda dapat [menyinkronisasi ulang perangkat](id_credentials_mfa_sync.md).

   Perangkat MFA virtual sekarang siap digunakan. AWS

1. Keluar dari konsol lalu masuk sebagai **MFAUser** lagi. Kali ini AWS meminta Anda untuk kode MFA dari ponsel Anda. Saat Anda mendapatkannya, ketik kode di kotak, lalu pilih **Kirim**.

1. Pilih **EC2** untuk membuka konsol Amazon EC2 lagi. Perhatikan bahwa saat ini Anda dapat melihat semua informasi dan melakukan tindakan apa pun yang Anda inginkan. Jika Anda mengunjungi konsol lain sebagai pengguna ini, Anda melihat akses pesan yang ditolak. Alasannya adalah kebijakan dalam tutorial ini hanya dapat diakses oleh Amazon EC2 

## Sumber daya terkait
<a name="tutorial_mfa_related"></a>

Untuk informasi tambahan, lihat topik berikut:
+ [AWS Otentikasi multi-faktor di IAM](id_credentials_mfa.md)
+ [MFA mengaktifkan login](console_sign-in-mfa.md)

# Tutorial IAM: Gunakan CloudFormation template untuk membuat Penyedia Identitas SAMP (iDP)
<a name="tutorial_saml-idp"></a>

Untuk mengatur federasi SAMP untuk AWS akun Anda, Anda perlu membuat Penyedia Identitas SAMP (IDP). Tutorial ini menunjukkan cara menggunakan CloudFormation template untuk membuat IDP SAMP yang membangun kepercayaan AWS antara dan IDP eksternal Anda.

Template membuat IDP SAMP yang dikonfigurasi dengan dokumen metadata iDP Anda. Peran IAM federasi kemudian dapat mereferensikan IDP ini untuk memungkinkan pengguna yang diautentikasi dari iDP eksternal Anda mengakses sumber daya. AWS 

Sumber daya yang digunakan terdiri dari IDP SAMP yang dikonfigurasi dengan dokumen metadata iDP Anda dan pengaturan enkripsi opsional.

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

Tutorial ini mengasumsikan bahwa Anda telah melakukan hal berikut:
+ 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.
+ Sebuah dokumen metadata SAMP dari IDP eksternal Anda disimpan sebagai file XHTML.

## Buat SAMP iDP menggunakan CloudFormation
<a name="tutorial_saml-idp-create"></a>

Untuk membuat SAMP iDP, Anda akan membuat template dan menggunakannya untuk CloudFormation membuat tumpukan yang berisi sumber daya iDP.

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

Pertama, buat CloudFormation template.

1. Di [Templat](#tutorial_saml-idp-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-idp-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 **IdentityProviderName**, Anda dapat membiarkan ini kosong untuk menghasilkan nama secara otomatis berdasarkan nama tumpukan, atau memasukkan nama khusus untuk IDP SAMP Anda. Nama kustom harus hanya berisi karakter alfanumerik, titik, garis bawah, dan tanda hubung.

   1. Untuk **IdentityProviderSAMLMetadataDokumen**, Anda perlu memformat file XMLSAM metadata Anda sebagai satu baris sebelum menempelkannya ke bidang ini. Hal ini diperlukan karena CloudFormation konsol memerlukan konten XHTML untuk diformat sebagai satu baris ketika melewati parameter konsol.

      Gunakan perintah Python berikut untuk memformat ulang file XMLmu:

      ```
      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
      ```
**catatan**  
Dokumen metadata SAMP iDP harus diformat sebagai satu baris untuk input parameter konsol. Perintah Python menghapus jeda baris dan spasi tambahan untuk membuat format yang diperlukan sambil mempertahankan semua konten dan struktur asli.

      Salin output dari perintah Python dan tempelkan ke bidang **IdentityProviderSAMLMetadataDokumen**.

      Contoh dokumen metadata SAMP yang diformat (disingkat):

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

   1. Untuk parameter lain, terima nilai default atau masukkan sendiri berdasarkan kebutuhan Anda:
      + **IdentityProviderAddPrivateKey**- Kunci pribadi opsional untuk mendekripsi pernyataan SAMP
      + **IdentityProviderAssertionEncryptionMode**- Opsional, mengatur mode enkripsi untuk pernyataan SAMP (Diizinkan, Diperlukan, atau kosong)

   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-nilai berikut, yang dapat Anda lihat di tab **Output**:
+ **ProviderArn**: ARN dari SAMP iDP yang dibuat (misalnya,). `arn:aws:iam::123456789012:saml-provider/CompanyIdP` Anda memerlukan ARN ini saat membuat peran yang mempercayai penyedia ini.
+ **ProviderName**: Nama SAMP iDP yang dibuat (misalnya`CompanyIdP`, jika Anda menentukan nama kustom, `my-saml-stack-saml-provider` atau jika Anda menggunakan penamaan default).

Output ini juga diekspor, memungkinkan mereka untuk diimpor oleh CloudFormation tumpukan lain menggunakan fungsi. `Fn::ImportValue`

## Verifikasi IDP SAMP
<a name="tutorial_saml-idp-using"></a>

Setelah IDP SAMP dibuat, Anda dapat memverifikasi konfigurasinya dan mencatat ARN untuk digunakan dengan peran federasi.

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

1. Pada panel navigasi, silakan pilih **Penyedia identitas**.

   Anda akan melihat SAMP IDP yang baru dibuat dalam daftar.

1. Pilih nama iDP untuk melihat detailnya.

   Pada halaman detail iDP, Anda dapat melihat dokumen metadata SAMP dan detail konfigurasi lainnya.

1. Perhatikan **Penyedia ARN** ditampilkan di halaman detail.

   Anda akan membutuhkan ARN ini saat membuat peran IAM federasi yang mempercayai IDP ini.

1. Tinjau dokumen metadata untuk memastikannya sesuai dengan apa yang Anda berikan dari iDP eksternal Anda.

IDP SAMP Anda sekarang siap digunakan oleh peran IAM federasi. Anda dapat membuat peran yang mempercayai IDP ini untuk memungkinkan pengguna yang diautentikasi dari iDP eksternal Anda untuk mengambil peran tersebut dan mengakses sumber daya. AWS 

## Bersihkan: hapus sumber daya
<a name="tutorial_saml-idp-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-idp-template-details"></a>

### Sumber daya
<a name="tutorial_saml-idp-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-samlprovider.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-samlprovider.html): IDP SAMP yang membangun kepercayaan AWS antara dan IDP eksternal Anda.

### Konfigurasi
<a name="tutorial_saml-idp-template-config"></a>

Template mencakup parameter yang dapat dikonfigurasi berikut:
+ **IdentityProviderName**- Nama untuk SAMP iDP Anda (biarkan kosong untuk nama yang dibuat secara otomatis)

  Contoh: `CompanyIdP` atau `EnterpriseSSO`
+ **IdentityProviderSAMLMetadataDokumen - Dokumen** metadata SAMP dari IDP eksternal Anda (diformat sebagai satu baris)
+ **IdentityProviderAddPrivateKey**- Kunci pribadi opsional untuk mendekripsi pernyataan SAMP
+ **IdentityProviderAssertionEncryptionMode**- Opsional, mengatur mode enkripsi untuk pernyataan SAMP

## CloudFormation Template
<a name="tutorial_saml-idp-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-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'
```

------

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

------

# Tutorial IAM: Gunakan CloudFormation template untuk membuat Saml Identity Provider (iDP) dan peran IAM federasi SAMP
<a name="tutorial_saml-idp-and-federated-role"></a>

Untuk membiasakan diri dengan federasi SAMP dan kemampuannya, Anda akan menggunakan CloudFormation template untuk menyiapkan Penyedia Identitas SAMP (iDP) dan peran IAM federasi terkait. Tutorial ini menunjukkan cara membuat kedua sumber daya bersama-sama dalam satu tumpukan.

Template membuat IDP SAMP yang dapat digunakan untuk akses federasi AWS ke sumber daya, bersama dengan peran IAM yang mempercayai penyedia SAMP. Pengguna yang diautentikasi oleh iDP eksternal Anda dapat mengambil peran ini untuk AWS mengakses sumber daya.

Sumber daya yang digunakan terdiri dari yang berikut:
+ IDP SAMP dikonfigurasi dengan dokumen metadata iDP Anda.
+ Peran IAM federasi yang mempercayai SAMP iDP dan dapat diasumsikan oleh pengguna yang diautentikasi.
+ Kebijakan terkelola yang dapat dikonfigurasi yang dapat dilampirkan ke peran untuk memberikan izin tertentu.

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

Tutorial ini mengasumsikan bahwa Anda telah melakukan hal berikut:
+ 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.
+ Sebuah dokumen metadata SAMP dari IDP eksternal Anda disimpan sebagai file XHTML.

## Buat IDP SAMP dan peran menggunakan CloudFormation
<a name="tutorial_saml-idp-and-federated-role-create"></a>

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

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

Pertama, buat CloudFormation template.

1. Di [Templat](#tutorial_saml-idp-and-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-idp-and-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 **IdentityProviderName**, Anda dapat membiarkan ini kosong untuk menghasilkan nama secara otomatis berdasarkan nama tumpukan, atau memasukkan nama khusus untuk IDP SAMP Anda.

      Contoh: `CompanyIdP` atau `EnterpriseSSO`

   1. Untuk **IdentityProviderSAMLMetadataDokumen**, Anda perlu memformat file XMLSAM metadata Anda sebagai satu baris sebelum menempelkannya ke bidang ini. Hal ini diperlukan karena CloudFormation konsol memerlukan konten XHTML untuk diformat sebagai satu baris ketika melewati parameter konsol.

      Gunakan perintah Python berikut untuk memformat ulang file XMLmu:

      ```
      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
      ```
**catatan**  
Dokumen metadata SAMP iDP harus diformat sebagai satu baris untuk input parameter konsol. Perintah Python menghapus jeda baris dan spasi tambahan untuk membuat format yang diperlukan sambil mempertahankan semua konten dan struktur asli.

      Salin output dari perintah Python dan tempelkan ke bidang **IdentityProviderSAMLMetadataDokumen**.

      Contoh dokumen metadata SAMP yang diformat (disingkat):

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

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

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

   1. Untuk parameter lain, terima nilai default atau masukkan sendiri berdasarkan kebutuhan Anda:
      + **IdentityProviderAddPrivateKey**- Kunci pribadi opsional untuk mendekripsi pernyataan SAMP
      + **IdentityProviderAssertionEncryptionMode**- Mode enkripsi untuk pernyataan SAMP

        Contoh nilai:`Allowed`,`Required`, atau biarkan kosong tanpa enkripsi
      + **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 (default adalah/)

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

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

        Contoh untuk RoleManagedPolicy 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-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).
+ **IdentityProviderARN: ARN** dari SAMP iDP yang dibuat (misalnya,). `arn:aws:iam::123456789012:saml-provider/CompanyIdP`

Anda akan memerlukan keduanya ARNs saat mengonfigurasi IDP Anda untuk mengirim atribut SAMP yang sesuai untuk asumsi peran.

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

Setelah IDP SAMP dan peran federasi telah dibuat, Anda dapat menguji pengaturan federasi.

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

1. Pada panel navigasi, silakan pilih **Penyedia identitas**.

   Anda akan melihat SAMP IDP yang baru dibuat dalam daftar.

1. Pilih nama iDP untuk melihat detailnya.

   Pada halaman detail iDP, Anda dapat melihat dokumen metadata SAMP dan detail konfigurasi lainnya.

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

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

   Pada halaman detail peran, Anda dapat melihat kebijakan kepercayaan yang memungkinkan IDP SAMP untuk mengambil peran ini.

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

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

## Bersihkan: hapus sumber daya
<a name="tutorial_saml-idp-and-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-idp-and-federated-role-template-details"></a>

### Sumber daya
<a name="tutorial_saml-idp-and-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-samlprovider.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-samlprovider.html): IDP SAMP yang membangun kepercayaan AWS antara dan IDP eksternal 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.

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

Template mencakup parameter yang dapat dikonfigurasi berikut:
+ **IdentityProviderName**- Nama SAMP iDP (biarkan kosong untuk nama yang dibuat secara otomatis)
+ **IdentityProviderSAMLMetadataDocument - Dokumen** metadata SAMP dari IDP Anda (wajib)
+ **IdentityProviderAddPrivateKey**- Kunci pribadi opsional untuk mendekripsi pernyataan SAMP
+ **IdentityProviderAssertionEncryptionMode**- Mode enkripsi untuk pernyataan SAMP
+ **RoleName**- Nama Peran IAM (biarkan kosong untuk nama yang dihasilkan secara otomatis)
+ **RolePath**- Jalur untuk peran IAM (default/)
+ **RolePermissionsBoundary**- ARN opsional kebijakan batas izin
+ **RoleSessionDuration**- Durasi sesi maksimum dalam hitungan detik (3600-43200, default 7200)
+ **RoleManagedPolicy1-5** - Opsional ARNs hingga 5 kebijakan terkelola untuk dilampirkan

## CloudFormation template
<a name="tutorial_saml-idp-and-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-idp-and-federated-role",
  "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"]
    },
    "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 +=,.@-"
    },
    "RolePath": {
      "Type": "String",
      "Description": "Path for the IAM Role",
      "AllowedPattern": "(^\\/$)|(^\\/.*\\/$)",
      "Default": "/"
    },
    "RolePermissionsBoundary": {
      "Type": "String",
      "Description": "Optional ARN of the permissions boundary policy (leave empty for none)",
      "Default": ""
    },
    "RoleSessionDuration": {
      "Description": "The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)",
      "Type": "Number",
      "MinValue": 3600,
      "MaxValue": 43200,
      "Default": 7200
    },
    "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": {
    "HasCustomProviderName": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderName"}, ""]}]},
    "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"}, ""]}]},
    "HasPrivateKey": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderAddPrivateKey"}, ""]}]},
    "HasAssertionEncryptionMode": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderAssertionEncryptionMode"}, ""]}]}
  },
  "Resources": {
    "SAMLProvider": {
      "Type": "AWS::IAM::SAMLProvider",
      "Properties": {
        "Name": {"Fn::If": ["HasCustomProviderName", {"Ref": "IdentityProviderName"}, {"Ref": "AWS::NoValue"}]},
        "SamlMetadataDocument": {"Ref": "IdentityProviderSAMLMetadataDocument"},
        "AddPrivateKey": {"Fn::If": ["HasPrivateKey", {"Ref": "IdentityProviderAddPrivateKey"}, {"Ref": "AWS::NoValue"}]},
        "AssertionEncryptionMode": {"Fn::If": ["HasAssertionEncryptionMode", {"Ref": "IdentityProviderAssertionEncryptionMode"}, {"Ref": "AWS::NoValue"}]}
      }
    },
    "SAMLFederatedRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": {"Fn::If": ["HasCustomRoleName", {"Ref": "RoleName"}, {"Ref": "AWS::NoValue"}]},
        "Path": {"Ref": "RolePath"},
        "Description": "SAML federated IAM role for SSO access with specified permissions",
        "MaxSessionDuration": {"Ref": "RoleSessionDuration"},
        "PermissionsBoundary": {"Fn::If": ["HasPermissionsBoundary", {"Ref": "RolePermissionsBoundary"}, {"Ref": "AWS::NoValue"}]},
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Federated": {"Ref": "SAMLProvider"}
              },
              "Action": [
                "sts:AssumeRole",
                "sts:SetSourceIdentity",
                "sts:TagSession"
              ],
              "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"}
      }
    },
    "IdentityProviderARN": {
      "Description": "ARN of the created SAML Identity Provider",
      "Value": {"Ref": "SAMLProvider"},
      "Export": {
        "Name": {"Fn::Sub": "${AWS::StackName}-IdentityProviderARN"}
      }
    }
  }
}
```

------
#### [ YAML ]

```
AWSTemplateFormatVersion: '2010-09-09'
Description: '[AWSDocs] IAM: tutorial_saml-idp-and-federated-role'

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"

  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 +=,.@-"

  RolePath:
    Type: String
    Description: Path for the IAM Role
    AllowedPattern: (^\/$)|(^\/.*\/$)
    Default: "/"

  RolePermissionsBoundary:
    Type: String
    Description: Optional ARN of the permissions boundary policy (leave empty for none)
    Default: ""
    
  RoleSessionDuration:
    Description: The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)
    Type: Number
    MinValue: 3600
    MaxValue: 43200
    Default: 7200

  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:
  HasCustomProviderName: !Not [!Equals [!Ref IdentityProviderName, ""]]
  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, ""]]
  HasPrivateKey: !Not [!Equals [!Ref IdentityProviderAddPrivateKey, ""]]
  HasAssertionEncryptionMode: !Not [!Equals [!Ref IdentityProviderAssertionEncryptionMode, ""]]

Resources:
  SAMLProvider:
    Type: AWS::IAM::SAMLProvider
    Properties:
      Name: !If
        - HasCustomProviderName
        - !Ref IdentityProviderName
        - !Ref AWS::NoValue
      SamlMetadataDocument: !Ref IdentityProviderSAMLMetadataDocument
      AddPrivateKey: !If
        - HasPrivateKey
        - !Ref IdentityProviderAddPrivateKey
        - !Ref AWS::NoValue
      AssertionEncryptionMode: !If
        - HasAssertionEncryptionMode
        - !Ref IdentityProviderAssertionEncryptionMode
        - !Ref AWS::NoValue

  SAMLFederatedRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !If
        - HasCustomRoleName
        - !Ref RoleName
        - !Ref AWS::NoValue
      Path: !Ref RolePath
      Description: "SAML federated IAM role for SSO access with specified permissions"
      MaxSessionDuration: !Ref RoleSessionDuration
      PermissionsBoundary: !If
        - HasPermissionsBoundary
        - !Ref RolePermissionsBoundary
        - !Ref AWS::NoValue
      AssumeRolePolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
          - Effect: Allow
            Principal:
              Federated: !Ref SAMLProvider
            Action:
              - 'sts:AssumeRole'
              - 'sts:SetSourceIdentity'
              - 'sts:TagSession'
            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'

  IdentityProviderARN:
    Description: ARN of the created SAML Identity Provider
    Value: !Ref SAMLProvider
    Export:
      Name: !Sub '${AWS::StackName}-IdentityProviderARN'
```

------