Contoh kasus untuk kontrol SNS akses Amazon - Amazon Simple Notification Service

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

Contoh kasus untuk kontrol SNS akses Amazon

Bagian ini menjelaskan beberapa contoh kasus penggunaan umum untuk kontrol akses.

Berikan Akun AWS akses ke suatu topik

Katakanlah Anda memiliki topik di AmazonSNS, dan Anda ingin mengizinkan satu atau lebih Akun AWS untuk melakukan tindakan tertentu pada topik itu, seperti mempublikasikan pesan. Anda dapat melakukannya dengan menggunakan SNS API tindakan AddPermission Amazon.

AddPermissionTindakan ini memungkinkan Anda menentukan topik, daftar Akun AWS IDs, daftar tindakan, dan label. Amazon SNS kemudian secara otomatis membuat dan menambahkan pernyataan kebijakan baru ke kebijakan kontrol akses topik. Anda tidak perlu menulis pernyataan kebijakan sendiri—Amazon SNS menangani ini untuk Anda. Jika Anda perlu menghapus kebijakan nanti, Anda dapat melakukannya dengan menelepon RemovePermission dan memberikan label yang Anda gunakan saat menambahkan izin.

Misalnya, jika Anda memanggil AddPermission topik arn:aws:sns:us-east- 2:444455556666:, MyTopic tentukan ID Akun AWS 1111-2222-3333, tindakan, dan label, Amazon akan membuat dan menyisipkan pernyataan kebijakan berikut ke dalam kebijakan Publish kontrol akses topik: grant-1234-publish SNS

{ "Statement": [{ "Sid": "grant-1234-publish", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Publish"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic" }] }

Setelah pernyataan ini ditambahkan, Akun AWS 1111-2222-3333 akan memiliki izin untuk mempublikasikan pesan ke topik tersebut.

Informasi tambahan:

  • Manajemen kebijakan khusus: Meskipun AddPermission nyaman untuk memberikan izin, seringkali berguna untuk mengelola kebijakan kontrol akses topik secara manual untuk skenario yang lebih kompleks, seperti menambahkan kondisi atau memberikan izin ke peran atau layanan tertentuIAM. Anda dapat melakukannya dengan menggunakan atribut SetTopicAttributes API to update policy secara langsung.

  • Praktik terbaik keamanan: Berhati-hatilah saat memberikan izin untuk memastikan bahwa hanya entitas tepercaya Akun AWS atau entitas yang memiliki akses ke topik Amazon Anda. SNS Secara teratur meninjau dan mengaudit kebijakan yang dilampirkan pada topik Anda untuk menjaga keamanan.

  • Batas kebijakan: Perlu diingat bahwa ada batasan ukuran dan kompleksitas SNS kebijakan Amazon. Jika Anda perlu menambahkan banyak izin atau kondisi rumit, pastikan kebijakan Anda tetap berada dalam batas-batas ini.

Batasi langganan ke HTTPS

Untuk membatasi protokol pengiriman notifikasi untuk SNS topik Amazon AndaHTTPS, Anda harus membuat kebijakan khusus. AddPermissionTindakan di Amazon SNS tidak memungkinkan Anda menentukan batasan protokol saat memberikan akses ke topik Anda. Oleh karena itu, Anda perlu menulis kebijakan secara manual yang memberlakukan pembatasan ini dan kemudian menggunakan SetTopicAttributes tindakan tersebut untuk menerapkan kebijakan tersebut ke topik Anda.

