如果系統權限原則不能滿足您的要求,您可以建立自訂權限原則實現最小授權。使用自訂權限原則有助於實現許可權的精細化管控,是提升資源訪問安全的有效手段。本文介紹雲訊息佇列 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 類操作(如 ListInstances、GetUserTags)查詢的是帳號下所有執行個體,其 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)?
原因分析:該報錯通常由以下原因導致:
簽名構造錯誤:HTTP 要求的簽名未嚴格遵循 HMAC-SHA256 和 V4 簽名規範,例如 Canonical String 構造不符合規範,或 Header 格式不正確。
Resource 配置不匹配:RAM 策略中 Resource 欄位未精確匹配目標 Topic 或執行個體。注意 Topic 名稱大小寫敏感,需與實際建立的 Topic 名稱完全一致。例如,RAM 策略中 Resource 格式應為
acs:mq:*:*:instance/{InstanceId}/topic/{TopicName}。憑證許可權不足:使用的 AK/STS 憑證未包含
mq:PUB等對應許可權。
解決方案
檢查代碼中的簽名演算法是否嚴格遵循 HMAC-SHA256 和 V4 簽名規範。
確認 RAM 策略中 Resource 格式為
acs:mq:*:*:instance/{InstanceId}/topic/{TopicName},並與實際資源完全一致(注意 Topic 名稱大小寫)。驗證使用的 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系統策略。操作步驟如下:
使用 RAM 管理員帳號登入RAM 控制台。
在左側導覽列,選擇身份管理 > 使用者。
找到目標 RAM 使用者,單擊操作列中的添加許可權。
在添加許可權面板,授權範圍選擇整個雲帳號,選擇系統策略。
在搜尋方塊中輸入
AliyunCloudMonitorReadOnlyAccess,勾選對應策略。單擊確認新增授權。
AliyunCloudMonitorReadOnlyAccess 為CloudMonitor唯讀許可權,支援 RAM 使用者查看監控指標和配置警示規則。如需更多CloudMonitor操作許可權,可根據實際需求選擇 AliyunCloudMonitorFullAccess 系統策略,或建立自訂權限原則。
RocketMQ 5.0 開發環境類比發送訊息應使用 RAM 自訂許可權還是 ACL?
推薦在開發測試情境中使用 ACL(存取控制清單)進行訊息收發許可權控制,而非 RAM 自訂權限原則。兩者適用情境不同:
權限類別型 | 適用情境 | 管控粒度 |
RAM 自訂許可權 | 阿里雲帳號層級的資源操作管控,例如建立/刪除執行個體、Topic、消費者分組等 | 控制台和 OpenAPI 操作 |
ACL | 應用層級的訊息收發許可權管控,例如指定 Client ID 允許發布/訂閱哪些 Topic | 訊息收發操作 |
在開發環境類比發送訊息時,推薦通過 ACL 為 Client ID 綁定相應的發布/訂閱許可權,實現應用層級的精細化控制。RAM 自訂許可權適用於管控阿里雲資源層面的操作,不適合直接用於應用級訊息收發情境。