

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

# Menggunakan kontrol akses berbasis peran
<a name="role-based-access-control"></a>

Kumpulan identitas Amazon Cognito menetapkan pengguna Anda yang diautentikasi satu set kredensil hak istimewa terbatas sementara untuk mengakses sumber daya Anda. AWS Izin untuk setiap pengguna dikendalikan melalui [IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) yang Anda buat. Anda dapat menentukan aturan untuk memilih peran bagi setiap pengguna berdasarkan klaim di token ID pengguna. Anda dapat menentukan peran default untuk pengguna terautentikasi. Anda juga dapat menentukan IAM role terpisah dengan izin terbatas untuk pengguna tamu yang tidak terauntetikasi.

## Membuat peran untuk pemetaan peran
<a name="creating-roles-for-role-mapping"></a>

Penting untuk menambahkan kebijakan kepercayaan yang tepat untuk setiap peran sehingga peran tersebut hanya dapat diasumsikan oleh Amazon Cognito untuk pengguna terautentikasi dalam kolam identitas Anda. Berikut adalah contoh kebijakan kepercayaan tersebut:

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "authenticated"
        }
      }
    }
  ]
}
```

------

Kebijakan ini mengizinkan pengguna gabungan dari `cognito-identity.amazonaws.com` (penerbit token OpenID Connect) untuk mengambil peran ini. Selain itu, kebijakan membatasi `aud` pada token, dalam hal ini ID kolam identitas, untuk mencocokkan kolam identitas tersebut. Terakhir, kebijakan menetapkan bahwa salah satu anggota array dari `amr` klaim multi-nilai token yang dikeluarkan oleh tindakan Amazon `GetOpenIdToken` Cognito API memiliki nilai. `authenticated`

## Memberikan izin peran masuk
<a name="granting-pass-role-permission"></a>

Untuk memungkinkan pengguna menyetel peran dengan izin melebihi izin pengguna yang ada di kumpulan identitas, beri mereka `iam:PassRole` izin untuk meneruskan peran tersebut `set-identity-pool-roles` ke API. Sebagai contoh, jika pengguna tidak dapat menulis ke Amazon S3, tetapi IAM role yang ditetapkan pengguna pada kolam identitas memberikan izin menulis ke Amazon S3, pengguna hanya dapat mengatur peran ini jika izin `iam:PassRole` diberikan untuk peran tersebut. Contoh kebijakan berikut menunjukkan cara memberikan izin `iam:PassRole`.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myS3WriteAccessRole"
            ]
        }
    ]
}
```

------

Dalam contoh kebijakan ini, izin `iam:PassRole` diberikan untuk peran `myS3WriteAccessRole`. Peran ditentukan menggunakan Amazon Resource Name (ARN) peran. Anda juga harus melampirkan kebijakan ini kepada pengguna Anda. Untuk informasi lebih lanjut, lihat [Bekerja dengan Kebijakan Terkelola](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html).

