- 集成与 API
- 集成
- 云
- AWS
将 AWS 连接到您的资产清单
AWS 连接器会读取您 AWS 账户中面向互联网的资源,并将其保存在 Ostorlab 资产清单中, 以便您将它们作为攻击面的一部分进行扫描和跟踪。它只需要读取权限。
连接器会收集什么?
对于每个账户,连接器会读取以下资源。私有地址将被跳过。
| 范围 | 资源 |
|---|---|
| 每个区域 | 具有公共地址的 EC2 实例、弹性 IP、面向互联网的 Classic、Application 和 Network 负载均衡器、可公开访问的 RDS 实例 |
| 全局 | Route 53 公共托管区域及其 A、AAAA 和 CNAME 记录(通配符记录将被跳过)、CloudFront 分配及其默认域名和备用域名 |
仅导入上方列出的资源类型;不会收集 S3 存储桶、Lambda 函数、API Gateway、ECS 和 EKS。
每个资源都会成为资产清单中的一个云节点,并关联到其 AWS 账户。资源暴露的公共 IP 地址和主机名 会成为普通的 IP 资产和域名资产,平台的其他功能可以对它们进行扫描。
开始之前我需要什么?
- 包含集成功能的 Ostorlab 套餐。 否则 Ostorlab 会返回“Your organisation does not have the necessary permissions to run this integration.”
- 要连接的 AWS 账户的 12 位 ID。
- 在该账户中创建会创建 IAM 资源的 CloudFormation 堆栈的权限(访问密钥方式则为创建 IAM 用户的权限)。
- 导入资产的 Ostorlab 所有者。 如有需要,请先创建一个。
在 AWS 中设置访问权限
打开 Library > Integrations,选择 云 类别,然后选择 AWS 卡片。配置选项卡以 第 1 步:准备您的 AWS 账户 开头。

请选择两种凭据方式之一。推荐使用跨账户角色:它不需要长期密钥。
选项 1:跨账户 IAM 角色(推荐)
角色 OstorlabReadOnly 信任 Ostorlab 的 AWS 同步角色,并且仅在其出示您组织的外部 ID 时才接受它。
-
在 第 1 步 中,点击 跨账户 IAM 角色:下载设置文件。您将获得 CloudFormation 模板
ostorlab-read-only-role.yaml。 要使用的参数 区块显示了模板中已包含的三个值:OstorlabPrincipal、ExternalId和RoleName参数。
-
在该账户的 CloudFormation 控制台中,从模板创建堆栈。保留默认参数(
OstorlabPrincipal、ExternalId、RoleName),并确认允许 CloudFormation 创建 IAM 资源。 也可以使用 AWS CLI:aws cloudformation create-stack --stack-name ostorlab-read-only \ --template-body file://ostorlab-read-only-role.yaml \ --capabilities CAPABILITY_NAMED_IAM aws cloudformation describe-stacks --stack-name ostorlab-read-only --no-cli-pager \ --query "Stacks[0].Outputs[?OutputKey=='RoleArn'].OutputValue" --output text -
堆栈创建完成后,复制其输出
RoleArn,例如arn:aws:iam::123456789012:role/OstorlabReadOnly。
该角色仅对所有资源授予以下读取操作:
ec2:DescribeRegions
ec2:DescribeInstances
ec2:DescribeAddresses
elasticloadbalancing:DescribeLoadBalancers
route53:ListHostedZones
route53:ListResourceRecordSets
cloudfront:ListDistributions
rds:DescribeDBInstances
使用 AWS Organizations 连接多个账户
- 在管理账户中,于 AWS Organizations 内为 AWS CloudFormation StackSets 启用可信访问。在 CloudFormation 控制台中打开 StackSets 并选择 Enable trusted access,或运行
aws organizations enable-aws-service-access --service-principal member.org.stacksets.cloudformation.amazonaws.com。没有它就无法创建服务托管的堆栈集。 - 在管理账户中打开 CloudFormation StackSets,使用相同的模板和服务托管权限创建堆栈集。
- 将其部署到要连接的组织单位或账户,只需选择一个区域:IAM 角色是全局的。
- 为您复制了角色 ARN 的账户创建一个 Ostorlab 连接器,并在 AWS Organizations 成员账户(可选) 中列出其他账户 ID。
Ostorlab 会为每个成员账户推导出
arn:aws:iam::<account id>:role/OstorlabReadOnly。
选项 2:访问密钥
无法创建跨账户角色时使用此方式。它只读取连接器自己的账户。
- 在 第 1 步 中,点击 访问密钥:下载设置文件。您将获得
ostorlab-read-only-user.yaml。 - 在该账户中使用它创建堆栈。它会创建 IAM 用户
OstorlabReadOnly,该用户没有控制台访问权限,并带有一个内联策略,仅允许上面列出的操作。 -
为该用户创建访问密钥,并保存密钥对以便填写连接器表单:
aws iam create-access-key --user-name OstorlabReadOnly --no-cli-pager -
要轮换密钥,请再次运行第 3 步中的
aws iam create-access-key --user-name OstorlabReadOnly命令来创建替换密钥(一个 IAM 用户最多只能有两个访问密钥),用新的密钥对更新连接器,然后删除或停用之前的密钥。
Tip
秘密访问密钥会静态加密,并且不会在 Ostorlab 中再次显示。连接器正常工作后,请删除您在本地保存的任何副本。
添加连接器
-
在 配置 选项卡的 第 2 步:AWS 连接器 下,点击 添加连接器(或 添加另一个连接器)。