Berikut cara membuat kebijakan yang membatasi langganan untukHTTPS:

  1. Tulis kebijakan. Kebijakan harus menentukan Akun AWS ID yang ingin Anda berikan akses dan menerapkan kondisi bahwa hanya HTTPS langganan yang diizinkan. Di bawah ini adalah contoh kebijakan yang memberikan izin Akun AWS ID 1111-2222-3333 untuk berlangganan topik, tetapi hanya jika protokol yang digunakan adalah. HTTPS

    { "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "sns:Protocol": "https" } } }] }
  2. Terapkan Kebijakan. Gunakan SetTopicAttributes tindakan di Amazon SNS API untuk menerapkan kebijakan ini ke topik Anda. Tetapkan Policy atribut topik ke JSON kebijakan yang Anda buat.

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:444455556666:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

Informasi tambahan:

  • Menyesuaikan kontrol akses. Pendekatan ini memungkinkan Anda untuk menerapkan kontrol akses yang lebih terperinci, seperti membatasi protokol berlangganan, yang tidak mungkin dilakukan melalui tindakan saja. AddPermission Kebijakan khusus memberikan fleksibilitas untuk skenario yang memerlukan kondisi tertentu, seperti penegakan protokol atau pembatasan alamat IP.

  • Praktik terbaik keamanan. Membatasi langganan untuk HTTPS meningkatkan keamanan notifikasi Anda dengan memastikan bahwa data dalam perjalanan dienkripsi. Tinjau kebijakan topik Anda secara teratur untuk memastikan mereka memenuhi persyaratan keamanan dan kepatuhan Anda.

  • Pengujian kebijakan. Sebelum menerapkan kebijakan dalam lingkungan produksi, ujilah di lingkungan pengembangan untuk memastikannya berperilaku seperti yang diharapkan. Ini membantu mencegah masalah akses yang tidak disengaja atau pembatasan yang tidak diinginkan.

Publikasikan pesan ke SQS antrian Amazon

Untuk mempublikasikan pesan dari SNS topik Amazon Anda ke SQS antrean Amazon, Anda perlu mengonfigurasi izin yang benar pada antrian AmazonSQS. Meskipun Amazon SNS dan Amazon SQS menggunakan AWS bahasa kebijakan kontrol akses, Anda harus secara eksplisit menetapkan kebijakan pada SQS antrian Amazon untuk mengizinkan pesan dikirim dari topik Amazon. SNS

Anda dapat mencapai ini dengan menggunakan SetQueueAttributes tindakan untuk menerapkan kebijakan kustom ke SQS antrian Amazon. Tidak seperti AmazonSNS, Amazon SQS tidak mendukung AddPermission tindakan untuk membuat pernyataan kebijakan dengan kondisi. Karena itu, Anda harus menulis kebijakan secara manual.

Berikut ini adalah contoh SQS kebijakan Amazon yang memberikan SNS izin Amazon untuk mengirim pesan ke antrian Anda. Perhatikan bahwa kebijakan ini dikaitkan dengan SQS antrian Amazon, bukan SNS topik Amazon. Tindakan yang ditentukan adalah SQS tindakan Amazon, dan sumber daya adalah Amazon Resource Name (ARN) dari antrean. Anda dapat mengambil antrean ARN dengan menggunakan tindakan. GetQueueAttributes

{ "Statement": [{ "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": ["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic" } } }] }

Kebijakan ini menggunakan aws:SourceArn kondisi untuk membatasi akses ke SQS antrian berdasarkan sumber pesan yang dikirim. Ini memastikan bahwa hanya pesan yang berasal dari SNS topik tertentu (dalam hal ini, arn:aws:sns:us-east- 2:444455556666:) yang diizinkan untuk dikirim ke antrian. MyTopic

