Jika kebijakan sistem tidak memenuhi kebutuhan Anda, Anda dapat membuat kebijakan kustom untuk menerapkan prinsip hak istimewa minimal. Kebijakan kustom menyediakan kontrol izin detail halus dan meningkatkan keamanan sumber daya. Topik ini menjelaskan berbagai skenario serta memberikan contoh kebijakan kustom untuk ApsaraMQ for RabbitMQ.
Apa itu kebijakan kustom?
Kebijakan Resource Access Management (RAM) diklasifikasikan menjadi kebijakan sistem dan kebijakan kustom. Anda bertanggung jawab untuk memelihara kebijakan kustom.
Setelah membuat kebijakan kustom, Anda perlu menyambungkannya ke Pengguna RAM, kelompok pengguna, atau Peran RAM agar izin yang ditentukan dalam kebijakan tersebut diberikan kepada pihak yang berwenang.
Anda dapat menghapus kebijakan RAM yang tidak disambungkan ke pihak yang berwenang. Jika kebijakan RAM tersebut telah disambungkan, Anda harus melepas sambungannya terlebih dahulu sebelum menghapusnya.
Kebijakan kustom mendukung pengendalian versi. Anda dapat mengelola versi kebijakan kustom berdasarkan mekanisme manajemen versi yang disediakan oleh RAM.
Referensi
Kebijakan otorisasi kustom
ApsaraMQ for RabbitMQ mendukung kebijakan kustom berikut.
Izin API klien
API Klien | Tindakan | Sumber Daya | Deskripsi |
exchange.declare (passive=false) | amqp:CreateExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* | Mendeklarasikan exchange dan memeriksa apakah exchange tersebut ada.
|
exchange.declare (passive=true) | amqp:GetExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName | Mendeklarasikan exchange dan memeriksa apakah exchange tersebut ada.
|
exchange.bind | amqp:GetExchange (source exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (source exchange) | Menyambungkan exchange sumber ke exchange tujuan. |
amqp:CreateExchange (destination exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (destination exchange) | ||
exchange.unbind | amqp:GetExchange (source exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (source exchange) | Melepas sambungan exchange sumber dari exchange tujuan. |
amqp:CreateExchange (destination exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (destination exchange) | ||
queue.declare (passive=false) | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | Mendeklarasikan antrian dan memeriksa apakah antrian tersebut ada.
|
queue.declare (passive=true) | amqp:GetQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName | Mendeklarasikan antrian dan memeriksa apakah antrian tersebut ada.
|
queue.declare (with dead-letter exchange) | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | Mendeklarasikan antrian yang disambungkan ke dead-letter exchange. |
amqp:GetQueue | acs:amqp:$region:$accountid:/vhosts/$vhostName/queues/$queueName | ||
amqp:CreateExchange (dead-letter exchange) | acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName (dead-letter exchange) | ||
queue.bind | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | Menyambungkan antrian ke exchange. |
amqp:GetExchange | acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName | ||
queue.unbind | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | Melepas sambungan antrian dari exchange. |
amqp:GetExchange | acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName | ||
BasicRecover | amqp:BasicRecover | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | Mengirim ulang paket yang belum diakui (Ack) oleh konsumen. |
BasicCancel | amqp:BasicCancel | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Membatalkan langganan. |
BasicPublish | amqp:BasicPublish | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName/messages/* | Menerbitkan paket. |
BasicConsume | amqp:BasicConsume | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Memulai konsumen. |
BasicAck | amqp:BasicAck | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Mengakui satu atau beberapa paket. |
BasicNack | amqp:BasicNack | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Menolak satu atau beberapa paket. |
BasicReject | amqp:BasicReject | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Menolak sebuah paket. |
BasicGet | amqp:BasicGet | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Mengakses langsung paket dalam antrian. |
Izin OpenAPI dan fitur konsol
OpenAPI/fitur Konsol | Tindakan | Sumber Daya | Deskripsi |
ListInstances | amqp:ListInstance | acs:amqp:$region:$accountid:/instances/* | Menanyakan daftar instans. |
CreateInstance | amqp:CreateInstance | acs:amqp:$region:$accountid:/instances/* | Membuat instans. Kebijakan untuk operasi API CreateInstance mendukung kunci kondisi berikut. Untuk informasi selengkapnya, lihat Kondisi.
|
DeleteInstance | amqp:DeleteInstance | acs:amqp:$region:$accountid:/instances/$instanceId | Menghapus instans. |
GetInstance | amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | Menampilkan instans. |
ListVhost | amqp:ListVhost | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/* | Menanyakan daftar vhost. |
CreateVhost | amqp:CreateVhost | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/* | Membuat vhost. |
DeleteVhost | amqp:DeleteVhost | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName | Menghapus vhost. Operasi ini juga memerlukan izin API amqp:GetInstance. |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
ListExchange | amqp:ListExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* | Menanyakan daftar exchange. Operasi ini juga memerlukan izin API amqp:GetInstance. |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
CreateExchange | amqp:CreateExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* | Membuat exchange. |
DeleteExchange | amqp:DeleteExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName | Menghapus exchange. |
ListQueue | amqp:ListQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | Menanyakan daftar antrian. Operasi ini juga memerlukan izin API amqp:GetInstance. |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
CreateQueue | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | Membuat antrian. |
DeleteQueue | amqp:DeleteQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName | Menghapus antrian. |
QueuePurge | amqp:QueuePurge | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Membersihkan antrian. |
ListStaticAccounts | amqp:ListStaticAccounts | acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* | Menampilkan nama pengguna dan kata sandi. Operasi ini juga memerlukan izin API amqp:GetInstance. |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
FetchStaticAccount | amqp:FetchStaticAccount | acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* | Membuat nama pengguna dan kata sandi. Operasi ini juga memerlukan izin API amqp:GetInstance. |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
DeleteStaticAccount | amqp:DeleteStaticAccount | acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* | Menghapus nama pengguna dan kata sandi. |
Menanyakan paket berdasarkan antrian | amqp:BasicGet | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Mengakses paket dalam antrian. |
Mencari pesan berdasarkan ID pesan | amqp:BasicGet | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Mengakses paket dalam antrian. |
Mengirim ulang paket |
| acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Mengirim ulang paket. |
Kirim pesan | amqp:BasicPublish | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | Mengirim paket. |
Contoh kebijakan kustom
Saat membuat kebijakan kustom, ganti variabel parameter pada contoh berikut dengan nilai aktual Anda.
$region: ID wilayah tempat sumber daya berada. Untuk informasi selengkapnya, lihat Endpoint.
$accountid: ID Akun Alibaba Cloud dari objek otorisasi.
$instanceId: ID instans ApsaraMQ for RabbitMQ.
$vhostName: Nama vhost.
$queueName: Nama antrian.
$exchangeName: Nama exchange.
Contoh 1: Memberikan izin untuk mengirim dan menerima pesan dalam vhost
{ "Version":"1", "Statement":[ { "Action":[ "amqp:GetInstance", "amqp:ListVhost", "amqp:GetVhost" ], "Resource":[ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName", "acs:amqp:*:*:/instances/$instanceId/vhosts/*" ], "Effect":"Allow" }, { "Action":[ "amqp:ListExchange", "amqp:CreateExchange", "amqp:DeleteExchange", "amqp:ListQueue", "amqp:DeleteQueue", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicCancel", "amqp:BasicPublish", "amqp:BasicConsume", "amqp:BasicAck", "amqp:BasicNack", "amqp:BasicReject", "amqp:QueuePurge", "amqp:BasicGet", "amqp:GetExchange", "amqp:GetQueue" ], "Resource":"acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect":"Allow" }, { "Action":[ "amqp:ListStaticAccounts", "amqp:FetchStaticAccount", "amqp:DeleteStaticAccount" ], "Resource":"acs:amqp:*:*:/instances/$instanceId/staticAccount/*", "Effect":"Allow" } ] }Contoh 2: Memberikan izin untuk menerbitkan pesan
{ "Version": "1", "Statement": [ { "Action": [ "amqp:GetInstance" ], "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName" ], "Effect": "Allow" }, { "Action": [ "amqp:CreateExchange", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicPublish", "amqp:BasicAck", "amqp:BasicNack", "amqp:GetExchange", "amqp:GetQueue" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect": "Allow" } ] }Contoh 3: Memberikan izin untuk berlangganan pesan
{ "Version": "1", "Statement": [ { "Action": [ "amqp:GetInstance", "amqp:GetVhost" ], "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName" ], "Effect": "Allow" }, { "Action": [ "amqp:CreateExchange", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicCancel", "amqp:BasicConsume", "amqp:BasicAck", "amqp:BasicNack", "amqp:BasicReject", "amqp:QueuePurge", "amqp:BasicGet", "amqp:GetExchange", "amqp:GetQueue" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect": "Allow" } ] }Contoh 4: Memberikan izin untuk menerbitkan dan berlangganan pesan
{ "Version": "1", "Statement": [ { "Action": [ "amqp:GetInstance", "amqp:GetVhost" ], "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName" ], "Effect": "Allow" }, { "Action": [ "amqp:ListExchange", "amqp:CreateExchange", "amqp:DeleteExchange", "amqp:ListQueue", "amqp:DeleteQueue", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicCancel", "amqp:BasicPublish", "amqp:BasicConsume", "amqp:BasicAck", "amqp:BasicNack", "amqp:BasicReject", "amqp:QueuePurge", "amqp:BasicGet", "amqp:GetExchange", "amqp:GetQueue" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect": "Allow" } ] }Contoh 5: Memberikan izin untuk mengelola nama pengguna dan kata sandi
{ "Statement": [ { "Effect": "Allow", "Action": [ "amqp:ListStaticAccounts", "amqp:FetchStaticAccount", "amqp:DeleteStaticAccount" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/staticAccount/*" }, { "Effect": "Allow", "Action": "amqp:GetInstance", "Resource": "acs:amqp:*:*:/instances/$instanceId" } ], "Version": "1" }Contoh 6: Memberikan izin kepada Pengguna RAM untuk membuat instans
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "amqp:CreateInstance", "Resource": "acs:amqp:*:$accountid:/instances/*" } ] }Contoh 7: Memberikan izin kepada Pengguna RAM hanya untuk membuat instans Edisi Platinum yang tidak mendukung akses Internet
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "amqp:CreateInstance", "Resource": "acs:amqp:*:$accountid:/instances/*", "Condition": { "StringEquals": { "amqp:InstanceType": [ "vip" ], "amqp:SupportEIP": [ "false" ] } } } ] }Contoh 8: Memberikan izin kepada Pengguna RAM semua izin pada satu instans
{ "Version": "1", "Statement": [ { "Action": "amqp:ListInstance", "Resource": "acs:amqp:*:*:/instances/*", "Effect": "Allow" }, { "Action": "amqp:*", "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/*" ], "Effect": "Allow" }, { "Action": [ "amqp:ListStaticAccounts", "amqp:FetchStaticAccount", "amqp:DeleteStaticAccount" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/staticAccount/*", "Effect": "Allow" } ] }