

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

# Menggunakan kebijakan berbasis identitas dengan Amazon SNS
<a name="sns-using-identity-based-policies"></a>

Amazon Simple Notification Service terintegrasi dengan AWS Identity and Access Management (IAM) sehingga Anda dapat menentukan tindakan Amazon SNS mana yang dapat dilakukan pengguna dengan sumber Akun AWS daya Amazon SNS. Anda dapat menentukan topik tertentu dalam kebijakan. Misalnya, Anda dapat menggunakan variabel saat membuat kebijakan IAM yang memberikan pengguna tertentu dalam organisasi Anda izin untuk menggunakan tindakan `Publish` dengan topik tertentu di Akun AWS Anda. Untuk informasi selengkapnya, lihat [Variabel Kebijakan](https://docs.aws.amazon.com/IAM/latest/UserGuide/PolicyVariables.html) dalam panduan *Menggunakan IAM*.

**penting**  
Menggunakan Amazon SNS dengan IAM tidak mengubah cara Anda menggunakan Amazon SNS. Tidak ada perubahan pada tindakan Amazon SNS, dan tidak ada tindakan Amazon SNS baru yang terkait dengan pengguna dan pengendalian akses.

Untuk contoh kebijakan yang mencakup tindakan dan sumber daya Amazon SNS, lihat [Contoh kebijakan untuk Amazon SNS](#sns-example-policies).

## Kebijakan IAM dan Amazon SNS bersama-sama
<a name="iam-and-sns-policies"></a>

Anda menggunakan kebijakan IAM untuk membatasi akses pengguna Anda ke tindakan dan topik Amazon SNS. Kebijakan IAM dapat membatasi akses hanya untuk pengguna dalam AWS akun Anda, bukan ke yang lain. Akun AWS

Anda menggunakan kebijakan Amazon SNS dengan topik tertentu untuk membatasi siapa yang dapat bekerja dengan topik tersebut (misalnya, siapa yang dapat memublikasikan pesan ke topik, yang dapat berlangganan ke topik, dll.). Kebijakan Amazon SNS dapat memberikan akses ke orang lain Akun AWS, atau ke pengguna dalam milik Anda. Akun AWS

Untuk memberikan izin untuk topik Amazon SNS Anda ke pengguna Anda, Anda dapat menggunakan kebijakan IAM, kebijakan Amazon SNS, atau keduanya. Umumnya, Anda dapat mencapai hasil yang sama dengan baik. Sebagai contoh, diagram berikut menunjukkan kebijakan IAM dan kebijakan Amazon SNS yang setara. Kebijakan IAM memungkinkan tindakan Amazon `Subscribe` SNS untuk topik yang disebut topic\_xyz dalam Kebijakan IAM Akun AWS Anda dilampirkan ke pengguna Bob dan Susan (yang berarti bahwa Bob dan Susan memiliki izin yang dinyatakan dalam kebijakan). Kebijakan Amazon SNS juga memberikan Bob dan Susan izin untuk mengakses `Subscribe` untuk topic\_xyz.

![Membandingkan kebijakan IAM dan kebijakan Amazon SNS, menunjukkan bahwa kedua kebijakan tersebut memberikan izin yang setara kepada dua pengguna, Bob dan Susan, yang memungkinkan mereka berlangganan topik Amazon SNS tertentu dalam file. Akun AWS Perbedaan utama yang disorot adalah bahwa kebijakan Amazon SNS dapat memberikan izin kepada pengguna di berbagai tempat Akun AWS, sedangkan kebijakan IAM tidak bisa.](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/SNS_EquivalentPolicies.png)


**catatan**  
Contoh sebelumnya menunjukkan kebijakan sederhana tanpa syarat. Anda bisa menentukan syarat tertentu dalam kebijakan yang mana pun dan mendapatkan hasil yang sama.

Ada satu perbedaan antara kebijakan AWS IAM dan Amazon SNS: Sistem kebijakan Amazon SNS memungkinkan Anda memberikan izin kepada yang Akun AWS lain, sedangkan kebijakan IAM tidak. 

Terserah Anda bagaimana Anda menggunakan kedua sistem bersama-sama untuk mengelola izin Anda, berdasarkan kebutuhan Anda. Contoh berikut menunjukkan cara sistem dua kebijakan bekerja sama.

**Example 1**  
Dalam contoh ini, baik kebijakan IAM maupun kebijakan Amazon SNS diterapkan pada Bob. Kebijakan IAM memberinya izin untuk `Subscribe` topik apa pun, sedangkan Akun AWS kebijakan Amazon SNS memberinya izin untuk `Publish` menggunakan topik tertentu (topic\_xyz). Diagram berikut menggambarkan konsep.  

![Menunjukkan bagaimana kebijakan IAM dan kebijakan Amazon SNS berlaku untuk pengguna Bob, dengan kebijakan IAM yang memungkinkan dia untuk berlangganan topik apa pun di Akun AWS, dan kebijakan Amazon SNS yang memberinya izin untuk mempublikasikan pesan ke topik tertentu bernama “topic_xyz.” Diagram menekankan perbedaan antara izin umum yang diberikan oleh kebijakan IAM dan izin khusus yang diberikan oleh kebijakan Amazon SNS untuk topik tertentu.](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/SNS_UnionOfPolicies.png)

Jika Bob mengirim permintaan untuk berlangganan topik apa pun di AWS akun, kebijakan IAM akan memungkinkan tindakan tersebut. Jika Bob mengirimkan permintaan untuk memublikasikan pesan ke topic\_xyz, kebijakan Amazon SNS akan mengizinkan tindakan tersebut.  
 

**Example 2**  
Dalam contoh ini, kita mengembangkan contoh 1 (ada dua kebijakan yang diterapkan pada Bob). Katakanlah bahwa Bob memublikasikan pesan ke topic\_xyz yang seharusnya tidak dia lakukan, jadi Anda ingin sepenuhnya menghapus kemampuannya memublikasikan ke topik. Hal termudah yang dapat dilakukan adalah menambahkan kebijakan IAM yang menolak Bob mengakses tindakan `Publish` pada semua topik. Kebijakan ketiga ini mengabaikan kebijakan Amazon SNS yang awalnya memberikan dia izin untuk memublikasikan ke topic\_xyz, karena penolakan eksplisit selalu mengabaikan perizinan (untuk informasi lebih lanjut tentang logika evaluasi kebijakan, lihat [Logika evaluasi](sns-access-policy-language-evaluation-logic.md)). Diagram berikut menggambarkan konsep.  

![Ilustrasi bagaimana menambahkan kebijakan IAM yang menolak tindakan “Publikasikan” untuk semua topik dapat mengesampingkan kebijakan Amazon SNS yang ada yang memungkinkan pengguna Bob mempublikasikan ke topik tertentu, “topic_xyz.” Kebijakan penolakan IAM lebih diutamakan daripada kebijakan Amazon SNS, yang secara efektif mencegah Bob menerbitkan ke topik apa pun, termasuk “topic_xyz.”](http://docs.aws.amazon.com/id_id/sns/latest/dg/images/SNS_DenyOverride.png)


Untuk contoh kebijakan yang mencakup tindakan dan sumber daya Amazon SNS, lihat [Contoh kebijakan untuk Amazon SNS](#sns-example-policies).

## Format ARN sumber daya Amazon SNS
<a name="sns-arn-format"></a>

Untuk Amazon SNS, topik adalah satu-satunya jenis sumber daya yang dapat Anda tentukan dalam kebijakan. Berikut adalah format Amazon Resource Name (ARN) untuk topik:

```
arn:aws:sns:{{region}}:{{account_ID}}:{{topic_name}}
```

Untuk informasi lebih lanjut tentang ARNs, buka *Panduan Pengguna IAM*. [ARNs](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_Identifiers.html#Identifiers_ARNs)

**Example**  
Berikut ini adalah ARN untuk topik yang dinamai MyTopic di wilayah us-east-2, milik 123456789012. Akun AWS   

```
arn:aws:sns:us-east-2:123456789012:MyTopic
```

**Example**  
Jika Anda memiliki topik yang disebutkan MyTopic di masing-masing Wilayah berbeda yang didukung Amazon SNS, Anda dapat menentukan topik dengan ARN berikut.   

```
arn:aws:sns:*:123456789012:MyTopic
```

Anda dapat menggunakan wildcard \* dan ? dalam nama topik. Sebagai contoh, yang berikut ini dapat merujuk pada semua topik yang dibuat oleh Bob yang telah dia awali dengan `bob_`.

```
arn:aws:sns:*:123456789012:bob_*
```

Untuk kenyamanan Anda, ketika Anda membuat topik, Amazon SNS mengembalikan ARN topik dalam respon.

## Tindakan API Amazon SNS
<a name="sns-api-actions"></a>

Dalam kebijakan IAM, Anda dapat menentukan tindakan apa pun yang ditawarkan Amazon SNS. Namun, tindakan `ConfirmSubscription` dan `Unsubscribe` tidak memerlukan autentikasi, yang berarti meskipun Anda menetapkan tindakan tersebut dalam kebijakan, IAM tidak akan membatasi akses pengguna ke tindakan tersebut.

Setiap tindakan yang Anda tentukan dalam kebijakan harus diawali dengan string huruf kecil `sns:`. Untuk menentukan semua tindakan Amazon SNS, misalnya, Anda akan menggunakan `sns:*`. Untuk daftar tindakan, kunjungi [Referensi API Layanan Notifikasi Sederhana Amazon](https://docs.aws.amazon.com/sns/latest/api/). 

## Kunci kebijakan Amazon SNS
<a name="sns-policy-keys"></a>

Amazon SNS mengimplementasikan kunci kebijakan AWS lebar berikut, ditambah beberapa kunci khusus layanan.

Untuk daftar kunci kondisi yang didukung oleh masing-masing Layanan AWS, lihat [Tindakan, sumber daya, dan kunci kondisi untuk Layanan AWS](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html) dalam *Panduan Pengguna IAM*. Untuk daftar kunci kondisi yang dapat digunakan dalam beberapa Layanan AWS, lihat [kunci konteks kondisi AWS global](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html) di *Panduan Pengguna IAM*.

Amazon SNS menggunakan kunci khusus layanan berikut. Gunakan kunci ini dalam kebijakan yang membatasi akses ke permintaan `Subscribe`.
+ **sns:endpoint—**URL, alamat email, atau ARN dari permintaan `Subscribe` atau langganan yang telah dikonfirmasi sebelumnya. Gunakan dengan syarat string (lihat [Contoh kebijakan untuk Amazon SNS](#sns-example-policies)) untuk membatasi akses ke titik akhir tertentu (misalnya, \*@yourcompany.com).
+ **sns:protocol—**Nilai `protocol` dari permintaan `Subscribe` atau langganan yang telah dikonfirmasi sebelumnya. Gunakan dengan syarat string (lihat [Contoh kebijakan untuk Amazon SNS](#sns-example-policies)) untuk membatasi publikasi ke protokol pengiriman tertentu (misalnya, https). 

## Contoh kebijakan untuk Amazon SNS
<a name="sns-example-policies"></a>

Bagian ini menunjukkan beberapa kebijakan sederhana untuk mengontrol akses pengguna ke Amazon SNS.

**catatan**  
Di masa depan, Amazon SNS mungkin menambahkan tindakan baru yang harus dimasukkan secara logis ke dalam salah satu kebijakan berikut, berdasarkan tujuan yang dinyatakan kebijakan. 

**Example 1: Memungkinkan grup untuk membuat dan mengelola topik**  
Dalam contoh ini, kami membuat kebijakan yang memberikan akses ke `CreateTopic`, `ListTopics` `SetTopicAttributes`, dan `DeleteTopic`.  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": ["sns:CreateTopic", "sns:ListTopics", "sns:SetTopicAttributes", "sns:DeleteTopic"],
    "Resource": "*"
  }]
}
```

**Example 2: Memungkinkan grup IT untuk memublikasikan pesan ke topik tertentu**  
Dalam contoh ini, kami membuat grup untuk IT, dan menetapkan kebijakan yang memberikan akses ke `Publish` pada topik tertentu yang diinginkan.  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:*:123456789012:MyTopic"
  }]
}
```

**Example 3: Berikan pengguna Akun AWS kemampuan untuk berlangganan topik**  
Dalam contoh ini, kami membuat kebijakan yang memberikan akses ke tindakan `Subscribe`, dengan syarat pencocokan string untuk kunci kebijakan `sns:Protocol` dan `sns:Endpoint`.  

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": ["sns:Subscribe"],
    "Resource": "*",
    "Condition": {
      "StringLike": {
        "sns:Endpoint": "*@example.com"
      },
      "StringEquals": {
        "sns:Protocol": "email"
      }
    }
  }]
}
```

**Example 4: Mengizinkan mitra memublikasikan pesan ke topik tertentu**  
Anda dapat menggunakan kebijakan Amazon SNS atau kebijakan IAM untuk memungkinkan mitra memublikasikan ke topik tertentu. Jika pasangan Anda memiliki Akun AWS, mungkin lebih mudah untuk menggunakan kebijakan Amazon SNS. Namun, siapa pun di perusahaan mitra yang memiliki kredensyal AWS keamanan dapat mempublikasikan pesan ke topik tersebut. Contoh ini mengasumsikan bahwa Anda ingin membatasi akses ke orang (atau aplikasi) tertentu. Untuk melakukan ini, Anda perlu memperlakukan mitra seperti pengguna dalam perusahaan Anda sendiri, dan menggunakan kebijakan IAM bukan kebijakan Amazon SNS.  
Untuk contoh ini, kami membuat grup bernama WidgetCo yang mewakili perusahaan mitra; kami membuat pengguna untuk orang tertentu (atau aplikasi) di perusahaan mitra yang membutuhkan akses; dan kemudian kami menempatkan pengguna dalam grup.   
Kami kemudian melampirkan kebijakan yang memberikan `Publish` akses grup pada topik tertentu bernama *WidgetPartnerTopic*.   
Kami juga ingin mencegah WidgetCo grup melakukan hal lain dengan topik, jadi kami menambahkan pernyataan yang menolak izin untuk tindakan Amazon SNS selain topik apa pun `Publish` selain topik apa pun selain. WidgetPartnerTopic Hal ini hanya diperlukan jika terdapat kebijakan luas di tempat lain dalam sistem yang memberikan pengguna akses luas ke Amazon SNS.   

```
{
  "Statement": [{
      "Effect": "Allow",
      "Action": "sns:Publish",
      "Resource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic"
    },
    {
      "Effect": "Deny",
      "NotAction": "sns:Publish",
      "NotResource": "arn:aws:sns:*:123456789012:WidgetPartnerTopic"
    }
  ]
}
```

## Kebijakan Amazon SNS untuk Titik Akhir Email
<a name="sns-email-endpoints"></a>

Amazon SNS menormalkan alamat email dalam kebijakan akses titik akhir dengan menghapus spasi putih utama dan di belakang, mengonversi semua karakter menjadi huruf kecil, dan menormalkan karakter khusus dan urutan escape. Karena itu, Anda harus menggunakan alamat email huruf kecil dalam definisi kebijakan Anda untuk memastikan pencocokan permintaan berlangganan yang tepat. 

Contoh kebijakan:

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "user.name@example.com"
        }
    }
}
```

Alamat email berikut cocok dengan kondisi di atas:
+ `user.name@example.com`
+ `USER.NAME@EXAMPLE.COM`
+ `User.N\ame@Example.com`

## Kebijakan Amazon SNS untuk titik akhir HTTP/HTTPs
<a name="sns-http-https-endpoints"></a>

Amazon SNS menormalkan titik akhir dalam kebijakan akses HTTP/HTTPs titik akhir dengan mengonversi skema dan nama host menjadi huruf kecil sambil mempertahankan port, jalur, parameter kueri, dan fragmen dengan tepat. Karena itu, Anda harus menggunakan skema huruf kecil dan nama host dalam definisi kebijakan Anda untuk memastikan pencocokan permintaan langganan yang tepat. 

```
{
    "Condition": {
        "StringEquals": {
            "sns:Endpoint": "https://example.com:443/path?A=B"
        }
    }
}
```

Berikut ini HTTP/HTTPs cocok dengan kondisi di atas:
+ `HTTPS://EXAMPLE.COM:443/path?A=B`
+ `HTTPS://example.com:443/path?A=B`
+ `HTTPS://ExAmPlE.cOm:443/path?A=B`