用代理商开的 AWS 账号,怎么做成本分析?
通过代理商开的 AWS 想做成本分析?其实多数情况你能自己建账单导出(CUR)直接接进来;只有被代理商用 SCP 限制时,才需要他配合给 key 或开 S3。这篇给出自测方法、两种情况的完整接法和最小 IAM 权限。
很多公司的 AWS 不是自己直接开的,而是找代理商开的——付款、开票、支持都走代理商,方便。但等你想做成本分析,第一反应往往是:账单在代理商手里,我读得到吗?
好消息:多数情况下你自己就能搞定,不用求代理商。这篇讲清楚怎么判断你属于哪种情况,以及每种情况下怎么用最小权限把账单接进成本工具(以 MOF 为例)。
先看结论
- 多数情况,你自己就能把账单接进来:在你自己账号里建一个 CUR 导出,MOF 直接自动读,不用求代理商(情况 A)。
- 只有代理商限制了你(不让你自建导出)时,才需要他配合:把导出投递到你的桶,或给你一把只读 key、开个 S3(情况 B)。
- 怎么判断走哪条?先花一分钟自测能不能自建 —— 下面手把手。
先搞清楚:代理商是怎么把你挂进来的?
你自己开的 AWS 既是 payer 又是 management,随手就能导账单。代理商场景里你是成员账号——但 AWS 官方文档说得明白:组织里的成员账号,默认也能给自己建 CUR 导出(只含自己账号的用量)。能不能自己动手,取决于代理商用哪种模式把你挂进来——今天都走 AWS Organizations,但分两档,区别正好卡在能不能用 SCP(服务控制策略)上:
| 模式 | 代理商能治理 / 限制你吗 | 你能自建导出吗 | 怎么接 |
|---|---|---|---|
| 合并账单型 (挂 payer / Consolidated billing only) | 不能,只合并账单付款 (这模式 AWS 不支持 SCP) | 一定能 | 直接走情况 A |
| 完整组织型 (ORG / Organizations all features) | 能,可能用 SCP 禁你自建 | 默认能,除非被 SCP 禁 → 先自测 | 能建→A,被挡→B |
怎么知道自己是哪种?最直接是问代理商;嫌麻烦就跳过判断,直接按下一节「自测」试一下——能建就是能建,不用纠结档位。
所以卡住你的从来不是”代理商”这个身份,而是代理商这个模式下有没有专门限制你。
三条要记住的 AWS 规则
把接法讲清楚前,先记住三条(已按官方文档确认):
- 你能自建导出,但只能导到自己的桶。 成员账号默认能建 CUR / Data Export;AWS 要求导出的目的地 S3 桶,必须是建这个导出的账号自己拥有的(AWS 文档)。
- 导出定义不能跨账号读。 想
ListExports/GetExport读出别的账号里的导出定义,做不到(没有资源策略,也不在 AWS RAM 可共享列表里)。所以你读不到代理商账号里那个导出的定义。 - CUR 2.0 的 Data Exports 能跨账号投递输出(2026-03 起支持)。代理商可以把 CUR 2.0 导出的输出文件直接写进你的桶——注意是”投递输出”,不是”共享定义”。Legacy CUR 不支持跨账号投递。
先自测:你能不能自建导出?
到你自己账号的 账单与成本管理(Billing and Cost Management)→ 数据导出(Data Exports),试着点「创建」。
- 能进到创建流程 → 情况 A(下一节),自己建就行。
- 提示被 SCP 拒绝 / 没有权限 → 情况 B,往下翻到「情况 B」。
情况 A:自己建导出(最省事)
不碰代理商,全程在你自己账号里:
- 打开 账单与成本管理 → 数据导出 → 创建(AWS 建导出指引);
- 类型选 标准数据导出(CUR 2.0) 或 FOCUS 1.0;
- 目的地选一个你自己账号里的 S3 桶(没有就新建,AWS 会自动补上写入用的桶策略);
- 建完,AWS 每天把账单写进这个桶。
在 MOF 里: 添加 AWS 账号 → 「数据源接入方式」保持默认的选择数据源 → 填你自己账号的 accessKey / secretKey → MOF 列出你账号里的导出,勾选保存即可。

「数据源接入方式」有三种:选择数据源、手动填写 Export ARN、S3 存储桶。情况 A 用默认的「选择数据源」。

