

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

# Otorisasi dengan Izin Terverifikasi Amazon
<a name="amazon-cognito-authorization-with-avp"></a>

[Izin Terverifikasi Amazon](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/what-is-avp.html) adalah layanan otorisasi untuk aplikasi yang Anda buat. Saat Anda menambahkan kumpulan pengguna Amazon Cognito sebagai sumber identitas, aplikasi Anda dapat meneruskan akses kumpulan pengguna atau token identitas (ID) ke Izin Terverifikasi untuk mengizinkan atau menolak keputusan. Izin Terverifikasi mempertimbangkan properti pengguna Anda dan konteks permintaan berdasarkan kebijakan yang Anda tulis dalam Bahasa [Kebijakan Cedar](https://docs.cedarpolicy.com/). Konteks permintaan dapat menyertakan pengenal untuk dokumen, gambar, atau sumber daya lain yang mereka minta, dan tindakan yang ingin diambil pengguna Anda pada sumber daya tersebut.

Aplikasi Anda dapat memberikan identitas pengguna atau token akses ke Izin Terverifikasi di [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)atau permintaan [BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html)API. Operasi API ini menerima pengguna Anda sebagai `Principal` dan membuat keputusan otorisasi untuk `Resource` hal yang ingin mereka akses. `Action` Kustom tambahan `Context` dapat berkontribusi pada keputusan akses terperinci.

Saat aplikasi Anda menampilkan token dalam permintaan `IsAuthorizedWithToken` API, Izin Terverifikasi akan melakukan validasi berikut.

1. Kumpulan pengguna Anda adalah [sumber identitas Izin](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/identity-providers.html) Terverifikasi yang dikonfigurasi untuk penyimpanan kebijakan yang diminta.

1. `aud`Klaim `client_id` atau, masing-masing dalam token akses atau identitas Anda, cocok dengan ID klien aplikasi kumpulan pengguna yang Anda berikan ke Izin Terverifikasi. Untuk memverifikasi klaim ini, Anda harus [mengonfigurasi validasi ID klien di sumber](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/cognito-validation.html) identitas Izin Terverifikasi.

1. Token Anda tidak kedaluwarsa.

1. Nilai `token_use` klaim dalam token Anda cocok dengan parameter yang Anda kirimkan`IsAuthorizedWithToken`. `token_use`Klaim harus `access` jika Anda meneruskannya ke `accessToken` parameter, dan `id` jika Anda meneruskannya ke `identityToken` parameter.

1. Tanda tangan di token Anda berasal dari kunci web JSON yang diterbitkan (JWKs) dari kumpulan pengguna Anda. Anda dapat melihat Anda JWKs di`https://cognito-idp.Region.amazonaws.com/your user pool ID/.well-known/jwks.json`.

**Token yang dicabut dan pengguna yang dihapus**  
Izin Terverifikasi hanya memvalidasi informasi yang diketahui dari sumber identitas Anda dan dari waktu kedaluwarsa token pengguna Anda. Izin Terverifikasi tidak memeriksa pencabutan token atau keberadaan pengguna. Jika Anda mencabut token pengguna atau menghapus profil pengguna dari kumpulan pengguna, Izin Terverifikasi masih menganggap token tersebut valid hingga kedaluwarsa.

**Evaluasi kebijakan**  
Konfigurasikan kumpulan pengguna Anda sebagai [sumber identitas](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/identity-providers.html) untuk [toko kebijakan](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/terminology.html#term-policy-store) Anda. Konfigurasikan aplikasi Anda untuk mengirimkan token pengguna Anda dalam permintaan ke Izin Terverifikasi. Untuk setiap permintaan, Izin Terverifikasi membandingkan klaim dalam token dengan kebijakan. Kebijakan Izin Terverifikasi seperti kebijakan IAM di. AWS Ini menyatakan *prinsip*, *sumber daya*, dan *tindakan*. Izin Terverifikasi merespons permintaan Anda `Allow` jika cocok dengan tindakan yang diizinkan dan tidak cocok dengan tindakan eksplisit; jika tidak, ia `Deny` merespons dengan. `Deny` Untuk informasi selengkapnya, lihat [kebijakan Izin Terverifikasi Amazon](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policies.html) *di Panduan Pengguna Izin Terverifikasi Amazon*.

**Menyesuaikan token**  
Untuk mengubah, menambah, dan menghapus klaim pengguna yang ingin Anda tampilkan ke Izin Terverifikasi, sesuaikan konten dalam token akses dan identitas Anda dengan [Pemicu Lambda generasi pra token](user-pool-lambda-pre-token-generation.md) file. Dengan pemicu pembuatan token pra, Anda dapat menambahkan dan memodifikasi klaim di token Anda. Misalnya, Anda dapat menanyakan database untuk atribut pengguna tambahan dan menyandikannya ke dalam token ID Anda.

**catatan**  
Karena cara Izin Terverifikasi memproses klaim, jangan tambahkan klaim bernama `cognito``dev`, atau `custom` dalam fungsi pembuatan token pra Anda. Ketika Anda menunjukkan awalan klaim yang dicadangkan ini tidak dalam format yang dibatasi titik dua seperti `cognito:username` tetapi sebagai nama klaim lengkap, permintaan otorisasi Anda gagal.

**Sumber daya tambahan**
+ [Memetakan token Amazon Cognito ke skema Izin Terverifikasi](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/identity-sources_map-token-to-schema.html)
+ [Otorisasi API Gateway APIs menggunakan Izin Terverifikasi Amazon dan Amazon Cognito](https://aws.amazon.com/blogs/security/authorize-api-gateway-apis-using-amazon-verified-permissions-and-amazon-cognito/)
+ [Lokakarya: Otentikasi dan otorisasi dengan Amazon Cognito dan Izin Terverifikasi](https://catalog.workshops.aws/app-auth)

## Otorisasi API dengan Izin Terverifikasi
<a name="amazon-cognito-authorization-with-avp-api-authorization"></a>

ID atau token akses Anda dapat mengotorisasi permintaan untuk melakukan back-end Amazon API Gateway REST APIs dengan Izin Terverifikasi. Anda dapat membuat [toko kebijakan](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores.html) dengan tautan langsung ke kumpulan pengguna dan API Anda. Dengan opsi [Set up with API Gateway dan opsi awal sumber identitas](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_create.html), Izin Terverifikasi menambahkan sumber identitas kumpulan pengguna ke penyimpanan kebijakan, dan otorisasi Lambda ke API. Saat aplikasi Anda meneruskan token pembawa kumpulan pengguna ke API, otorisasi Lambda akan memanggil Izin Terverifikasi. Authorizer meneruskan token sebagai prinsipal dan jalur permintaan serta metode sebagai tindakan.

Diagram berikut menggambarkan alur otorisasi untuk API Gateway API dengan Izin Terverifikasi. Untuk perincian terperinci, lihat [penyimpanan kebijakan terkait API](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_api-userpool.html) di Panduan Pengguna Izin Terverifikasi Amazon.

![\[Diagram yang menggambarkan aliran otorisasi API dengan Izin Terverifikasi Amazon. Aplikasi membuat permintaan ke API Amazon API Gateway. API memanggil otorisasi Lambda. Authorizer membuat permintaan API ke Izin Terverifikasi. Izin Terverifikasi memeriksa validitas token dan mengembalikan keputusan otorisasi.\]](http://docs.aws.amazon.com/id_id/cognito/latest/developerguide/images/amazon-cognito-avp-use-case.png)


Izin Terverifikasi menyusun otorisasi API di sekitar grup [kumpulan pengguna](cognito-user-pools-user-groups.md). Karena ID dan token akses menyertakan `cognito:groups` klaim, toko kebijakan Anda dapat mengelola kontrol akses berbasis peran (RBAC) untuk Anda APIs dalam berbagai konteks aplikasi.

### Memilih pengaturan toko kebijakan
<a name="amazon-cognito-authorization-with-avp-api-authorization-token-type"></a>

Saat mengonfigurasi sumber identitas di toko kebijakan, Anda harus memilih apakah Anda ingin memproses akses atau token ID. Keputusan ini penting bagi cara mesin kebijakan Anda beroperasi. Token ID berisi atribut pengguna. [Token akses berisi informasi kontrol akses pengguna: OAuth cakupan.](cognito-user-pools-define-resource-servers.md) Meskipun kedua jenis token memiliki informasi keanggotaan grup, kami umumnya merekomendasikan token akses untuk RBAC dengan penyimpanan kebijakan Izin Terverifikasi. Token akses menambah keanggotaan grup dengan cakupan yang dapat berkontribusi pada keputusan otorisasi. Klaim dalam token akses menjadi [konteks](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/context.html) dalam permintaan otorisasi.

Anda juga harus mengonfigurasi tipe entitas pengguna dan grup saat mengonfigurasi kumpulan pengguna sebagai sumber identitas. Jenis entitas adalah pengidentifikasi utama, tindakan, dan sumber daya yang dapat Anda referensikan dalam kebijakan Izin Terverifikasi. Entitas di toko kebijakan dapat memiliki hubungan *keanggotaan*, di mana satu entitas dapat menjadi anggota entitas *induk*. Dengan keanggotaan, Anda dapat mereferensikan grup utama, grup tindakan, dan grup sumber daya. Dalam kasus grup kumpulan pengguna, jenis entitas pengguna yang Anda tentukan harus merupakan anggota dari jenis entitas grup. Saat menyiapkan [penyimpanan kebijakan terkait API](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_api-userpool.html) atau mengikuti **Penyiapan terpandu** di konsol Izin Terverifikasi, toko kebijakan Anda secara otomatis memiliki hubungan orang tua-anggota ini.

Token ID dapat menggabungkan RBAC dengan kontrol akses berbasis atribut (ABAC). Setelah membuat [toko kebijakan terkait API, Anda dapat menyempurnakan kebijakan](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_api-userpool.html) Anda dengan [atribut pengguna](#amazon-cognito-authorization-with-avp-example-policy) *dan* keanggotaan grup. Klaim atribut dalam token ID menjadi [atribut utama](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policies_examples-abac.html) dalam permintaan otorisasi. Kebijakan Anda dapat membuat keputusan otorisasi berdasarkan atribut utama.

Anda juga dapat mengonfigurasi toko kebijakan untuk menerima token dengan `client_id` klaim `aud` atau yang cocok dengan daftar klien aplikasi yang dapat diterima yang Anda berikan.

### Contoh kebijakan untuk otorisasi API berbasis peran
<a name="amazon-cognito-authorization-with-avp-api-authorization-example"></a>

Contoh kebijakan berikut dibuat dengan penyiapan penyimpanan kebijakan Izin Terverifikasi untuk [PetStore](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-from-example.html)contoh REST API.

```
permit(
  principal in PetStore::UserGroup::"us-east-1_EXAMPLE|MyGroup",
  action in [ PetStore::Action::"get /pets", PetStore::Action::"get /pets/{petId}" ],
  resource
  );
```

Izin Terverifikasi mengembalikan `Allow` keputusan untuk permintaan otorisasi dari aplikasi Anda ketika:

1. Aplikasi Anda meneruskan ID atau token akses di `Authorization` header sebagai token pembawa.

1. Aplikasi Anda melewati token dengan `cognito:groups` klaim yang berisi string`MyGroup`.

1. Aplikasi Anda membuat `HTTP GET` permintaan untuk, misalnya, `https://myapi.example.com/pets` atau`https://myapi.example.com/pets/scrappy`.

## Contoh kebijakan untuk pengguna Amazon Cognito
<a name="amazon-cognito-authorization-with-avp-example-policy"></a>

Kumpulan pengguna Anda juga dapat menghasilkan permintaan otorisasi ke Izin Terverifikasi dalam kondisi selain permintaan API. Anda dapat mengirimkan keputusan kontrol akses apa pun dalam aplikasi Anda ke toko kebijakan Anda. Misalnya, Anda dapat melengkapi keamanan Amazon DynamoDB atau Amazon S3 dengan kontrol akses berbasis atribut sebelum permintaan apa pun transit ke jaringan, sehingga mengurangi penggunaan kuota.

Contoh berikut menggunakan [Bahasa Kebijakan Cedar](https://docs.cedarpolicy.com/) untuk mengizinkan pengguna Keuangan yang melakukan autentikasi dengan satu klien aplikasi kumpulan pengguna untuk membaca dan menulis. `example_image.png` John, pengguna di aplikasi Anda, menerima token ID dari klien aplikasi Anda dan meneruskannya dalam permintaan GET ke URL yang memerlukan otorisasi. `https://example.com/images/example_image.png` Token ID John memiliki `aud` klaim ID klien aplikasi kumpulan pengguna Anda`1234567890example`. Fungsi Lambda generasi pra token Anda juga memasukkan klaim baru `costCenter` dengan nilai, untuk John, dari. `Finance1234`

```
permit (
   principal,
   actions in [ExampleCorp::Action::"readFile", "writeFile"],
   resource == ExampleCorp::Photo::"example_image.png"
)
when {
   principal.aud == "1234567890example" &&
   principal.custom.costCenter like "Finance*"
};
```

Badan permintaan berikut menghasilkan `Allow` respons.

```
{
   "accesstoken": "[John's ID token]",
   "action": {
      "actionId": "readFile",
      "actionType": "Action"
   },
   "resource": {
      "entityId": "example_image.png",
      "entityType": "Photo"
   }
}
```

Bila Anda ingin menentukan prinsipal dalam kebijakan Izin Terverifikasi, gunakan format berikut:

```
permit (
   principal == [Namespace]::[Entity]::"[user pool ID]|[user sub]",
   action,
   resource
);
```

Berikut ini adalah contoh utama untuk pengguna dalam kumpulan pengguna dengan ID `us-east-1_Example` dengan sub, atau ID pengguna,`973db890-092c-49e4-a9d0-912a4c0a20c7`.

```
principal == ExampleCorp::User::"us-east-1_Example|973db890-092c-49e4-a9d0-912a4c0a20c7",
```

Bila Anda ingin menentukan grup pengguna dalam kebijakan Izin Terverifikasi, gunakan format berikut:

```
permit (
   principal in [Namespace]::[Group Entity]::"[Group name]",
   action,
   resource
);
```

**Kontrol Akses Berbasis Atribut**  
Otorisasi dengan Izin Terverifikasi untuk aplikasi Anda, dan [atribut untuk fitur kontrol akses](https://docs.aws.amazon.com/cognito/latest/developerguide/attributes-for-access-control.html) kumpulan identitas Amazon Cognito AWS untuk kredensional, keduanya merupakan bentuk kontrol akses berbasis atribut (ABAC). Berikut ini adalah perbandingan fitur Izin Terverifikasi dan Amazon Cognito ABAC. Di ABAC, sistem memeriksa atribut entitas dan membuat keputusan otorisasi dari kondisi yang Anda tentukan.


| Layanan | Proses | Hasil | 
| --- |--- |--- |
| Izin Terverifikasi Amazon | Mengembalikan Allow atau Deny keputusan dari analisis kumpulan pengguna JWT. | Akses ke sumber daya aplikasi berhasil atau gagal berdasarkan evaluasi kebijakan Cedar. | 
| Kumpulan identitas Amazon Cognito (atribut untuk kontrol akses) | Menetapkan [tag sesi](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) ke pengguna Anda berdasarkan atributnya. Ketentuan kebijakan IAM dapat memeriksa tag Allow atau akses Deny pengguna ke Layanan AWS. | Sesi yang ditandai dengan AWS kredensi sementara untuk peran IAM. | 