观测云日志转发至 AWS S3 最佳实践

背景

在日志保留周期越来越长的场景下,把全部数据都放在高频检索链路中,通常会带来持续的存储成本压力。对于"需要长期留存、但低频访问"的日志,采用观测云数据转发能力,将数据归档到 AWS S3,是一条更稳妥的成本与治理平衡路径。

为什么值得做

将日志转发到 S3 后,团队通常可以获得以下收益:

  • 以更低成本实现长期归档,形成冷热分层。
  • 保留原始日志,便于审计追溯与合规留存。
  • 为后续离线分析、ETL、数据仓库加工提供统一数据底座。
  • 将在线检索与归档解耦,提升整体日志治理弹性。

方案概览

观测云日志转发至 S3 支持三种接入方式:

  1. 角色授权(推荐)
  2. 账号授权
  3. Access Key(AK/SK)授权

在生产环境中,建议优先使用角色授权,以获得更好的凭证安全性与权限治理能力。

前提条件

三种方式在开始前都需要先准备以下信息:

  1. 在 AWS 目标区域创建 S3 存储桶(建议结合生命周期策略,必要时启用版本控制/对象锁)。

  2. 明确存储桶名称(例如 guance-log-archive-2026)和区域(例如 ap-east-1cn-north-1)。

  3. 在观测云 管理 -> 数据转发 -> 新建规则 页面获取:

    • 观测云账号 ID(Account ID)
    • 观测云外部 ID(External ID,角色授权时必需)

分区注意事项:

  • 中国区(北京/宁夏)使用 arn:aws-cn:s3:::
  • 海外区使用 arn:aws:s3:::

配置步骤

方式一:角色授权(推荐)

该方式通过 IAM Role + External ID 建立受控信任关系,适合长期稳定运行。

步骤 1:创建 S3 存储桶

示例桶名:guance-csm-s3

步骤 2:创建 S3 权限策略

在 IAM 中创建策略,重点授予 PutObjectGetObjectListBucketGetBucketLocation 四项权限,并将资源限定在目标桶。

json 复制代码
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::guance-csm-s3",
        "arn:aws:s3:::guance-csm-s3/*"
      ]
    }
  ]
}

步骤 3:创建 IAM 角色并配置自定义信任策略

信任策略中最关键的是两项:

  • Principal.AWS:观测云账号 ID
  • sts:ExternalId:观测云外部 ID
json 复制代码
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<观测云账号ID>:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "<观测云外部ID>"
        }
      }
    }
  ]
}

观测云账号 ID 与 External ID 获取路径:观测云控制台 -> 管理 -> 数据转发 -> 新建规则

随后将第二步创建的 S3 策略附加到该角色。

步骤 4:在观测云测试并保存规则

管理 -> 数据转发 -> 新建规则 中选择 AWS S3,访问方式选择"角色授权",填写地区、桶名称、角色名称与可选存储路径,测试连接成功后保存。

方式二:账号授权

该方式通过桶策略直接授权观测云账号访问目标桶。

步骤 1:配置桶策略

在 S3 桶的"权限"页编辑桶策略,填入观测云账号 ID 和目标桶 ARN。

json 复制代码
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "GuanceyunAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<观测云账号ID>:root"
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::guance-csm-s3",
        "arn:aws:s3:::guance-csm-s3/*"
      ]
    }
  ]
}

观测云账号 ID 获取路径:观测云控制台 -> 管理 -> 数据转发 -> 新建规则

步骤 2:在观测云测试并保存规则

填写地区与桶名称,测试连接成功后保存。

方式三:Access Key(AK/SK)授权

该方式通过 IAM 用户访问密钥完成认证,适合临时验证或过渡期使用。

步骤 1:创建 IAM 用户

步骤 2:创建并绑定 S3 策略

json 复制代码
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:CreateBucket",
        "s3:ListAllMyBuckets",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::*"
    }
  ]
}

步骤 3:创建访问密钥并在观测云配置

在 IAM 用户的"安全凭证"中创建访问密钥,获取 AK/SK 后在观测云规则中填写并测试连接。

效果验证

建议从以下四个维度确认配置已生效:

  1. 规则侧验证:观测云"测试连接"通过。
  2. 存储侧验证:S3 指定前缀下有持续对象写入。
  3. 内容侧验证:抽样下载对象,确认日志结构与字段完整。
  4. 运行侧验证:连续观察无频繁失败或权限异常。

常见问题与注意事项

  1. 中国区与海外区 ARN 前缀混用,导致授权失败。
  2. 角色授权失败时,优先核查 Account ID 与 External ID 是否正确。
  3. 若出现 AccessDenied,请核对策略是否包含 PutObjectListBucketGetBucketLocation
  4. 桶区域与观测云规则填写区域不一致会导致连接测试失败。
  5. Access Key 模式建议定期轮换密钥并控制权限范围。

总结

通过角色授权、账号授权或 Access Key 三种方式,都可以将观测云日志稳定转发到 AWS S3,实现低成本长期归档。实际落地中,建议优先采用角色授权,并重点关注三个关键点:授权模型、ARN 分区前缀、区域一致性。完成这三点后,日志归档链路通常可以稳定运行,并为后续审计、分析与数据加工提供可靠基础。

相关推荐
亚林瓜子7 小时前
AWS Glue Python Shell中获取外网ip
python·tcp/ip·http·shell·aws·vpc·glue
zhojiew12 小时前
在中国区aws通过Network Flow Monitor实现实例网络流量指标上传到cloudwatch
服务器·网络·aws
亚林瓜子13 小时前
AWS Glue Python Shell任务中获取AWS SM中的加密配置
python·aws·glue·sm
chaofan98013 小时前
2026年企业级AI基建:AWS Bedrock高并发架构深度实践与成本治理实操录
人工智能·架构·aws
亚马逊云开发者13 小时前
Java 8升级Java 17实战:用AWS Transform Custom自动化迁移Spring Boot项目完整教程
java·自动化·aws
TG_yunshuguoji13 小时前
亚马逊云代理商:如何使用 CloudWatch 监控 AWS Lambda 函数日志?
云计算·aws·lambda·云服务器·cloudwatch
亚林瓜子13 小时前
AWS Glue Python Shell任务中pip安装依赖库
python·shell·pip·aws·glue·job
亚林瓜子14 小时前
AWS Glue Python Shell任务中读取Athena数据库
数据库·python·shell·aws·glue·athena
AutoMQ1 天前
别再每月浪费数千美元:拆解 AWS/GCP Kafka 背后的隐性账单
kafka·消息队列·aws