Menggunakan kebijakan berbasis identitas dengan Amazon SNS - Amazon Simple Notification Service

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

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

Kebijakan IAM dan Amazon SNS bersama-sama

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 di akun Anda. AWS Kebijakan IAM dilampirkan pada pengguna Bob dan Susan (yang berarti Bob dan Susan memiliki izin yang tercantum dalam kebijakan). Kebijakan Amazon SNS juga memberikan Bob dan Susan izin untuk mengakses Subscribe untuk topic_xyz.

Kebijakan IAM dan Amazon SNS yang setara
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.

contoh 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.

Kebijakan IAM dan Amazon SNS untuk Bob

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.

contoh 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). Diagram berikut menggambarkan konsep.

Kebijakan "Tolak" mengabaikan kebijakan Amazon SNS

Untuk contoh kebijakan yang mencakup tindakan dan sumber daya Amazon SNS, lihat Contoh kebijakan untuk Amazon SNS. Untuk informasi selengkapnya tentang menulis kebijakan Amazon SNS, kunjungi dokumentasi teknis untuk Amazon SNS.

Format ARN sumber daya Amazon SNS

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 ARN, kunjungi ARN dalam Panduan Pengguna IAM.

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

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

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.

Kunci kebijakan Amazon SNS

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 dalam Panduan Pengguna IAM. Untuk daftar kunci kondisi yang dapat digunakan dalam beberapa Layanan AWS, lihat kunci konteks kondisi AWS global 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) 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) untuk membatasi publikasi ke protokol pengiriman tertentu (misalnya, https).

Contoh kebijakan untuk Amazon SNS

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.

contoh 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": "*" }] }
contoh 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" }] }
contoh 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" } } }] }
contoh 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 kredenal 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 apa pun Publish selain pada 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" } ] }