Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bagian ini menjelaskan beberapa contoh kasus penggunaan umum untuk kontrol akses.
Berikan Akun AWS akses ke suatu topik
Katakanlah Anda memiliki topik di Amazon SNS, dan Anda ingin mengizinkan satu atau lebih Akun AWS untuk melakukan tindakan tertentu pada topik itu, seperti mempublikasikan pesan. Anda dapat melakukannya dengan menggunakan tindakan Amazon SNS API. AddPermission
AddPermission
Tindakan ini memungkinkan Anda untuk 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:, tentukan MyTopic ID 1111-2222-3333, tindakan, dan label Akun AWS , Amazon SNS akan menghasilkan Publish
dan menyisipkan pernyataan kebijakan berikut ke dalam kebijakan kontrol akses topik: 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, 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 IAM tertentu. Anda dapat melakukannya dengan menggunakanSetTopicAttributes
API untuk memperbarui atribut kebijakan 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 SNS Anda. Secara teratur meninjau dan mengaudit kebijakan yang dilampirkan pada topik Anda untuk menjaga keamanan.
-
Batas kebijakan: Perlu diingat bahwa ada batasan ukuran dan kompleksitas kebijakan Amazon SNS. 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 topik Amazon SNS Anda ke HTTPS, 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 ke HTTPS:
-
Tulis kebijakan. Kebijakan harus menentukan Akun AWS ID yang ingin Anda berikan akses dan menerapkan kondisi bahwa hanya langganan HTTPS 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 kebijakan JSON 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 ke 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.
Memublikasikan pesan ke antrean Amazon SQS
Untuk mempublikasikan pesan dari topik Amazon SNS Anda ke antrean Amazon SQS, Anda perlu mengonfigurasi izin yang benar pada antrian Amazon SQS. Meskipun Amazon SNS dan Amazon SQS AWS menggunakan bahasa kebijakan kontrol akses, Anda harus secara eksplisit menetapkan kebijakan pada antrian Amazon SQS untuk mengizinkan pesan dikirim dari topik Amazon SNS.
Anda dapat mencapai ini dengan menggunakan SetQueueAttributes
tindakan untuk menerapkan kebijakan kustom ke antrean Amazon SQS. Tidak seperti Amazon SNS, Amazon SQS tidak mendukung tindakan untuk membuat AddPermission
pernyataan kebijakan dengan kondisi. Karena itu, Anda harus menulis kebijakan secara manual.
Berikut ini adalah contoh kebijakan Amazon SQS yang memberikan izin Amazon SNS untuk mengirim pesan ke antrian Anda. Perhatikan bahwa kebijakan ini dikaitkan dengan antrean Amazon SQS, bukan topik Amazon SNS. Tindakan yang ditentukan adalah tindakan Amazon SQS, dan sumber daya adalah Nama Sumber Daya Amazon (ARN) dari antrian. Anda dapat mengambil ARN antrian 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 antrean SQS berdasarkan sumber pesan yang dikirim. Ini memastikan bahwa hanya pesan yang berasal dari topik SNS yang ditentukan (dalam hal ini, arn:aws:sns:us-east- 2:444455556666:) yang diizinkan untuk dikirim ke antrian. MyTopic
Informasi tambahan:
-
Antrian ARN. Pastikan Anda mengambil ARN yang benar dari antrean Amazon SQS Anda menggunakan tindakan.
GetQueueAttributes
ARN ini 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 topik Amazon SNS untuk berinteraksi dengan antrean Amazon SQS, dan tinjau kebijakan Anda secara teratur untuk memastikannya aman up-to-date
-
Kebijakan default di Amazon SNS. Amazon SNS tidak secara otomatis memberikan kebijakan default yang memungkinkan orang lain Layanan AWS atau akun mengakses topik yang baru dibuat. Secara default, topik Amazon SNS dibuat tanpa izin, artinya topik tersebut bersifat pribadi dan hanya dapat diakses oleh akun yang membuatnya. Untuk mengaktifkan akses untuk akun Layanan AWS, akun, atau kepala sekolah lainnya, Anda harus secara eksplisit menentukan dan melampirkan kebijakan akses ke topik tersebut. Ini sejalan dengan prinsip hak istimewa terkecil, memastikan bahwa tidak ada akses yang tidak diinginkan diberikan secara default.
-
Pengujian dan validasi. Setelah menyetel kebijakan, uji integrasi dengan memublikasikan pesan ke topik Amazon SNS dan memverifikasi bahwa pesan tersebut berhasil dikirim ke antrean Amazon SQS. 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 acara ke topik Amazon SNS 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 topik Amazon SNS 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 yang Akun AWS 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 topik Amazon SNS 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 topik Amazon SNS Anda berdasarkan akun asal.-
Amazon API Gateway
-
Amazon CloudWatch
-
DevOpsGuru Amazon
-
Amazon EventBridge
-
GameLift Peladen Amazon
-
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
-
Manajer Insiden AWS Systems 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 SNS Anda. Ini akan membantu memastikan bahwa kebijakan Anda dikonfigurasi dengan benar.
-
Praktik terbaik keamanan. Tinjau dan audit kebijakan topik Amazon SNS Anda secara berkala untuk memastikan kebijakan tersebut mematuhi persyaratan keamanan Anda. Membatasi akses hanya ke akun dan layanan tepercaya sangat penting untuk menjaga operasi yang aman.
Izinkan Amazon SES 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 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
-
GameLift Peladen Amazon
-
API SMS dan Suara Amazon Pinpoint
-
Amazon RDS
-
Amazon Redshift
-
Amazon SES
-
AWS CodeCommit
-
AWS Directory Service
-
AWS Lambda
-
Manajer Insiden AWS Systems 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 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 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
penting
CloudWatch Alarm tidak mendukung penerbitan ke topik Amazon SNS dengan cara yang Akun AWS berbeda, bahkan jika kebijakan topik Amazon SNS mengizinkannya. Jika kasus penggunaan Anda memerlukan notifikasi Amazon SNS lintas akun, Anda harus menggunakan mekanisme perantara, seperti topik Amazon SNS di akun yang sama dengan alarm yang meneruskan pesan ke topik Amazon SNS di akun lain melalui Lambda atau aturan. EventBridge
Dalam hal ini, kebijakan berikut memungkinkan CloudWatch alarm apa pun di akun 111122223333
untuk dipublikasikan ke topik Amazon SNS di 444455556666
akun, CloudWatch tetapi Alarm tidak akan menggunakan kebijakan ini karena pembatasan lintas akun.
{
"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:*"
}
}
}
]
}
Solusi untuk menggunakan topik Amazon SNS lokal dan meneruskan pesan
Gunakan langkah-langkah berikut untuk mengaktifkan notifikasi CloudWatch Amazon SNS lintas akun untuk Alarm:
-
Buat topik Amazon SNS di akun yang sama dengan CloudWatch Alarm (111122223333).
-
Berlangganan fungsi Lambda atau EventBridge aturan Amazon ke topik Amazon SNS tersebut.
-
Fungsi atau EventBridge aturan Lambda kemudian dapat mempublikasikan pesan ke topik Amazon SNS di akun target (444455556666).
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"
}
}
}]
}