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

如何为关联AWS VPC的安全组配置S3、CloudWatch访问权限

AWS VPC安全组配置S3/CloudWatch访问权限(Terraform实现方案)

注意:安全组本身是四层网络访问控制规则,直接通过安全组开放AWS服务访问有两种实现路径:1)配置出站规则放行服务对应的公网IP段;2)搭配VPC端点(Gateway端点适配S3,Interface端点适配CloudWatch)后放行到端点的内网流量,第二种是更安全的私有访问方案,推荐优先使用。

实现前提

  • 已提前创建目标关联的VPC资源,获取到对应VPC的ID
  • Terraform AWS Provider版本≥3.0,已完成AWS认证配置

完整Terraform配置示例

基础依赖配置

# 配置AWS Provider
provider "aws" {
  region = "cn-northwest-1" # 替换为你的实际部署区域
}

# 引用你的自有VPC资源
data "aws_vpc" "target_vpc" {
  id = "vpc-xxxxxxx" # 替换为你的自有VPC ID
}

步骤1:创建S3 Gateway VPC端点(可选但推荐)

S3支持Gateway类型端点,无额外费用,访问流量不走公网:

resource "aws_vpc_endpoint" "s3" {
  vpc_id            = data.aws_vpc.target_vpc.id
  service_name      = "com.amazonaws.${var.region}.s3"
  vpc_endpoint_type = "Gateway"

  # 替换为你的VPC关联的路由表ID列表,需要让子网路由指向该端点
  route_table_ids = [
    "rtb-xxxxxxx",
    "rtb-yyyyyyy"
  ]

  # 端点策略默认放行所有S3访问,可按需缩窄权限范围
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action    = "s3:*"
        Effect    = "Allow"
        Resource  = "*"
        Principal = "*"
      }
    ]
  })
}

步骤2:创建CloudWatch Interface VPC端点(可选但推荐)

CloudWatch使用Interface类型端点,实现私有网络访问:

resource "aws_vpc_endpoint" "cloudwatch" {
  vpc_id            = data.aws_vpc.target_vpc.id
  service_name      = "com.amazonaws.${var.region}.monitoring"
  vpc_endpoint_type = "Interface"

  security_group_ids = [aws_security_group.service_access.id]
  # 替换为你需要部署端点的子网ID列表
  subnet_ids         = [
    "subnet-xxxxxxx",
    "subnet-yyyyyyy"
  ]

  private_dns_enabled = true # 开启后AWS服务域名自动解析为内网IP,无需修改应用配置
}

步骤3:创建关联VPC的安全组并配置规则

resource "aws_security_group" "service_access" {
  name        = "service-access-sg"
  description = "Allow access to S3 and CloudWatch"
  vpc_id      = data.aws_vpc.target_vpc.id

  # 入站规则按需配置,不需要外部访问的场景可仅允许同安全组内资源互访
  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    self        = true 
  }

  # 出站规则:使用VPC端点时仅放行VPC内网的HTTPS访问即可
  egress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = [data.aws_vpc.target_vpc.cidr_block]
  }

  tags = {
    Name = "service-access-sg"
  }
}

不使用VPC端点的简化配置

如果可以接受访问S3、CloudWatch的流量走公网,不需要创建VPC端点,直接配置安全组即可:

resource "aws_security_group" "service_access" {
  name        = "service-access-sg"
  description = "Allow access to S3 and CloudWatch via public network"
  vpc_id      = data.aws_vpc.target_vpc.id

  # 放行公网HTTPS出站访问
  egress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # 入站规则按需配置
}

注意事项

  • 安全组是有状态规则,配置出站规则放行后,服务返回的入站流量会自动被允许,不需要额外配置对应入站规则
  • 上述配置仅控制网络层面的访问权限,服务层面的资源操作权限仍然需要通过IAM角色/策略配置,例如关联到EC2的IAM角色需要添加S3、CloudWatch的对应操作权限
  • 生产环境建议不要直接放行0.0.0.0/0的出站访问,优先使用VPC端点限制流量仅在内网流转,同时缩窄端点策略和IAM权限到最小必要范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:06:08