Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Masalah confused deputy
Masalah deputi yang bingung adalah masalah keamanan di mana entitas yang tidak memiliki izin untuk melakukan tindakan dapat memaksa entitas yang lebih istimewa untuk melakukan tindakan. Untuk mencegah hal ini, AWS sediakan alat yang membantu Anda melindungi akun Anda jika Anda memberi pihak ketiga (dikenal sebagai lintas akun) atau AWS layanan lain (dikenal sebagai lintas layanan) akses ke sumber daya di akun Anda.
Terkadang, Anda mungkin perlu memberi pihak ketiga akses ke AWS sumber daya Anda (akses delegasi). Misalnya, katakanlah Anda memutuskan untuk menyewa perusahaan pihak ketiga bernama Example Corp untuk memantau Anda Akun AWS dan membantu mengoptimalkan biaya. Untuk melacak pengeluaran harian Anda, Example Corp perlu mengakses AWS sumber daya Anda. Contoh Corp juga memantau banyak lainnya Akun AWS untuk pelanggan lain. Anda dapat menggunakan IAM peran untuk membangun hubungan tepercaya antara akun Anda Akun AWS dan akun Example Corp. Salah satu aspek penting dari skenario ini adalah ID eksternal, informasi opsional yang dapat Anda gunakan dalam kebijakan kepercayaan IAM peran untuk menentukan siapa yang dapat mengambil peran tersebut. Fungsi utama dari ID eksternal adalah mengatasi dan mencegah masalah deputi yang membingungkan.
Pada tahun AWS, peniruan lintas layanan dapat mengakibatkan masalah wakil yang membingungkan. Peniruan identitas lintas layanan dapat terjadi ketika satu layanan (layanan yang dipanggil) memanggil layanan lain (layanan yang dipanggil). Layanan pemanggilan dapat dimanipulasi menggunakan izinnya untuk bertindak pada sumber daya pelanggan lain dengan cara yang seharusnya tidak dilakukannya kecuali bila memiliki izin untuk mengakses.
Pencegahan Deputi Bingung Lintas Akun
Diagram berikut menggambarkan masalah wakil kebingungan lintas akun.
Skenario ini mengasumsikan hal berikut:
-
AWS 1 adalah milikmu Akun AWS.
-
AWS 1: ExampleRole adalah peran dalam akun Anda. Kebijakan kepercayaan peran ini mempercayai Example Corp dengan menentukan akun AWS Example Corp sebagai akun yang dapat mengambil peran tersebut.
Inilah yang terjadi:
-
Ketika Anda mulai menggunakan layanan Example Corp, Anda memberikan ARN dari AWS 1: ExampleRole ke Example Corp.
-
Contoh Corp menggunakan peran itu ARN untuk mendapatkan kredensi keamanan sementara untuk mengakses sumber daya di Anda. Akun AWS Dengan cara ini, Anda mempercayai Example Corp sebagai “deputi” yang dapat bertindak atas nama Anda.
-
AWS Pelanggan lain juga mulai menggunakan layanan Example Corp, dan pelanggan ini juga menyediakan ARN dari AWS 1: ExampleRole untuk Example Corp untuk digunakan. Agaknya pelanggan lain belajar atau menebak AWS 1: ExampleRole, yang bukan rahasia.
-
Ketika pelanggan lain meminta Example Corp untuk mengakses AWS sumber daya di (apa yang diklaimnya) akunnya, Example Corp menggunakan AWS 1: ExampleRole untuk mengakses sumber daya di akun Anda.
Inilah cara pelanggan lain bisa mendapatkan akses tanpa izin ke sumber daya Anda. Karena pelanggan lain mampu mengelabui Example Corp untuk melakukan tindakan di luar kesadaran pada sumber daya Anda, Example Corp kini adalah “confused deputy.”
Contoh Corp dapat mengatasi masalah wakil yang membingungkan dengan mengharuskan Anda memasukkan pemeriksaan ExternalId
kondisi dalam kebijakan kepercayaan peran. Contoh Corp menghasilkan ExternalId
nilai unik untuk setiap pelanggan dan menggunakan nilai itu dalam permintaannya untuk mengambil peran tersebut. ExternalId
Nilai harus unik di antara pelanggan Example Corp dan dikendalikan oleh Example Corp, bukan pelanggannya. Inilah mengapa Anda mendapatkannya dari Example Corp dan Anda tidak membuatnya sendiri. Ini mencegah Example Corp menjadi wakil yang bingung dan memberikan akses ke sumber daya akun lain. AWS
Dalam skenario kami, bayangkan pengenal unik Example Corp untuk Anda adalah 12345, dan pengenalnya untuk pelanggan lain adalah 67890. Pengidentifikasi ini disederhanakan untuk skenario ini. Umumnya, pengidentifikasi ini adalahGUIDs. Dengan asumsi pengidentifikasi ini bersifat unik di antara pelanggan Example Corp, mereka adalah nilai yang masuk akal untuk digunakan bagi ID eksternal.
Contoh Corp memberikan nilai ID eksternal 12345 kepada Anda. Anda kemudian harus menambahkan elemen Condition
ke kebijakan kepercayaan peran yang memerlukan nilai sts:ExternalId
12345, seperti ini:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "
Example Corp's AWS Account ID
" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "12345" } } } }
Elemen Kondisi dalam kebijakan ini memungkinkan Example Corp untuk mengambil peran hanya jika AssumeRole API panggilan menyertakan nilai ID eksternal 12345. Contoh Corp memastikan bahwa setiap kali mengambil peran atas nama pelanggan, selalu menyertakan nilai ID eksternal pelanggan tersebut AssumeRole dalam panggilan. Bahkan jika pelanggan lain memasok Example Corp dengan AndaARN, ia tidak dapat mengontrol ID eksternal yang disertakan Example Corp dalam permintaannya. AWS Hal ini membantu mencegah pelanggan yang tidak berwenang untuk mendapatkan akses ke sumber daya Anda.
Diagram berikut menggambarkannya.
-
Seperti sebelumnya, ketika Anda mulai menggunakan layanan Example Corp, Anda memberikan ARN dari AWS 1: ExampleRole to Example Corp.
-
Saat Example Corp menggunakan peran itu ARN untuk mengambil peran AWS 1: ExampleRole, Example Corp menyertakan ID eksternal Anda (12345) dalam panggilan. AssumeRole API ID eksternal cocok dengan kebijakan kepercayaan peran, sehingga AssumeRole API panggilan berhasil dan Example Corp memperoleh kredensi keamanan sementara untuk mengakses sumber daya di Anda. Akun AWS
-
AWS Pelanggan lain juga mulai menggunakan layanan Example Corp, dan seperti sebelumnya, pelanggan ini juga menyediakan ARN dari AWS 1: ExampleRole untuk Contoh Corp untuk digunakan.
-
Tapi kali ini, ketika Example Corp mencoba untuk mengambil peran AWS 1: ExampleRole, ia memberikan ID eksternal yang terkait dengan pelanggan lain (67890). Pelanggan lain tidak bisa mengubah ini. Contoh Corp melakukan ini karena permintaan untuk menggunakan peran berasal dari pelanggan lain, jadi 67890 menunjukkan keadaan di mana Example Corp bertindak. Karena Anda menambahkan kondisi dengan ID eksternal Anda sendiri (12345) ke kebijakan kepercayaan AWS 1: ExampleRole, AssumeRole API panggilan gagal. Pelanggan lain tidak bisa mendapatkan akses tanpa izin ke sumber daya dalam akun Anda (ditunjukkan oleh “X” merah di diagram).
ID eksternal membantu mencegah pelanggan lain menipu Example Corp agar tanpa disadari mengakses sumber daya Anda.
Pencegahan confused deputy lintas layanan
Sebaiknya gunakan kunci konteks kondisi aws:SourceArn
aws:SourceAccount
aws:SourceOrgID
,, atau aws:SourceOrgPaths
global dalam kebijakan berbasis sumber daya untuk membatasi izin yang dimiliki layanan ke sumber daya tertentu. Gunakan aws:SourceArn
untuk mengaitkan hanya satu sumber daya dengan akses lintas layanan. Gunakan aws:SourceAccount
untuk membiarkan sumber daya apa pun di akun itu dikaitkan dengan penggunaan lintas layanan. Gunakan aws:SourceOrgID
untuk memungkinkan sumber daya apa pun dari akun apa pun dalam suatu organisasi dikaitkan dengan penggunaan lintas layanan. Gunakan aws:SourceOrgPaths
untuk mengaitkan sumber daya apa pun dari akun dalam AWS Organizations jalur dengan penggunaan lintas layanan. Untuk informasi selengkapnya tentang menggunakan dan memahami jalur, lihat Memahami jalur AWS Organizations entitas.
Cara paling terperinci untuk melindungi dari masalah wakil yang membingungkan adalah dengan menggunakan kunci konteks kondisi aws:SourceArn
global dengan penuh ARN sumber daya dalam kebijakan berbasis sumber daya Anda. Jika Anda tidak mengetahui sumber daya yang lengkap ARN atau jika Anda menentukan beberapa sumber daya, gunakan kunci konteks kondisi aws:SourceArn
global dengan wildcard (*
) untuk bagian yang tidak diketahui dari file. ARN Misalnya, arn:aws:
.servicename
:*:123456789012
:*
Jika aws:SourceArn
nilainya tidak berisi ID akun, seperti bucket Amazon S3ARN, Anda harus menggunakan keduanya aws:SourceAccount
dan aws:SourceArn
untuk membatasi izin.
Untuk melindungi dari masalah wakil yang membingungkan dalam skala besar, gunakan aws:SourceOrgID
atau kunci konteks kondisi aws:SourceOrgPaths
global dengan ID organisasi atau jalur organisasi sumber daya dalam kebijakan berbasis sumber daya Anda. Kebijakan yang menyertakan aws:SourceOrgID
atau aws:SourceOrgPaths
kunci akan secara otomatis menyertakan akun yang benar dan Anda tidak perlu memperbarui kebijakan secara manual saat menambahkan, menghapus, atau memindahkan akun di organisasi Anda.
Untuk kebijakan kepercayaan non-service-linked peran, setiap layanan dalam kebijakan kepercayaan telah melakukan iam:PassRole
tindakan untuk memverifikasi bahwa peran tersebut berada di akun yang sama dengan layanan panggilan. Akibatnya, menggunakan aws:SourceAccount
aws:SourceOrgID
, atau aws:SourceOrgPaths
dengan kebijakan kepercayaan tersebut tidak diperlukan. Menggunakan aws:SourceArn
dalam kebijakan kepercayaan memungkinkan Anda menentukan sumber daya peran yang dapat diasumsikan atas nama, seperti fungsi Lambda. ARN Beberapa kebijakan Layanan AWS penggunaan aws:SourceAccount
dan aws:SourceArn
kepercayaan untuk peran yang baru dibuat, tetapi menggunakan kunci tidak diperlukan untuk peran yang ada di akun Anda.
catatan
Tidak semua Layanan AWS integrasi mendukungaws:SourceArn
,, aws:SourceAccount
aws:SourceOrgID
, dan kunci kondisi aws:SourceOrgPaths
global. Lihat dokumentasi layanan panggilan untuk informasi lebih lanjut tentang mekanisme khusus layanan untuk mengurangi risiko wakil lintas layanan yang membingungkan.
Pencegahan deputi kebingungan lintas layanan untuk AWS Security Token Service
Banyak AWS layanan mengharuskan Anda menggunakan peran untuk memungkinkan layanan mengakses sumber daya layanan lain atas nama Anda. Peran yang diasumsikan layanan untuk melakukan tindakan atas nama Anda disebut peran layanan. Peran memerlukan dua kebijakan: kebijakan kepercayaan peran yang menentukan prinsipal yang diizinkan untuk mengambil peran dan kebijakan izin yang menentukan apa yang dapat dilakukan dengan peran tersebut. Kebijakan kepercayaan peran adalah satu-satunya jenis kebijakan berbasis sumber daya di. IAM Lainnya Layanan AWS memiliki kebijakan berbasis sumber daya, seperti kebijakan bucket Amazon S3.
Ketika layanan mengambil peran atas nama Anda, kepala layanan harus diizinkan untuk melakukan sts:AssumeRole
tindakan dalam kebijakan kepercayaan peran. Saat layanan memanggilsts:AssumeRole
, AWS STS mengembalikan sekumpulan kredensional keamanan sementara yang digunakan prinsipal layanan untuk mengakses sumber daya yang diizinkan oleh kebijakan izin peran. Saat layanan mengambil peran di akun Anda, Anda dapat menyertakan kunci konteks kondisi aws:SourceArn
aws:SourceAccount
,aws:SourceOrgID
, atau aws:SourceOrgPaths
global dalam kebijakan kepercayaan peran Anda untuk membatasi akses ke peran hanya untuk permintaan yang dihasilkan oleh sumber daya yang diharapkan.
Misalnya, di AWS Systems Manager Incident Manager, Anda harus memilih peran untuk mengizinkan Manajer Insiden menjalankan dokumen otomatisasi Systems Manager atas nama Anda. Dokumen otomatisasi dapat mencakup rencana respons otomatis untuk insiden yang diprakarsai oleh CloudWatch alarm atau peristiwa. EventBridge Dalam contoh kebijakan kepercayaan peran berikut, Anda dapat menggunakan kunci aws:SourceArn
kondisi untuk membatasi akses ke peran layanan berdasarkan catatan insiden. ARN Hanya catatan insiden yang dibuat dari sumber daya rencana respons myresponseplan
yang dapat menggunakan peran ini.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "Service": "ssm-incidents.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:ssm-incidents:*:
111122223333
:incident-record/myresponseplan
/*" } } } }
catatan
Tidak semua integrasi layanan dengan AWS STS dukunganaws:SourceArn
,, aws:SourceAccount
aws:SourceOrgID
, atau kunci aws:SourceOrgPaths
kondisi. Penggunaan kunci ini dalam kebijakan IAM kepercayaan dengan integrasi yang tidak didukung dapat mengakibatkan perilaku yang tidak terduga.