跳转至

任务 阅读约 12 分钟

将 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 账户 开头。

显示 AWS 卡片的云类别

请选择两种凭据方式之一。推荐使用跨账户角色:它不需要长期密钥。

选项 1:跨账户 IAM 角色(推荐)

角色 OstorlabReadOnly 信任 Ostorlab 的 AWS 同步角色,并且仅在其出示您组织的外部 ID 时才接受它。

  1. 在 第 1 步 中,点击 跨账户 IAM 角色:下载设置文件。您将获得 CloudFormation 模板 ostorlab-read-only-role.yaml。 要使用的参数 区块显示了模板中已包含的三个值:OstorlabPrincipal、ExternalId 和 RoleName 参数。

    包含可复制参数和下载按钮的设置步骤

  2. 在该账户的 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
    
  3. 堆栈创建完成后,复制其输出 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 连接多个账户

  1. 在管理账户中,于 AWS Organizations 内为 AWS CloudFormation StackSets 启用可信访问。在 CloudFormation 控制台中打开 StackSets 并选择 Enable trusted access,或运行 aws organizations enable-aws-service-access --service-principal member.org.stacksets.cloudformation.amazonaws.com。没有它就无法创建服务托管的堆栈集。
  2. 在管理账户中打开 CloudFormation StackSets,使用相同的模板和服务托管权限创建堆栈集。
  3. 将其部署到要连接的组织单位或账户,只需选择一个区域:IAM 角色是全局的。
  4. 为您复制了角色 ARN 的账户创建一个 Ostorlab 连接器,并在 AWS Organizations 成员账户(可选) 中列出其他账户 ID。 Ostorlab 会为每个成员账户推导出 arn:aws:iam::<account id>:role/OstorlabReadOnly。

选项 2:访问密钥

无法创建跨账户角色时使用此方式。它只读取连接器自己的账户。

  1. 在 第 1 步 中,点击 访问密钥:下载设置文件。您将获得 ostorlab-read-only-user.yaml。
  2. 在该账户中使用它创建堆栈。它会创建 IAM 用户 OstorlabReadOnly,该用户没有控制台访问权限,并带有一个内联策略,仅允许上面列出的操作。
  3. 为该用户创建访问密钥,并保存密钥对以便填写连接器表单:

    aws iam create-access-key --user-name OstorlabReadOnly --no-cli-pager
    
  4. 要轮换密钥,请再次运行第 3 步中的 aws iam create-access-key --user-name OstorlabReadOnly 命令来创建替换密钥(一个 IAM 用户最多只能有两个访问密钥),用新的密钥对更新连接器,然后删除或停用之前的密钥。

Tip

秘密访问密钥会静态加密,并且不会在 Ostorlab 中再次显示。连接器正常工作后,请删除您在本地保存的任何副本。

添加连接器

  1. 在 配置 选项卡的 第 2 步:AWS 连接器 下,点击 添加连接器(或 添加另一个连接器)。

    添加另一个连接器按钮

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

    高亮显示角色 ARN 的添加连接器表单

字段 填写内容
名称 组织内唯一的名称,例如 生产 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。

  1. 打开 Inventory > Assets。
  2. 打开搜索面板,进入 Tags 选项卡,将标签名称设为 cloud、值设为 aws,然后点击 Search。

    将 cloud 标签设为 aws 后筛选的资产清单

  3. 要缩小列表范围,可按连接器添加的其他标签筛选:aws:account(账户 ID)、aws:region、aws:resource(ARN)和 aws:connector(连接器 ID)。

单个 AWS 账户的资产:IP、主机名和云节点

追踪发现路径

打开某个云节点(例如负载均衡器),可查看其目标、标签、所有者和位置。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.” 等待正在运行的同步完成。
缺少您期望的资源 检查连接器的 区域,并确认资源面向互联网(公共地址、面向互联网的负载均衡器、公共托管区域)。

后续步骤