全部產品
Search
文件中心

ApsaraMQ for RocketMQ:雲訊息佇列 RocketMQ 版自訂權限原則

更新時間:Jul 10, 2026

如果系統權限原則不能滿足您的要求,您可以建立自訂權限原則實現最小授權。使用自訂權限原則有助於實現許可權的精細化管控,是提升資源訪問安全的有效手段。本文介紹雲訊息佇列 RocketMQ 版使用自訂權限原則的情境和策略樣本。

什麼是自訂權限原則

在基於RAM的存取控制體系中,自訂權限原則是指在系統權限原則之外,您可以自主建立、更新和刪除的權限原則。自訂權限原則的版本更新需由您來維護。

  • 建立自訂權限原則後,需為RAM使用者、使用者組或RAM角色綁定權限原則,這些RAM身份才能獲得權限原則中指定的存取權限。

  • 已建立的權限原則支援刪除,但刪除前需確保該策略未被引用。如果該權限原則已被引用,您需要在該權限原則的引用記錄中移除授權。

  • 自訂權限原則支援版本控制,您可以按照RAM規定的版本管理機制來管理您建立的自訂權限原則版本。

操作文檔

自訂許可權授權樣本

重要

如需直接複製範例程式碼,請替換如下內容:

  • {regionId}:替換為執行個體所屬的地區ID。具體內容,請參見服務存取點

  • {accountId}:替換為您的阿里雲帳號ID。

  • {InstanceId}:替換為雲訊息佇列 RocketMQ 版的執行個體ID。

  • {ConsumerGroupId}:替換為Group ID。

  • {TopicName}:替換為Topic名稱。

樣本一:授予RAM使用者對於某個執行個體的所有操作許可權

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

樣本二:授予RAM使用者建立執行個體的許可權

{  
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rocketmq:CreateInstance"
            ],
            "Resource": [
                "acs:rocketmq:{regionId}:{accountId}:instance/*" 
            ]
        }
    ]
}       

樣本三:授予RAM使用者刪除某個指定Topic的許可權

{  
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rocketmq:DeleteTopic"
            ],
            "Resource": [
                "acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}/topic/{TopicName}" 
            ]
        }
    ]
}       

樣本四:授予RAM使用者所有執行個體診斷功能的操作許可權

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "rocketmq:GetAnalyticsQuery",
                "rocketmq:SubmitAnalyticsQuery",
                 "rocketmq:ListAnalyticsQuery"
            ],
            "Resource":[
                 "acs:rocketmq:*:{#accountId}:*/*"
            ]
        }
    ]
}

樣本五:授予 RAM 使用者查看執行個體列表及操作指定執行個體的許可權

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