-
填写表单,然后点击 创建。

| 字段 | 填写内容 |
|---|---|
| 名称 | 组织内唯一的名称,例如 生产 AWS。 |
| AWS 账户 ID | 持有角色或密钥的 12 位账户。 |
| 区域 | 要读取的区域,使用 AWS 区域代码,例如 eu-west-1。留空则读取所有已启用的区域。 |
| 凭据类型 | 跨账户 IAM 角色 或 访问密钥。 |
| 角色 ARN | 仅角色方式。OstorlabReadOnly 角色的 ARN。它必须属于上方的 AWS 账户 ID。 |
| AWS Organizations 成员账户(可选) | 仅角色方式。每行一个 12 位账户 ID。每个账户中都必须存在 OstorlabReadOnly 角色。 |
| 访问密钥 ID 和 秘密访问密钥 | 仅访问密钥方式。 |
| 所有者 | 必填。导入的资产将归属于此所有者。 |
| 位置 | 导入资产的可选位置。 |
| 启用 | 计划同步会跳过已停用的连接器。 |
访问密钥与成员账户不能同时使用:访问密钥只读取连接器自己的账户。
测试连接
在连接器所在行点击 测试连接。测试只会从您的账户读取数据,不会导入任何内容。

将依次运行四项检查,某个账户的检查在第一项失败时停止:
| 检查 | 验证内容 |
|---|---|
| 凭据 | Ostorlab 已获取该账户的凭据。对于访问密钥,还会确认密钥属于连接器的账户。 |
| 权限 | 角色或用户可以调用 route53:ListHostedZones。 |
| 范围 | 将要读取的区域。如果没有已启用的区域,则检查失败。 |
| 示例资源 | Ostorlab 读取第一个区域的弹性 IP。账户没有弹性 IP 时,检查也会通过。 |
对于带有成员账户的连接器,每个账户都有各自的检查,每条消息都以账户 ID 开头。

同步连接器
每个已启用的连接器每十二小时自动同步一次。要立即导入,请在连接器所在行点击 立即同步。

提示消息会确认作业(同步已开始(作业 ...))。如果连接器已停用,或同一连接器的同步已在运行,则同步会被拒绝。

查看同步运行记录和错误
点击 最近的同步 查看连接器的运行记录。

