Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan kebijakan berbasis sumber daya di Lambda
Dengan kebijakan izin berbasis sumber daya, Anda dapat memberikan akses lain, pengguna, organisasi Akun AWS, dan akses Layanan AWS ke Fungsi Peristiwa Lambda Anda. Kebijakan berbasis sumber daya adalah dokumen JSON yang berisi satu atau beberapa pernyataan. Setiap pernyataan mendefinisikan yang berikut:
-
Principal: Entitas yang ingin Anda berikan izin (yang lain Layanan AWS, peran IAM atau pengguna, atau lainnya) Akun AWS -
Action: Daftar tindakan API yang ingin Anda izinkan atau tolak untuk prinsipal yang ditentukan -
Effect: Apakah Anda ingin mengizinkan atau menolak kemampuan utama untuk menggunakan tindakan API yang dipilih -
Resource: Fungsi, versi, atau alias Lambda yang Anda inginkan untuk menerapkan pernyataan (Anda juga dapat menggunakan karakter wildcard untuk menentukan semua versi dan alias fungsi Anda)
Anda juga dapat menggunakan elemen opsional seperti Sid (pengidentifikasi pernyataan) dan Condition (kondisi logis untuk kontrol akses berbutir halus). Untuk daftar lengkap elemen kebijakan yang didukung, lihat referensi elemen kebijakan IAM JSON di AWS Identity and Access Management Panduan Pengguna.
Menambahkan izin berbasis sumber daya ke Fungsi Acara
Anda dapat menambahkan izin berbasis sumber daya ke fungsi Lambda Anda menggunakan dua metode:
-
Kebijakan JSON lengkap — Gunakan konsol Lambda AWS CLI, atau PutResourcePolicytindakan API untuk menambahkan dokumen kebijakan JSON yang lengkap. Dengan kebijakan JSON lengkap, Anda dapat menggunakan rangkaian lengkap kunci kondisi global IAM, menambahkan beberapa pernyataan dengan beberapa prinsip, dan membuat pernyataan eksplisit.
DenyUkuran maksimum untuk kebijakan berbasis sumber daya JSON adalah 20 KB. -
Izin individual — Gunakan tindakan konsol atau AddPermissionAPI untuk menambahkan
Allowpernyataan tunggal. Izin individual hanya mendukung sekumpulan kunci kondisi terbatas (aws:SourceArn,aws:SourceAccount, danaws:PrincipalOrgID).
Sebaiknya Anda menentukan kebijakan JSON lengkap untuk menambahkan izin berbasis sumber daya ke fungsi Anda. Membuat kebijakan JSON yang lengkap memberi Anda lebih banyak fleksibilitas dan kontrol halus atas izin Anda.
penting
Menggunakan put-resource-policy menggantikan kebijakan berbasis sumber daya yang ada pada sumber daya. Jika sumber daya sudah memiliki izin yang ditentukanadd-permission, put-resource-policy timpa. Gunakan get-resource-policy untuk mengambil kebijakan yang ada sebelum membuat perubahan.
Izin yang diperlukan
Untuk menggunakan tindakanPutResourcePolicy,GetResourcePolicy, dan DeleteResourcePolicy API, Anda memerlukan izin IAM berikut:
| Tindakan API | Izin yang diperlukan |
|---|---|
| PutResourcePolicy | lambda:PutResourcePolicy, lambda:AddPermission, dan lambda:RemovePermission |
| GetResourcePolicy | lambda:GetResourcePolicy dan lambda:GetPolicy |
| DeleteResourcePolicy | lambda:DeleteResourcePolicy dan lambda:RemovePermission |
Melihat kebijakan berbasis sumber daya fungsi
Menghapus kebijakan berbasis sumber daya fungsi
Memperbarui kebijakan yang ada
Saat memperbarui izin berbasis sumber daya fungsi yang ada, perilakunya bergantung pada metode yang Anda gunakan:
-
put-resource-policy/PutResourcePolicy— Menggantikan seluruh kebijakan yang ada. Setiap izin individu yang ditambahkan sebelumnya akan ditimpa. -
add-permission/AddPermission— Menambahkan pernyataan ke kebijakan yang ada tanpa menimpa. Jika Anda meneleponadd-permissionsetelahput-resource-policy, pernyataan baru akan ditambahkan ke kebijakan JSON yang ada.
Untuk menghindari penimpaan izin yang ada secara tidak sengaja saat menggunakanput-resource-policy, ambil kebijakan fungsi yang ada terlebih dahulu. get-resource-policyOutputnya termasuk RevisionId bidang.
aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function
Saat Anda melampirkan kebijakan baru, berikan RevisionId nilai dengan --revision-id parameter untuk memastikan bahwa Anda memperbarui versi terbaru. Jika Anda memberikan ID revisi yang lebih lama, Lambda tidak memperbarui kebijakan fungsi Anda.
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function\ --policy file://policy.json \ --revision-ida1b2c3d4-5678-90ab-cdef-EXAMPLE11111
catatan
Kebijakan berbasis sumber daya yang ada dibuat dengan AddPermission terus bekerja tanpa modifikasi. Tidak ada perubahan pada kode fungsi Anda yang diperlukan untuk menggunakan PutResourcePolicy API baru.
Praktik terbaik keamanan
Dengan kebijakan berbasis sumber daya JSON, Anda dapat mengikuti pola akses hak istimewa paling sedikit. Anda juga dapat memenuhi persyaratan peraturan untuk penolakan eksplisit. Dengan kebijakan JSON lengkap, Anda dapat:
-
Buat
Denypernyataan eksplisit untuk memblokir prinsip atau kondisi tertentu. -
Gunakan kondisi organisasi (
aws:PrincipalOrgID,aws:PrincipalOrgPaths) untuk membatasi akses ke Organizations Anda tanpa menyebutkan akun individual. -
Izin lingkup ke akun sumber atau ARN tertentu menggunakan rangkaian lengkap kunci kondisi global IAM.
Contoh kebijakan berbasis sumber daya
contoh Memberikan izin ke Amazon S3 dengan pernyataan penolakan
Kebijakan berikut memberikan semua bucket Amazon S3 dalam izin akun untuk menjalankan fungsi, kecuali satu bucket yang ditolak secara eksplisit.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } }, { "Sid": "deny-s3-bucket", "Effect": "Deny", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:111122223333:function:my-function", "arn:aws:lambda:us-east-2:111122223333:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
contoh Memberikan izin ke akun dalam suatu organisasi
Hibah kebijakan berikut meminta akses ke semua orang Akun AWS dalam suatu organisasi.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "org-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }
contoh Memberikan izin untuk beberapa peran IAM dengan kondisi
Kebijakan berikut memberikan izin kepada dua peran IAM untuk menggunakan CreateAlias tindakan dari alamat IP tertentu.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-roles", "Effect": "Allow", "Action": "lambda:CreateAlias", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/role-name", "arn:aws:iam::444455556666:role/role-name2" ] }, "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "IpAddress": { "aws:SourceIp": "192.0.2.0" } } } ] }
contoh Menolak akses kecuali penelepon adalah bagian dari organisasi tertentu
{ "Version": "2012-10-17", "Statement": [ { "Sid": "deny-access", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAllValues:StringNotLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } }, { "Sid": "allow-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } } ] }
Tindakan API yang didukung
Tindakan API Lambda berikut mendukung kebijakan berbasis sumber daya:
-
InvokeFunctionUrl(hanya izin)