Menggunakan Izin Terverifikasi Amazon dengan penyedia identitas - Izin Terverifikasi Amazon

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

Menggunakan Izin Terverifikasi Amazon dengan penyedia identitas

Sumber identitas adalah representasi dari penyedia identitas eksternal (iDP) di Izin Terverifikasi Amazon. Sumber identitas memberikan informasi dari pengguna yang diautentikasi dengan IDP yang memiliki hubungan kepercayaan dengan toko kebijakan Anda. Saat aplikasi Anda membuat permintaan otorisasi dengan token dari sumber identitas, toko kebijakan Anda dapat membuat keputusan otorisasi dari properti pengguna dan izin akses. Sumber identitas Izin Terverifikasi meningkatkan otorisasi dengan koneksi langsung ke toko identitas pusat dan layanan otentikasi Anda.

Anda dapat menggunakan penyedia identitas OpenID Connect (OIDC) () dengan Izin TerverifikasiIdPs. Aplikasi Anda dapat menghasilkan permintaan otorisasi dengan identitas (ID) OIDC atau mengakses token web JSON (JWT). Dengan token ID, Izin Terverifikasi membaca ID pengguna dan klaim atribut sebagai prinsip untuk kontrol akses berbasis atribut (ABAC). Dengan token akses, Izin Terverifikasi membaca ID pengguna sebagai kepala sekolah dan klaim lainnya sebagai konteks. Dengan kedua jenis token, Anda dapat memetakan klaim seperti groups ke grup utama, dan membuat kebijakan yang mengevaluasi kontrol akses berbasis peran (RBAC).

Anda dapat menambahkan kumpulan pengguna Amazon Cognito atau iDP OpenID Connect (OIDC) kustom sebagai sumber identitas Anda.

Bekerja dengan sumber identitas Amazon Cognito

Izin Terverifikasi bekerja sama dengan kumpulan pengguna Amazon Cognito. Amazon Cognito JWT memiliki struktur yang dapat diprediksi. Izin Terverifikasi mengenali struktur ini dan menarik manfaat maksimal dari informasi yang dikandungnya. Misalnya, Anda dapat menerapkan model otorisasi kontrol akses berbasis peran (RBAC) dengan token ID atau token akses.

Sumber identitas kumpulan pengguna Amazon Cognito baru memerlukan informasi berikut:

  • The Wilayah AWS.

  • ID kolam pengguna.

  • Jenis entitas pengguna yang ingin Anda kaitkan dengan sumber identitas Anda, misalnyaMyCorp::User.

  • Jenis entitas grup yang ingin Anda kaitkan dengan sumber identitas Anda, misalnyaMyCorp::UserGroup.

  • (Opsional) ID klien dari kumpulan pengguna yang ingin Anda otorisasi untuk mengajukan permintaan ke toko kebijakan Anda.

Karena Izin Terverifikasi hanya berfungsi dengan kumpulan pengguna Amazon Cognito dalam Akun AWS hal yang sama, Anda tidak dapat menentukan sumber identitas di akun lain. Izin Terverifikasi menyetel awalan entitas —pengenal sumber identitas yang harus Anda referensikan dalam kebijakan yang bertindak pada prinsip kumpulan pengguna—ke ID kumpulan pengguna Anda, misalnya. us-west-2_EXAMPLE

Klaim token kumpulan pengguna dapat berisi atribut, cakupan, grup, ID klien, dan data khusus. Amazon Cognito JWT memiliki kemampuan untuk menyertakan berbagai informasi yang dapat berkontribusi pada keputusan otorisasi di Izin Terverifikasi. Ini termasuk:

  1. Nama pengguna dan klaim grup dengan cognito: awalan

  2. Atribut pengguna khusus dengan a custom: prefix

  3. Klaim khusus ditambahkan saat runtime

  4. Klaim standar OIDC seperti dan sub email

Kami membahas klaim ini secara rinci, dan cara mengelolanya dalam kebijakan Izin Terverifikasi, diBekerja dengan sumber identitas dalam skema dan kebijakan.

penting

Meskipun Anda dapat mencabut token Amazon Cognito sebelum kedaluwarsa, JWT dianggap sebagai sumber daya tanpa kewarganegaraan yang mandiri dengan tanda tangan dan validitas. Layanan yang sesuai dengan JSON Web Token RFC 7519 diharapkan dapat memvalidasi token dari jarak jauh dan tidak diharuskan untuk memvalidasinya dengan penerbit. Ini berarti bahwa Izin Terverifikasi dimungkinkan untuk memberikan akses berdasarkan token yang dicabut atau dikeluarkan untuk pengguna yang kemudian dihapus. Untuk mengurangi risiko ini, kami sarankan Anda membuat token dengan durasi validitas sesingkat mungkin dan mencabut token penyegaran saat Anda ingin menghapus otorisasi untuk melanjutkan sesi pengguna.

