观测云日志转发至 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 分区前缀、区域一致性。完成这三点后,日志归档链路通常可以稳定运行,并为后续审计、分析与数据加工提供可靠基础。

相关推荐
A小辣椒9 天前
AWS Clould Support Engineer就职面试题
aws
亚林瓜子11 天前
AWS WAF中如何放行某个触发了托管规则的接口
aws·waf
悠悠1213813 天前
AWS DevOps Agent 体验一周后,我决定把 oncall 手机调成静音了
云计算·aws·devops
yyuuuzz13 天前
独立站运营的几个技术层面常见问题
大数据·运维·服务器·网络·数据库·aws
yyuuuzz13 天前
游戏云服务器推荐的技术选择思路
大数据·运维·服务器·游戏·云计算·aws
kernelcraft15 天前
Boto3:Python 操作 AWS 的官方 SDK
开发语言·python·其他·aws
普通网友22 天前
Serverless 框架:多云函数部署(AWS + 阿里云 + 腾讯云)
阿里云·serverless·aws
TG_yunshuguoji22 天前
亚马逊云代理商:如何用 CloudWatch+Lambda 打造自动化告警系统
大数据·运维·自动化·云计算·aws
yyuuuzz22 天前
独立站搭建的几个核心技术问题
运维·服务器·网络·数据库·aws
yyuuuzz22 天前
aws亚马逊云服务的基础认知与常见场景
大数据·运维·服务器·网络·云计算·aws