

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

# Memberikan akses Fungsi Acara 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.

Kami merekomendasikan penggunaan `put-resource-policy` untuk menentukan kebijakan JSON lengkap. Dengan`put-resource-policy`, Anda dapat menambahkan pernyataan penolakan, menggunakan berbagai kunci kondisi IAM, dan mengelola semua izin dalam satu dokumen. Anda juga dapat menggunakan `add-permission` untuk menambahkan pernyataan individual untuk kasus penggunaan sederhana.

**penting**  
Menggunakan `put-resource-policy` menggantikan kebijakan berbasis sumber daya yang ada pada sumber daya. Jika sumber daya sudah memiliki izin yang ditentukan`add-permission`, `put-resource-policy` timpa. Gunakan `get-resource-policy` untuk mengambil kebijakan yang ada sebelum membuat perubahan.

## Menggunakan kebijakan JSON lengkap (disarankan)
<a name="permissions-function-services-json"></a>

Contoh kebijakan berikut memberikan izin Amazon Simple Notification Service untuk memanggil fungsi bernama`my-function`, tetapi hanya untuk topik tertentu. Ini juga menyangkal doa dari topik tertentu.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-sns-my-topic",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.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:my-topic"
                }
            }
        },
        {
            "Sid": "deny-sns-other-topic",
            "Effect": "Deny",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:us-east-2:123456789012:function:my-function",
                "arn:aws:lambda:us-east-2:123456789012:function:my-function:*"
            ],
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:restricted-topic"
                }
            }
        }
    ]
}
```

Simpan kebijakan ke file bernama `policy.json` dan terapkan dengan`put-resource-policy`:

```
aws lambda put-resource-policy \
  --resource-arn arn:aws:lambda:{{us-east-2}}:{{123456789012}}:function:{{my-function}} \
  --policy file://policy.json
```

Untuk Amazon S3, sumbernya adalah bucket yang ARN-nya tidak menyertakan ID akun. Mungkin saja Anda bisa menghapus bucket dan akun lain bisa membuat bucket dengan nama yang sama. Gunakan tombol `aws:SourceAccount` kondisi untuk memastikan bahwa hanya sumber daya di akun Anda yang dapat menjalankan fungsi:

```
{
    "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:123456789012:function:my-function",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "123456789012"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:::my-bucket"
                }
            }
        }
    ]
}
```

## Menggunakan izin tambahan
<a name="permissions-function-services-add-permission"></a>

Untuk kasus penggunaan sederhana, Anda dapat menggunakan `add-permission` untuk menambahkan pernyataan individual. 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"}
```

**catatan**  
Jika Anda menelepon `add-permission` setelah`put-resource-policy`, pernyataan baru akan ditambahkan ke kebijakan JSON yang ada.

Untuk membatasi pemanggilan ke sumber daya tertentu, gunakan opsi: `source-arn`

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

Untuk Amazon S3, gunakan `source-account` opsi dengan ID akun Anda:

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