Manajemen akses untuk SQS antrian Amazon terenkripsi dengan kebijakan hak istimewa paling sedikit - Amazon Simple Queue Service

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

Manajemen akses untuk SQS antrian Amazon terenkripsi dengan kebijakan hak istimewa paling sedikit

Anda dapat menggunakan Amazon SQS untuk bertukar data sensitif antar aplikasi dengan menggunakan enkripsi sisi server () yang terintegrasi dengan AWS Key Management Service (SSE). KMS Dengan integrasi Amazon SQS dan AWS KMS, Anda dapat mengelola kunci yang melindungi Amazon secara terpusatSQS, serta kunci yang melindungi AWS sumber daya Anda yang lain.

Beberapa AWS layanan dapat bertindak sebagai sumber acara yang mengirim acara ke AmazonSQS. Untuk mengaktifkan sumber peristiwa untuk mengakses SQS antrean Amazon terenkripsi, Anda perlu mengonfigurasi antrian dengan kunci yang dikelola pelanggan. AWS KMS Kemudian, gunakan kebijakan kunci untuk mengizinkan layanan menggunakan AWS KMS API metode yang diperlukan. Layanan ini juga memerlukan izin untuk mengautentikasi akses untuk mengaktifkan antrian untuk mengirim acara. Anda dapat mencapai ini dengan menggunakan SQS kebijakan Amazon, yang merupakan kebijakan berbasis sumber daya yang dapat Anda gunakan untuk mengontrol akses ke SQS antrian Amazon dan datanya.

Bagian berikut memberikan informasi tentang cara mengontrol akses ke SQS antrian Amazon terenkripsi Anda melalui SQS kebijakan Amazon dan kebijakan utama AWS KMS . Kebijakan dalam panduan ini akan membantu Anda mencapai hak istimewa paling sedikit.

Panduan ini juga menjelaskan bagaimana kebijakan berbasis sumber daya mengatasi masalah wakil yang membingungkan dengan menggunakan kunci konteks kondisi,, dan global. aws:SourceArnaws:SourceAccountaws:PrincipalOrgIDIAM

Gambaran Umum

Dalam topik ini, kami akan memandu Anda melalui kasus penggunaan umum untuk menggambarkan bagaimana Anda dapat membangun kebijakan utama dan kebijakan SQS antrian Amazon. Kasus penggunaan ini ditunjukkan pada gambar berikut.

Menerbitkan SNS pesan Amazon ke AmazonSQS.

Dalam contoh ini, produsen pesan adalah topik Amazon Simple Notification Service (SNS), yang dikonfigurasi untuk meng-fanout pesan ke antrean Amazon SQS terenkripsi Anda. Konsumen pesan adalah layanan komputasi, seperti AWS Lambdafungsi, instance Amazon Elastic Compute Cloud (EC2), atau wadah. AWS Fargate SQSAntrian Amazon Anda kemudian dikonfigurasi untuk mengirim pesan yang gagal ke Antrian Huruf Mati (). DLQ Ini berguna untuk men-debug aplikasi atau sistem pesan Anda karena DLQs memungkinkan Anda mengisolasi pesan yang tidak dikonsumsi untuk menentukan mengapa pemrosesannya tidak berhasil. Dalam solusi yang ditentukan dalam topik ini, layanan komputasi seperti fungsi Lambda digunakan untuk memproses pesan yang disimpan dalam antrean AmazonSQS. Jika konsumen pesan berada di cloud pribadi virtual (VPC), pernyataan DenyReceivingIfNotThroughVPCEkebijakan yang disertakan dalam panduan ini memungkinkan Anda membatasi penerimaan pesan untuk spesifik VPC tersebut.

catatan

Panduan ini hanya berisi IAM izin yang diperlukan dalam bentuk pernyataan kebijakan. Untuk membuat kebijakan, Anda perlu menambahkan pernyataan ke SQS kebijakan Amazon atau kebijakan AWS KMS utama Anda. Panduan ini tidak memberikan petunjuk tentang cara membuat SQS antrian Amazon atau AWS KMS kuncinya. Untuk petunjuk tentang cara membuat sumber daya ini, lihat Membuat SQS antrian Amazon dan Membuat kunci.

