Menggunakan kontrol akses berbasis peran - Amazon Cognito

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

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

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:

{ "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

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.

{ "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.

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.

Menggunakan token untuk menetapkan peran kepada pengguna

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.

  • Parameter klaim cognito:roles adalah string dipisahkan koma yang berisi satu set ARN peran yang diizinkan.

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 GetCredentialsForIdentityCustomRoleArnparameter jika disetel dan cocok dengan peran dalam cognito:roles klaim. Jika parameter ini tidak cocok dengan peran dicognito: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 keGetCredentialsForIdentity, maka pengaturan Resolusi peran di konsol atau AmbiguousRoleResolution bidang (dalam RoleMappings parameter SetIdentityPoolRolesAPI) digunakan untuk menentukan peran yang akan ditetapkan.

Menggunakan pemetaan berbasis aturan untuk menetapkan peran kepada pengguna

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 Atribut kumpulan pengguna.

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 RoleMappingtipe, yang ditentukan dalam RoleMappings parameter API. SetIdentityPoolRoles

Anda dapat mengatur pemetaan berbasis aturan untuk OpenID Connect (OIDC) dan penyedia identitas SAMP di atau API AWS CLI dengan bidang jenisnya. RulesConfiguration RoleMapping Anda dapat menentukan bidang ini dalam RoleMappings parameter SetIdentityPoolRolesAPI. AWS Management Console Saat ini tidak memungkinkan Anda untuk menambahkan aturan untuk penyedia OIDC atau SAMP.

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.

Token mengklaim untuk digunakan dalam pemetaan berbasis aturan

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. 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. Semua klaim dalam token OpenID tersedia untuk pemetaan berbasis aturan. Lihat situs OpenID Connect Google untuk mempelajari klaim yang tersedia dari token Google.

Apel

Token Apple berisi klaim standar dari Spesifikasi OpenID Connect. Lihat Mengautentikasi Pengguna dengan Masuk melalui 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. 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

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 SetIdentityPoolRolesAPI untuk menentukan perilaku default ketika peran yang benar tidak dapat ditentukan dari token.