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

Lambda mendukung kebijakan izin berbasis sumber daya untuk fungsi dan lapisan Lambda. Kebijakan berbasis sumber daya memungkinkan Anda memberikan izin penggunaan ke AWS akun atau organisasi lain berdasarkan per sumber daya. Anda juga menggunakan kebijakan berbasis sumber daya untuk mengizinkan AWS layanan menjalankan fungsi Anda atas nama Anda.

Untuk fungsi Lambda, Anda dapat memberikan izin ke akun untuk memicu atau mengelola fungsi. Anda juga dapat menggunakan kebijakan berbasis sumber daya tunggal untuk memberikan izin ke seluruh organisasi. AWS Organizations Anda juga dapat menggunakan kebijakan berbasis sumber daya untuk memberikan izin pemanggilan ke AWS layanan yang memanggil fungsi sebagai respons terhadap aktivitas di akun Anda.

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

  2. Pilih fungsi.

  3. Pilih Konfigurasi, lalu pilih Izin.

  4. Gulir ke bawah ke Kebijakan berbasis sumber daya, lalu pilih Lihat dokumen kebijakan. Kebijakan berbasis sumber daya menunjukkan izin yang diterapkan saat akun atau AWS layanan lain mencoba mengakses fungsi tersebut. Contoh berikut menunjukkan pernyataan yang memungkinkan Amazon S3 memicu fungsi bernama my-function untuk bucket bernama DOC-EXAMPLE-BUCKET dalam akun 123456789012.

    contoh Kebijakan berbasis sumber daya
    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "lambda-allow-s3-my-function", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" }, "ArnLike": { "AWS:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" } } } ] }

Untuk lapisan Lambda, Anda hanya dapat menggunakan kebijakan berbasis sumber daya pada versi lapisan tertentu ketimbang keseluruhan lapisan. Selain kebijakan yang memberikan izin ke satu atau beberapa akun, untuk lapisan, Anda juga dapat memberikan izin ke semua akun dalam sebuah organisasi.

catatan

Anda hanya dapat memperbarui kebijakan berbasis sumber daya untuk sumber daya Lambda dalam lingkup tindakan dan API. AddPermissionAddLayerVersionPermission Saat ini, Anda tidak dapat membuat kebijakan untuk sumber daya Lambda di JSON, atau menggunakan kondisi yang tidak dipetakan ke parameter untuk tindakan tersebut.

Kebijakan berbasis sumber daya berlaku untuk satu versi fungsi, versi, alias, atau lapisan. Kebijakan ini memberikan izin ke satu atau beberapa layanan dan akun. Untuk akun tepercaya yang ingin Anda beri akses ke beberapa sumber daya, atau untuk menggunakan tindakan API yang tidak didukung oleh kebijakan berbasis sumber daya, Anda dapat menggunakan peran lintas akun.

Tindakan API yang didukung

Tindakan API Lambda berikut mendukung kebijakan berbasis sumber daya:

Memberikan akses fungsi ke layanan AWS

Saat Anda menggunakan AWS layanan untuk menjalankan fungsi, Anda memberikan izin dalam pernyataan tentang kebijakan berbasis sumber daya. Anda dapat menerapkan pernyataan ke seluruh fungsi untuk dipicu atau dikelola, atau membatasi pernyataan ke satu versi atau alias.

catatan

Saat Anda menambahkan pemicu ke fungsi Anda dengan konsol Lambda, konsol memperbarui kebijakan berbasis sumber daya fungsi untuk memungkinkan layanan memicunya. Untuk memberikan izin ke akun atau layanan lain yang tidak tersedia di konsol Lambda, Anda dapat menggunakan AWS CLI.

Tambahkan pernyataan dengan perintah add-permission. Pernyataan kebijakan berbasis sumber daya yang paling sederhana memungkinkan layanan untuk memicu fungsi. Perintah berikut memberikan Amazon SNS izin untuk memicu fungsi bernama my-function.

aws lambda add-permission --function-name my-function --action lambda:InvokeFunction --statement-id sns \ --principal sns.amazonaws.com --output text

