亚马逊云分销商 AWS 充值权限分配教程
别急着点「充值」按钮,先问问自己:谁该有这个按钮的钥匙?
在 AWS 控制台里,你可能已经点过无数次「Billing & Cost Management」→「Recharge」(注意:AWS 官方其实没有叫「充值」的按钮——这是很多国内用户被支付宝/微信惯坏后的幻觉)。事实上,AWS 不支持传统意义上的「预存余额充值」,它采用的是后付费+账单结算模式。但为什么还有人天天问「AWS 怎么充值」?因为——他们真正想问的是:如何让财务同事、外包团队、甚至自动化脚本,能合法、可控、不留后患地为某个 AWS 账户添加付款方式、更新信用卡、或启用/停用自动续费?
先破个幻:AWS 没有「充值账户」,只有「付款方式管理权」
这是全文最重要的认知锚点。AWS Billing 的核心权限不叫 billing:Recharge(这玩意儿压根不存在),而是围绕 aws-portal: 前缀的一组 IAM 权限,比如:
aws-portal:ViewBilling—— 看账单(连这个都要授权!)aws-portal:ModifyPaymentMethods—— 新增/删改信用卡、PayPal、银行转账信息aws-portal:ModifyPayerProfile—— 修改公司名称、地址、税号等主账户资料aws-portal:ModifySubscriptions—— 开关 Reserved Instance 或 Savings Plan 的自动续订
这些权限全归在 AWS 账户根用户级别,且无法通过常规 IAM 用户策略直接授予——除非你用对了姿势。
为什么普通 IAM 用户默认啥都干不了?
因为 AWS Billing 权限属于「控制台专属服务」(Console-only service),它不走标准的 REST API 调用路径,也不响应 aws billing get-customer-info 这种 CLI 命令。它的背后是 AWS Portal 后端,而 Portal 的权限验证逻辑独立于 IAM 的常规策略引擎。换句话说:你给一个用户加了 "Effect": "Allow", "Action": "aws-portal:*", "Resource": "*",他依然可能看到「Access Denied」——除非你还干了下面这件事。
关键一步:把 IAM 角色「塞进」AWS Portal 的信任白名单
正确姿势是:创建 IAM 角色 → 配置 Portal 专用信任策略 → 绑定精细化权限策略 → 让目标用户「切换角色」访问账单页面。别想着「直接给用户赋权」,那是条死路。
Step 1:建一个叫 billing-admin-role 的角色(名字随便,但建议带业务前缀)
在 IAM 控制台点击「角色」→「创建角色」→ 选择「AWS 账户」→ 输入你的根账户 ID(不是别名!)→ 下一步。重点来了:在「附加权限策略」环节,不要选现成的 AdministratorAccess! 那等于交出整个云的命门。你应该手动创建一个内联策略(Inline Policy),内容如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"aws-portal:ViewBilling",
"aws-portal:ModifyPaymentMethods",
"aws-portal:ModifyPayerProfile",
"aws-portal:ModifySubscriptions"
],
"Resource": "*"
}
]
}
这个策略只放行账单相关操作,且明确排除了 aws-portal:ModifyAccount(改邮箱/密码)和 aws-portal:DeleteAccount(删账号——真有这权限?AWS 说没有,但你得防着文档滞后)。
Step 2:编辑角色的信任策略(Trust Policy)——这才是灵魂
默认信任策略只允许根账户调用该角色。但 Portal 不是「调用」角色,它是「以角色身份加载页面」。所以你需要显式告诉 AWS Portal:「我允许你代表这个角色打开账单页」。把信任策略改成:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "portal.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
注意:portal.amazonaws.com 是 AWS 官方文档认证的 Portal 服务主体(截至 2024 年仍有效),别写成 billing.amazonaws.com 或 console.amazonaws.com——它们会静默失败。
亚马逊云分销商 实操验证:三步完成「权限交付」
假设你要把权限给财务小王。别发密码,别共享根账号,按以下流程走:
- 在 IAM 中把小王的用户加入一个叫
billing-operators的组; - 给该组附加一条策略,允许其
sts:AssumeRole到你刚建的billing-admin-role; - 告诉小王:登录控制台 → 右上角用户名 →「Switch Role」→ 输入角色名和账户ID → 点击「Switch Role」→ 自动跳转至 Billing 控制台。
此时他看到的界面,和你用根账号登录一模一样,但所有操作日志都会记录为「由角色 billing-admin-role 执行」,且他的原始用户身份完全隔离——完美满足审计要求。
进阶技巧:限制只能改某张卡,不能删全部
目前 AWS 不支持按「具体付款方式 ID」做细粒度控制(比如只允许修改 Visa 卡末四位为 1234 的那张)。但你可以用「策略条件」打补丁:比如限定仅允许在工作日 9:00–18:00 修改付款方式,或要求 MFA 必须激活:
"Condition": {
"Bool": {"aws:MultiFactorAuthPresent": "true"},
"StringEqualsIfExists": {"aws:DayOfWeek": ["Mon","Tue","Wed","Thu","Fri"]}
}
虽不能锁死某张卡,但至少能把高危操作关进时间+认证的双重牢笼。
血泪避坑指南(来自真实翻车现场)
- 坑一:给用户加了
aws-portal:*还是 403? —— 忘了改信任策略,Portal 根本没资格代入角色; - 坑二:小王切换角色后,看不到任何账单数据? —— 检查是否开了「组织级账单视图」(Organizations),若启用了,则需额外授权
organizations:DescribeOrganization和budgets:ViewBudget; - 坑三:权限生效后,小王误删了主信用卡,导致所有服务中断? —— 解决方案:在付款方式设置里勾选「启用备用付款方式」,并用 CloudTrail + EventBridge 监听
AwsPortalModifyPaymentMethods事件,触发 Slack 告警; - 坑四:外包团队要批量管理 50 个子账户付款? —— 别一个个配角色!用 AWS Organizations 的 Service Control Policies(SCP)统一禁止子账户修改付款方式,只允许主账户角色跨账户 AssumeRole。
最后送一句大实话
AWS 的账单权限设计,本质上是在「便利性」和「银行级风控」之间反复横跳。它不给你一键充值,是因为怕你充错账户;它不让你直接赋权,是因为怕你授出 root 密钥。真正的「充值自由」,从来不是点几下鼠标,而是用角色、策略、审计日志搭起一道看得见、管得住、查得清的防护网。下次再有人问「怎么给 AWS 充值」,请把这篇文章甩给他,并附赠一句:「先去学 IAM,再谈钱的事。」

