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) ()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.
Topik
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, misalnya
MyCorp::User
. -
Jenis entitas grup yang ingin Anda kaitkan dengan sumber identitas Anda, misalnya
MyCorp::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:
-
Nama pengguna dan klaim grup dengan
cognito:
awalan -
Atribut pengguna khusus dengan a
custom: prefix
-
Klaim khusus ditambahkan saat runtime
-
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
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, misalnya
MyCorp::User
. -
Jenis entitas grup yang ingin Anda kaitkan dengan sumber identitas Anda, misalnya
MyCorp::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 dikurangi
https://
, 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
. aud
Klaim tidak selalu dikaitkan dengan audiens.
Izin Terverifikasi melakukan pemirsa sumber identitas dan validasi klien sebagai berikut:
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