Anda akan melihat output berikut:

{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}

Ini memungkinkan Amazon SNS memanggil API lambda:Invoke untuk fungsi tersebut, tetapi tidak membatasi topik Amazon SNS yang memicu invokasi tersebut. Untuk memastikan fungsi Anda hanya di-invokasi oleh sumber daya tertentu, tentukan Amazon Resource Name (ARN) sumber daya dengan opsi source-arn. Perintah berikut ini hanya memungkinkan Amazon SNS untuk melakukan invokasi fungsi untuk berlangganan ke topik bernama my-topic.

aws lambda add-permission --function-name my-function --action lambda:InvokeFunction --statement-id sns-my-topic \ --principal sns.amazonaws.com --source-arn arn:aws:sns:us-east-2:123456789012:my-topic

Beberapa layanan dapat melakukan invokasi fungsi di akun lain. Jika Anda menentukan ARN sumber yang berisi ID akun Anda di dalamnya, hal tersebut bukanlah masalah. Namun, untuk Amazon S3, sumbernya adalah bucket dengan ARN tanpa ID akun di dalamnya. Anda mungkin bisa menghapus bucket, dan akun lain dapat membuat bucket dengan nama yang sama. Gunakan opsi source-account dengan ID akun Anda untuk memastikan hanya sumber daya di akun Anda yang dapat melakukan invokasi fungsi.

aws lambda add-permission --function-name my-function --action lambda:InvokeFunction --statement-id s3-account \ --principal s3.amazonaws.com --source-arn arn:aws:s3:::DOC-EXAMPLE-BUCKET --source-account 123456789012

Memberikan akses fungsi ke organisasi

Untuk memberikan izin ke organisasi di AWS Organizations, tentukan ID organisasi sebagai. principal-org-id AddPermission AWS CLI Perintah berikut memberikan akses pemanggilan ke semua pengguna dalam organisasi. o-a1b2c3d4e5f

aws lambda add-permission --function-name example \ --statement-id PrincipalOrgIDExample --action lambda:InvokeFunction \ --principal * --principal-org-id o-a1b2c3d4e5f
catatan

Dalam perintah ini, Principal adalah*. Ini berarti bahwa semua pengguna di organisasi o-a1b2c3d4e5f mendapatkan izin pemanggilan fungsi. Jika Anda menentukan AWS akun atau peran sebagaiPrincipal, maka hanya prinsipal yang mendapatkan izin pemanggilan fungsi, tetapi hanya jika mereka juga merupakan bagian dari organisasi. o-a1b2c3d4e5f

Perintah ini membuat kebijakan berbasis sumber daya yang terlihat seperti berikut:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrincipalOrgIDExample", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:example", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }

Untuk informasi selengkapnya, lihat aws: PrincipalOrg ID di panduan AWS Identity and Access Management pengguna.

Memberi fungsi akses ke akun lain

Untuk memberikan izin ke AWS akun lain, tentukan ID akun sebagai. principal Contoh berikut memberi izin 111122223333 akun untuk memanggil my-function dengan alias prod.

aws lambda add-permission --function-name my-function:prod --statement-id xaccount --action lambda:InvokeFunction \ --principal 111122223333 --output text

Anda akan melihat output berikut:

{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}

Kebijakan berbasis sumber daya memberikan izin bagi akun lain untuk mengakses fungsi, tetapi tidak mengizinkan pengguna dalam akun tersebut untuk melebihi izin mereka. Pengguna di akun lain harus memiliki izin pengguna yang sesuai untuk menggunakan API Lambda.

Untuk membatasi akses ke pengguna atau peran di akun lain, tentukan ARN lengkap dari identitas sebagai prinsip. Misalnya, arn:aws:iam::123456789012:user/developer.

Alias membatasi versi mana yang dapat dilakukan invokasi oleh akun lain. Ini mengharuskan akun lain menyertakan alias dalam fungsi ARN.

aws lambda invoke --function-name arn:aws:lambda:us-west-2:123456789012:function:my-function:prod out

Anda akan melihat output berikut:

{ "StatusCode": 200, "ExecutedVersion": "1" }