SQSKebijakan Amazon yang ditentukan dalam panduan ini tidak mendukung pengalihan pesan secara langsung ke SQS antrian Amazon yang sama atau berbeda.

Kebijakan kunci hak istimewa paling sedikit untuk Amazon SQS

Di bagian ini, kami menjelaskan izin hak istimewa terkecil yang diperlukan AWS KMS untuk kunci yang dikelola pelanggan yang Anda gunakan untuk mengenkripsi antrian Amazon Anda. SQS Dengan izin ini, Anda dapat membatasi akses hanya ke entitas yang dituju sambil menerapkan hak istimewa paling sedikit. Kebijakan utama harus terdiri dari pernyataan kebijakan berikut, yang kami jelaskan secara rinci di bawah ini:

Berikan izin administrator ke kunci AWS KMS

Untuk membuat AWS KMS kunci, Anda perlu memberikan izin AWS KMS administrator ke IAM peran yang Anda gunakan untuk menyebarkan kunci. AWS KMS Izin administrator ini didefinisikan dalam pernyataan AllowKeyAdminPermissions kebijakan berikut. Saat Anda menambahkan pernyataan ini ke kebijakan AWS KMS kunci Anda, pastikan untuk mengganti <admin-role ARN> dengan Amazon Resource Name (ARN) dari IAM peran yang digunakan untuk menyebarkan AWS KMS kunci, mengelola AWS KMS kunci, atau keduanya. Ini bisa berupa IAM peran pipeline penerapan Anda, atau peran administrator untuk organisasi Anda di AWS Organizations Anda.

