You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell利用AWS SSO自动遍历50+ AWS账号拉取成本数据

解决AWS SSO PowerShell批量访问20+账号的问题

核心问题拆解

你遇到的两个问题:临时凭证无法满足自动化、Initialize-AWSSSOConfiguration仅显示20个账号,都可以通过非交互式的SSO凭证获取流程解决,无需依赖交互式配置命令。


解决方案步骤

1. 绕过交互式配置,获取全量账号列表

Initialize-AWSSSOConfiguration是交互式引导工具,默认仅返回20个账号(AWS SSO API分页默认值)。改用Get-AWSSSOAccountList并处理分页逻辑,即可获取所有账号。

2. 自动化获取SSO临时凭证并复用

通过SSO令牌批量获取每个账号的角色凭证,替代手动从控制台复制临时密钥。凭证有效期可在SSO角色设置中调整(最长12小时),满足自动化需求。


完整PowerShell代码示例

# 配置基础参数
$ssoStartUrl = "https://你的SSO门户地址.awsapps.com/start"
$ssoRegion = "你的SSO部署区域(如us-east-1)"
$targetRoleName = "你有权限的SSO角色名称"

# 1. 获取SSO访问令牌(首次运行会弹出浏览器认证,后续可从缓存读取)
$ssoToken = New-AWSSSOAccessToken -StartUrl $ssoStartUrl -Region $ssoRegion

# 2. 分页获取所有AWS账号(突破20个限制)
$allAccounts = @()
$nextToken = $null
do {
    $accountPage = Get-AWSSSOAccountList -AccessToken $ssoToken.AccessToken -Region $ssoRegion -NextToken $nextToken
    $allAccounts += $accountPage.AccountList
    $nextToken = $accountPage.NextToken
} while ($nextToken)

# 3. 遍历每个账号,拉取成本数据
foreach ($account in $allAccounts) {
    Write-Host "正在处理账号: $($account.AccountId) - $($account.AccountName)"

    # 获取当前账号下的SSO角色
    $roleList = Get-AWSSSORoleList -AccessToken $ssoToken.AccessToken -AccountId $account.AccountId -Region $ssoRegion
    $targetRole = $roleList.RoleList | Where-Object { $_.RoleName -eq $targetRoleName }

    if ($targetRole) {
        # 获取角色临时凭证
        $roleCreds = Get-AWSSSORoleCredential -AccessToken $ssoToken.AccessToken -AccountId $account.AccountId -RoleName $targetRole.RoleName -Region $ssoRegion

        # 设置当前会话的AWS凭证
        Set-AWSCredentials -AccessKey $roleCreds.AccessKeyId -SecretKey $roleCreds.SecretAccessKey -SessionToken $roleCreds.SessionToken

        # --------------------------
        # 这里替换为你的成本数据拉取逻辑
        # 示例:获取成本使用报告定义
        # $costReports = Get-CostUsageReportDefinition -Region $ssoRegion
        # 示例:调用Cost Explorer获取月度成本
        # $costData = Get-CostAndUsage -TimePeriod @{Start = "2024-01-01"; End = "2024-01-31"} -Granularity MONTHLY -Metrics "BlendedCost"
        # --------------------------

        Write-Host "账号 $($account.AccountId) 成本数据拉取完成`n"
    }
    else {
        Write-Warning "账号 $($account.AccountId) 未找到角色 $targetRoleName,跳过`n"
    }
}

关键注意事项

  • 确保已安装最新版AWS Tools for PowerShell,旧版本可能缺失部分SSO cmdlet
  • 自动化场景下,可提前用AWS CLI执行aws sso login --sso-session my-sso-session完成认证,PowerShell会自动读取缓存的令牌,无需每次弹出浏览器
  • 临时凭证有效期可在AWS SSO控制台的角色设置中调整(最长12小时),若需更长周期的自动化,可定时运行脚本刷新令牌

内容的提问来源于stack exchange,提问作者Krishnp92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:24:50