Informasi tambahan:

  • AntrianARN. Pastikan Anda mengambil ARN SQS antrean Amazon yang benar menggunakan tindakan. GetQueueAttributes Ini ARN penting untuk mengatur izin yang benar.

  • Praktik terbaik keamanan. Saat membuat kebijakan, selalu ikuti prinsip hak istimewa paling sedikit. Berikan hanya izin yang diperlukan ke SNS topik Amazon untuk berinteraksi dengan SQS antrian Amazon, dan tinjau kebijakan Anda secara teratur untuk memastikan kebijakan tersebut aman dan aman up-to-date

  • Kebijakan default di AmazonSNS. Bertentangan dengan beberapa kesalahpahaman, Amazon SNS tidak secara otomatis memberikan kebijakan default yang memungkinkan Layanan AWS akses lain ke topik yang baru dibuat. Anda harus secara eksplisit menentukan dan melampirkan kebijakan untuk mengontrol akses ke topik Amazon SNS Anda.

  • Pengujian dan validasi. Setelah menyetel kebijakan, uji integrasi dengan menerbitkan pesan ke SNS topik Amazon dan memverifikasi bahwa pesan tersebut berhasil dikirim ke SQS antrean Amazon. Ini membantu mengonfirmasi bahwa kebijakan telah dikonfigurasi dengan benar.

Izinkan pemberitahuan acara Amazon S3 untuk mempublikasikan ke suatu topik

Untuk mengizinkan bucket Amazon S3 dari yang lain Akun AWS untuk mempublikasikan pemberitahuan peristiwa ke SNS topik Amazon Anda, Anda perlu mengonfigurasi kebijakan akses topik yang sesuai. Ini melibatkan penulisan kebijakan khusus yang memberikan izin ke layanan Amazon S3 dari yang Akun AWS spesifik dan kemudian menerapkan kebijakan ini ke topik Amazon SNS Anda.

