如何让实验室账户的AWS Inspector跨多账户拉取信息并实现集中评估?
嘿,我来帮你搞定AWS Inspector跨账户集中评估的事儿!你之前的代码没起作用,是因为搞反了角色方向和操作逻辑,咱们一步步捋清楚:
实现AWS Inspector跨账户集中评估的正确步骤
核心逻辑是:让实验室账户(管理账户)的Amazon Inspector能够合法访问其他成员账户的Inspector数据,这需要通过IAM角色建立双向信任,再配置跨账户访问。
1. 先在每个成员账户创建跨账户信任角色
这一步是让成员账户主动授权实验室账户的Inspector服务访问它的资源:
- 登录成员账户的IAM控制台,新建一个角色:
- 信任实体类型选「AWS账户」,输入你的实验室账户ID
- 信任策略里还要允许Inspector服务主体(
inspector.amazonaws.com)扮演这个角色,最终的信任策略JSON如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_LAB_ACCOUNT_ID:root", "Service": "inspector.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - 给这个角色附加权限策略,直接用
AmazonInspectorFullAccess托管策略就够(如果需要更精细权限可以自定义) - 记好这个角色的ARN:
arn:aws:iam::MEMBER_ACCOUNT_ID:role/YourCrossAccountInspectorRole
2. 在实验室账户配置跨账户访问
现在回到实验室账户,有两种方式实现:
方式一:用Boto3代码(修正版)
你之前的代码错误在于用成员账户的会话去操作,而且角色ARN填反了。正确的做法是用实验室账户的会话,先扮演成员账户的角色,再调用其Inspector API:
import boto3 # 1. 初始化实验室账户的会话 lab_session = boto3.Session(profile_name='your_lab_account_profile') # 2. 通过STS服务扮演成员账户的跨账户角色 sts_client = lab_session.client('sts') assumed_role_creds = sts_client.assume_role( RoleArn='arn:aws:iam::MEMBER_ACCOUNT_ID:role/YourCrossAccountInspectorRole', RoleSessionName='Inspector_Cross_Account_Session' )['Credentials'] # 3. 使用临时凭证创建成员账户的Inspector客户端 member_inspector = boto3.client( 'inspector', aws_access_key_id=assumed_role_creds['AccessKeyId'], aws_secret_access_key=assumed_role_creds['SecretAccessKey'], aws_session_token=assumed_role_creds['SessionToken'] ) # 4. 现在就能拉取成员账户的Inspector数据了,比如列出所有发现 findings = member_inspector.list_findings() print(findings)
方式二:用AWS控制台(更省心)
如果不想写代码,直接在实验室账户的Inspector控制台操作:
- 进入Amazon Inspector控制台,找到「跨账户管理」(不同区域可能叫「组织与账户」)
- 点击「添加账户」,输入成员账户ID和之前创建的角色ARN
- 保存后,实验室账户就能直接在控制台查看所有成员账户的评估结果、漏洞数据了
3. 几个关键注意点
- 角色的信任策略必须同时包含实验室账户ID和
inspector.amazonaws.com服务主体,缺一不可 - 权限策略要足够覆盖Inspector读取数据的需求,
AmazonInspectorFullAccess是最稳妥的选择 - 如果你的账户属于AWS组织,直接启用组织内的Inspector自动管理,不需要手动创建角色,效率更高
内容的提问来源于stack exchange,提问作者gotit
相关产品推荐
相关产品推荐