| 列 | 含义 |
|---|---|
| 状态 | 运行中、成功、部分成功(部分范围失败,其余已导入)或 失败(同步未能完成,例如没有凭据被接受)。 |
| 资源 | 本次运行中发现的资源。 |
| 已创建、已更新 | 新增和变更的资产与节点。已创建数量除节点外,还包括 IP 资产和主机名资产。 |
| 已过期 | 因本次运行中未发现而被连接器标记为 cloud:stale 的资源。 |
| 错误 | 范围错误的数量。点击可列出这些错误。 |
某个区域或服务失败不会阻止其他范围:它会被报告为一个错误,运行以 部分成功 结束。
每个错误都以 <账户 ID>/<区域> / <服务> 的形式标明范围,例如 123456789012/eu-central-1 / rds,后面是来自 AWS 的消息。

Note
从 AWS 中消失的资源,只有在没有任何范围错误的运行之后才会被标记为 cloud:stale。它们永远不会从资产清单中删除。当之后的同步再次发现该资源时,此标签会被移除。
保持 运行中 超过两小时的运行会被视为已停止:它不再阻止新的同步,并会在下一次计划同步时被标记为 失败。
在资产清单中查看资产
导入的资产归属于您选择的所有者和位置。每个资产都带有标签 cloud:aws。
- 打开 Inventory > Assets。
-
打开搜索面板,进入 Tags 选项卡,将标签名称设为
cloud、值设为aws,然后点击 Search。
-
要缩小列表范围,可按连接器添加的其他标签筛选:
aws:account(账户 ID)、aws:region、aws:resource(ARN)和aws:connector(连接器 ID)。

追踪发现路径
打开某个云节点(例如负载均衡器),可查看其目标、标签、所有者和位置。Discovery Path 卡片显示该节点的来源:AWS 账户,然后是其父资源。 节点的公共地址和主机名在各自的发现路径中会列出该节点,因此您始终可以知道是哪个账户的哪个资源暴露了它们。

编辑、暂停或删除连接器
-
编辑 可更改名称、区域、凭据类型、所有者、位置和 启用 开关。已保存的密钥留空表示保留,输入新值则表示替换。要替换秘密访问密钥,请将新的完整访问密钥 ID 与新密钥一并输入:ID 与密钥是成对的。 切换凭据类型会清除前一种类型的字段。

-
关闭 启用 可在保留连接器的同时暂停计划同步。
- 删除 会移除连接器:已导入的资产保留在资产清单中,之后的同步将停止。
- 若还要移除 Ostorlab 在 AWS 中的访问权限,请删除 CloudFormation 堆栈(它会移除
OstorlabReadOnly角色或用户);对于访问密钥方式,还要删除访问密钥。
故障排除
| 现象 | 检查内容 |
|---|---|
| “AWS connections are not available right now. Try again later.” | 这是 Ostorlab 一侧的问题,而不是您的账户问题。请稍后重试,如果持续出现,请联系支持团队。 |
权限 检查因 AccessDenied 失败 |
堆栈被修改或删除,或角色的信任关系被编辑。请保留默认参数:该角色只信任 Ostorlab 的主体以及您的外部 ID。 |
| “The access keys belong to AWS account ... not to the connector's account” | 密钥是在与连接器的 AWS 账户 ID 不同的账户中创建的。 |
SignatureDoesNotMatch 或 InvalidClientTokenId |
访问密钥 ID 或秘密密钥错误。请重新输入两者。 |
| 表单错误:“该角色必须属于上方的 AWS 账户 ID。” | 角色 ARN 中的账户 ID 与连接器的 AWS 账户 ID 不一致。 |
同步为 部分成功,某个服务出现 AccessDenied |
角色或用户缺少该服务所需的上述读取操作之一。请重新部署已下载的模板。 |
| “The cloud connector is disabled.” | 在连接器的编辑表单中打开 启用。 |
| “A sync of this cloud connector is already running.” | 等待正在运行的同步完成。 |
| 缺少您期望的资源 | 检查连接器的 区域,并确认资源面向互联网(公共地址、面向互联网的负载均衡器、公共托管区域)。 |