Pemilik fungsi kemudian dapat memperbarui alias untuk menunjuk ke versi baru tanpa pemanggil perlu mengubah cara melakukan invokasi fungsi Anda. Ini memastikan akun lain tidak perlu mengubah kodenya untuk menggunakan versi baru, dan memiliki izin untuk melakukan invokasi versi fungsi yang terkait dengan alias.

Anda dapat memberikan akses lintas akun untuk sebagian besar tindakan API yang beroperasi pada fungsi yang sudah ada. Misalnya, Anda dapat memberikan akses ke lambda:ListAliases agar akun bisa mendapatkan daftar alias, atau lambda:GetFunction agar mengunduh kode fungsi Anda. Tambahkan setiap izin secara terpisah, atau gunakan lambda:* untuk memberikan akses ke semua tindakan untuk fungsi tertentu.

Untuk memberi akun lain izin untuk beberapa fungsi, atau untuk tindakan yang tidak beroperasi pada fungsi, kami sarankan Anda menggunakan peran IAM.

Memberikan akses lapisan ke akun lain

Untuk memberikan izin penggunaan lapisan ke akun lain, tambahkan pernyataan ke kebijakan izin versi lapisan menggunakan perintah add-layer-version-permission. Dalam setiap pernyataan, Anda dapat memberikan izin ke satu akun, semua akun, atau organisasi.

Contoh berikut memberikan akun 111122223333 akses ke versi 2 lapisan. bash-runtime

aws lambda add-layer-version-permission --layer-name bash-runtime --statement-id xaccount \ --action lambda:GetLayerVersion --principal 111122223333 --version-number 2 --output text

Anda akan melihat output yang serupa dengan yang berikut:

e210ffdc-e901-43b0-824b-5fcd0dd26d16 {"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-1:123456789012:layer:bash-runtime:2"}

Izin hanya berlaku untuk satu versi lapisan. Ulangi proses ini tiap kali Anda membuat versi lapisan baru.

Untuk memberikan izin ke semua akun dalam organisasi, gunakan opsi organization-id. Contoh berikut memberi semua akun dalam organisasi izin untuk menggunakan versi 3 suatu lapisan.

aws lambda add-layer-version-permission --layer-name my-layer \ --statement-id engineering-org --version-number 3 --principal '*' \ --action lambda:GetLayerVersion --organization-id o-t194hfs8cz --output text

Anda akan melihat output berikut:

b0cd9796-d4eb-4564-939f-de7fe0b42236 {"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"

Untuk memberikan izin ke semua AWS akun, gunakan * untuk prinsipal, dan hilangkan ID organisasi. Untuk beberapa akun atau organisasi, Anda perlu menambahkan beberapa pernyataan.

Membersihkan kebijakan berbasis sumber daya

Untuk melihat kebijakan berbasis sumber daya dari fungsi, gunakan perintah get-policy.

aws lambda get-policy --function-name my-function --output text

Anda akan melihat output berikut:

{"Version":"2012-10-17","Id":"default","Statement":[{"Sid":"sns","Effect":"Allow","Principal":{"Service":"s3.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function","Condition":{"ArnLike":{"AWS:SourceArn":"arn:aws:sns:us-east-2:123456789012:lambda*"}}}]} 7c681fc9-b791-4e91-acdf-eb847fdaa0f0

Untuk versi dan alias, tambahkan nomor versi atau alias di akhir nama fungsi.

aws lambda get-policy --function-name my-function:PROD

Untuk menghapus izin dari fungsi, gunakan remove-permission.

aws lambda remove-permission --function-name example --statement-id sns

Gunakan perintah get-layer-version-policy untuk melihat izin pada lapisan.

aws lambda get-layer-version-policy --layer-name my-layer --version-number 3 --output text

Anda akan melihat output berikut:

b0cd9796-d4eb-4564-939f-de7fe0b42236 {"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-west-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"

Gunakan remove-layer-version-permission untuk menghapus pernyataan dari kebijakan.

aws lambda remove-layer-version-permission --layer-name my-layer --version-number 3 --statement-id engineering-org