{ "Sid": "AllowKeyAdminPermissions", "Effect": "Allow", "Principal": { "AWS": [ "<admin-role ARN>" ] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }
catatan

Dalam kebijakan AWS KMS kunci, nilai Resource elemen harus*, yang berarti “ AWS KMS kunci ini”. Tanda bintang (*) mengidentifikasi AWS KMS kunci yang dilampirkan kebijakan kunci.

Berikan akses hanya-baca ke metadata kunci

Untuk memberikan akses hanya-baca IAM peran lain ke metadata kunci Anda, tambahkan AllowReadAccessToKeyMetaData pernyataan tersebut ke kebijakan kunci Anda. Misalnya, pernyataan berikut memungkinkan Anda mencantumkan semua AWS KMS kunci di akun Anda untuk tujuan audit. Pernyataan ini memberikan akses read-only kepada pengguna AWS root ke metadata kunci. Oleh karena itu, setiap IAM prinsipal dalam akun dapat memiliki akses ke metadata kunci ketika kebijakan berbasis identitas mereka memiliki izin yang tercantum dalam pernyataan berikut:,, dan. kms:Describe* kms:Get* kms:List* Pastikan untuk mengganti <account-ID> dengan informasi Anda sendiri.

{ "Sid": "AllowReadAcesssToKeyMetaData", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<accountID>:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*" ], "Resource": "*" }

Berikan SNS KMS izin Amazon ke Amazon untuk SNS mempublikasikan pesan ke antrian

Untuk mengizinkan SNS topik Amazon memublikasikan pesan ke SQS antrean Amazon terenkripsi, tambahkan pernyataan AllowSNSToSendToSQS kebijakan ke kebijakan utama Anda. Pernyataan ini memberikan SNS izin Amazon untuk menggunakan AWS KMS kunci untuk mempublikasikan ke antrian Amazon SQS Anda. Pastikan untuk mengganti <account-ID> dengan informasi Anda sendiri.

catatan

ConditionDalam pernyataan membatasi akses hanya ke SNS layanan Amazon di AWS akun yang sama.

{ "Sid": "AllowSNSToSendToSQS", "Effect": "Allow", "Principal": { "Service": [ "sns.amazonaws.com" ] }, "Action": [ "kms:GenerateDataKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "<account-id>" } } }

Memungkinkan konsumen untuk mendekripsi pesan dari antrian

AllowConsumersToReceiveFromTheQueuePernyataan berikut memberi konsumen SQS pesan Amazon izin yang diperlukan untuk mendekripsi pesan yang diterima dari antrian Amazon terenkripsi. SQS Saat Anda melampirkan pernyataan kebijakan, ganti <consumer's runtime role ARN> dengan peran IAM ARN runtime konsumen pesan.

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": [ "<consumer's execution role ARN>" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }

Kebijakan Amazon SQS dengan hak istimewa paling sedikit

Bagian ini memandu Anda melalui kebijakan SQS antrian Amazon yang paling tidak memiliki hak istimewa untuk kasus penggunaan yang dicakup oleh panduan ini (misalnya, Amazon ke SNS AmazonSQS). Kebijakan yang ditetapkan dirancang untuk mencegah akses yang tidak diinginkan dengan menggunakan campuran keduanya Deny dan Allow pernyataan. AllowPernyataan memberikan akses ke entitas atau entitas yang dimaksud. DenyPernyataan tersebut mencegah entitas lain yang tidak diinginkan mengakses SQS antrian Amazon, sementara mengecualikan entitas yang dimaksud dalam kondisi kebijakan.

SQSKebijakan Amazon mencakup pernyataan berikut, yang kami jelaskan secara rinci di bawah ini:

Batasi izin SQS manajemen Amazon

Pernyataan RestrictAdminQueueActions kebijakan berikut membatasi izin SQS pengelolaan Amazon hanya untuk IAM peran atau peran yang Anda gunakan untuk menerapkan antrian, mengelola antrian, atau keduanya. Pastikan untuk mengganti <placeholder values> dengan informasi Anda sendiri. Tentukan ARN IAM peran yang digunakan untuk menyebarkan SQS antrian Amazon, serta peran administrator apa pun ARNs yang harus memiliki izin SQS pengelolaan Amazon.

{ "Sid": "RestrictAdminQueueActions", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes" ], "Resource": "<SQS Queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": [ "arn:aws:iam::<account-id>:role/<deployment-role-name>", "<admin-role ARN>" ] } } }

Batasi tindakan SQS antrian Amazon dari organisasi yang ditentukan

Untuk membantu melindungi SQS sumber daya Amazon Anda dari akses eksternal (akses oleh entitas di luar AWS organisasi Anda), gunakan pernyataan berikut. Pernyataan ini membatasi akses SQS antrian Amazon ke organisasi yang Anda tentukan di. Condition Pastikan untuk mengganti <SQS queue ARN> dengan IAM peran ARN yang digunakan untuk menyebarkan SQS antrian Amazon; dan <org-id>, dengan ID organisasi Anda.

{ "Sid": "DenyQueueActionsOutsideOrg", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:AddPermission", "sqs:ChangeMessageVisibility", "sqs:DeleteQueue", "sqs:RemovePermission", "sqs:SetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:PrincipalOrgID": [ "<org-id>" ] } } }

Berikan SQS izin Amazon kepada konsumen

Untuk menerima pesan dari SQS antrian Amazon, Anda harus memberikan izin yang diperlukan kepada konsumen pesan. Pernyataan kebijakan berikut memberi konsumen, yang Anda tentukan, izin yang diperlukan untuk menggunakan pesan dari antrian AmazonSQS. Saat menambahkan pernyataan ke SQS kebijakan Amazon Anda, pastikan untuk mengganti <consumer's IAM runtime role ARN> dengan peran IAM runtime yang digunakan oleh konsumen; dan ARN <SQS queue ARN>, dengan IAM peran ARN yang digunakan untuk menyebarkan SQS antrian Amazon.

{ "Sid": "AllowConsumersToReceiveFromTheQueue", "Effect": "Allow", "Principal": { "AWS": "<consumer's IAM execution role ARN>" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:GetQueueAttributes", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>" }

Untuk mencegah entitas lain menerima pesan dari SQS antrian Amazon, tambahkan DenyOtherConsumersFromReceiving pernyataan ke kebijakan SQS antrian Amazon. Pernyataan ini membatasi konsumsi pesan kepada konsumen yang Anda tetapkan—tidak memungkinkan konsumen lain untuk memiliki akses, bahkan ketika izin identitas mereka akan memberi mereka akses. Pastikan untuk mengganti <SQS queue ARN> and <consumer’s runtime role ARN> dengan informasi Anda sendiri.

{ "Sid": "DenyOtherConsumersFromReceiving", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ChangeMessageVisibility", "sqs:DeleteMessage", "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotLike": { "aws:PrincipalARN": "<consumer's execution role ARN>" } } }

Menegakkan enkripsi dalam perjalanan

Pernyataan DenyUnsecureTransport kebijakan berikut memberlakukan konsumen dan produsen untuk menggunakan saluran aman (TLSkoneksi) untuk mengirim dan menerima pesan dari SQS antrian Amazon. Pastikan untuk mengganti <SQS queue ARN> dengan IAM peran ARN yang digunakan untuk menyebarkan SQS antrian Amazon.

{ "Sid": "DenyUnsecureTransport", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": [ "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "Bool": { "aws:SecureTransport": "false" } } }

Batasi transmisi pesan ke topik Amazon SNS tertentu

Pernyataan AllowSNSToSendToTheQueue kebijakan berikut memungkinkan SNS topik Amazon yang ditentukan untuk mengirim pesan ke SQS antrian Amazon. Pastikan untuk mengganti <SQS queue ARN> dengan IAM peran ARN yang digunakan untuk menyebarkan SQS antrian Amazon; dan <SNS topic ARN>, dengan SNS topik AmazonARN.

{ "Sid": "AllowSNSToSendToTheQueue", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

Pernyataan DenyAllProducersExceptSNSFromSending kebijakan berikut mencegah produsen lain mengirim pesan ke antrian. Ganti <SQS queue ARN> and <SNS topic ARN> dengan informasi Anda sendiri.

{ "Sid": "DenyAllProducersExceptSNSFromSending", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS queue ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "<SNS topic ARN>" } } }

(Opsional) Batasi penerimaan pesan ke titik akhir tertentu VPC

Untuk membatasi penerimaan pesan hanya ke VPCtitik akhir tertentu, tambahkan pernyataan kebijakan berikut ke kebijakan SQS antrian Amazon Anda. Pernyataan ini mencegah konsumen pesan menerima pesan dari antrian kecuali pesan berasal dari titik VPC akhir yang diinginkan. Ganti <SQS queue ARN> dengan IAM peran ARN yang digunakan untuk menyebarkan SQS antrian Amazon; dan <vpce_id> dengan ID VPC titik akhir.

{ "Sid": "DenyReceivingIfNotThroughVPCE", "Effect": "Deny", "Principal": "*", "Action": [ "sqs:ReceiveMessage" ], "Resource": "<SQS queue ARN>", "Condition": { "StringNotEquals": { "aws:sourceVpce": "<vpce id>" } } }

Pernyataan SQS kebijakan Amazon untuk antrian surat mati

Tambahkan pernyataan kebijakan berikut, yang diidentifikasi oleh ID pernyataan mereka, ke kebijakan DLQ akses Anda:

  • RestrictAdminQueueActions

  • DenyQueueActionsOutsideOrg

  • AllowConsumersToReceiveFromTheQueue

  • DenyOtherConsumersFromReceiving

  • DenyUnsecureTransport

Selain menambahkan pernyataan kebijakan sebelumnya ke kebijakan DLQ akses Anda, Anda juga harus menambahkan pernyataan untuk membatasi transmisi pesan ke SQS antrian Amazon, seperti yang dijelaskan di bagian berikut.

Batasi transmisi pesan ke antrian Amazon SQS

Untuk membatasi akses hanya SQS antrian Amazon dari akun yang sama, tambahkan pernyataan DenyAnyProducersExceptSQS kebijakan berikut ke kebijakan antrian. DLQ Pernyataan ini tidak membatasi transmisi pesan ke antrian tertentu karena Anda perlu menerapkan DLQ sebelum Anda membuat antrian utama, sehingga Anda tidak akan tahu Amazon SQS ARN saat Anda membuat. DLQ Jika Anda perlu membatasi akses hanya ke satu SQS antrian Amazon, ubah aws:SourceArn di Condition dengan antrian SQS sumber Amazon Anda saat Anda mengetahuinya. ARN

{ "Sid": "DenyAnyProducersExceptSQS", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "<SQS DLQ ARN>", "Condition": { "ArnNotLike": { "aws:SourceArn": "arn:aws:sqs:<region>:<account-id>:*" } } }
penting

Kebijakan SQS antrian Amazon yang ditentukan dalam panduan ini tidak membatasi sqs:PurgeQueue tindakan pada IAM peran atau peran tertentu. sqs:PurgeQueueTindakan ini memungkinkan Anda untuk menghapus semua pesan dalam SQS antrian Amazon. Anda juga dapat menggunakan tindakan ini untuk membuat perubahan pada format pesan tanpa mengganti SQS antrian Amazon. Saat men-debug aplikasi, Anda dapat menghapus SQS antrian Amazon untuk menghapus pesan yang berpotensi salah. Saat menguji aplikasi, Anda dapat mengarahkan volume pesan tinggi melalui SQS antrian Amazon dan kemudian membersihkan antrian untuk memulai yang baru sebelum memasuki produksi. Alasan untuk tidak membatasi tindakan ini ke peran tertentu adalah bahwa peran ini mungkin tidak diketahui saat menerapkan antrian AmazonSQS. Anda perlu menambahkan izin ini ke kebijakan berbasis identitas peran agar dapat membersihkan antrian.

Mencegah masalah wakil lintas layanan yang membingungkan

Masalah deputi yang membingungkan adalah masalah keamanan di mana entitas yang tidak memiliki izin untuk melakukan tindakan dapat memaksa entitas yang lebih istimewa untuk melakukan tindakan. Untuk mencegah hal ini, AWS sediakan alat yang membantu Anda melindungi akun Anda jika Anda memberi pihak ketiga (dikenal sebagai lintas akun) atau AWS layanan lain (dikenal sebagai lintas layanan) akses ke sumber daya di akun Anda. Pernyataan kebijakan di bagian ini dapat membantu Anda mencegah masalah wakil lintas layanan yang membingungkan.

Peniruan identitas lintas layanan dapat terjadi ketika satu layanan (layanan yang dipanggil) memanggil layanan lain (layanan yang dipanggil). Layanan panggilan dapat dimanipulasi untuk menggunakan izinnya untuk bertindak atas sumber daya pelanggan lain dengan cara yang seharusnya tidak memiliki izin untuk mengakses. Untuk membantu melindungi dari masalah ini, kebijakan berbasis sumber daya yang ditentukan dalam posting ini menggunakan kunci konteks aws:SourceArn, aws:SourceAccount, dan kondisi aws:PrincipalOrgIDglobalIAM. Ini membatasi izin yang dimiliki layanan untuk sumber daya tertentu, akun tertentu, atau organisasi tertentu di AWS Organizations.

Gunakan IAM Access Analyzer untuk meninjau akses lintas akun

Anda dapat menggunakan AWS IAMAccess Analyzer untuk meninjau kebijakan SQS antrian Amazon dan kebijakan AWS KMS utama serta memberi tahu Anda saat SQS antrian Amazon atau AWS KMS kunci memberikan akses ke entitas eksternal. IAMAccess Analyzer membantu mengidentifikasi sumber daya di organisasi dan akun Anda yang dibagikan dengan entitas di luar zona kepercayaan. Zona kepercayaan ini dapat berupa AWS akun atau AWS organisasi dalam Organizations yang Anda tentukan saat mengaktifkan IAM Access Analyzer.

IAMAccess Analyzer mengidentifikasi sumber daya yang dibagikan dengan prinsipal eksternal dengan menggunakan penalaran berbasis logika untuk menganalisis kebijakan berbasis sumber daya di lingkungan Anda. AWS Untuk setiap contoh sumber daya yang dibagikan di luar zona kepercayaan Anda, Access Analyzer menghasilkan temuan. Temuan mencakup informasi tentang akses dan prinsip eksternal yang diberikan kepadanya. Tinjau temuan untuk menentukan apakah akses tersebut dimaksudkan dan aman, atau apakah akses tersebut tidak diinginkan dan risiko keamanan. Untuk akses yang tidak diinginkan, tinjau kebijakan yang terpengaruh dan perbaiki. Lihat posting blog ini untuk informasi lebih lanjut tentang bagaimana AWS IAM Access Analyzer mengidentifikasi akses yang tidak diinginkan ke sumber daya Anda. AWS

Untuk informasi selengkapnya tentang AWS IAM Access Analyzer, lihat dokumentasi AWS IAMAccess Analyzer.