MOF 列出你账号里的 CUR 导出(CUR 2.0 / FOCUS / Legacy),勾选一个保存即可。
这条对大多数人就够了。只有当你在上一步自测里被 SCP 挡住,才需要往下看情况 B。
情况 B:被 SCP 挡了,让代理商配合
如果你不能自建,就得代理商出手。按”他肯给你多少”由优到兜底,有三种:
B-1:让代理商把导出投递到你的桶(最优,2026-03 起)
代理商在他账号里建 CUR 2.0 导出,把目的地 S3 设成你的桶。文件落在你自己的桶里,你读自己的桶就行,连跨账号读都省了。
- 代理商侧:建导出时,目的地填你的桶(桶所有者填你的账号 ID + 桶名);
- 你这侧:给你自己的桶加下面这条 bucket policy,放行 AWS Data Exports 服务写入。⚠️ 注意
SourceArn/SourceAccount里填的是建导出那个账号——也就是代理商的账号 ID,不是你自己的:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EnableAWSDataExportsToWriteToS3",
"Effect": "Allow",
"Principal": { "Service": ["bcm-data-exports.amazonaws.com"] },
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::<你的桶>/*",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:bcm-data-exports:us-east-1:<代理商账号ID>:export/*"
},
"StringEquals": {
"aws:SourceAccount": "<代理商账号ID>"
}
}
}
]
}
这是 AWS 官方样板——只授权
s3:PutObject(给写,不给读、删);建完别再改这条桶策略或换桶主,否则投递会失败。中国区把aws换成aws-cn、us-east-1换成cn-northwest-1。
- 好处附赠:文件落你自己桶里,那几个值(
name/prefix)你自己翻桶就能看到。
在 MOF 里: 走下面 B-3 一样的 S3 存储桶 直读,只是桶换成你自己的。

和 B-3 一样选「S3 存储桶」填六个值,只是「S3 存储桶」填你自己的桶。
B-2:代理商给一把缩权 key(手输 Export ARN)
适合代理商愿意在自己账号里发一把权限很小的 key:只能读一个指定的导出定义,加上对应的 S3 前缀。
注:B-2 只适用于 Standard data export(CUR 2.0 / FOCUS)——它才有 ARN。老版 Legacy CUR 没有 ARN(用 report 名标识),请走 B-3。
让代理商这样配(在代理商账号里建 IAM 用户/角色,附下面这段策略):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GetExportDef",
"Effect": "Allow",
"Action": "bcm-data-exports:GetExport",
"Resource": "arn:aws:bcm-data-exports:us-east-1:<代理商账号ID>:export/<EXPORT_ID>"
},
{
"Sid": "ListCurFiles",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::<账单桶>",
"Condition": { "StringLike": { "s3:prefix": "<你的前缀>/*" } }
},
{
"Sid": "GetCurFiles",
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<账单桶>/<你的前缀>/*"
}
]
}
代理商把 key、Export ARN、region 给你。这把 key 只有 GetExport、没有 ListExports——正好够用,列不出别人的导出;s3:ListBucket 也用 s3:prefix 条件锁死在你的前缀,读不到桶里别家的目录。
在 MOF 里: 添加 AWS 账号 → 「数据源接入方式」→ 手动填写 Export ARN → 粘贴 Export ARN,点「验证并使用」,MOF 会回显解析出的桶名、表类型、格式——对得上再保存。

选「手动填写 Export ARN」,粘贴 ARN 点「验证并使用」,MOF 回显解析出的 Name / 类型 / 表。
B-3:代理商只开 S3(直读)
代理商连 CUR/Export 的 API 权限都不给,只把账单文件所在的 S3 开给你。多个成员账号的账单落在同一个桶、只开桶权限的情况,答案也是这条。B-1(投递到你自己的桶)在 MOF 里也是走这条,只是桶是你自己的。
代理商开 S3 有两种开法,二选一:
① 给桶加一条策略,放行你的账号(你用自己的 key 读):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCustomerList",
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::<你的账号ID>:root" },
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::<账单桶>",
"Condition": { "StringLike": { "s3:prefix": "<你的前缀>/*" } }
},
{
"Sid": "AllowCustomerGet",
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::<你的账号ID>:root" },
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<账单桶>/<你的前缀>/*"
}
]
}
⚠️ 走 ① 这种桶策略,是两边都要放行:桶策略(上面,资源侧)+ 你自己账号里那把 key 的 IAM 也要允许
s3:GetObject/s3:ListBucket访问这个外部桶。用管理员级 key 一般没问题;用缩权 key 记得把这两个 S3 权限也加上,否则会读不到还找不到原因。
② 或者在代理商账号里发一把只读 S3 的 key(策略就是 B-2 里的 ListCurFiles + GetCurFiles 两段,去掉 GetExport)。这条是单边授权,不用管你自己账号的 IAM,更省心——嫌 ① 麻烦就用 ②。
无论哪种,代理商还得告诉你这几个值(你看不到导出定义,只能问,或按下一节自己翻桶):
bucket(桶名)prefix(你这个账号的前缀,通常一个子账号一个)name(导出名——它是 S3 路径里的一段,必须精确)region- 表类型:CUR 2.0 或 FOCUS
- 格式:Parquet 或 CSV(gzip)
在 MOF 里: 添加 AWS 账号 → 「数据源接入方式」→ S3 存储桶 → 把上面几个值填进去(S3 存储桶 / 前缀 / Export 名称 / 区域 / 数据表类型 / 文件格式)。当前支持 CUR 2.0 和 FOCUS,Parquet 和 CSV(gzip)都行。

选「S3 存储桶」,填 S3 存储桶 / 前缀 / Export 名称 / 区域 / 数据表类型 / 文件格式。
怎么在 AWS 里拿到这些值
B-2 的 Export ARN 和 B-3 的 S3 六个值,最省事的方式是让代理商在他账号里用 CLI 跑一下,把结果发给你(控制台的 Data Export 详情页其实不显示 ARN,得靠命令)。如果是 B-1(投递到你自己的桶),这些命令你自己在自己账号跑就行。
① 拿 Export ARN(B-2 要用):
aws bcm-data-exports list-exports --region us-east-1 \
--query "Exports[].[ExportName,ExportArn]" --output table
② 一次拿全 S3 六个值(B-3 要用):
# Standard export(CUR 2.0 / FOCUS)
aws bcm-data-exports get-export --region us-east-1 --export-arn "<上一步的 ARN>" \
--query "Export.{Name:Name,Bucket:DestinationConfigurations.S3Destination.S3Bucket,Prefix:DestinationConfigurations.S3Destination.S3Prefix,Region:DestinationConfigurations.S3Destination.S3Region,Format:DestinationConfigurations.S3Destination.S3OutputConfigurations.Format,Table:keys(DataQuery.TableConfigurations)}"
# 老版 Legacy CUR
aws cur describe-report-definitions --region us-east-1 \
--query "ReportDefinitions[].{Name:ReportName,Bucket:S3Bucket,Prefix:S3Prefix,Region:S3Region,Format:Format}" --output table
输出字段直接对应表单:Bucket→桶名、Prefix→前缀、Name→Export 名称、Region→region、Table(COST_AND_USAGE_REPORT→CUR 2.0、FOCUS_1_0_AWS→FOCUS)、Format(PARQUET→Parquet、TEXT_OR_CSV→CSV)。
没有 CLI 也能对:到桶里找这个路径,能找到 Manifest 就说明值填对了——
<prefix>/<name>/metadata/BILLING_PERIOD=YYYY-MM/<name>-Manifest.json(FOCUS 把BILLING_PERIOD换成小写billing_period)。
一段可以直接转给代理商的话(仅情况 B 需要)
我要接一个成本分析工具,读我这个账号的 AWS 账单。三种方式任选(由简到繁):
- 最省事:把我账号的 CUR 2.0 导出投递到我的 S3 桶(2026-03 起支持跨账号投递),我自己读;
- 或在你账号里给我一把 IAM key,权限缩到
bcm-data-exports:GetExport(我这个导出)+ 对应 S3 前缀的只读,把 key、Export ARN、region 给我;- 或把账单所在的 S3 开给我读(给我账号加 bucket policy,或发一把只读 S3 的 key),并告诉我:桶名、我的前缀、导出名、region、表类型(CUR 2.0 / FOCUS)、格式(Parquet / CSV)。
第 2、3 种的这几个值,你在 CloudShell 跑一条
aws bcm-data-exports get-export --export-arn <ARN>就能一次导出发我。
接进来之后
账单进入 MOF 后,会按 line_item_usage_account_id 自动拆分到各个子账号——所以哪怕一个桶里落了十几个成员账号的账单,你也能在一个视图里,按账号、按服务把成本看清楚。这也是代理商多子账号场景真正想要的:不用一个个账号手动折腾,一处看全。
一个小提醒:确保给你的导出 / 前缀里只含你自己的账号。如果给的是代理商的全量 CUR(混着其他客户),这些数据也会一并读进来——所以最好单独导一份,或用一个只放你账号的前缀。
常见问题
我不是 payer,能自己建导出吗? 多数情况能。成员账号默认可以给自己建 CUR / Data Export(只含自己账号的用量),除非代理商用 SCP 专门禁掉。先到「账单与成本管理 → 数据导出」试建一下就知道。
建导出时提示没权限怎么办? 说明代理商用 SCP 限制了成员账号自建。走情况 B:让代理商投递到你的桶,或给你缩权 key / 开 S3。
代理商只肯给 S3,行不行? 行,走 B-3(S3 直读)。只要能读到桶里的账单文件,不需要任何 CUR/Export 的 API 权限。
支持哪些账单格式? 当前支持 CUR 2.0 和 FOCUS,Parquet 和 CSV(gzip)都行。建议用 CUR 2.0 或 FOCUS 导出;跨账号投递到你的桶也只对 CUR 2.0 有效。
AWS 中国区(宁夏 / 北京)有什么不同?
机制一样,只是 ARN 的 partition 和 region 要换:把示例里的 aws 换成 aws-cn、us-east-1 换成 cn-northwest-1(CLI 的 --region 同理)。
内容截至 2026 年 8 月。AWS 的 Data Exports / CUR 配置与权限可能随时间调整,请以 AWS 官方文档和你的实际环境为准。