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

如何管理AWS账号A中Shell脚本访问账号B的AWS CLI凭证?

解决方案:用跨账号IAM角色实现无凭证的跨账号操作

1. 账号B的前置配置

在账号B中创建专门用于跨账号操作的IAM角色(例如CrossAccountCreateIAMRoleRole),配置两项核心规则:

  • 信任策略:允许账号A的EC2实例关联IAM角色(例如AccountA-EC2-Instance-Role)扮演此角色,示例策略:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::账号A-ID:role/AccountA-EC2-Instance-Role"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    
  • 权限策略:给该角色授予创建IAM角色的必要权限,示例策略:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:CreateRole",
            "iam:AttachRolePolicy"
            // 按需添加其他操作权限
          ],
          "Resource": "*"
        }
      ]
    }
    

2. 账号A的EC2实例角色配置

给账号A中EC2实例关联的IAM角色(AccountA-EC2-Instance-Role)添加允许扮演账号B角色的权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::账号B-ID:role/CrossAccountCreateIAMRoleRole"
    }
  ]
}

3. Shell脚本的安全实现

脚本通过临时获取跨账号角色凭证执行操作,全程不存储明文凭证,执行后立即清理痕迹:

#!/bin/bash

# 定义账号B的目标角色ARN
TARGET_ROLE_ARN="arn:aws:iam::账号B-ID:role/CrossAccountCreateIAMRoleRole"

# 获取临时凭证,结果存入变量避免输出到日志
ASSUME_ROLE_OUTPUT=$(aws sts assume-role --role-arn "$TARGET_ROLE_ARN" --role-session-name "CreateIAMRoleSession" --output json 2>/dev/null)

# 提取临时凭证并设置为环境变量
export AWS_ACCESS_KEY_ID=$(echo "$ASSUME_ROLE_OUTPUT" | jq -r '.Credentials.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo "$ASSUME_ROLE_OUTPUT" | jq -r '.Credentials.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo "$ASSUME_ROLE_OUTPUT" | jq -r '.Credentials.SessionToken')

# 执行创建IAM角色的操作(示例)
aws iam create-role --role-name "NewRoleFromAccountA" --assume-role-policy-document file://trust-policy.json --region us-east-1

# 立即清理凭证相关变量,彻底消除痕迹
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
unset ASSUME_ROLE_OUTPUT

核心安全保障

  • 所有凭证仅存于内存环境变量,执行后立即unset,不会写入磁盘
  • 用2>/dev/null和变量存储凭证获取结果,避免凭证泄露到日志或终端输出
  • 临时凭证默认有效期1小时(可通过--duration-seconds调整),即使意外泄露也有时间限制
  • 无需硬编码任何凭证,完全依赖IAM角色信任关系,符合AWS安全最佳实践

额外注意事项

  • 遵循最小权限原则:账号A的EC2角色仅授予必要的sts:AssumeRole权限,账号B的跨账号角色仅授予创建IAM角色的必要权限
  • CloudFormation的userdata执行为非交互式,终端用户无法查看脚本执行过程中的环境变量(进程环境变量仅对自身和子进程可见,脚本执行完毕即销毁)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:55:31