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

如何在不影响Amazon Athena使用的情况下阻止S3文件下载?

问题原因

你的IAM策略直接拒绝了所有s3:GetObject操作,而Athena执行查询时必须读取S3存储桶内的数据,必然会调用s3:GetObject,因此被策略拦截触发权限错误。EMR Notebooks能正常读取是因为它使用的是EMR集群的服务角色权限,不受当前用户IAM策略限制,符合你的预期。

解决方案:基于请求来源的条件化Deny策略

通过添加aws:CalledVia条件键,仅拒绝用户直接发起的s3:GetObject请求,允许Athena服务发起的请求,这样既阻止用户下载文件,又不影响Athena查询。

修改后的IAM策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket-name/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:CalledVia": "athena.amazonaws.com"
                }
            }
        }
    ]
}
关键说明
  • aws:CalledVia条件键用于识别请求的发起来源:
    • 当用户通过控制台、AWS CLI、SDK直接调用s3:GetObject时,aws:CalledVia不包含athena.amazonaws.com,会触发Deny,阻止下载。
    • 当Athena代表用户发起s3:GetObject请求时,aws:CalledVia会标记为athena.amazonaws.com,因此不会被Deny,查询可正常执行。
  • 如果需要保留其他服务(如EMR)的访问权限,可将对应服务域名添加到数组中,示例:
    "StringNotEquals": {
        "aws:CalledVia": ["athena.amazonaws.com", "elasticmapreduce.amazonaws.com"]
    }
    
    按你的描述当前EMR不受原策略影响,可根据实际测试结果决定是否添加。
验证步骤
  1. 将修改后的策略应用给目标用户。
  2. 尝试直接通过AWS控制台下载S3文件,应提示权限不足。
  3. 运行Athena查询,确认能正常返回结果。
  4. 在EMR Notebooks中测试读取文件,确保访问正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:35:19