All Products
Search
Document Center

ApsaraMQ for RabbitMQ:Membuat kebijakan kustom untuk identitas RAM

Last Updated:Aug 08, 2026

Resource Access Management (RAM) menyediakan kebijakan sistem untuk skenario kontrol akses umum. Jika kebijakan sistem tidak mencukupi tingkat granularitas yang Anda butuhkan, buat kebijakan kustom untuk menerapkan prinsip least-privilege terhadap resource ApsaraMQ for RabbitMQ.

Profil izin umum

Sebelum menulis kebijakan dari awal, identifikasi pola akses yang sesuai dengan kasus penggunaan Anda.

Pola aksesCakupanContoh kebijakan
Hanya publikasiSatu vhostContoh 2: Publikasikan pesan
Hanya konsumsiSatu vhostContoh 3: Konsumsi pesan
Publikasi dan konsumsiSatu vhostContoh 4: Publikasi dan konsumsi pesan
Pesan lengkapSatu vhost (termasuk manajemen kredensial)Contoh 1: Akses pesan lengkap ke vhost
Manajemen kredensialSatu instansContoh 5: Kelola kredensial akun statis
Pembuatan instansSeluruh akunContoh 6: Buat instans
Pembuatan instans terbatasSeluruh akun, dengan kondisiContoh 7: Buat instans Edisi Platinum tanpa akses internet
Administrasi instans lengkapSatu instansContoh 8: Akses penuh ke satu instans

Dasar-dasar kebijakan kustom

Berbeda dengan kebijakan sistem yang dikelola oleh Alibaba Cloud, kebijakan kustom menjadi tanggung jawab Anda untuk membuat dan memelihara.

  • Lampiran: Lampirkan kebijakan kustom ke Pengguna RAM, kelompok, atau Peran RAM untuk menerapkan izin tersebut.

  • Penghapusan: Lepaskan kebijakan dari semua entitas sebelum menghapusnya. Kebijakan yang tidak tersambung dapat dihapus langsung.

  • Pengelolaan versi: RAM menyediakan kontrol versi untuk kebijakan kustom. Kelola versi kebijakan melalui konsol atau API RAM.

Operasi terkait

Format ARN resource

Semua resource ApsaraMQ for RabbitMQ menggunakan format Nama Sumber Daya Alibaba Cloud (ARN) berikut:

acs:amqp:$region:$accountid:/instances/$instanceId/...
VariabelDeskripsiContoh
$regionWilayah tempat resource berada. Gunakan * untuk semua wilayah.cn-hangzhou
$accountidID akun Alibaba Cloud. Gunakan * untuk akun apa pun.1234567890
$instanceIdID instans ApsaraMQ for RabbitMQamqp-cn-xxxxx
$vhostNameNama vhostmy-vhost
$exchangeNameNama exchangemy-exchange
$queueNameNama antrianmy-queue

Hierarki resource

instances/
├── $instanceId/
│   ├── vhosts/
│   │   └── $vhostName/
│   │       ├── exchanges/
│   │       │   └── $exchangeName/
│   │       │       └── messages/*
│   │       └── queues/
│   │           └── $queueName/
│   │               └── messages/*
│   └── staticAccount/*

Untuk wilayah yang didukung, lihat Endpoints.

Referensi aksi

Aksi ApsaraMQ for RabbitMQ terbagi menjadi dua kategori: aksi API client untuk operasi protokol AMQP, dan aksi konsol dan OpenAPI untuk operasi manajemen melalui konsol dan API.

Aksi API client

Client APIAksiResourceDeskripsi
exchange.declare (passive=false)amqp:CreateExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/*Mendeklarasikan exchange. Membuat exchange jika belum ada. Jika exchange sudah ada, memvalidasi propertinya dan mengembalikan error jika tidak sesuai.
exchange.declare (passive=true)amqp:GetExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeNameMemeriksa apakah exchange ada. Mengembalikan error jika exchange tidak ada.
exchange.bindamqp:GetExchange (sumber)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (sumber)Mengikat exchange sumber ke exchange tujuan.
amqp:CreateExchange (tujuan)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (tujuan)
exchange.unbindamqp:GetExchange (sumber)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (sumber)Melepas ikatan exchange sumber dari exchange tujuan.
amqp:CreateExchange (tujuan)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (tujuan)
queue.declare (passive=false)amqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*Mendeklarasikan antrian. Membuat antrian jika belum ada. Jika antrian sudah ada, memvalidasi propertinya dan mengembalikan error jika tidak sesuai.
queue.declare (passive=true)amqp:GetQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueNameMemeriksa apakah antrian ada. Mengembalikan error jika antrian tidak ada.
queue.declare (dengan dead-letter exchange)amqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*Mendeklarasikan antrian yang terikat ke dead-letter exchange.
amqp:GetQueueacs:amqp:$region:$accountid:/vhosts/$vhostName/queues/$queueName
amqp:CreateExchange (dead-letter)acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName (dead-letter)
queue.bindamqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*Mengikat antrian ke exchange.
amqp:GetExchangeacs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName
queue.unbindamqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*Melepas ikatan antrian dari exchange.
amqp:GetExchangeacs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName
BasicRecoveramqp:BasicRecoveracs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*Mengirim ulang pesan yang belum diakui ke consumer.
BasicCancelamqp:BasicCancelacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Membatalkan langganan consumer.
BasicPublishamqp:BasicPublishacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName/messages/*Mempublikasikan pesan ke exchange.
BasicConsumeamqp:BasicConsumeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Memulai consumer pada antrian.
BasicAckamqp:BasicAckacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Mengakui satu atau beberapa pesan.
BasicNackamqp:BasicNackacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Menolak satu atau beberapa pesan.
BasicRejectamqp:BasicRejectacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Menolak satu pesan.
BasicGetamqp:BasicGetacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Mengakses langsung pesan dalam antrian.

Aturan pencocokan wildcard RAM

Wildcard (*) dalam kebijakan RAM mencocokkan berdasarkan awalan nama Aksi. amqp:Get* mencocokkan setiap Aksi yang dimulai dengan Get (seperti amqp:GetInstance atau amqp:GetQueue), tetapi tidak mencocokkan Aksi yang dimulai dengan kata lain. amqp:BasicGet dimulai dengan Basic, sehingga tidak dicocokkan oleh amqp:Get*. Untuk memanggil BasicGet guna mengonsumsi pesan, Anda harus secara eksplisit menambahkan amqp:BasicGet ke daftar Aksi.

Error izin umum dan Aksi yang diperlukan

Jika panggilan API mengembalikan UnauthorizedOperation dan AccessDeniedDetail menampilkan NoPermissionType=ImplicitDeny, kebijakan tersebut kekurangan Aksi yang diperlukan. Skenario umum adalah mengonfigurasi amqp:Get* tanpa menambahkan amqp:BasicGet. Dalam kasus ini, tambahkan secara eksplisit amqp:BasicGet.

Contoh kebijakan:

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "amqp:Get*",
                "amqp:List*",
                "amqp:BasicGet"
            ],
            "Resource": "*"
        }
    ]
}

Aksi konsol dan OpenAPI

Operasi APIAksiResourceDeskripsi
ListInstancesamqp:ListInstanceacs:amqp:$region:$accountid:/instances/*Menanyakan daftar instans.
CreateInstanceamqp:CreateInstanceacs:amqp:$region:$accountid:/instances/*Membuat instans. Mendukung kunci kondisi.
DeleteInstanceamqp:DeleteInstanceacs:amqp:$region:$accountid:/instances/$instanceIdMenghapus instans.
GetInstanceamqp:GetInstanceacs:amqp:$region:$accountid:/instances/$instanceIdMenampilkan Instans.
ListVhostamqp:ListVhostacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/*Menanyakan daftar vhost.
CreateVhostamqp:CreateVhostacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/*Membuat vhost.
DeleteVhostamqp:DeleteVhostacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostNameMenghapus vhost. Juga memerlukan amqp:GetInstance pada instans.
ListExchangeamqp:ListExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/*Menanyakan daftar exchange. Juga memerlukan amqp:GetInstance pada instans.
CreateExchangeamqp:CreateExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/*Membuat exchange.
DeleteExchangeamqp:DeleteExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeNameMenghapus exchange.
ListQueueamqp:ListQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*Menanyakan daftar antrian. Juga memerlukan amqp:GetInstance pada instans.
CreateQueueamqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*Membuat antrian.
DeleteQueueamqp:DeleteQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueNameMenghapus antrian.
QueuePurgeamqp:QueuePurgeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Membersihkan antrian.
ListStaticAccountsamqp:ListStaticAccountsacs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/*Melihat username dan password. Juga memerlukan amqp:GetInstance pada instans.
FetchStaticAccountamqp:FetchStaticAccountacs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/*Membuat username dan password. Juga memerlukan amqp:GetInstance pada instans.
DeleteStaticAccountamqp:DeleteStaticAccountacs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/*Menghapus username dan password.
Kueri pesan berdasarkan antrianamqp:BasicGetacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Mengakses pesan dalam antrian.
Kueri pesan berdasarkan ID pesanamqp:BasicGetacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Mengakses pesan dalam antrian.
Kirim ulang pesanamqp:BasicGet, amqp:BasicPublishacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Mengirim ulang pesan.
Kirim pesanamqp:BasicPublishacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*Mengirim pesan.

Kunci kondisi untuk CreateInstance

Aksi CreateInstance mendukung kunci kondisi berikut untuk membatasi pembuatan instans. Untuk informasi lebih lanjut, lihat Condition.

Kunci kondisiTipeNilai validDeskripsi
amqp:InstanceTypeStringenterprise (Edisi Perusahaan), vip (Edisi Platinum)Membatasi edisi instans yang dapat dibuat oleh identitas RAM.
amqp:SupportEIPStringtrue, falseMembatasi apakah instans mendukung akses internet.

Kebijakan sistem

Resource Access Management (RAM) menyediakan kebijakan sistem berikut untuk ApsaraMQ for RabbitMQ:

Nama kebijakanDeskripsiGranularitas
AliyunAMQPFullAccessMemberikan izin manajemen penuh atas ApsaraMQ for RabbitMQ (Action: amqp:*, Resource: *).Seluruh akun
PowerUserAccessMemberikan akses penuh ke layanan dan resource Alibaba Cloud melalui pernyataan NotAction yang mengecualikan operasi administratif seperti RAM, IMS, dan lainnya. amqp:* tidak termasuk dalam daftar pengecualian, sehingga kebijakan ini juga memberikan izin penuh untuk ApsaraMQ for RabbitMQ.Seluruh akun

Kedua kebijakan sistem berlaku untuk seluruh akun dan tidak dapat dibatasi cakupannya ke antrian tertentu. Untuk memberikan izin detail halus tingkat antrian, buat kebijakan kustom dan tentukan ARN antrian pada bidang Resource. Untuk contoh, lihat Contoh 9: Berikan akses berbeda kepada Pengguna RAM untuk antrian berbeda di bagian akhir topik ini.

Contoh kebijakan

Penting

Ganti variabel placeholder dalam contoh berikut dengan nilai aktual Anda. Untuk detail setiap variabel, lihat Format ARN resource.

Contoh 1: Akses pesan lengkap ke vhost

Memberikan izin untuk mempublikasikan, mengonsumsi, dan mengelola exchange, antrian, serta kredensial akun statis dalam vhost tertentu.

{
    "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: Publikasikan pesan

Memberikan izin minimum bagi client produsen untuk mempublikasikan pesan ke exchange dalam vhost tertentu: mendeklarasikan exchange dan antrian, mempublikasikan pesan, serta mengakui pengiriman.

{
    "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: Konsumsi pesan

Memberikan izin minimum bagi client konsumen untuk mengonsumsi pesan dari antrian dalam vhost tertentu: mendeklarasikan exchange dan antrian, mengonsumsi pesan, serta mengelola pengakuan.

{
    "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: Publikasi dan konsumsi pesan

Memberikan izin untuk mempublikasikan dan mengonsumsi pesan dalam vhost tertentu. Menggabungkan aksi dari Contoh 2 dan Contoh 3.

{
    "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: Kelola kredensial akun statis

Memberikan izin untuk menampilkan, membuat, dan menghapus kredensial akun statis (pasangan username dan password) untuk instans tertentu.

{
    "Version": "1",
    "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"
        }
    ]
}

Contoh 6: Buat instans

Memberikan izin untuk membuat instans ApsaraMQ for RabbitMQ edisi apa pun di wilayah mana pun.

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "amqp:CreateInstance",
            "Resource": "acs:amqp:*:$accountid:/instances/*"
        }
    ]
}

Contoh 7: Buat instans Edisi Platinum tanpa akses internet

Menggunakan kunci kondisi untuk membatasi pembuatan instans hanya ke instans Edisi Platinum (vip) yang tidak mendukung akses internet (SupportEIP: false).

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "amqp:CreateInstance",
            "Resource": "acs:amqp:*:$accountid:/instances/*",
            "Condition": {
                "StringEquals": {
                    "amqp:InstanceType": [
                        "vip"
                    ],
                    "amqp:SupportEIP": [
                        "false"
                    ]
                }
            }
        }
    ]
}

Contoh 8: Akses penuh ke satu instans

Memberikan semua izin ApsaraMQ for RabbitMQ pada satu instans, termasuk manajemen vhost, operasi pesan, dan manajemen akun statis. Aksi amqp:ListInstance dibatasi cakupannya ke semua instans agar instans target muncul dalam daftar instans di konsol.

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

Contoh 9: Berikan akses berbeda kepada Pengguna RAM untuk antrian berbeda

Untuk memberikan akses Pengguna RAM A hanya ke Antrian A dan Pengguna RAM B hanya ke Antrian B, buat dua kebijakan kustom terpisah dan sambungkan masing-masing ke Pengguna RAM yang sesuai. Setiap Pengguna RAM kemudian hanya dapat melakukan aksi yang diizinkan pada antrian yang ditentukan dalam kebijakannya.

Kebijakan untuk Pengguna RAM A (memberikan akses ke queueA):

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "amqp:BasicConsume",
                "amqp:BasicPublish",
                "amqp:BasicAck",
                "amqp:BasicNack",
                "amqp:GetQueue"
            ],
            "Resource": [
                "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/queues/queueA"
            ]
        }
    ]
}

Untuk Pengguna RAM B, buat kebijakan kedua yang identik kecuali nilai Resource mengarah ke queueB, lalu sambungkan ke Pengguna RAM B:

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "amqp:BasicConsume",
                "amqp:BasicPublish",
                "amqp:BasicAck",
                "amqp:BasicNack",
                "amqp:GetQueue"
            ],
            "Resource": [
                "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/queues/queueB"
            ]
        }
    ]
}

Referensi