当我尝试添加或编辑我的 Amazon Simple Storage Service (Amazon S3) 存储桶策略时,我收到“Invalid principal in policy”(策略中的主体无效)错误。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
如果您的 Amazon S3 存储桶策略包含 Principal(主体)元素的无效值,则您会收到“Invalid principal in policy”错误。要解决此错误,请执行以下故障排除步骤。
验证您的存储桶策略是否使用了主体元素的支持值
确保在 S3 存储桶策略中为主体元素指定以下支持的值:
**注意:**如果您使用通配符星号 (*) 作为主体元素,则所有经过身份验证的匿名用户均被授予访问权限。
检查“主体”值的格式是否正确
检查存储桶策略中的主体元素的格式是否正确。如果主体元素包含一个用户,请使用以下格式:
"Principal": { "AWS": "arn:aws:iam::111111111111:user/user-name1"
}
**注意:**请将 user-name1 替换为您的 IAM 用户的名称。
如果 Principal(主体)元素包含多个 IAM 用户或角色,请使用以下格式:
"Principal": { "AWS": [
"arn:aws:iam::111111111111:user/user-name1",
"arn:aws:iam::111111111111:role/role-name1"
]
}
**注意:**将 user-name1 替换为您的 IAM 用户的名称,将 role-name1 替换为您的 IAM 角色的名称。
如果主体元素包括所有用户,请使用以下格式:
{ "Principal": "*"
}
注意:最好不要在基于资源的策略且拥有允许权限的主体元素中使用通配符 (*)。仅使用通配符 (*) 授予公共或匿名访问权限。在主体元素中指定所需的主体、服务或 AWS 账户。然后,使用 Condition(条件)元素限制访问。
注意: 当您授予匿名访问权限时,任何人都可以访问您的存储桶。我们建议您不要授予对 S3 存储桶的匿名写入访问权限。有关详细信息,请参阅 Amazon S3 如何与 IAM 配合使用。
确保 IAM 用户或角色未被删除
如果您尝试使用唯一标识符将存储桶策略另存为主体元素,则会收到“Invalid principal in policy”(策略中的主体无效)错误。原因是主体元素仅支持有效的 IAM ARN。要解决此错误,必须从 Principal(主体)元素中移除所有唯一标识符。
如果存储桶策略在 Principal(主体)元素中包含 IAM 用户或角色,请确认这些 IAM 身份未被删除。要识别存储桶策略中已删除的 IAM 用户和角色,请在 Principal(主体)元素中指定唯一标识符而不是完整的 ARN。
示例:
"Principal": { "AWS": [
"arn:aws:iam::111111111111:user/user-name1",
"AIDAJQABLZS4A3QDU576Q",
"arn:aws:iam::111111111111:user/user-name2"
]
}
**注意:**将 user-name1 和 user-name2 替换为您的 IAM 用户的名称。
验证 IAM 主体的账户是否已启用区域
当您应用 S3 存储桶策略时,AWS 会检查 IAM 主体的账户中是否已启用所需的 AWS 区域。您的存储桶可能位于 AWS 默认未启用的 AWS 区域。在这种情况下,请确认您已在 IAM 主体账户中启用该区域。在跨账户场景中,请为两个 AWS 账户均启用 AWS 区域。有关详细信息,请参阅在您的账户中激活或停用 AWS 区域。
使用 IAM 访问权限分析器验证您的存储桶访问权限
要在部署权限之前验证对您的 S3 存储桶的访问权限,请使用 AWS Identity and Access Management 访问权限分析器。您可以查看向您授予其他 AWS 账户资源的 S3 存储桶策略。
您还可以使用 IAM 访问权限分析器分析您的 AWS CloudTrail 事件,以根据该活动生成 IAM 策略。有关详细信息,请参阅 IAM 访问权限分析器策略生成
要激活 IAM 访问权限分析器,请参阅 AWS Identity and Access Management 访问权限分析器入门。
**注意:**AWS 会根据您每月创建的任何未使用访问权限分析向您收费。有关详细信息,请参阅 IAM 访问权限分析器定价。
要对 IAM 访问权限分析器权限进行故障排除,请参阅如何使用从 IAM 访问权限分析器生成的策略解决权限问题?