Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh kasus untuk pengendalian akses Amazon SNS
Bagian ini menjelaskan beberapa contoh kasus penggunaan umum untuk kontrol akses.
Topik
- Berikan Akun AWS akses ke topik
- Batasi langganan ke HTTPS
- Memublikasikan pesan ke antrean Amazon SQS
- Izinkan pemberitahuan acara Amazon S3 untuk mempublikasikan ke suatu topik
- Izinkan Amazon SES mempublikasikan ke topik yang dimiliki oleh akun lain
- aws:SourceAccount versus aws:SourceOwner
- Izinkan akun dalam organisasi di AWS Organizations untuk memublikasikan topik di akun yang berbeda
- Izinkan CloudWatch alarm apa pun untuk mempublikasikan ke topik di akun yang berbeda
- Membatasi publikasi ke topik Amazon SNS hanya dari VPC endpoint tertentu
Berikan Akun AWS akses ke topik
Katakan Anda mempunyai topik dalam sistem Amazon SNS. Dalam kasus yang paling sederhana, Anda ingin mengizinkan satu atau lebih Akun AWS untuk mengakses tindakan topik tertentu (misalnya, Publikasikan).
Anda dapat melakukannya menggunakan tindakan API AddPermission
Amazon SNS. Dibutuhkan topik, daftar ID Akun AWS, daftar tindakan, dan label, dan secara otomatis membuat pernyataan baru dalam kebijakan pengendalian akses topik. Dalam kasus ini, Anda tidak menulis kebijakan sendiri, karena Amazon SNS secara otomatis menghasilkan pernyataan kebijakan baru untuk Anda. Anda dapat menghapus pernyataan kebijakan nanti dengan memanggil RemovePermission
dengan labelnya.
Misalnya, jika Anda memanggil AddPermission
topik arn:aws:sns:us-east- 2:444455556666:, dengan MyTopic ID 1111-2222-3333, tindakan, dan label, Amazon SNS akan menghasilkan dan menyisipkan pernyataan kebijakan Akun AWS kontrol akses berikut: Publish
grant-1234-publish
{ "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, pengguna dengan Akun AWS 1111-2222-3333 dapat memublikasikan pesan ke topik tersebut.
Batasi langganan ke HTTPS
Pada contoh berikut, Anda membatasi protokol pengiriman notifikasi ke HTTPS.
Anda perlu tahu cara menulis kebijakan Anda sendiri untuk topik karena tindakan AddPermission
Amazon SNS tidak memungkinkan Anda menentukan pembatasan protokol ketika memberikan seseorang akses ke topik Anda. Dalam kasus ini, Anda akan menulis kebijakan Anda sendiri, dan kemudian menggunakan tindakan SetTopicAttributes
untuk mengatur atribut Policy
topik untuk kebijakan baru Anda.
Contoh kebijakan penuh berikut memberikan ID Akun AWS 1111-2222-3333 kemampuan untuk berlangganan notifikasi dari topik.
{ "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" } } }] }
Memublikasikan pesan ke antrean Amazon SQS
Dalam kasus penggunaan ini, Anda ingin memublikasikan pesan dari topik Anda ke antrean Amazon SQS Anda. Seperti Amazon SNS, Amazon SQS menggunakan bahasa kebijakan pengendalian akses Amazon. Untuk mengizinkan Amazon SNS mengirimkan pesan, Anda harus menggunakan tindakan SetQueueAttributes
Amazon SQS untuk mengatur kebijakan pada antrean.
Sekali lagi, Anda akan perlu tahu bagaimana menulis kebijakan Anda sendiri karena tindakan AddPermission
Amazon SQS tidak membuat pernyataan kebijakan dengan syarat.
catatan
Contoh yang disajikan di bawah ini adalah kebijakan Amazon SQS (mengendalikan akses ke antrean Anda), bukan kebijakan Amazon SNS (mengendalikan akses ke topik Anda). Tindakan adalah tindakan Amazon SQS, dan sumber daya adalah Amazon Resource Name (ARN) antrean. Anda dapat menentukan ARN antrean dengan mengambil atribut QueueArn
antrean dengan 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 syarat aws:SourceArn
untuk membatasi akses ke antrean berdasarkan sumber pesan yang dikirim ke antrean. Anda dapat menggunakan jenis kebijakan ini untuk mengizinkan Amazon SNS mengirimkan pesan ke antrean Anda hanya jika pesan berasal dari salah satu topik Anda sendiri. Dalam hal ini, Anda menentukan topik tertentu, yang ARN adalah arn:aws:sns:us-east- 2:444455556666:. MyTopic
Kebijakan sebelumnya adalah contoh kebijakan Amazon SQS Anda dapat menulis dan menambahkan antrean tertentu. Ini akan memberikan akses ke Amazon SNS dan layanan AWS lainnya. Amazon SNS memberikan kebijakan default untuk semua topik yang baru dibuat. Kebijakan default memberikan akses ke topik Anda ke semua layanan AWS lain. Kebijakan default ini menggunakan syarat aws:SourceArn
untuk memastikan bahwa layanan AWS mengakses topik Anda hanya atas nama sumber daya AWS yang Anda miliki.
Izinkan pemberitahuan acara Amazon S3 untuk mempublikasikan ke suatu topik
Dalam kasus ini, Anda ingin mengkonfigurasi kebijakan topik sehingga bucket Amazon S3 Akun AWS yang lain dapat memublikasikan ke topik Anda. Untuk informasi selengkapnya tentang memublikasikan notifikasi dari Amazon S3, kunjungi Menyiapkan notifikasi Peristiwa Bucket.
Contoh ini mengasumsikan bahwa Anda menulis kebijakan Anda sendiri dan kemudian menggunakan tindakan SetTopicAttributes
untuk mengatur atribut Policy
topik untuk kebijakan baru Anda.
Contoh pernyataan berikut menggunakan syarat SourceAccount
untuk memastikan bahwa hanya akun pemilik Amazon S3 yang dapat mengakses topik. Dalam contoh ini, pemilik topik adalah 111122223333 dan pemilik Amazon S3 adalah 444455556666. Contoh tersebut menyatakan bahwa setiap bucket Amazon S3 yang dimiliki oleh 444455556666 diizinkan untuk dipublikasikan. MyTopic
{ "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" } } }] }
Saat memublikasikan acara ke Amazon SNS, layanan berikut mendukung: aws:SourceAccount
-
Amazon API Gateway
-
Amazon CloudWatch
-
DevOpsGuru Amazon
-
Amazon ElastiCache
-
Amazon GameLift
-
API SMS dan Suara Amazon Pinpoint
-
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
Izinkan Amazon SES mempublikasikan ke topik yang dimiliki oleh akun lain
Anda dapat mengizinkan layanan AWS yang lain untuk memublikasikan ke topik yang dimiliki oleh Akun AWS lain. Misalkan Anda masuk ke akun 111122223333, membuka Amazon SES, dan membuat email. Untuk memublikasikan notifikasi tentang email ini ke topik Amazon SNS yang dimiliki akun 444455556666, Anda akan membuat kebijakan seperti berikut. Untuk melakukannya, Anda perlu memberikan informasi tentang penanggung jawab (layanan lainnya) dan kepemilikan setiap sumber daya. Pernyataan Resource
menyediakan ARN topik, 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 Amazon SNS, layanan berikut mendukung: aws:SourceOwner
-
Amazon API Gateway
-
Amazon CloudWatch
-
DevOpsGuru Amazon
-
Amazon ElastiCache
-
Amazon GameLift
-
API SMS dan Suara Amazon Pinpoint
-
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 mendukung. aws:SourceOwner
Kunci aws:SourceAccount
dan aws:SourceOwner
kondisi masing-masing ditetapkan oleh beberapa orang Layanan AWS ketika mereka mempublikasikan ke topik Amazon SNS. 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 Izinkan Amazon SES mempublikasikan ke topik yang dimiliki oleh akun lain bagaimana Amazon SES menggunakan
aws:SourceOwner
dan daftar AWS layanan yang mendukung kondisi tersebut.
Izinkan akun dalam organisasi di AWS Organizations untuk memublikasikan topik di akun yang berbeda
Layanan AWS Organizations membantu Anda mengelola penagihan secara terpusat, mengendalikan akses dan keamanan, serta membagikan sumber daya di seluruh Akun AWS.
Anda dapat menemukan ID organisasi Anda di konsol Organizations
Dalam contoh ini, Akun AWS apa pun dalam myOrgId
organisasi dapat memublikasikan ke topik Amazon SNS MyTopic
di akun 444455556666
. 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 topik Amazon SNS di akun. 444455556666
{ "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:*" } } } ] }
Membatasi publikasi ke topik Amazon SNS hanya dari VPC endpoint tertentu
Dalam kasus ini, topik di akun 444455556666 diizinkan untuk memublikasikan hanya dari VPC endpoint dengan ID vpce-1ab2c34d
.
{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }