You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

S3策略问题:PutObject策略生效但GetObject策略保存失败报错

问题原因与解决方案

核心原因

AWS S3的策略条件键和特定操作是绑定的:

  • 你用于PutObject的条件键(比如s3:x-amz-server-side-encryption-aws-kms-key-id)属于请求头类条件,仅对写入/修改类操作(如PutObject、CopyObject)生效——这类操作需要在请求中主动指定加密参数。
  • GetObject是读取类操作,请求本身不会携带该加密头参数,AWS策略验证会判定该条件与GetObject动作不兼容,因此报错拒绝保存策略。

正确的GetObject限制策略

如果要强制用户只能读取用指定KMS密钥加密的S3对象,需要基于对象本身的加密元数据设置条件,使用s3:server-side-encryption-aws-kms-key-id(注意没有x-amz-前缀,这是对象属性对应的条件键)。

示例策略(拒绝读取未用指定KMS密钥加密的对象):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:server-side-encryption-aws-kms-key-id": "arn:aws:kms:region:account-id:key/your-kms-key-id"
                }
            }
        }
    ]
}

关键区别说明

  • s3:x-amz-server-side-encryption-aws-kms-key-id:检查请求头中的加密参数,仅适用于写入操作(上传时指定加密方式)。
  • s3:server-side-encryption-aws-kms-key-id:检查对象存储时的加密属性,适用于读取操作(验证对象本身的加密密钥)。

内容的提问来源于stack exchange,提问作者WAEX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:29:53