

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Melihat kebijakan IAM berbasis sumber daya di Lambda
<a name="access-control-resource-based"></a>

Lambda mendukung kebijakan izin berbasis sumber daya untuk fungsi dan lapisan Lambda. [Anda dapat menggunakan kebijakan berbasis sumber daya untuk memberikan akses ke [AWS akun, [organisasi](permissions-function-organization.md), atau layanan](permissions-function-cross-account.md) lain.](permissions-function-services.md) Kebijakan berbasis sumber daya berlaku untuk satu versi fungsi, versi, alias, atau lapisan. 

------
#### [ Console ]

**Untuk menampilkan kebijakan fungsi berbasis sumber daya**

1. Buka [halaman Fungsi](https://console.aws.amazon.com/lambda/home#/functions) di konsol Lambda.

1. Pilih fungsi.

1. Pilih **Konfigurasi**, lalu pilih **Izin**.

1. 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 `amzn-s3-demo-bucket` dalam akun `123456789012`.  
**Example 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:::amzn-s3-demo-bucket"
                 }
               }
           }
        ]
   }
   ```

------
#### [ AWS CLI ]

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*"}}}]}
```

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
```

------

## Tindakan API yang didukung
<a name="permissions-resource-api"></a>

Tindakan API Lambda berikut mendukung kebijakan berbasis sumber daya:
+ [CreateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_CreateAlias.html)
+ [DeleteAlias](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteAlias.html)
+ [DeleteFunction](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunction.html)
+ [DeleteFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionConcurrency.html)
+ [DeleteFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionEventInvokeConfig.html)
+ [DeleteProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteProvisionedConcurrencyConfig.html)
+ [GetAlias](https://docs.aws.amazon.com/lambda/latest/api/API_GetAlias.html)
+ [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html)
+ [GetFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConcurrency.html)
+ [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)
+ [GetFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionEventInvokeConfig.html)
+ [GetPolicy](https://docs.aws.amazon.com/lambda/latest/api/API_GetPolicy.html)
+ [GetProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetProvisionedConcurrencyConfig.html)
+ [Memohon](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)
+ [InvokeFunctionUrl](urls-auth.md)(hanya izin)
+ [ListAliases](https://docs.aws.amazon.com/lambda/latest/api/API_ListAliases.html)
+ [ListFunctionEventInvokeConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctionEventInvokeConfigs.html)
+ [ListProvisionedConcurrencyConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListProvisionedConcurrencyConfigs.html)
+ [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html)
+ [ListVersionsByFunction](https://docs.aws.amazon.com/lambda/latest/api/API_ListVersionsByFunction.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)
+ [PutFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionConcurrency.html)
+ [PutFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html)
+ [PutProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutProvisionedConcurrencyConfig.html)
+ [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)
+ [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html)
+ [UpdateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateAlias.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionEventInvokeConfig.html)

# Memberikan akses fungsi Lambda ke Layanan AWS
<a name="permissions-function-services"></a>

Saat Anda [menggunakan AWS layanan untuk menjalankan fungsi, Anda](lambda-services.md) memberikan izin dalam pernyataan tentang kebijakan berbasis sumber daya. Anda dapat menerapkan pernyataan ke seluruh fungsi, 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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html). Pernyataan kebijakan berbasis sumber daya yang paling sederhana memungkinkan layanan untuk memicu fungsi. Perintah berikut memberikan izin Amazon Simple Notification Service untuk memanggil 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 tindakan [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) API pada fungsi, tetapi tidak membatasi topik Amazon SNS yang memicu pemanggilan. 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:::amzn-s3-demo-bucket \
  --source-account 123456789012
```

# Memberikan akses fungsi ke organisasi
<a name="permissions-function-organization"></a>

Untuk memberikan izin ke organisasi di [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html), tentukan ID organisasi sebagai. `principal-org-id` Perintah [izin tambahan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) 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 peran Akun AWS atau sebagai`Principal`, 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:

------
#### [ JSON ]

****  

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

------

Untuk informasi selengkapnya, lihat [aws: PrincipalOrg ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) di *panduan pengguna IAM*.

# Memberikan akses fungsi Lambda ke akun lain
<a name="permissions-function-cross-account"></a>

[Untuk berbagi fungsi dengan yang lain Akun AWS, tambahkan pernyataan izin lintas akun ke kebijakan berbasis sumber daya fungsi.](access-control-resource-based.md) Jalankan perintah [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) dan 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-1: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](access-control-identity-based.md) 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](configuration-aliases.md) 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-east-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](access-control-identity-based.md).

# Memberikan akses lapisan Lambda ke akun lain
<a name="permissions-layer-cross-account"></a>

[Untuk berbagi layer dengan yang lain Akun AWS, tambahkan pernyataan izin lintas akun ke kebijakan berbasis sumber daya lapisan.](access-control-resource-based.md) Jalankan [add-layer-version-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-layer-version-permission.html)perintah dan tentukan ID akun sebagai`principal`. Dalam setiap pernyataan, Anda dapat memberikan izin ke satu akun, semua akun, atau organisasi di [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html).

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

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

Anda akan melihat output yang serupa dengan yang berikut:

```
{"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 suatu [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)organisasi, gunakan `organization-id` opsi ini. Contoh berikut memberikan semua akun dalam organisasi `o-t194hfs8cz` izin untuk menggunakan versi 3 dari. `my-layer`

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

Anda akan melihat output berikut:

```
{"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 beberapa akun atau organisasi, Anda harus menambahkan beberapa pernyataan.