Contoh kasus untuk pengendalian akses 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.

Contoh kasus untuk pengendalian akses Amazon SNS

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

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

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. Untuk informasi selengkapnya, lihat Melihat detail organisasi dari akun manajemen.

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" } } }] }