如何通过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
相关产品推荐
相关产品推荐