Inilah cara Anda dapat mengaturnya:

  1. Tulis kebijakan. Kebijakan tersebut harus memberikan layanan Amazon S3 (s3.amazonaws.com) izin yang diperlukan untuk mempublikasikan ke SNS topik Amazon Anda. Anda akan menggunakan SourceAccount kondisi ini untuk memastikan bahwa hanya yang ditentukan Akun AWS, yang memiliki bucket Amazon S3, yang dapat mempublikasikan pemberitahuan ke topik Anda.

    Berikut ini adalah contoh kebijakan.

    { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }] }
    • Pemilik topik — 111122223333 adalah ID Akun AWS yang memiliki topik Amazon. SNS

    • Pemilik bucket Amazon S3 — 444455556666 adalah ID yang Akun AWS memiliki bucket Amazon S3 mengirimkan notifikasi.

  2. Terapkan Kebijakan. Gunakan SetTopicAttributes tindakan untuk menetapkan kebijakan ini pada SNS topik Amazon Anda. Ini akan memperbarui kontrol akses topik untuk menyertakan izin yang ditentukan dalam kebijakan kustom Anda.

    snsClient.setTopicAttributes(SetTopicAttributesRequest.builder() .topicArn("arn:aws:sns:us-east-2:111122223333:MyTopic") .attributeName("Policy") .attributeValue(jsonPolicyString) // The JSON policy as a string .build());

Informasi tambahan:

  • Menggunakan SourceAccount kondisi. SourceAccountKondisi ini memastikan bahwa hanya peristiwa yang berasal dari yang ditentukan Akun AWS (444455556666 dalam kasus ini) yang dapat memicu topik Amazon. SNS Ini adalah langkah keamanan untuk mencegah akun yang tidak sah mengirim pemberitahuan ke topik Anda.

  • Layanan lain yang mendukungSourceAccount. SourceAccountKondisi ini didukung oleh layanan berikut. Sangat penting untuk menggunakan kondisi ini ketika Anda ingin membatasi akses ke SNS topik Amazon Anda berdasarkan akun asal.

    • APIGerbang Amazon

    • Amazon CloudWatch

    • DevOpsGuru Amazon

    • Amazon EventBridge

    • Amazon GameLift

    • Amazon Pinpoint SMS dan Suara API

    • Amazon RDS

    • Amazon Redshift

    • Amazon S3 Glacier

    • Amazon SES

    • Amazon Simple Storage Service

    • AWS CodeCommit

    • AWS Directory Service

    • AWS Lambda

    • AWS Systems Manager Incident Manager

  • Pengujian dan validasi. Setelah menerapkan kebijakan, uji penyiapan dengan memicu peristiwa di bucket Amazon S3 dan mengonfirmasi bahwa itu berhasil dipublikasikan ke topik Amazon Anda. SNS Ini akan membantu memastikan bahwa kebijakan Anda dikonfigurasi dengan benar.

  • Praktik terbaik keamanan. Tinjau dan audit kebijakan SNS topik Amazon Anda secara teratur untuk memastikan kebijakan tersebut mematuhi persyaratan keamanan Anda. Membatasi akses hanya ke akun dan layanan tepercaya sangat penting untuk menjaga operasi yang aman.

SESIzinkan Amazon mempublikasikan ke topik yang dimiliki oleh akun lain

Anda dapat mengizinkan orang lain Layanan AWS untuk mempublikasikan ke topik yang dimiliki oleh orang lain Akun AWS. Misalkan Anda masuk ke akun 111122223333, membuka SES Amazon, dan membuat email. Untuk mempublikasikan pemberitahuan tentang email ini ke SNS topik Amazon yang dimiliki akun 444455556666, Anda harus membuat kebijakan seperti berikut ini. Untuk melakukannya, Anda perlu memberikan informasi tentang penanggung jawab (layanan lainnya) dan kepemilikan setiap sumber daya. ResourcePernyataan tersebut memberikan topikARN, yang mencakup ID akun pemilik topik, 444455556666. Pernyataan "aws:SourceOwner": "111122223333" menentukan bahwa akun Anda memiliki email.

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:SourceOwner": "111122223333" } } } ] }

Saat memublikasikan acara ke AmazonSNS, layanan berikut mendukungaws:SourceOwner:

  • APIGerbang Amazon

  • Amazon CloudWatch

  • DevOpsGuru Amazon

  • Amazon GameLift

  • Amazon Pinpoint SMS dan Suara API

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccount versus aws:SourceOwner

penting

aws:SourceOwnertidak digunakan lagi dan layanan baru dapat diintegrasikan dengan Amazon SNS hanya melalui dan. aws:SourceArn aws:SourceAccount Amazon SNS masih mempertahankan kompatibilitas mundur untuk layanan yang ada yang saat ini mendukungaws:SourceOwner.

Kunci aws:SourceAccount dan aws:SourceOwner kondisi masing-masing ditetapkan oleh beberapa orang Layanan AWS ketika mereka mempublikasikan ke SNS topik Amazon. Ketika didukung, nilainya akan menjadi ID AWS akun 12 digit yang atas nama layanan tersebut menerbitkan data. Beberapa layanan mendukung satu, dan beberapa mendukung yang lain.

Izinkan akun di organisasi AWS Organizations untuk mempublikasikan ke topik di akun yang berbeda

AWS Organizations Layanan ini membantu Anda mengelola penagihan secara terpusat, mengontrol akses dan keamanan, dan berbagi sumber daya di seluruh Anda. Akun AWS

Anda dapat menemukan ID organisasi Anda di konsol Organizations. Untuk informasi selengkapnya, lihat Melihat detail organisasi dari akun manajemen.

Dalam contoh ini, setiap Akun AWS organisasi myOrgId dapat mempublikasikan ke SNS topik Amazon MyTopic di akun444455556666. Kebijakan memeriksa nilai ID organisasi menggunakan kunci syarat global aws:PrincipalOrgID.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "myOrgId" } } } ] }

Izinkan CloudWatch alarm apa pun untuk mempublikasikan ke topik di akun yang berbeda

Dalam hal ini, CloudWatch alarm apa pun di akun 111122223333 diizinkan untuk dipublikasikan ke SNS topik Amazon di akun444455556666.

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } } ] }

Batasi publikasi ke SNS topik Amazon hanya dari titik akhir tertentu VPC

Dalam hal ini, topik di akun 444455556666 diizinkan untuk dipublikasikan hanya dari titik akhir dengan ID. VPC vpce-1ab2c34d

{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }