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 orang lain Akun AWS, pengguna, organisasi, dan Layanan AWS akses ke fungsi Lambda Anda. Kebijakan berbasis sumber daya adalah dokumen JSON yang berisi satu atau lebih pernyataan. Setiap pernyataan mendefinisikan sebagai berikut:
-
Principal: Entitas yang ingin Anda berikan izin kepada (yang lain Layanan AWS, peran atau pengguna IAM, atau lainnya Akun AWS) -
Action: Daftar tindakan API yang ingin Anda izinkan atau tolak untuk prinsip yang ditentukan -
Effect: Apakah Anda ingin mengizinkan atau menolak prinsipal kemampuan untuk menggunakan tindakan API yang dipilih -
Resource: Fungsi, versi, atau alias Lambda yang ingin Anda terapkan pernyataan tersebut (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 halus). Untuk daftar lengkap elemen kebijakan yang didukung, lihat referensi elemen kebijakan JSON IAM di Panduan AWS Identity and Access Management Pengguna.
Menambahkan izin berbasis sumber daya ke fungsi Lambda
Anda dapat menambahkan izin berbasis sumber daya ke fungsi Lambda menggunakan dua metode:
-
Kebijakan JSON lengkap — Gunakan konsol Lambda AWS CLI,, atau tindakan PutResourcePolicy API untuk menambahkan dokumen kebijakan JSON lengkap. Dengan kebijakan JSON lengkap, Anda dapat menggunakan rangkaian lengkap kunci kondisi global IAM, menambahkan beberapa pernyataan dengan beberapa prinsip, dan membuat pernyataan eksplisit
Deny. Ukuran maksimum untuk kebijakan berbasis sumber daya JSON adalah 20 KB. -
Izin individu — Gunakan tindakan konsol atau AddPermission API untuk menambahkan
Allowpernyataan tunggal. Izin individu hanya mendukung kumpulan kunci kondisi terbatas (aws:SourceArn,aws:SourceAccount, danaws:PrincipalOrgID).
Sebaiknya tentukan kebijakan JSON lengkap untuk menambahkan izin berbasis sumber daya ke fungsi Anda. Membuat kebijakan JSON 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 ditentukan denganadd-permission, tul put-resource-policy islah. 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 Anda memperbarui izin berbasis sumber daya fungsi yang ada, perilaku tergantung pada metode yang Anda gunakan:
-
put-resource-policy/PutResourcePolicy- Mengganti seluruh kebijakan yang ada. Izin individu yang ditambahkan sebelumnya akan diganti. -
add-permission/AddPermission— Menambahkan pernyataan ke kebijakan yang ada tanpa mengganti. Jika Anda memangadd-permissiongil setput-resource-policyelahnya, pernyataan baru ditambahkan ke kebijakan JSON yang ada.
Untuk menghindari penulisan 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 yang 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 terkecil. Anda juga dapat memenuhi persyaratan peraturan untuk penolakan eksplisit. Dengan kebijakan JSON lengkap, Anda dapat:
-
Buat
Denypernyataan eksplisit untuk memblokir prinsip-prinsip atau kondisi tertentu. -
Gunakan kondisi organisasi (
aws:PrincipalOrgID,aws:PrincipalOrgPaths) untuk membatasi akses ke Organisasi Anda tanpa menyebutkan akun individual. -
Izin cakupan ke akun sumber tertentu atau ARN menggunakan berbagai kunci kondisi global IAM.
Contoh kebijakan berbasis sumber daya
contoh Memberikan izin ke Amazon S3 dengan pernyataan menolak
Kebijakan berikut memberikan izin kepada semua bucket Amazon S3 dalam akun untuk memanggil fungsi, kecuali untuk 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 organisasi
Hibah kebijakan berikut memanggil akses ke semua 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 ke 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)