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

如何在AWS Vault父配置文件子shell中切换子账户角色?

在AWS Vault父Shell中切换子角色的简便方法

问题场景

你通过AWS Vault管理多账户权限,仅parent配置关联的账户有IAM用户(密钥存储在AWS Vault),child1、child2等子配置通过source_profile关联parent实现角色切换。当前每次操作子账户都要单独启动aws-vault exec childX子shell,操作繁琐;但尝试在parent的子shell中用aws s3 ls --profile child1时,会报错:

The source profile "parent" must have credentials.

错误原因

AWS Vault启动parent子shell时,是将临时凭证注入环境变量,而非写入~/.aws/credentials文件。默认情况下,AWS CLI读取子配置(如child1)时,会从credentials文件中查找source_profile的凭证,无法识别环境变量中的临时凭证,因此报错。

解决方案

方法1:修改AWS配置,让子Profile读取环境变量凭证

在每个子profile的配置中添加credential_source = Environment,这样CLI会优先从环境变量中获取parent的临时凭证,无需依赖credentials文件。同时注意修正配置中的拼写错误:role_arm应为role_arn。

修改后的~/.aws/config示例:

[default]
region = eu-west-2
output = json

[profile parent]
mfa_serial = arn:aws:iam::111111111111:mfa/my-device

[profile child1]
source_profile = parent
include_profile = parent
role_arn = arn:aws:iam::222222222222:role/child1_role
credential_source = Environment

[profile child2]
source_profile = parent
include_profile = parent
role_arn = arn:aws:iam::333333333333:role/child2_role
credential_source = Environment

修改后,启动parent子shell即可直接用--profile切换子角色:

aws-vault exec parent
aws s3 ls --profile child1 > ~/bucket-list/child1.json
aws s3 ls --profile child2 > ~/bucket-list/child2.json

方法2:无需进入子shell,直接批量执行命令

如果需要频繁批量操作多个子账户,可以不用单独进入子shell,直接通过aws-vault exec传递命令:

# 单个子账户命令
aws-vault exec child1 -- aws s3 ls > ~/bucket-list/child1.json

# 批量处理脚本示例(适合12个账户的场景)
#!/bin/bash
PROFILES=("child1" "child2" "child3" "child4") # 替换为你的所有子profile
for PROFILE in "${PROFILES[@]}"; do
    aws-vault exec "$PROFILE" -- aws s3 ls > ~/bucket-list/"$PROFILE".json
done

将上述脚本保存为batch-s3-ls.sh,赋予执行权限后一键运行即可完成所有账户的存储桶列表导出。

方法3:简化STS AssumeRole操作(备选)

如果不想修改配置,可以用AWS CLI的assume-role命令结合环境变量自动注入,比如:

# 在parent子shell中执行,获取child1角色凭证
CREDS=$(aws sts assume-role --role-arn arn:aws:iam::222222222222:role/child1_role --role-session-name child1-session)

# 导出临时凭证到环境变量
export AWS_ACCESS_KEY_ID=$(echo "$CREDS" | jq -r '.Credentials.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo "$CREDS" | jq -r '.Credentials.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo "$CREDS" | jq -r '.Credentials.SessionToken')

# 此时直接执行命令即可使用child1角色
aws s3 ls > ~/bucket-list/child1.json

这种方法需要安装jq解析JSON,适合临时场景,但批量操作不如前两种方法高效。


内容的提问来源于Stack Exchange,提问作者David Gard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:42:51