View a markdown version of this page

Bekerja dengan kebijakan berbasis sumber daya di Lambda - AWS Lambda

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. Deny Ukuran maksimum untuk kebijakan berbasis sumber daya JSON adalah 20 KB.

  • Izin individual — Gunakan tindakan konsol atau AddPermissionAPI untuk menambahkan Allow pernyataan 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
Console
Untuk membuat kebijakan berbasis sumber daya JSON lengkap
  1. Buka halaman Fungsi Acara konsol Lambda.

  2. Pilih fungsi yang ingin Anda berikan akses dan kemudian pilih tab Konfigurasi.

  3. Pilih Izin.

  4. Di panel pernyataan Resource-based kebijakan, pilih Edit. Tindakan ini membuka editor kebijakan JSON.

  5. Tambahkan pernyataan ke kebijakan fungsi Anda. Anda dapat memilih tindakan API, menambahkan prinsip dari berbagai jenis (layanan, akun, peran IAM), dan menambahkan kunci kondisi untuk mengontrol akses.

  6. Pilih Simpan.

Anda juga dapat mengedit kebijakan berbasis sumber daya fungsi Anda secara langsung di panel Kebijakan.

AWS CLI
Untuk menambahkan kebijakan berbasis sumber daya JSON lengkap

Untuk menambahkan kebijakan JSON lengkap ke fungsi Anda, gunakan put-resource-policy AWS CLI perintah.

Perintah contoh berikut menambahkan kebijakan berbasis sumber daya ke fungsi Anda menggunakan kebijakan yang ditentukan dalam file bernama policy.json di mesin lokal Anda. Jalankan perintah dari direktori yang berisi file. resource-arnDapat menentukan versi fungsi atau alias, atau Anda dapat menggunakan fungsi ARN yang tidak memenuhi syarat untuk menerapkan kebijakan ke seluruh fungsi.

aws lambda put-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json
Lambda APIs

Untuk menambahkan kebijakan izin JSON lengkap ke fungsi Anda, gunakan tindakan PutResourcePolicyAPI. Anda juga dapat menghapus kebijakan fungsi menggunakan DeleteResourcePolicytindakan, atau mengambil kebijakan yang saat ini dilampirkan ke fungsi menggunakan GetResourcePolicytindakan.

Untuk menambahkan izin individual ke kebijakan fungsi, gunakan tindakan AddPermissionAPI.

Melihat kebijakan berbasis sumber daya fungsi

Console
Untuk menampilkan kebijakan fungsi berbasis sumber daya
  1. Buka halaman Fungsi Acara konsol Lambda.

  2. Pilih fungsi.

  3. Pilih Konfigurasi, lalu pilih Izin.

  4. Gulir ke bawah ke pernyataan Resource-based kebijakan untuk melihat kebijakan.

AWS CLI

Untuk melihat kebijakan berbasis sumber daya dari fungsi, gunakan perintah get-resource-policy. Anda dapat menggunakan ARN fungsi yang tidak memenuhi syarat, atau menentukan versi atau alias.

aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Anda juga dapat menggunakan get-policy perintah:

aws lambda get-policy \ --function-name my-function \ --output text
Lambda APIs

Untuk mengambil kebijakan berbasis sumber daya fungsi, gunakan tindakan API. GetResourcePolicy Anda dapat menggunakan ARN fungsi yang tidak memenuhi syarat, atau menentukan versi atau alias ARN.

Anda juga dapat menggunakan tindakan GetPolicyAPI.

Menghapus kebijakan berbasis sumber daya fungsi

Console
Untuk menghapus kebijakan berbasis sumber daya fungsi
  1. Buka halaman Fungsi Acara konsol Lambda.

  2. Pilih fungsi yang ingin Anda hapus kebijakan izin.

  3. Pilih tab Konfigurasi, lalu Izin.

  4. Di panel pernyataan Resource-based kebijakan, pilih Hapus.

AWS CLI

Untuk menghapus kebijakan fungsi Anda, gunakan delete-resource-policy perintah dan tentukan ARN fungsi, versi, atau alias yang ingin Anda hapus kebijakan tersebut.

aws lambda delete-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function

Untuk menghapus pernyataan individual, gunakanremove-permission.

aws lambda remove-permission \ --function-name example \ --statement-id sns
Lambda APIs

Untuk menghapus kebijakan berbasis sumber daya yang dilampirkan ke fungsi, versi fungsi, atau alias fungsi, gunakan tindakan API. DeleteResourcePolicy

Untuk menghapus pernyataan individual dari kebijakan, gunakan tindakan RemovePermissionAPI.

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 menelepon add-permission setelahput-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-id a1b2c3d4-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 Deny pernyataan 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: