Kebijakan Resource Access Management (RAM) mengontrol siapa yang dapat mengakses resource ApsaraMQ for RocketMQ Anda dan tindakan apa saja yang dapat mereka lakukan. Jika kebijakan sistem bawaan terlalu luas untuk kebutuhan Anda, buat kebijakan kustom untuk menerapkan prinsip least-privilege access.
Kapan menggunakan kebijakan kustom
Kebijakan sistem menyediakan kumpulan izin yang telah ditentukan sebelumnya. Gunakan kebijakan kustom ketika Anda perlu:
Membatasi akses ke instans, topik, atau kelompok konsumen tertentu
Hanya mengizinkan tindakan tertentu, seperti membuat instans atau menghapus topik
Menggabungkan beberapa cakupan izin dalam satu kebijakan
Cara kerja kebijakan kustom
Setelah membuat kebijakan kustom, sambungkan ke pengguna RAM, grup pengguna RAM, atau peran RAM untuk memberikan izin yang ditentukan.
Perhatikan aturan berikut:
Lepaskan sebelum menghapus. Anda dapat menghapus kebijakan yang tidak disambungkan ke entitas mana pun. Jika kebijakan tersebut sedang disambungkan ke suatu entitas, lepaskan terlebih dahulu.
Gunakan pengendalian versi. Kebijakan kustom mendukung versioning. Anda dapat mengelola versi kebijakan kustom berdasarkan mekanisme manajemen versi yang disediakan oleh RAM.
Format ARN resource
Setiap bidang Resource dalam kebijakan menggunakan Alibaba Cloud Resource Name (ARN) untuk mengidentifikasi target. Format ARN untuk ApsaraMQ for RocketMQ adalah:
acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}/topic/{TopicName}| Segmen | Deskripsi |
|---|---|
{regionId} | Wilayah tempat instans berada. Lihat Endpoints. |
{accountId} | ID akun Alibaba Cloud Anda. |
{InstanceId} | ID instans ApsaraMQ for RocketMQ. |
{TopicName} | Nama topik. |
{ConsumerGroupId} | ID kelompok konsumen. |
Gunakan wildcard untuk memperluas cakupan:
| Pola | Cakupan |
|---|---|
instance/* | Semua instans di bawah akun dalam wilayah yang ditentukan |
instance/{InstanceId}* | Instans tertentu dan semua resource turunannya (topik, kelompok konsumen) |
*:{#accountId}:*/* | Semua resource di bawah akun di seluruh wilayah |
Contoh kebijakan
Ganti nilai placeholder pada contoh berikut dengan identifier resource aktual Anda sebelum menerapkan kebijakan.
Berikan akses penuh ke instans tertentu
Kebijakan ini memberikan semua izin ApsaraMQ for RocketMQ pada satu instans dan resource turunannya. Kebijakan ini mencakup tiga pernyataan karena cakupan resource yang berbeda diperlukan untuk menampilkan daftar instans, mengoperasikan instans tertentu, dan melakukan kueri diagnostik.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:ListInstances"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:*"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:ListAnalyticsQuery"
],
"Resource": [
"acs:rocketmq:*:{#accountId}:*/*"
]
}
]
}Ketiga pernyataan tersebut memiliki tujuan berbeda:
Daftar instans —
rocketmq:ListInstancespada semua instans (instance/*) memungkinkan pengguna menjelajahi dan menemukan instans target di Konsol.Akses penuh ke instans —
rocketmq:*pada instans tertentu (instance/{InstanceId}*). Wildcard di akhir mencakup semua resource turunan.Akses diagnostik —
rocketmq:ListAnalyticsQuerymengaktifkan kueri diagnostik. Wilayah wildcard (*) memungkinkan kueri lintas wilayah.
Berikan izin untuk membuat instans
Kebijakan ini memungkinkan pengguna RAM membuat instans ApsaraMQ for RocketMQ di wilayah tertentu. Resource menggunakan instance/* karena ID instans belum diketahui saat pembuatan.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:CreateInstance"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/*"
]
}
]
}Berikan izin untuk menghapus topik tertentu
Kebijakan ini membatasi tindakan DeleteTopic hanya pada satu topik di instans tertentu. Gunakan pola ini untuk mendelegasikan pembersihan topik tanpa memberikan izin yang lebih luas.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:DeleteTopic"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}/topic/{TopicName}"
]
}
]
}Berikan akses penuh ke diagnostik instans
Kebijakan ini memberikan semua izin terkait diagnostik: mengirimkan, menampilkan daftar, dan mengambil kueri analitik. Pola wilayah dan resource wildcard memungkinkan akses diagnostik ke semua instans dan wilayah di bawah akun.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:GetAnalyticsQuery",
"rocketmq:SubmitAnalyticsQuery",
"rocketmq:ListAnalyticsQuery"
],
"Resource": [
"acs:rocketmq:*:{#accountId}:*/*"
]
}
]
}Berikan izin kepada pengguna RAM untuk melihat daftar instans dan mengoperasikan instans tertentu
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:ListInstances",
"rocketmq:GetUserTags"
],
"Resource": [
"acs:rocketmq:*:*:instance/*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:*"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*"
]
}
]
}Contoh ini menggambarkan perbedaan konfigurasi Resource antara tindakan bertipe daftar dan tindakan spesifik instans:
Tindakan bertipe daftar (misalnya,
rocketmq:ListInstancesdanrocketmq:GetUserTags): Bidang Resource harus menggunakan format wildcardacs:rocketmq:*:*:instance/*. Anda tidak dapat membatasi Resource ke ARN instans tertentu untuk tindakan bertipe daftar. Jika dilakukan, tindakan tersebut akan gagal.Tindakan baca/tulis instans (misalnya,
rocketmq:*): Anda dapat membatasi Resource ke ARN instans tertentu, sepertiacs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*.
Jika Anda hanya memberikan izin kepada pengguna RAM untuk instans tertentu tanpa menyertakan izin tindakan bertipe daftar, pengguna RAM tersebut akan menerima error NoPermission atau tidak dapat menampilkan daftar instans di Konsol maupun saat memanggil API.
Langkah berikutnya
FAQ
T: Mengapa saya menerima error "valid resource owner failed" atau "AccessDenied (OwnerId forbidden)" saat mengakses ApsaraMQ for RocketMQ melalui HTTP?
Penyebab: Error ini biasanya terjadi karena salah satu alasan berikut:
Error konstruksi signature: Signature permintaan HTTP tidak sesuai dengan spesifikasi HMAC-SHA256 V4. Masalah umum termasuk Canonical String yang dibangun secara salah atau header
Authorizationyang tidak valid.Ketidakcocokan resource dalam kebijakan RAM: Bidang
Resourcedalam kebijakan RAM Anda tidak persis sesuai dengan topik atau instans target. Nama topik di ApsaraMQ for RocketMQ bersifat sensitif terhadap huruf besar/kecil (case-sensitive). FormatResourceyang benar untuk publikasi pesan protokol HTTP adalahacs:mq:*:*:instance/{InstanceId}/topic/{TopicName}.Izin tidak mencukupi: Pasangan Kunci Akses atau kredensial STS yang digunakan untuk permintaan tidak memiliki izin yang diperlukan, seperti
mq:PUBuntuk mempublikasikan pesan.
Resolusi:
Verifikasi bahwa signature permintaan HTTP Anda secara ketat mengikuti spesifikasi HMAC-SHA256 V4, termasuk format yang benar untuk Canonical String, header yang ditandatangani, dan header
Authorization.Periksa bahwa bidang
Resourcedalam kebijakan RAM Anda persis sesuai dengan nama topik dan instans aktual. Perhatikan sensitivitas huruf besar/kecil.Konfirmasi bahwa pasangan Kunci Akses atau kredensial STS memiliki izin yang diperlukan untuk operasi yang Anda lakukan (misalnya,
mq:PUBuntuk mempublikasikan pesan).
Rekomendasi: Untuk menghindari kompleksitas autentikasi HTTP dan potensi error signature, gunakan SDK RocketMQ resmi, yang secara otomatis menangani penandatanganan permintaan.
T: Dapatkah saya menggunakan RequestId untuk mengetahui alasan spesifik kegagalan verifikasi izin ApsaraMQ for RocketMQ?
Tidak. Saat ini, Alibaba Cloud tidak mendukung kueri detail keputusan autentikasi IAM (Identity and Access Management) granular menggunakan RequestId. Ketika verifikasi izin gagal, backend hanya mengembalikan error umum AccessDenied tanpa mengekspos detail evaluasi kebijakan spesifik, seperti kebijakan mana yang menolak permintaan atau kondisi mana yang tidak terpenuhi.
Untuk memecahkan masalah kegagalan verifikasi izin, gunakan pendekatan self-service berikut:
Periksa kebijakan izin Anda: Tinjau kebijakan yang disambungkan ke pengguna atau peran RAM dan pastikan semua tindakan yang diperlukan secara eksplisit diizinkan.
Verifikasi kecocokan ARN Resource: Konfirmasi bahwa bidang
Resourcedalam kebijakan Anda sesuai dengan ARN resource aktual, termasuk ID wilayah, ID akun, ID instans, serta nama topik atau kelompok konsumen yang benar.Periksa logika signature Anda: Jika Anda menggunakan protokol HTTP untuk mengakses ApsaraMQ for RocketMQ, verifikasi bahwa logika penandatanganan permintaan Anda benar.
Tinjau batasan izin dan kebijakan kepercayaan: Jika pengguna atau peran RAM dikenai batasan izin atau kebijakan kepercayaan, pastikan konfigurasi tersebut tidak membatasi tindakan yang diperlukan.
T: Bagaimana cara memberikan izin Cloud Monitor yang diperlukan kepada pengguna RAM untuk mengonfigurasi alert ApsaraMQ for RocketMQ?
Kebijakan izin kustom ApsaraMQ for RocketMQ hanya mengontrol akses ke resource ApsaraMQ for RocketMQ dan tidak mencakup izin Cloud Monitor. Untuk mengizinkan pengguna RAM mengonfigurasi alert ApsaraMQ for RocketMQ di Cloud Monitor, Anda harus memberikan izin Cloud Monitor kepada pengguna RAM tersebut secara terpisah.
Untuk memberikan izin Cloud Monitor read-only yang diperlukan:
Masuk ke Konsol RAM menggunakan Akun Alibaba Cloud atau akun administrator RAM.
Di panel navigasi kiri, pilih Identities > Users.
Di halaman Users, temukan pengguna RAM target dan klik Add Permissions di kolom Actions.
Di panel Add Permissions, konfigurasikan pengaturan berikut:
Tetapkan Authorization Scope sesuai kebutuhan Anda.
Tetapkan Policy Type ke System Policy.
Di kotak pencarian, masukkan
AliyunCloudMonitorReadOnlyAccessdan pilih kebijakan dari hasil pencarian.Klik OK untuk menyimpan pemberian izin.
Setelah izin diberikan, pengguna RAM dapat melihat metrik Cloud Monitor dan mengonfigurasi aturan alert untuk instans ApsaraMQ for RocketMQ.
T: Haruskah saya menggunakan kebijakan kustom RAM atau ACL untuk mengontrol izin pengiriman pesan di lingkungan pengembangan ApsaraMQ for RocketMQ 5.0?
Untuk mengontrol izin pengiriman dan penerimaan pesan di lingkungan pengembangan atau pengujian, gunakan ACL (Access Control List) daripada kebijakan kustom RAM.
ACL: Dirancang untuk kontrol izin pengiriman dan penerimaan pesan di tingkat aplikasi. ACL memungkinkan Anda memberikan izin kepada pengguna atau aplikasi tertentu untuk mempublikasikan ke atau berlangganan dari topik tertentu dalam suatu instans. Hal ini menjadikan ACL cocok untuk skenario pengembangan dan pengujian di mana Anda perlu mensimulasikan alur pesan atau mengontrol aplikasi mana yang dapat berinteraksi dengan topik tertentu.
Kebijakan kustom RAM: Dirancang untuk manajemen resource di tingkat akun Alibaba Cloud. Kebijakan RAM mengontrol operasi pada resource cloud, seperti membuat, mengubah, atau menghapus instans, topik, dan kelompok konsumen ApsaraMQ for RocketMQ. Kebijakan RAM mengatur siapa yang dapat mengelola resource ApsaraMQ for RocketMQ, bukan siapa yang dapat mengirim atau menerima pesan melalui resource tersebut.
Secara ringkas:
Skenario | Metode yang direkomendasikan |
Mengontrol aplikasi mana yang dapat mengirim atau menerima pesan dalam suatu instans | ACL |
Mengontrol siapa yang dapat membuat, mengubah, atau menghapus resource ApsaraMQ for RocketMQ (instans, topik, kelompok konsumen) | Kebijakan kustom RAM |