实战案例 | Amazon S3 访问权限设置


  项目需求

某跨国企业面临S3存储桶权限管理的复杂需求:开发团队需对dev-bucket中的日志文件拥有读写权限,但禁止删除核心配置文件;数据分析团队需对analytics-bucket拥有只读访问权限,且仅限特定IP范围访问;外部合作伙伴需临时访问partner-bucket中的报告文件,但访问需在72小时后自动失效。传统方案依赖存储桶策略的“一刀切”配置,导致权限过宽(如开发团队误删配置文件)或过严(如合作伙伴无法按时获取文件),亟需一种细粒度、可追溯且自动化的权限管理方案。

  解决方案

AWS提供三种权限控制机制:存储桶策略(Bucket Policy)、IAM用户/角色策略(IAM Policy)和访问控制列表(ACL)。本案例采用“存储桶策略+IAM策略+条件约束”的组合方案,实现以下功能:
基于身份的权限:通过IAM策略限制开发团队仅能上传/下载日志文件,禁止删除操作;
基于条件的权限:通过存储桶策略限制数据分析团队仅能从指定IP范围(如192.0.2.0/24)访问analytics-bucket;
基于时间的权限:通过存储桶策略的Condition字段设置外部合作伙伴的临时访问权限,72小时后自动失效。
该方案通过AWS控制台可视化配置,无需编写复杂JSON代码。

  作业步骤

本次采用 AWS Console 界面完成作业。
注意:根据项目的具体情况,可以采用不同的实施方法。比如使用命令行(CLI)部署、代码部署 (CloudFomation、Terraform 等)、以及其它开发语言(SDK)完成作业。

步骤一:配置开发团队的 IAM 策略
登录 AWS 控制台,进入 IAM 服务,选择开发团队对应的用户组(如 Dev-Team),点击“权限”→“添加权限”→“创建策略”;
选择“JSON”编辑器,输入以下策略(禁止删除操作):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:GetObject"],
      "Resource": "arn:aws:s3:::dev-bucket/logs/*"
    },
    {
      "Effect": "Deny",
      "Action": ["s3:DeleteObject"],
      "Resource": "arn:aws:s3:::dev-bucket/config/*"
    }
  ]
}


步骤二:配置数据分析团队的存储桶策略
进入 S3服务,选择 analytics-bucket,点击“权限”→“存储桶策略”,输入以下策略(限制 IP 访问):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::analytics-bucket", "arn:aws:s3:::analytics-bucket/*"],
      "Condition": {
        "NotIpAddress": {"aws:SourceIp": ["192.0.2.0/24"]}
      }
    }
  ]
}


步骤三:配置外部合作伙伴的临时访问
选择 partner-bucket,点击“权限”→“存储桶策略”,输入以下策略(72小时后失效):
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:user/Partner-User"},
      "Action": ["s3:GetObject"],
      "Resource": "arn:aws:s3:::partner-bucket/reports/*",
      "Condition": {
        "DateLessThan": {"aws:CurrentTime": "2024-03-15T00:00:00Z"}  // 示例时间
      }
    }
  ]
}

  结果验证

1. 开发团队可上传日志文件但无法删除配置文件;数据分析团队仅能从指定 IP 访问数据;外部合作伙伴在72小时内可下载报告,之后权限自动撤销。
2. 通过 AWS CloudTrail 检查 S3操作日志,确认所有拒绝操作均被记录,且无越权访问尝试。
该案例证明,通过 AWS 控制台组合使用存储桶策略、IAM 策略和条件约束,可实现 S3权限的精准控制。