**catatan**  
Fungsi Lambda menggunakan kebijakan berbasis sumber daya, dan kebijakan tersebut melekat langsung ke fungsi Lambda itu sendiri. Saat membuat aturan yang memanggil fungsi Lambda, Anda tidak lulus peran, sehingga pengguna yang membuat aturan tidak memerlukan izin `iam:PassRole`. Untuk informasi selengkapnya tentang otorisasi fungsi Lambda, lihat [Kelola Izin: Menggunakan Kebijakan Fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#intro-permission-model-access-policy).

## Menggunakan token untuk menetapkan peran kepada pengguna
<a name="using-tokens-to-assign-roles-to-users"></a>

Untuk pengguna yang masuk melalui kolam pengguna Amazon Cognito, peran dapat dilewatkan di token ID yang ditetapkan oleh kolam pengguna. Peran muncul dalam klaim berikut di token ID:
+ Klaim `cognito:preferred_role` adalah ARN peran.
+ `cognito:roles`Klaim adalah string yang dipisahkan koma yang berisi serangkaian peran yang diizinkan. ARNs

Klaim ditetapkan sebagai berikut:
+ Klaim `cognito:preferred_role` diatur untuk peran dari grup dengan nilai yang terbaik (terendah) `Precedence`. Jika hanya ada satu peran diizinkan, `cognito:preferred_role` diatur ke peran itu. Jika ada beberapa peran dan tidak ada peran tunggal yang memiliki contoh terbaik, klaim ini tidak ditetapkan.
+ Klaim `cognito:roles` ditetapkan jika ada setidaknya satu peran.

Saat menggunakan token untuk menetapkan peran, jika ada beberapa peran yang dapat ditetapkan ke pengguna, kolam identitas Amazon Cognito (identitas gabungan) memilih peran sebagai berikut:
+ Gunakan [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)`CustomRoleArn`parameter jika disetel dan cocok dengan peran dalam `cognito:roles` klaim. Jika parameter ini tidak cocok dengan peran di`cognito:roles`, tolak akses.
+ Jika klaim `cognito:preferred_role` ditetapkan, gunakan klaim tersebut.
+ Jika `cognito:preferred_role` klaim tidak disetel, `cognito:roles` klaim disetel, dan tidak `CustomRoleArn` ditentukan dalam panggilan ke`GetCredentialsForIdentity`, maka pengaturan **Resolusi peran** di konsol atau `AmbiguousRoleResolution` bidang (dalam `RoleMappings` parameter [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API) digunakan untuk menentukan peran yang akan ditetapkan.

## Menggunakan pemetaan berbasis aturan untuk menetapkan peran kepada pengguna
<a name="using-rules-to-assign-roles-to-users"></a>

Aturan memungkinkan Anda memetakan klaim dari token penyedia identitas ke IAM role.

Setiap aturan menentukan klaim token (seperti atribut pengguna di token ID dari kolam pengguna Amazon Cognito), jenis kecocokan, nilai, dan IAM role. Jenis pertandingan dapat `Equals`, `NotEqual`, `StartsWith`, atau `Contains`. Jika pengguna memiliki nilai yang cocok untuk klaim, pengguna dapat mengambil peran itu ketika mendapatkan kredensialnya. Misalnya, Anda dapat membuat aturan yang menetapkan IAM role tertentu untuk pengguna dengan nilai atribut kustom `custom:dept` dari `Sales`. 

**catatan**  
Dalam setelan aturan, atribut khusus memerlukan prefiks `custom:` untuk membedakannya dari atribut standar.

Aturan dievaluasi secara berurutan, dan IAM role untuk aturan pencocokan pertama digunakan, kecuali `CustomRoleArn` ditentukan untuk mengesampingkan urutan tersebut. Untuk informasi selengkapnya tentang atribut pengguna di kolam pengguna Amazon Cognito, lihat [Bekerja dengan atribut pengguna](user-pool-settings-attributes.md).

Anda dapat menetapkan beberapa aturan untuk penyedia autentikasi di konsol kolam identitas (identitas gabungan). Aturan diterapkan secara berurutan. Anda dapat menyeret aturan untuk mengubah urutannya. Aturan pencocokan pertama diutamakan. Jika jenis kecocokan adalah `NotEqual` dan klaim tidak ada, aturan tidak dievaluasi. Jika tidak ada aturan yang cocok, **setelan resolusi Peran** diterapkan ke salah satu **Gunakan peran default yang diautentikasi** atau **permintaan Tolak**.

Di API dan CLI, Anda dapat menentukan peran yang akan ditetapkan ketika tidak ada aturan yang cocok di `AmbiguousRoleResolution` bidang [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html)tipe, yang ditentukan dalam `RoleMappings` parameter API. [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)

**Untuk menambahkan pemetaan berbasis aturan ke penyedia identitas di konsol Amazon Cognito, tambahkan atau perbarui iDP dan pilih **Pilih** peran dengan aturan di bawah Pemilihan peran.** Dari sana, Anda dapat menambahkan aturan yang diklaim penyedia peta ke peran IAM.

Anda dapat mengatur pemetaan berbasis aturan untuk penyedia identitas di AWS CLI atau API dengan `RulesConfiguration` bidang jenisnya. [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html) Anda dapat menentukan bidang ini dalam `RoleMappings` parameter [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API.

Misalnya, AWS CLI perintah berikut menambahkan aturan yang menetapkan peran `arn:aws:iam::123456789012:role/Sacramento_team_S3_admin` kepada pengguna di lokasi Sacramento Anda yang diautentikasi oleh OIDC iDP: `arn:aws:iam::123456789012:oidc-provider/myOIDCIdP`

```
aws cognito-identity set-identity-pool-roles --region us-east-1 --cli-input-json file://role-mapping.json
```

**Isi dari `role-mapping.json`**:

```
{
    "IdentityPoolId": "us-east-1:12345678-corner-cafe-123456790ab",
    "Roles": {
        "authenticated": "arn:aws:iam::123456789012:role/myS3WriteAccessRole",
        "unauthenticated": "arn:aws:iam::123456789012:role/myS3ReadAccessRole"
    },
    "RoleMappings": {
        "arn:aws:iam::123456789012:oidc-provider/myOIDCIdP": {
            "Type": "Rules",
            "AmbiguousRoleResolution": "AuthenticatedRole",
            "RulesConfiguration": {
                "Rules": [
                    {
                        "Claim": "locale",
                        "MatchType": "Equals",
                        "Value": "Sacramento",
                        "RoleARN": "arn:aws:iam::123456789012:role/Sacramento_team_S3_admin"
                    }
                ]
            }
        }
    }
}
```

Untuk setiap kumpulan pengguna atau penyedia otentikasi lain yang Anda konfigurasikan untuk kumpulan identitas, Anda dapat membuat hingga 25 aturan. Batas ini tidak dapat disesuaikan. Untuk informasi selengkapnya, lihat [Kuota di Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html).

## Token mengklaim untuk digunakan dalam pemetaan berbasis aturan
<a name="token-claims-for-role-based-access-control"></a>

**Amazon Cognito**

Sebuah token ID Amazon Cognito direpresentasikan sebagai JSON Web Token (JWT). Token berisi klaim tentang identitas pengguna yang terautentikasi, seperti `name`, `family_name`, dan `phone_number`. Untuk informasi selengkapnya tentang klaim standar, lihat [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Terlepas dari klaim standar, berikut ini adalah klaim tambahan khusus untuk Amazon Cognito:
+ `cognito:groups`
+ `cognito:roles`
+ `cognito:preferred_role`

**Amazon**

Klaim berikut, bersama dengan nilai yang mungkin untuk klaim tersebut, dapat digunakan dengan Login with Amazon:
+ `iss`: www.amazon.com
+ `aud`: Identitas Aplikasi
+ `sub`:`sub` dari token Login with Amazon

**Facebook**

Klaim berikut, bersama dengan nilai yang mungkin untuk klaim tersebut, dapat digunakan dengan Facebook:
+ `iss`: graph.facebook.com
+ `aud`: Identitas Aplikasi
+ `sub`: `sub` dari token Facebook

**Google**

Token Google berisi klaim standar dari [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Semua klaim dalam token OpenID tersedia untuk pemetaan berbasis aturan. Lihat situs [OpenID Connect](https://developers.google.com/identity/protocols/OpenIDConnect) Google untuk mempelajari klaim yang tersedia dari token Google.

**Apel**

Token Apple berisi klaim standar dari [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Lihat [Mengautentikasi Pengguna dengan Masuk melalui Apple](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple) dalam dokumentasi Apple untuk belajar lebih lanjut tentang klaim yang tersedia dari token Apple. Token Apple tidak selalu berisi `email`.

**OpenID**

Semua klaim dalam token Id Terbuka tersedia untuk pemetaan berbasis aturan. Untuk informasi selengkapnya tentang klaim standar, lihat [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Lihat dokumentasi penyedia OpenID Anda untuk mempelajari klaim tambahan yang tersedia.

**SAM**

Klaim diuraikan dari pernyataan SAML yang diterima. Semua klaim yang tersedia dalam pernyataan SAML dapat digunakan dalam pemetaan berbasis aturan.

## Praktik terbaik untuk kontrol akses berbasis peran
<a name="best-practices-for-role-based-access-control"></a>

**penting**  
Jika klaim bahwa Anda memetakan ke peran dapat diubah oleh pengguna akhir, setiap pengguna akhir dapat mengambil peran Anda dan menetapkan kebijakan yang sesuai. Hanya klaim peta yang tidak dapat secara langsung ditetapkan oleh pengguna akhir ke peran dengan izin yang ditinggikan. Di kolam pengguna Amazon Cognito, Anda dapat mengatur izin baca dan tulis per aplikasi untuk setiap atribut pengguna.

**penting**  
Jika Anda menetapkan peran untuk grup di kolam pengguna Amazon Cognito, peran tersebut akan dilewatkan melalui token ID pengguna. Untuk menggunakan peran ini, Anda juga harus mengatur **Pilih peran dari token** untuk pemilihan peran terautentikasi untuk kolam identitas.  
Anda dapat menggunakan pengaturan **Resolusi peran** di konsol dan `RoleMappings` parameter [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API untuk menentukan perilaku default ketika peran yang benar tidak dapat ditentukan dari token.