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.
Topik
- Berikan Akun AWS akses ke suatu topik
- Batasi langganan ke HTTPS
- Publikasikan pesan ke SQS antrian Amazon
- Izinkan pemberitahuan acara Amazon S3 untuk mempublikasikan ke suatu topik
- SESIzinkan Amazon mempublikasikan ke topik yang dimiliki oleh akun lain
- aws:SourceAccount versus aws:SourceOwner
- Izinkan akun di organisasi AWS Organizations untuk mempublikasikan ke topik di akun yang berbeda
- Izinkan CloudWatch alarm apa pun untuk mempublikasikan ke topik di akun yang berbeda
- Batasi publikasi ke SNS topik Amazon hanya dari titik akhir tertentu VPC
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.
AddPermission
Tindakan 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 atributSetTopicAttributes
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. AddPermission
Tindakan 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:
-
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" } } }] }
-
Terapkan Kebijakan. Gunakan
SetTopicAttributes
tindakan di Amazon SNS API untuk menerapkan kebijakan ini ke topik Anda. TetapkanPolicy
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:
-
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.
-
-
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.SourceAccount
Kondisi 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 mendukung
SourceAccount
.SourceAccount
Kondisi 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. Resource
Pernyataan 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:SourceOwner
tidak 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.
-
Lihat Izinkan pemberitahuan acara Amazon S3 untuk mempublikasikan ke suatu topik bagaimana notifikasi Amazon S3 digunakan
aws:SourceAccount
dan daftar AWS layanan yang mendukung kondisi tersebut. -
Lihat SESIzinkan Amazon mempublikasikan ke topik yang dimiliki oleh akun lain bagaimana Amazon SES menggunakan
aws:SourceOwner
dan daftar AWS layanan yang mendukung kondisi tersebut.
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
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" } } }] }