亚马逊云分销商 AWS 充值权限分配教程

亚马逊aws / 2026-04-22 21:50:25

下载.png

别急着点「充值」按钮,先问问自己:谁该有这个按钮的钥匙?

在 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.comconsole.amazonaws.com——它们会静默失败。

亚马逊云分销商 实操验证:三步完成「权限交付」

假设你要把权限给财务小王。别发密码,别共享根账号,按以下流程走:

  1. 在 IAM 中把小王的用户加入一个叫 billing-operators 的组;
  2. 给该组附加一条策略,允许其 sts:AssumeRole 到你刚建的 billing-admin-role
  3. 告诉小王:登录控制台 → 右上角用户名 →「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:DescribeOrganizationbudgets:ViewBudget
  • 坑三:权限生效后,小王误删了主信用卡,导致所有服务中断? —— 解决方案:在付款方式设置里勾选「启用备用付款方式」,并用 CloudTrail + EventBridge 监听 AwsPortalModifyPaymentMethods 事件,触发 Slack 告警;
  • 坑四:外包团队要批量管理 50 个子账户付款? —— 别一个个配角色!用 AWS Organizations 的 Service Control Policies(SCP)统一禁止子账户修改付款方式,只允许主账户角色跨账户 AssumeRole。

最后送一句大实话

AWS 的账单权限设计,本质上是在「便利性」和「银行级风控」之间反复横跳。它不给你一键充值,是因为怕你充错账户;它不让你直接赋权,是因为怕你授出 root 密钥。真正的「充值自由」,从来不是点几下鼠标,而是用角色、策略、审计日志搭起一道看得见、管得住、查得清的防护网。下次再有人问「怎么给 AWS 充值」,请把这篇文章甩给他,并附赠一句:「先去学 IAM,再谈钱的事。」

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系