Kebijakan cedar untuk sumber identitas kumpulan pengguna di Izin Terverifikasi menggunakan sintaks khusus untuk nama klaim yang berisi karakter selain alfanumerik dan garis bawah (). _ Ini termasuk klaim awalan kumpulan pengguna yang berisi : karakter, suka cognito:username dancustom:department. Untuk menulis kondisi kebijakan yang mereferensikan cognito:username atau custom:department klaim, tulislah sebagai principal["cognito:username"] danprincipal["custom:department"], masing-masing.

catatan

Jika token berisi klaim dengan custom: awalan cognito: atau dan nama klaim dengan nilai literal cognito ataucustom, permintaan otorisasi dengan IsAuthorizedWithTokenakan gagal dengan. ValidationException

Contoh ini menunjukkan cara membuat kebijakan yang mereferensikan beberapa klaim kumpulan pengguna Amazon Cognito yang terkait dengan prinsipal.

permit( principal == ExampleCo::User::"us-east-1_example|4fe90f4a-ref8d9-4033-a750-4c8622d62fb6", action, resource == ExampleCo::Photo::"VacationPhoto94.jpg" ) when { principal["cognito:username"]) == "alice" && principal["custom:department"]) == "Finance" };

Untuk informasi selengkapnya tentang pemetaan klaim, lihatMemetakan token ID ke skema. Untuk informasi selengkapnya tentang otorisasi untuk pengguna Amazon Cognito, lihat Otorisasi dengan Izin Terverifikasi Amazon di Panduan Pengembang Amazon Cognito.

Bekerja dengan sumber identitas OIDC

Anda juga dapat mengonfigurasi IdP OpenID Connect (OIDC) yang sesuai sebagai sumber identitas penyimpanan kebijakan. Penyedia OIDC mirip dengan kumpulan pengguna Amazon Cognito: mereka menghasilkan JWT sebagai produk otentikasi. Untuk menambahkan penyedia OIDC, Anda harus memberikan URL penerbit

Sumber identitas OIDC baru memerlukan informasi berikut:

  • URL penerbit. Izin Terverifikasi harus dapat menemukan .well-known/openid-configuration titik akhir di URL ini.

  • Jenis token yang ingin Anda gunakan dalam permintaan otorisasi. Dalam hal ini, Anda memilih token Identity.

  • Jenis entitas pengguna yang ingin Anda kaitkan dengan sumber identitas Anda, misalnyaMyCorp::User.

  • Jenis entitas grup yang ingin Anda kaitkan dengan sumber identitas Anda, misalnyaMyCorp::UserGroup.

  • Contoh token ID, atau definisi klaim dalam token ID.

  • Awalan yang ingin Anda terapkan ke ID entitas pengguna dan grup. Di CLI dan API, Anda dapat memilih awalan ini. Di penyimpanan kebijakan yang Anda buat dengan opsi Penyiapan dengan API Gateway dan sumber identitas atau Penyiapan terpandu, Izin Terverifikasi menetapkan awalan nama penerbit dikurangihttps://, misalnya. MyCorp::User::"auth.example.com|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"

Otorisasi dengan sumber identitas OIDC menggunakan operasi API yang sama dengan sumber identitas kumpulan pengguna: IsAuthorizedWithTokendan Token. BatchIs AuthorizedWith

Contoh ini menunjukkan bagaimana Anda dapat membuat kebijakan yang memungkinkan akses ke laporan akhir tahun untuk karyawan di departemen akuntansi, memiliki klasifikasi rahasia, dan tidak berada di kantor satelit. Izin Terverifikasi memperoleh atribut ini dari klaim dalam token ID prinsipal.

permit( principal in MyCorp::UserGroup::"MyOIDCProvider|Accounting", action, resource in MyCorp::Folder::"YearEnd2024" ) when { principal.jobClassification == "Confidential" && !(principal.location like "SatelliteOffice*") };

Validasi klien dan audiens

Saat Anda menambahkan sumber identitas ke penyimpanan kebijakan, Izin Terverifikasi memiliki opsi konfigurasi yang memverifikasi bahwa ID dan token akses digunakan sebagaimana dimaksud. Validasi ini terjadi dalam pemrosesan permintaan IsAuthorizedWithToken dan BatchIsAuthorizedWithToken API. Perilaku berbeda antara ID dan token akses, dan antara Amazon Cognito dan sumber identitas OIDC. Dengan penyedia kumpulan pengguna Amazon Cognito, Izin Terverifikasi dapat memvalidasi ID klien di ID dan token akses. Dengan penyedia OIDC, Izin Terverifikasi dapat memvalidasi ID klien dalam token ID, dan audiens dalam token akses.

