我正在嘗試使用主控台新增或編輯我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體政策。但是,我收到錯誤訊息:「錯誤: 政策中的主體無效。」
解決方法
您收到錯誤: 政策中的主體無效訊息,代表儲存貯體政策中的主體值無效。若要解決此錯誤,請檢查下列項目:
- 儲存貯體政策會針對主體元素使用受支援的值。
- 主體元素格式正確。
- 如果主體是 AWS 身分和存取管理 (IAM) 使用者或角色,請確認未刪除使用者或角色。
儲存貯體政策使用主體元素受支援的值
檢閱儲存貯體政策中的「主體元素」。檢查其是否使用以下任何一項受支援的值:
警告:與 "Action:" "Allow" 搭配使用時,"*" 主體元素會授與所有已驗證和匿名使用者的存取權。在儲存貯體政策中使用此組合之前,請確認您的內容支援此層級的存取權限。
主體值格式正確
檢閱政策中的主體元素,並檢查其格式是否正確。如果主體包含一個使用者,則元素必須採用下列格式:
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/user-name1"
}
當您在主體元素中指定使用者時,您無法使用 “\ *” 來指出所有使用者。您必須包括主體元素的特定使用者。
如果主體元素包含多個 IAM 使用者或 IAM 角色,則該元素必須採用以下格式:
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/user-name1",
"arn:aws:iam::111111111111:role/role-name1"
]
}
如果主體是所有使用者,則元素必須採用以下格式:
{
"Principal": "*"
}
最好不要在以資源為基礎的政策的主體元素中使用萬用字元 (\ *) 並使 Allow 生效。只有在您想要授予公開或匿名存取權時,再使用萬用在元。在主體元素中指定預定的主體、服務或 AWS 帳戶。然後,使用條件元素來限制存取。IAM 角色信任政策尤其如此,因為這些政策允許其他主體成為您帳戶中的主體。
未刪除 IAM 使用者或角色
如果您的儲存貯體政策在主體元素中包含 IAM 使用者或角色,請確認未刪除這些 IAM 身分。請務必在主體元素中指定唯一識別碼,而非完整 ARN。這有助於識別目前儲存貯體政策中已刪除的 IAM 使用者和角色。
範例:
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/user-name1",
"AIDAJQABLZS4A3QDU576Q",
"arn:aws:iam::111111111111:user/user-name2"
]
}
如果您嘗試將具有唯一識別碼的儲存貯體政策儲存為主體元素,則會出現政策中的主體無效錯誤。這是因為主體元素只支援有效的 IAM ARN。若要解決此錯誤,您必須從主體元素中移除任何唯一識別碼。
IAM 主體的帳戶未開啟 AWS 區域
如果您的 S3 儲存貯體位於預設未開啟的 AWS 區域,請確認 IAM 主體的帳戶已開啟該區域。如需詳細資訊,請參閱 AWS 區域管理。
相關資訊
AWS 政策產生器
AWS JSON 政策元素: 主體