Topik ini mencakup konsep utama, metode konfigurasi, kebijakan kontrol akses, kasus penggunaan khas, serta metode troubleshooting untuk SourceIdentity.
Apa itu SourceIdentity?
SourceIdentity adalah pengenal yang dapat Anda tetapkan untuk sesi saat ini ketika memanggil operasi OpenAPI untuk mengasumsikan peran RAM dan memperoleh kredensial sementara (token STS).
SourceIdentity memiliki dua tujuan utama:
-
Melacak identitas dalam skenario kompleks seperti role chaining
Role chaining terjadi ketika identitas RAM (atau pengguna SSO berbasis peran) mengasumsikan suatu peran untuk memperoleh sesi peran, lalu menggunakan sesi tersebut untuk mengasumsikan peran lain, misalnya Pengguna A → Peran B → Peran C. Peran RAM dalam rantai peran tersebut dapat berasal dari Akun Alibaba Cloud yang sama atau berbeda (cross-account).
Dalam skenario asumsi peran, Anda dapat menetapkan
RoleSessionNameuntuk mengaudit identitas sumber. Namun, dalam skenario role chaining, nilaiRoleSessionNamedapat diubah selama beberapa kali asumsi peran, sehingga menyulitkan pelacakan pengguna asli.Begitu
SourceIdentityditetapkan di awal rantai peran, nilainya akan tetap dan tidak dapat diubah selama sesi peran tersebut. Hal ini memastikan bahwa pengguna asli dapat dilacak melalui log, bahkan setelah beberapa kali asumsi peran.Untuk contoh rinci tentang cara kerja
SourceIdentitydalam role chaining, lihat Contoh role chaining. -
Menerapkan kontrol akses detail halus pada peran dengan hak istimewa tinggi
Administrator dapat mengonfigurasi izin detail halus berdasarkan nilai atau keberadaan
SourceIdentity. Kontrol ini sangat berguna ketika beberapa identitas berbagi satu peran.Sebagai contoh, administrator dapat menggunakan kunci kondisi dalam kebijakan untuk mewajibkan nilai
SourceIdentitytertentu saat mengasumsikan suatu peran. Hal ini dapat membatasi akses ke peran dengan hak istimewa tinggi atau sumber daya inti hanya untuk identitas sumber tertentu.
Menetapkan SourceIdentity
Tetapkan SourceIdentity dengan memanggil salah satu dari tiga operasi API Layanan Token Keamanan (STS) berikut saat mengasumsikan peran.
AssumeRole
Saat memanggil operasi API AssumeRole, tentukan informasi identitas sumber menggunakan parameter SourceIdentity. Misalnya, Anda dapat menetapkannya ke Alice. Metode ini cocok untuk skenario asumsi peran standar di mana pengguna RAM atau peran RAM mengasumsikan peran lain.
Setelah pemanggilan berhasil, SourceIdentity dikembalikan sebagai bidang tingkat atas dalam respons. Kode berikut menunjukkan contoh respons:
{
"RequestId": "6894B13B-6D71-4EF5-88FA-F3278173****",
"AssumedRoleUser": {
"AssumedRoleId": "34458433936495****:alice",
"Arn": "acs:ram::123456789012****:role/alice"
},
"Credentials": {
"SecurityToken": "********",
"Expiration": "2015-04-09T11:52:19Z",
"AccessKeySecret": "wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****",
"AccessKeyId": "STS.L4aBSCSJVMuKg5U1****"
},
"SourceIdentity": "Alice"
}
Untuk informasi lebih lanjut tentang cara memanggil operasi ini, lihat AssumeRole - Dapatkan kredensial sementara untuk peran yang diasumsikan.
AssumeRoleWithSAML
Dalam skenario SSO berbasis peran SAML, nilai SourceIdentity disediakan oleh penyedia identitas (IdP) dalam Pernyataan SAML.
Anda perlu mengonfigurasi atribut SAML di IdP Anda dan memetakannya ke pengenal pengguna, seperti username mereka. Nama atribut ini harus berupa https://www.aliyun.com/SAML-Role/Attributes/SourceIdentity.
Setelah konfigurasi selesai, respons SAML yang dikeluarkan oleh IdP berisi Pernyataan SAML berikut (dengan asumsi awalan UPN pengguna dipetakan ke nilai SourceIdentity):
<Attribute Name="https://www.aliyun.com/SAML-Role/Attributes/SourceIdentity">
<AttributeValue>upn_prefix</AttributeValue>
</Attribute>
Respons untuk pemanggilan yang berhasil sama dengan operasi AssumeRole. Untuk informasi lebih lanjut tentang cara memanggil operasi ini, lihat Dapatkan kredensial sementara untuk peran yang diasumsikan selama SSO berbasis peran SAML.
AssumeRoleWithOIDC
Dalam skenario SSO berbasis peran OIDC, nilai SourceIdentity disediakan oleh IdP sebagai klaim dalam token ID (juga dikenal sebagai token OIDC).
Anda perlu mengonfigurasi klaim token ID kustom di IdP Anda dan memetakannya ke pengenal pengguna, seperti username mereka. Nama klaim ini harus berupa https://www.aliyun.com/source_identity. Contohnya:
Setelah konfigurasi selesai, token ID yang dikeluarkan oleh IdP berisi klaim berikut (dengan asumsi awalan UPN pengguna dipetakan ke nilai SourceIdentity):
{
"https://www.aliyun.com/source_identity": "upn_prefix"
}
Respons untuk pemanggilan yang berhasil sama dengan operasi AssumeRole. Untuk informasi lebih lanjut tentang cara memanggil operasi ini, lihat AssumeRoleWithOIDC - Dapatkan kredensial sementara untuk peran yang diasumsikan selama SSO berbasis peran OIDC.
Persyaratan format
-
Nilai harus terdiri dari 2 hingga 64 karakter.
-
Nilai dapat berisi huruf, angka, dan karakter khusus berikut:
=,,,.,@,-, dan_. -
Anda tidak boleh menggunakan awalan yang dicadangkan oleh Alibaba Cloud, seperti
acs:,aliyun:, ataualibabacloud:.
Izin dan kontrol kondisi
Anda dapat menggunakan kombinasi kebijakan berbasis identitas dan kebijakan kepercayaan untuk mengontrol penggunaan SourceIdentity.
Aksi
|
Parameter |
Jenis |
Cakupan |
Deskripsi |
|
|
Action |
|
Memberikan izin untuk menetapkan |
Contoh konfigurasi aksi
Untuk mengizinkan suatu identitas (pengguna RAM atau peran) menetapkan SourceIdentity saat memanggil AssumeRole, Anda harus memberikan izin sts:SetSourceIdentity baik dalam kebijakan berbasis identitas pihak yang berwenang maupun dalam kebijakan kepercayaan peran target. Hal ini dilakukan dengan menambahkan sts:SetSourceIdentity ke blok Action.
-
Contoh kebijakan berbasis identitas (diberikan kepada pemanggil):
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Resource": "acs:ram::ACCOUNT_ID:role/TARGET_ROLE" } ] } -
Contoh kebijakan kepercayaan (dikonfigurasi pada peran yang akan diasumsikan):
{ "Statement": [ { "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::ACCOUNT_ID:root" ] } } ], "Version": "1" }
Konfigurasi aksi SSO berbasis peran
Saat mengasumsikan peran dengan memanggil operasi AssumeRoleWithSAML atau AssumeRoleWithOIDC, berikan izin sts:SetSourceIdentity hanya dalam kebijakan kepercayaan peran target. Kebijakan berikut merupakan contoh untuk SSO berbasis peran SAML:
{
"Statement": [
{
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity"
],
"Condition": {
"StringEquals": {
"saml:recipient": [
"https://signin.aliyun.com/saml-role/sso"
]
}
},
"Effect": "Allow",
"Principal": {
"Federated": [
"acs:ram::ACCOUNT_ID:saml-provider/PROVIDER_NAME"
]
}
}
],
"Version": "1"
}
Jika Anda mengonfigurasi atribut SourceIdentity di IdP Anda, Anda harus menyertakan aksi sts:SetSourceIdentity dalam kebijakan kepercayaan semua peran yang terkait dengan IdP tersebut. Jika tidak, upaya login SSO akan gagal.
Kunci kondisi
|
Parameter |
Jenis |
Cakupan |
Deskripsi |
|
|
Kunci kondisi |
|
Mengaitkan satu atau beberapa nilai |
|
|
Kunci kondisi (global) |
|
Mengaitkan satu atau beberapa nilai |
Saat ini, kunci kondisi acs:SourceIdentity hanya dievaluasi dalam kebijakan STS.
Perbedaan antara kunci kondisi sts:SourceIdentity dan acs:SourceIdentity adalah sebagai berikut:
-
sts:SourceIdentitymencocokkan atributSourceIdentitydalam permintaan asumsi peran. -
acs:SourceIdentitymencocokkan atributSourceIdentityyang ada dalam sesi peran (termasuk token STS) setelah asumsi peran berhasil.
Untuk asumsi peran awal, Anda harus menggunakan kunci kondisi sts:SourceIdentity dalam kebijakan Anda, termasuk kebijakan berbasis identitas dan kebijakan kepercayaan. Pada tahap ini, belum ada sesi peran yang valid, sehingga penggunaan kunci kondisi acs:SourceIdentity akan menyebabkan asumsi gagal.
Contoh kontrol kondisi
Dengan menggunakan kunci kondisi sts:SourceIdentity dalam blok Condition kebijakan, Anda dapat mewajibkan nilai SourceIdentity tertentu saat mengasumsikan peran. Anda dapat mengonfigurasi kondisi dalam salah satu atau kedua jenis kebijakan berikut:
-
Tetapkan kondisi dalam kebijakan berbasis identitas: Membatasi identitas untuk menetapkan nilai
SourceIdentitytertentu saat mengasumsikan peran tertentu. -
Tetapkan kondisi dalam kebijakan kepercayaan: Membatasi semua identitas untuk menetapkan nilai
SourceIdentitytertentu saat mengasumsikan peran ini.
Aksi sts:SetSourceIdentity juga harus disertakan dalam blok Action kebijakan agar kondisi tersebut berlaku.
Setelah pengguna RAM login ke Konsol, mereka tidak dapat menggunakan fitur Switch Role untuk mengasumsikan peran yang mewajibkan penyetelan SourceIdentity. Hal ini karena Konsol tidak mendukung input parameter ini.
Asumsikan terdapat peran RAM dengan hak istimewa tinggi untuk lingkungan produksi bernama prod-role. Administrator perlu menerapkan kontrol berikut:
-
Hanya pengguna RAM Alice dan Bob yang dapat mengasumsikan
prod-role. -
Saat mengasumsikan
prod-role,SourceIdentityharus ditetapkan, dan nilainya harus sesuai dengan username pengguna yang mengasumsikan peran tersebut. Misalnya, saat Alice mengasumsikan peran, ia dapat menetapkan nilai kealiceataualice@exampledomain.com.
Langkah 1: Konfigurasikan kebijakan kepercayaan untuk prod-role
Kebijakan ini memastikan hanya Alice dan Bob yang dapat mengasumsikan peran ini, dan permintaan harus menyertakan nilai SourceIdentity yang diawali dengan alice atau bob.
{
"Statement": [
{
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity"
],
"Condition": {
"StringLike": {
"sts:SourceIdentity": [
"alice*",
"bob*"
]
}
},
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::ACCOUNT_ID:user/alice",
"acs:ram::ACCOUNT_ID:user/bob"
]
}
}
],
"Version": "1"
}
Langkah 2: Konfigurasikan kebijakan berbasis identitas untuk pengguna Alice dan Bob
Kebijakan berikut memberikan izin kepada Alice dan Bob untuk mengasumsikan prod-role dan mewajibkan mereka menetapkan SourceIdentity yang sesuai dengan username masing-masing dalam permintaan.
-
Kebijakan berbasis identitas untuk Alice
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Resource": "acs:ram::ACCOUNT_ID:role/prod-role", "Condition": { "StringLike": { "sts:SourceIdentity": [ "alice*" ] } } } ] } -
Kebijakan berbasis identitas untuk Bob
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Resource": "acs:ram::ACCOUNT_ID:role/prod-role", "Condition": { "StringLike": { "sts:SourceIdentity": [ "bob*" ] } } } ] }
Kontrol kondisi untuk SSO berbasis peran
Asumsikan peran dev-role hanya dapat diasumsikan melalui SSO berbasis peran SAML, dan hanya oleh pengguna dengan ID karyawan employeeid-alice dan employeeid-bob. IdP menyertakan ID karyawan pengguna sebagai nilai SourceIdentity dalam Pernyataan SAML.
Kebijakan kepercayaan untuk dev-role dikonfigurasi sebagai berikut:
{
"Statement": [
{
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity"
],
"Condition": {
"StringEquals": {
"saml:recipient": [
"https://signin.aliyun.com/saml-role/sso"
],
"sts:SourceIdentity": [
"employeeid-alice",
"employeeid-bob"
]
}
},
"Effect": "Allow",
"Principal": {
"Federated": [
"acs:ram::ACCOUNT_ID:saml-provider/PROVIDER_NAME"
]
}
}
],
"Version": "1"
}
Rekomendasi penggunaan kontrol kondisi
-
Uji sebelum diterapkan di produksi: Jangan aktifkan kebijakan wajib
SourceIdentitysecara langsung di lingkungan produksi. Ini mencakup semua kebijakan berbasis identitas atau kebijakan kepercayaan yang berisi kunci kondisists:SourceIdentity. Kami menyarankan Anda terlebih dahulu menggunakan peran dan kebijakan uji untuk memvalidasi konfigurasi. Setelah Anda memastikan konfigurasi berfungsi sesuai harapan, Anda dapat menerapkannya secara bertahap ke lingkungan produksi. -
Berikan pemberitahuan terlebih dahulu: Sebelum mengaktifkan kebijakan wajib, informasikan kepada semua pengguna terkait cara menggunakan
SourceIdentitydan nilai-nilai yang diizinkan untuk mencegah gangguan alur kerja.
Contoh role chaining
Skenario
Alat otomatisasi CI/CD seperti Jenkins berjalan dengan peran RAM bernama automation-role. Peran ini dapat diasumsikan oleh developer seperti Alice dan Bob.
Seorang developer, seperti Alice, menggunakan alat tersebut untuk menerapkan aplikasi ke Bucket OSS di lingkungan produksi. Tindakan penerapan ini memerlukan asumsi peran dengan hak istimewa lebih tinggi, yaitu deploy-role, yang memiliki izin menulis ke Bucket OSS.
Alice, Bob, dan automation-role berada di Akun Alibaba Cloud A, sedangkan deploy-role berada di Akun Alibaba Cloud B.
Kebutuhan bisnis dan alur kerja
Tujuannya adalah mengizinkan automation-role mengasumsikan deploy-role hanya jika Alice adalah pemanggil awal. Permintaan dari pengguna lain, seperti Bob, harus ditolak.
Alur kerjanya sebagai berikut:
-
Alice memanggil operasi
AssumeRoleuntuk mengasumsikanautomation-roledan menetapkanSourceIdentitykealicedalam permintaan. -
Setelah
automation-rolememperoleh token STS, ia memanggil operasiAssumeRolelagi untuk mengasumsikandeploy-role. NilaiSourceIdentitysecara otomatis diteruskan. -
Kebijakan kepercayaan
deploy-rolememeriksa apakahSourceIdentitymasuk bernilaialice. Jika validasi berhasil, asumsi peran diizinkan.
Langkah konfigurasi kebijakan
Langkah 1: Modifikasi kebijakan kepercayaan deploy-role
Kebijakan ini hanya mengizinkan permintaan asumsi dari automation-role di akun A, dan hanya jika nilai SourceIdentity adalah alice.
{
"Statement": [
{
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity"
],
"Condition": {
"StringEquals": {
"acs:SourceIdentity": [
"alice"
]
}
},
"Effect": "Allow",
"Principal": {
"RAM": [
"acs:ram::ACCOUNT_A_ID:role/automation-role"
]
}
}
],
"Version": "1"
}
Kebijakan kepercayaan di atas menggunakan kunci kondisi acs:SourceIdentity alih-alih sts:SourceIdentity. Hal ini memastikan bahwa deploy-role hanya menerima permintaan akses dari peran automation-role dan hanya jika SourceIdentity dalam sesi peran telah ditetapkan ke alice.
Langkah 2: Modifikasi kebijakan izin dan kepercayaan automation-role
-
Kebijakan berbasis identitas: Mengizinkan peran
automation-rolemengasumsikan perandeploy-roledi akun B.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Resource": "acs:ram::ACCOUNT_B_ID:role/deploy-role" } ] } -
Kebijakan kepercayaan: Mengizinkan Alice dan Bob mengasumsikan
automation-role.{ "Statement": [ { "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::ACCOUNT_A_ID:user/alice", "acs:ram::ACCOUNT_A_ID:user/bob" ] } } ], "Version": "1" }
Langkah 3: Modifikasi kebijakan berbasis identitas untuk Alice dan Bob
Izinkan mereka mengasumsikan peran automation-role dan wajibkan mereka menetapkan nilai SourceIdentity yang persis sesuai dengan username mereka.
-
Kebijakan berbasis identitas untuk Alice
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Resource": "acs:ram::ACCOUNT_A_ID:role/automation-role", "Condition": { "StringEquals": { "sts:SourceIdentity": [ "alice" ] } } } ] } -
Kebijakan berbasis identitas untuk Bob
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:SetSourceIdentity" ], "Resource": "acs:ram::ACCOUNT_A_ID:role/automation-role", "Condition": { "StringEquals": { "sts:SourceIdentity": [ "bob" ] } } } ] }
SourceIdentity dalam ActionTrail
Anda dapat menemukan bidang SourceIdentity dalam log audit ActionTrail untuk pelacakan identitas.
-
Dalam log event
AssumeRole*:SourceIdentitymuncul dalam bidangresponseElementsdanrequestParameters.{ "eventId": "9BCD28D0-7FDB-5BF2-9302-CDA6CCC5****", "eventVersion": 1, "responseElements": { "SourceIdentity": "alice", "RequestId": "9BCD28D0-7FDB-5BF2-9302-CDA6CCC5****", ... }, ... "requestParameters": { "SourceIdentity": "alice", "X-Acs-Request-Id": "9BCD28D0-7FDB-5BF2-9302-CDA6CCC5****", ... }, "serviceName": "Sts", "eventName": "AssumeRole", ... }
-
Dalam log event untuk mengakses sumber daya cloud:
SourceIdentitymuncul dalam bidanguserIdentity.sessionContext.{ "eventId": "46B5B0A1-19F7-5A56-BE2C-0BCFE5F8****", "userIdentity": { "sessionContext": { "sourceIdentity": "alice", ... }, "type": "assumed-role", ... }, "serviceName": "Ecs", "eventName": "DescribeInstances", ... }
Troubleshooting
Permasalahan paling umum saat mengonfigurasi SourceIdentity adalah izin yang tidak mencukupi. Bagian berikut menjelaskan dua skenario error khas beserta solusinya.
Skenario 1: Masalah kebijakan berbasis identitas
Pesan Error:
{
"RequestId": "AC9DDEC1-3E1F-50B8-A2D1-BAA155FD****",
"Code": "NoPermission",
"Message": "You are not authorized to do this action. You should be authorized by RAM.",
"AccessDeniedDetail": {
"PolicyType": "AccountLevelIdentityBasedPolicy",
"AuthAction": "sts:SetSourceIdentity",
...
}
}
Penyebab:
-
"PolicyType": "AccountLevelIdentityBasedPolicy"menunjukkan bahwa error disebabkan oleh kebijakan berbasis identitas pemanggil. -
"AuthAction": "sts:SetSourceIdentity"menunjukkan bahwa izin untuk aksists:SetSourceIdentitytidak tersedia.
Solusi: Minta administrator Anda memeriksa kebijakan berbasis identitas pemanggil dan pastikan hal-hal berikut:
-
Kebijakan mencakup
"Action": "sts:SetSourceIdentity". -
Cakupan
Resourcekebijakan mencakup peran target yang ingin diasumsikan. -
Jika kebijakan berisi
Condition, pastikan nilaiSourceIdentitydalam permintaan Anda memenuhi kondisi tersebut.
Skenario 2: Masalah kebijakan kepercayaan
Pesan Error:
{
"RequestId": "ECC91EE1-0EB0-5E79-B3F5-E54FD8B9****",
"Code": "NoPermission",
"Message": "You are not authorized to do this action. You should be authorized by RAM.",
"AccessDeniedDetail": {
"PolicyType": "AssumeRolePolicy",
"AuthAction": "sts:SetSourceIdentity",
...
}
}
Penyebab:
-
"PolicyType": "AssumeRolePolicy"menunjukkan bahwa error disebabkan oleh kebijakan kepercayaan peran target. -
"AuthAction": "sts:SetSourceIdentity"menunjukkan bahwa peran target tidak mempercayai aksists:SetSourceIdentity.
Solusi: Minta administrator Anda memeriksa kebijakan kepercayaan peran target dan pastikan hal-hal berikut:
-
Kebijakan mencakup
"Action": "sts:SetSourceIdentity". -
Jika kebijakan berisi
Condition, pastikan nilaiSourceIdentitydalam permintaan Anda memenuhi kondisi tersebut.
Saran troubleshooting umum
-
Persempit cakupan: Jika Anda mengalami masalah izin saat menetapkan
SourceIdentity, coba hapus parameterSourceIdentitydan asumsikan peran kembali. Jika tindakan berhasil, kemungkinan besar masalahnya terletak pada pengaturan izin terkaitSourceIdentity. -
Analisis pesan error: Baca bagian
AccessDeniedDetaildari pesan error, terutama bidangPolicyType. Informasi ini dapat membantu Anda dengan cepat menentukan apakah masalah berasal dari kebijakan berbasis identitas atau kebijakan kepercayaan. -
Gunakan alat diagnostik: Jika Anda hanya memiliki
RequestId, Anda dapat menggunakan alat OpenAPI Explorer. MasukkanRequestId, dan sistem akan mengembalikan informasi diagnostik terperinci untuk membantu Anda mengidentifikasi masalah izin. Contohnya:Hasil diagnostik menunjukkan ErrorCode
NoPermissiondan ErrorMessageYou are not authorized to do this action. You should be authorized by RAM.. Kesimpulan pemeriksaan izin adalah Tidak diizinkan oleh kebijakan berbasis identitas (tingkat akun) untuk aksists:SetSourceIdentity. Solusinya menyarankan pemberian kebijakan sistemAliyunSTSAssumeRoleAccesskepada pengguna RAM, yang terkait dengansts:SetSourceIdentity, atau membuat kebijakan kustom. -
Bandingkan kebijakan dan permintaan: Setelah menemukan kebijakan yang relevan, periksa apakah pengaturan
ResourcedanConditionsesuai dengan parameter permintaan API Anda, sepertiARNperan target dan nilaiSourceIdentity.
Untuk informasi lebih lanjut tentang troubleshooting masalah izin, lihat Cara troubleshooting error akses ditolak.