上次更新日期:2020 年 10 月 20 日
我尝试使用 Amazon S3 控制台将文件上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。但是,我收到了 HTTP 403 禁止访问错误。我应该如何排查此问题?
简短描述要从 Amazon S3 控制台排查 HTTP 403 禁止访问错误,请检查以下各项:
缺少 s3:PutObject 或 s3:PutObjectAcl 的相关权限缺少使用 AWS Key Management Service (AWS KMS) 密钥的权限 存储桶策略中的显式 deny 语句 存储桶访问控制列表 (ACL) 不允许 AWS 账户根用户写入对象 AWS Organizations 服务控制策略不允许访问 Amazon S3
解决方法 缺少 s3:PutObject 或 s3:PutObjectAcl 的相关权限
验证您正在使用的 AWS Identity and Access Management (IAM) 用户或角色具有对存储桶上的 s3:PutObject 操作的权限。如果没有此权限,您会收到“HTTP 403 禁止”错误。
如果您尝试在上传期间修改对象的 ACL,则您的 IAM 用户或角色必须还具有对 s3:PutObjectAcl 操作的权限。
缺少使用 AWS KMS 密钥的权限要访问结合使用默认加密和自定义 AWS KMS 密钥的 S3 存储桶,您必须拥有使用该密钥的权限。
要获取使用密钥的权限,密钥管理员必须授予您对密钥策略的权限。要将对象上传至已加密的存储桶,您的 IAM 用户或角色必须至少拥有 kms:Encrypt 和kms:GenerateDataKey 权限。
查看存储桶策略中显示拒绝 ("Effect": "Deny") s3:PutObject 权限的任何语句,除非已满足特定条件。验证您的上传符合访问 s3: PutObject 操作的存储桶策略要求。
例如,如果您的存储桶策略显式拒绝 s3:PutObject,则验证您正在使用正确的加密标头上传对象,除非请求包括使用 AWS KMS 或 Amazon S3 托管加密密钥的服务器端加密。
存储桶策略中的以下示例语句显式拒绝对存储桶 awsdoc-example-bucket 上的 s3:PutObject 的任何访问,除非上传请求包括使用 AWS KMS 密钥 arn:aws:kms:us-east-1:111122223333:key 进行的加密:
{
"Version": "2012-10-17",
"Statement": ,
"Effect": "Deny",
"Resource": "arn:aws:s3:::awsdoc-example-bucket/*",
"Condition": {
"StringNotLikeIfExists": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
}
},
"Principal": "*"
}
]
}
警告:在保存具有显式 deny 语句的存储桶策略之前,您必须仔细检查显式拒绝访问的参数。如果您被意外锁定,请参阅我意外拒绝了所有人对我的 Amazon S3 存储桶的访问。如何重新获得访问权限?
存储桶 ACL 不允许根用户写入对象如果您使用根用户账户将对象上传至 S3 存储桶,则验证存储桶 ACL 授予根用户对写入对象的访问权。有关更多信息,请参阅如何设置 ACL 存储桶权限?
AWS Organizations 服务控制策略不允许访问 Amazon S3如果您使用的是 AWS Organizations,则检查服务控制策略以确保允许访问 Amazon S3。
例如,当您尝试访问 Amazon S3 时,以下策略将导致 HTTP 403 禁止访问错误,因为它会显式拒绝访问:
{
"Version": "2012-10-17",
"Statement":
}
有关 AWS Organizations 功能的更多信息,请参阅启用组织中的所有功能。