List 類操作(如 ListInstancesGetUserTags)查詢的是帳號下所有執行個體,其 Resource 必須配置為萬用字元格式(acs:rocketmq:*:*:instance/*),不可限制為具體執行個體 ARN。對指定執行個體的讀寫操作(rocketmq:*)可限制為具體執行個體 ARN(acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*)。若僅授權特定執行個體資源而未包含 List 許可權,RAM 使用者將無法在控制台查看執行個體列表,API 呼叫時會報 NoPermission 錯誤。

授權資訊參考

使用自訂權限原則,您需要瞭解業務的許可權管控需求,並瞭解雲訊息佇列 RocketMQ 版的授權資訊。詳細內容請參見授權資訊

常見問題

為什麼 HTTP 協議訪問 RocketMQ 時報錯 valid resource owner failed 或 AccessDenied (OwnerId forbidden)?

原因分析:該報錯通常由以下原因導致:

  1. 簽名構造錯誤:HTTP 要求的簽名未嚴格遵循 HMAC-SHA256 和 V4 簽名規範,例如 Canonical String 構造不符合規範,或 Header 格式不正確。

  2. Resource 配置不匹配:RAM 策略中 Resource 欄位未精確匹配目標 Topic 或執行個體。注意 Topic 名稱大小寫敏感,需與實際建立的 Topic 名稱完全一致。例如,RAM 策略中 Resource 格式應為 acs:mq:*:*:instance/{InstanceId}/topic/{TopicName}

  3. 憑證許可權不足:使用的 AK/STS 憑證未包含 mq:PUB 等對應許可權。

解決方案

  1. 檢查代碼中的簽名演算法是否嚴格遵循 HMAC-SHA256 和 V4 簽名規範。

  2. 確認 RAM 策略中 Resource 格式為 acs:mq:*:*:instance/{InstanceId}/topic/{TopicName},並與實際資源完全一致(注意 Topic 名稱大小寫)。

  3. 驗證使用的 AK/STS 憑證是否具備 mq:PUB 等對應許可權。

建議:優先使用阿里雲提供的 SDK 進行訊息收發,SDK 已封裝完整的簽名和鑒權邏輯,可有效避免手動構造 HTTP 要求帶來的鑒權問題。

能否通過 RequestId 查詢 RocketMQ 許可權校正失敗的具體原因?

目前不支援通過 RequestId 查詢細粒度的 IAM 鑒權決策過程(例如被哪條具體策略拒絕),後台日誌僅返回通用的 AccessDenied 錯誤資訊,無法進一步定位拒絕原因。如需排查許可權校正失敗問題,建議從以下方面自行檢查:

  • 權限原則配置:確認 RAM 使用者或角色綁定了正確的自訂權限原則,Action 和 Resource 欄位與實際操作匹配。

  • Resource 匹配規則:檢查 Resource ARN 格式是否正確,特別注意 List 類操作(如 ListInstances)需使用萬用字元格式(acs:rocketmq:*:*:instance/*),不可限制為具體執行個體 ARN。

  • 簽名邏輯:如使用 HTTP 協議,檢查請求籤名是否符合 HMAC-SHA256 和 V4 規範。

  • 許可權邊界與信任策略:如使用 RAM 角色,核對角色的許可權邊界(Permissions Boundary)和信任策略(Trust Policy)配置是否正確。

如何為 RAM 使用者授予配置 RocketMQ 警示所需的CloudMonitor許可權?

RocketMQ 自訂權限原則僅控制 RocketMQ 資源的操作許可權,不包含CloudMonitor相關許可權。如需為 RAM 使用者授予配置 RocketMQ 警示的許可權,需在 RAM 控制台單獨授權CloudMonitor系統策略。操作步驟如下:

  1. 使用 RAM 管理員帳號登入RAM 控制台

  2. 在左側導覽列,選擇身份管理 > 使用者

  3. 找到目標 RAM 使用者,單擊操作列中的添加許可權

  4. 添加許可權面板,授權範圍選擇整個雲帳號,選擇系統策略

  5. 在搜尋方塊中輸入 AliyunCloudMonitorReadOnlyAccess,勾選對應策略。

  6. 單擊確認新增授權

說明

AliyunCloudMonitorReadOnlyAccess 為CloudMonitor唯讀許可權,支援 RAM 使用者查看監控指標和配置警示規則。如需更多CloudMonitor操作許可權,可根據實際需求選擇 AliyunCloudMonitorFullAccess 系統策略,或建立自訂權限原則。

RocketMQ 5.0 開發環境類比發送訊息應使用 RAM 自訂許可權還是 ACL?

推薦在開發測試情境中使用 ACL(存取控制清單)進行訊息收發許可權控制,而非 RAM 自訂權限原則。兩者適用情境不同:

權限類別型

適用情境

管控粒度

RAM 自訂許可權

阿里雲帳號層級的資源操作管控,例如建立/刪除執行個體、Topic、消費者分組等

控制台和 OpenAPI 操作

ACL

應用層級的訊息收發許可權管控,例如指定 Client ID 允許發布/訂閱哪些 Topic

訊息收發操作

在開發環境類比發送訊息時,推薦通過 ACL 為 Client ID 綁定相應的發布/訂閱許可權,實現應用層級的精細化控制。RAM 自訂許可權適用於管控阿里雲資源層面的操作,不適合直接用於應用級訊息收發情境。