ID klien adalah pengenal yang terkait dengan aplikasi OAuth atau OIDC yang dikonfigurasi dengan penyedia, misalnya. 1example23456789 Audiens adalah jalur URL yang terkait dengan pihak yang mengandalkan, atau tujuan, dari aplikasi target, misalnyahttps://myapplication.example.com. audKlaim tidak selalu dikaitkan dengan audiens.

Izin Terverifikasi melakukan pemirsa sumber identitas dan validasi klien sebagai berikut:

Amazon Cognito

Token ID Amazon Cognito memiliki aud klaim yang berisi ID klien aplikasi. Token akses memiliki client_id klaim yang juga berisi ID klien aplikasi.

Saat Anda memasukkan satu atau beberapa nilai untuk validasi aplikasi Klien di sumber identitas Anda, Izin Terverifikasi membandingkan daftar ID klien aplikasi ini dengan aud klaim token ID atau klaim token akses. client_id Izin Terverifikasi tidak memvalidasi URL audiens pihak terkait untuk sumber identitas Amazon Cognito.

OIDC

Token ID OIDC memiliki aud klaim yang berisi daftar ID klien. Token akses memiliki aud klaim yang berisi URL audiens untuk token tersebut. Token akses juga memiliki client_id klaim yang berisi ID klien yang dimaksud.

Anda dapat memasukkan satu atau beberapa nilai untuk validasi Audiens dengan penyedia OIDC. Saat Anda memilih token ID tipe Token, Izin Terverifikasi memvalidasi ID klien, memeriksa bahwa setidaknya satu anggota ID klien dalam aud klaim cocok dengan nilai validasi audiens.

Izin Terverifikasi memvalidasi audiens untuk token akses, memeriksa apakah aud klaim tersebut cocok dengan nilai validasi audiens. Nilai token akses ini terutama berasal dari aud klaim tetapi dapat berasal dari cid atau client_id klaim jika tidak ada aud klaim. Periksa dengan IDP Anda untuk klaim dan format audiens yang benar.

Contoh nilai validasi pemirsa token ID adalah1example23456789.

Contoh nilai validasi pemirsa token akses adalahhttps://myapplication.example.com.

Otorisasi sisi klien untuk JWT

Anda mungkin ingin memproses token web JSON di aplikasi Anda dan meneruskan klaimnya ke Izin Terverifikasi tanpa menggunakan sumber identitas toko kebijakan. Anda dapat mengekstrak atribut entitas Anda dari JSON Web Token (JWT) dan menguraikannya menjadi Izin Terverifikasi.

Contoh ini menunjukkan cara Anda memanggil Izin Terverifikasi dari ID OIDC.¹

async function authorizeUsingJwtToken(jwtToken) { const payload = await verifier.verify(jwtToken); var principalEntity = { entityType: "PhotoFlash::User", // the application needs to fill in the relevant user type entityId: payload["sub"], // the application need to use the claim that represents the user-id }; var resourceEntity = { entityType: "PhotoFlash::Photo", //the application needs to fill in the relevant resource type entityId: "jane_photo_123.jpg", // the application needs to fill in the relevant resource id }; var action = { actionType: "PhotoFlash::Action", //the application needs to fill in the relevant action id actionId: "GetPhoto", //the application needs to fill in the relevant action type }; var entities = { entityList: [], }; entities.entityList.push(...getUserEntitiesFromToken(payload)); var policyStoreId = "PSEXAMPLEabcdefg111111"; // set your own policy store id const authResult = await client .isAuthorized({ policyStoreId: policyStoreId, principal: principalEntity, resource: resourceEntity, action: action, entities, }) .promise(); return authResult; } function getUserEntitiesFromToken(payload) { let attributes = {}; let claimsNotPassedInEntities = ['aud', 'sub', 'exp', 'jti', 'iss']; Object.entries(payload).forEach(([key, value]) => { if (claimsNotPassedInEntities.includes(key)) { return; } if (Array.isArray(value)) { var attibuteItem = []; value.forEach((item) => { attibuteItem.push({ string: item, }); }); attributes[key] = { set: attibuteItem, }; } else if (typeof value === 'string') { attributes[key] = { string: value, } } else if (typeof value === 'bigint' || typeof value ==='number') { attributes[key] = { long: value, } } else if (typeof value === 'bigint' || typeof value ==='number') { attributes[key] = { long: value, } } else if (typeof value === 'boolean') { attributes[key] = { boolean: value, } } }); let entityItem = { attributes: attributes, identifier: { entityType: "PhotoFlash::User", entityId: payload["sub"], // the application need to use the claim that represents the user-id } }; return [entityItem]; }

¹ Contoh kode ini menggunakan pustaka aws-jwt-verify untuk memverifikasi JWT yang ditandatangani oleh OIDC-kompatibel. IdPs