

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将基础设施即代码 (IaC) 与 GuardDuty 自动安全代理一起使用
<a name="using-iac-with-gdu-automated-agents-runtime-monitoring"></a>

本节的内容仅在以下列表适用于您的应用场景时适用：
+ 您可以使用基础设施即代码 (IaC) 工具（例如 Amazon Cloud Development Kit (Amazon CDK) 和 Terraform）来管理您的 Amazon 资源，以及
+ 您需要为一种或多种资源类型（Amazon EKS、Amazon EC2 或亚马逊）启用 GuardDuty 自动代理配置 ECS-Fargate。

## IaC 资源依赖关系图概述
<a name="runtime-monitoring-dependency-overview"></a>

当您为资源类型启用 GuardDuty 自动代理配置时， GuardDuty会自动创建 VPC 终端节点和与此 VPC 终端节点关联的安全组，并为该资源类型安装安全代理。默认情况下，只有在您禁用 “运行时监控” 后，才 GuardDuty 会删除 VPC 终端节点和关联的安全组。有关更多信息，请参阅 [在运行时监控中禁用、卸载和清理资源](runtime-monitoring-agent-resource-clean-up.md)。

当您使用 IaC 工具时，该工具会维护资源的依赖关系图。使用 IaC 工具删除资源时，将仅会删除可以作为资源依赖关系图的一部分进行跟踪的资源。IaC 工具可能不知道在其指定配置之外创建的资源。例如，您可以使用 IaC 工具创建一个 VPC，然后使用 Amazon 控制台或 API 操作向此 VPC 添加安全组。在资源依赖关系图中，您创建的 VPC 资源依赖关联的安全组。如果您使用该 IaC 工具删除了该 VPC 资源，则会出现错误。解决此错误的方法是手动删除关联的安全组，或者更新 IaC 配置以包含此添加的资源。

## 常见问题 – 在 IaC 中删除资源
<a name="runtime-monitoring-iac-delete-failure"></a>

使用 GuardDuty 自动代理配置时，您可能需要删除使用 IaC 工具创建的资源（Amazon EKS、Amazon EC2 或 Amazon ECS-Fargate）。但是，此资源依赖于 GuardDuty 创建的 VPC 终端节点。这会阻止 IaC 工具自行删除该资源，并且您需要禁用运行时监控，这会进一步该自动删除 VPC 端点。

例如，当您尝试删除代表您 GuardDuty 创建的 VPC 终端节点时，您将收到与以下示例类似的错误。

**Example**  
**使用 CDK 时的错误示例**  

```
The following resource(s) failed to delete: [{{mycdkvpcapplicationpublicsubnet1Subnet1SubnetEXAMPLE1}}, {{mycdkvpcapplicationprivatesubnet1Subnet2SubnetEXAMPLE2}}]. 
Resource handler returned message: "The subnet 'subnet-{{APKAEIVFHP46CEXAMPLE}}' has dependencies and cannot be deleted. (Service: Ec2, Status Code: 400, Request ID: {{e071c3c5-7442-4489-838c-0dfc6EXAMPLE}})" (RequestToken: {{4381cff8-6240-208a-8357-5557b7EXAMPLE}}, HandlerErrorCode: InvalidRequest)
```

**Example**  
**使用 Terraform 时的错误示例**  

```
module.vpc.aws_subnet.private[1]: Still destroying... [id=subnet-{{APKAEIVFHP46CEXAMPLE}}, 19m50s elapsed]
module.vpc.aws_subnet.private[1]: Still destroying... [id=subnet-{{APKAEIVFHP46CEXAMPLE}}, 20m0s elapsed]

Error: deleting EC2 Subnet (subnet-{{APKAEIBAERJR2EXAMPLE}}): DependencyViolation: The subnet 'subnet-{{APKAEIBAERJR2EXAMPLE}}' has dependencies and cannot be deleted.
       status code: 400, request id: {{e071c3c5-7442-4489-838c-0dfc6EXAMPLE}}
```

### 解决方法 – 防止资源删除问题
<a name="runtime-monitoring-iac-delete-fail-solution"></a>

本节可帮助您管理独立于 VPC 终端节点和安全组 GuardDuty。

对于使用 IaC 工具配置的资源，要获得其完全所有权，请按所列顺序执行以下步骤：

1. 创建 VPC。要允许进入权限，请将 GuardDuty VPC 终端节点与安全组关联到此 VPC。

1. 为您的资源类型启用 GuardDuty 自动代理配置

完成上述步骤后， GuardDuty 将不会创建自己的 VPC 终端节点，而是会重复使用您使用 IaC 工具创建的终端节点。

有关创建您自己的 VPC 的信息，请参阅《Amazon VPC 中转网关》中的[仅创建 VPC](https://docs.amazonaws.cn/vpc/latest/userguide/create-vpc.html#create-vpc-only)**。有关创建 VPC 端点的信息，请参阅以下适用于您的资源类型的章节：
+ 对于 Amazon EC2，请参阅[先决条件 – 手动创建 Amazon VPC 端点](creating-vpc-endpoint-ec2-agent-manually.md)。
+ 对于 Amazon EKS，请参阅[先决条件 – 创建 Amazon VPC 端点](eksrunmon-prereq-deploy-security-agent.md)。