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

如何自动跨所有AWS账户执行查询 规避密钥明文存储风险

AWS跨组织多账户安全认证与审计脚本方案

安全凭证实现方案(替代本地存储密钥)

AWS有和Azure类似的凭证安全托管能力,完全不需要在本地持久化存储永久密钥,常用实现方式如下:

  • 优先用AWS IAM Identity Center(原SSO):逻辑和Azure托管凭证/服务主体一致,首次登录仅需浏览器验证,临时凭证自动托管在AWS CLI缓存中,有效期可配置最长12小时,到期自动刷新,无明文存储密钥风险。
  • 也可使用组织级IAM角色委托:在管理账户创建审计专用角色,绑定允许所有组织成员账户授信的策略,成员账户统一预置同名审计角色,仅信任管理账户的审计角色代入,脚本运行时自动通过AWS默认凭证链(环境变量/EC2实例角色/SSO缓存)获取凭证,不需要手动存储密钥。
  • 若脚本在AWS环境(EC2/CodeBuild/Lambda)中运行,直接给运行资源绑定IAM角色即可,完全不需要手动配置任何凭证,凭证由AWS后端自动轮转。

跨账户审计脚本基础结构(Python示例,基于Boto3 + IAM Identity Center)

前置操作:先在本地执行aws configure sso完成SSO初始配置,示例中使用的SSO会话名称为org-audit-sso。

import boto3
from botocore.exceptions import ClientError

# 1. 从SSO缓存自动获取管理账户凭证,无需手动输入密钥
org_client = boto3.client('organizations', region_name='us-east-1')

# 2. 拉取组织下所有活跃账户
accounts = []
paginator = org_client.get_paginator('list_accounts')
for page in paginator.paginate():
    for account in page['Accounts']:
        if account['Status'] == 'ACTIVE':
            accounts.append(account)

# 3. 跨账户执行审计逻辑的通用函数
def run_audit_for_account(account_id, role_name='OrganizationAuditRole'):
    # 代入目标账户的审计角色,获取临时凭证
    sts_client = boto3.client('sts')
    try:
        resp = sts_client.assume_role(
            RoleArn=f'arn:aws:iam::{account_id}:role/{role_name}',
            RoleSessionName=f'audit-session-{account_id}',
            DurationSeconds=3600
        )
        credentials = resp['Credentials']
    except ClientError as e:
        print(f"账户{account_id}角色代入失败: {e.response['Error']['Message']}")
        return

    # 用临时凭证创建目标账户的服务客户端
    audit_client = boto3.client(
        'config',  # 可替换为需要的服务,比如guardduty、cloudtrail等
        aws_access_key_id=credentials['AccessKeyId'],
        aws_secret_access_key=credentials['SecretAccessKey'],
        aws_session_token=credentials['SessionToken'],
        region_name='us-east-1'
    )

    # 此处编写审计逻辑,比如检查配置规则合规性
    # rules = audit_client.describe_config_rules()
    # 结果处理逻辑

if __name__ == '__main__':
    for account in accounts:
        print(f"正在审计账户: {account['Name']}({account['Id']})")
        run_audit_for_account(account['Id'])

注意事项

  • 成员账户的审计角色可以通过AWS Organizations的StackSet批量部署,不需要逐个账户手动创建,权限仅开放审计需要的只读权限,遵循最小权限原则。
  • 脚本全程不存储任何永久凭证,所有凭证都是临时生成,最长有效期不超过12小时,用完即销毁,安全能力和Azure同类方案对齐。
  • 所有审计操作都会被CloudTrail记录,可追溯,符合安全合规要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:54:06