NetDevSecOps 将 亚马逊云科技 网络部署现代化

NetDevOps 协调和自动执行网络变更以缩短网络交付生命周期,将网络视为允许版本控制的代码,并测试更改以确保质量和稳定性。这种提高的速度有助于组织更好地为客户提供服务,并在市场上更有效地竞争。《 NetDevOps:亚马逊云科技 网络部署的现代方法》一 文 总结了其原理和组成部分。在这篇文章中,我们将详细介绍如何实施 NetDevOps 来构建和维护现代网络架构。我们采用 DevSecOps 最佳实践,将安全性集成到 DevOps 中。借助 NetDevSecOps,您可以提供安全且合规的网络基础架构。

注意事项

每个组织都是独一无二的,没有一种正确的方法来实施 NetDevOps。以下部分列出了您在做出决策时必须记住的一些注意事项。这些注意事项将帮助您定义一个框架,以便放心地发布更改,或者在不造成中断的情况下进行回滚。

1/ 基础设施即 代码 (IaC) 选项 — 亚马逊云科技 提供多个 I aC 选项 ,包括 亚马逊云科技 CloudFormation、 亚马逊云科技 云开发套件 ( 亚马逊云科技 CDK ) 和 Terraf orm。 在决定 IaC 的方法时,请问以下问题:

我是否正在开发一个 简单的、基本上是无服务器的解决方案 ,其依赖关系或依赖项最少?

CloudFormation(特别是 亚马逊云科技 无服务器应用程序模型 (亚马逊云科技 SAM))可能已经足够了

我的团队有很 强的编程背景 吗?他们想使用代码构建基础设施吗?

亚马逊云科技 CDK 或 Terraform

我想 完全留在 亚马逊云科技 生态系统中吗?

CloudFormation 或 亚马逊云科技 CDK

我需要编排 亚马逊云科技 生态系统 之外的资源吗?

Terraform 或 亚马逊云科技 CDK for Terraform (CDKTF)

我想要一个与 云无关的实用程序 ,尤其是用于多/混合云知识转移的实用程序吗?

Terraform

2/ 部署策略 — 定义您想要如何部署网络堆栈。组织 根据其业务模式遵循不同的 部署策略 。有些人可能会选择将经过全面测试的网络堆栈作为服务目录产品提供。其他人可能会使用 控制塔 定制 (CfCT) 作为控制塔账户配置过程的一部分来实现它们。您也可以通过持续集成/持续开发 (CI/CD) 管道部署网络堆栈。 CI/CD 管道可以基于 亚马逊云科技 代码管 道 、A WS CDK 管道或自定义管道 ,例如 Jenkins 、 Gitlab 等。

3/ 定义单元测试 — 当组织使用管道配置应用程序和基础设施时,基础架构测试在缓解与任何配置错误相关的问题方面起着关键作用。基础架构团队了解该组织的政策。因此,将单元测试作为配置管道的一部分编写和集成至关重要。根据您选择的 iaC 选项,您将创建单元测试策略工具和单元测试。 CFN-Guard 和 Cl oudformation 挂钩 可以用于 CloudFormation、 开放策略代理 (OPA) 检查,也可以为 Terraform 编写 Hash icorp 哨兵。 使用 亚马逊云科技 CDK,您的基础设施可以像您编写的任何其他代码一样可测试。要在使用 亚马逊云科技 CDK 时进行测试,请遵循 测试结构文档。 单元测试失败后,管道部署将失败。

4/ 安全与合规工具集成 — NetSecOps 通过在整个 CI/CD 流程中集成安全评估,为 NetDevOps 实践引入安全性。它使参与构建组织网络堆栈的所有网络团队成员共同承担安全责任。网络开发团队在编写任何代码之前会与安全团队合作。同样,网络运营团队在部署网络基础设施后会继续监控其是否存在安全问题。因此,您可以在确保合规性的同时保护您的网络。根据您选择的 iaC 选项,您可以将 CI/CD 管道与安全工具集成。 例如,适用于 Cloud Formation 的 cfn_nag cfn_lint 、cfn_ g uard 和 亚马逊云科技 CDK 的 cdk_n ag 工具。 如果你使用的是 Terraform,那么 tfsec 和 terrascan 工具可以作为管道的一部分包括在内。还有一些与云无关的安全工具,例如 Checkov Cloud tustodian ,可以与管道集成以管理合规性和安全要求。

5/ 定义阶段 — 您必须将网络的 CI/CD 定义为管道,其中新的网络配置或所需的更改作为代码在一端提交,经过构建、测试、暂存和验证等一系列阶段,然后才能部署到生产环境中。每个阶段都像看门人一样,评估代码的特定部分。随着代码在网络管道中的进展,我们假设代码在后期阶段的质量更高,因为它已经被验证了更多的次数。早期发现的问题使代码无法通过管道进行。网络运营团队会立即收到测试结果,如果软件未通过测试阶段,他们将停止所有进一步的构建和发布。

6/ 多账户支持 — 在采用 亚马逊云科技 时,您必须确定如何满足您的业务、治理、安全和运营要求。使用 多个 亚马逊云科技 账户 在您如何满足这些要求方面起 着重要作用。我们建议您在部署 OU 内的账户中创建 部署 管道 ,该账户有权跨其他 OU 和账户部署网络资源。该账户包含支持您如何构建、验证、推广和发布网络变更的资源。

7/ 多区域支持 — 作为组织 业务连续性计划 (BCP) 的一部分,考虑使用 灾难恢复选项 来缓解影响整个 亚马逊云科技 地区的自然和技术灾害。 因此,该组织应考虑使用多区域网络来防范这些灾难。

8/ 监控网络 CI/CD 管道 — 您必须集成监控功能,在出现故障或特定事件时通知网络运营团队。 已为管道设置了@@ 亚马逊 CloudWatch 指标 CloudWatch 日志 亚马逊 EventBridge 通知监控。如果在资源配置过程中检测到安全和合规问题,则可以将这些发现发送到 亚马逊云科技 Security Hub 。网络安全运营 (NetSecOps) 团队可以根据安全中心的调查结果采取行动。

一个实际的例子

让我们考虑一个多账户、多区域的场景,在该场景中,企业希望将所有入口流量集中到 亚马逊云科技。作为合规性要求( NIST 800-53 Rev 5 PCI DSS 版本 3.2.1 )的一部分,您必须对网络访问控制实施限制—— “ 检测互联网网关 (IGW) 的路由表中是否存在公共路由 ”。 我们可以将 亚马逊云科技 Transit Gateway 用于这种带有架构的场景,如图 1 所示。

A multi-account hub and spoke design leveraging Transit Gateway

图 1:利用 Transit Gateway 的多账户中心和分支设计

为了实现这个用例,我们在定义我们的 NetDevSecOps 流水线时会考虑前面强调的注意事项,如图 2 所示。结果是:

  • 注意事项 1 (IaC) — 我们使用 亚马逊云科技 CDK 构建了基础设施,它是作为部署阶段的一部分进行综合和部署的。
  • 注意事项 2(部署策略) — 在幕后,亚马逊云科技 CDK 管道结构使用 亚马逊云科技 C odePipeline 和 A W S Cod eBuild,后者用作持续交付策略的一部分 。 在这里,我们测试我们的基础架构代码,并在流程的不同阶段将其部署到我们的测试和生产环境中。
  • 注意事项 3(单元测试) — 我们编写了一个 pytest 来验证 亚马逊云科技 CDK Synthesized 模板的资源属性 “ 亚马逊云科技:: CodePipeline:: Pipeline ”。这仅将资源部署到主区域和灾难恢复区域。
  • 注意事项 4(安全与合规工具集成) — 此合规性检查可验证 Hub VPC 子网是否通过 cfn-nag 使用公有 IP 启动,并将调查结果发布到 Security Hub。
  • 注意事项 5(定义阶段) — 管道分为中心、分支和验证阶段,用于在中心和分支环境中配置资源。我们使用 亚马逊云科技 VPC 可访问性分析器 来验证连接。
  • 注意事项 6(多账户支持) — 管道为开发和生产环境提供资源。
  • 注意事项 7(多区域支持) — 我们在主区域和灾难恢复区域提供资源。
  • 注意事项 8(监控) — 我们将合规调查结果发送到安全中心。
NetDevOps Pipeline in action

图 2:运行中的 NetDevseCops 管道

先决条件

你需要以下内容:

1。五个 亚马逊云科技 身份和访问管理 (IAM ) 账户属 于 亚马逊云科技 组织 ,拥有本解决方案中使用的服务的管理员权限。

  • 开发账户 — 用于配置 NetDevOps 管道(也可以是共享服务或部署账户)
  • 开发中心账户 — NetDevOps Pipeline 配置开发中心工作负载
  • 开发分支账户 — NetDevOps Pipeline 配置开发分支工作负载
  • Prod Hub 账户 — NetDevOps Pipeline 配置 Prod Hub 工作负
  • Prod Spoke 账户 — NetDevOps Pipeline 配置 Prod Spoke

2。在组织管理账户 中启用 亚马逊云科技 资源访问管理器 (亚马逊云科技 RAM) 的可信访问权限。查看以下步骤以将其激活。

3。在组织管理帐户中打开 S ecurity Hub 的委派管理员帐户。查看以下 步骤 以将其激活。

4。在终端中配置开发账户的 亚马逊云科技 证书。 安装 A WS CDK 工具包 。如果您不熟悉这些 步骤 ,请 查看 亚马逊云科技 CDK 研讨会以寻求帮助。

您必须遵守 亚马逊云科技 的包容性语言标准。有关包容性内容的规则,包括攻击性和敏感性条款,记录在 亚马逊云科技 风格指南中。包容性术语栏页面是另一个有用的参考资料。

部署步骤

接下来,我们在这个 Git 存储库 中部署代码 。我们假设有一个 亚马逊云科技 部署账户可以访问 Network Hub 账户以及开发和生产环境的工作负载账户。此部署包括两个 亚马逊云科技 CDK 应用程序:

1。NetDevOps 基础应用程序 — 此 亚马逊云科技 CDK 应用程序预置了 NetDevOps 管道中所需的所有基础。这包括 亚马逊云科技 CodeCommit 存储库、跨账户 IAM 角色、亚马逊简单通知服务 (Amazon SNS) 主题和用于发送 cf n-nag 调查结果的 亚马逊云科技 Lambda 函 数。

2。NetDevOps Pipeline 应用程序 — 此 亚马逊云科技 CDK 应用程序为网络基础设施配置 NetDevOps 管道,上述所有阶段均采用多账户和多区域设置。

NetDevOps 基金会应用程序

1。通过在终端窗口运行以下 亚马逊云科技 命令行接口 (亚马逊云科技 CLI) 命令 ,克隆存储库并在本地计算机中引导应用程序。

git clone <repo url> NetDevopsPipeline cd NetDevopsPipeline 
python3 -m venv .venv 
source .venv/bin/activate 
pip install -r requirements.txt

2。使用开发和生产环境中的开发、中心和分支帐户更新 “netdevopspipeline” 文件夹中的 accounts.py,如图 3 所示。

An example accounts.py file

图 3:accounts.py 文件示例

3。使用您的电子邮件更新 cdk.json 以接收 SNS 通知和组织 ID,然后部署 NetDevOps 基金会应用程序。

cdk bootstrap aws://<Development account id>/<Primary Region>
cdk deploy -c infra_type=NetDevopsFoundation --require-approval=never

注意:订阅发送到 cdk.json 文件中提及的电子邮件地址的 SNS 通知。

NetDevOps 管道应用程序

1。克隆在上一步中创建的 CodeCommit 存储库(网络 devops-repo)。

git remote add codecommit https://git-codecommit.<Primary Region>.amazonaws.com/v1/repos/network-devops-repo

注意:以上步骤需要设置 Https git 证书。查看设置 Git 凭据的步骤。由于操作原因,如果你无法设置 git 证书,请按照 git-remote-comcommit 设置中提到的步骤进行操作。

2。通过运行以下命令将代码添加到存储库中:

git add .
git commit -m "Initial NetDevops pipeline repo commit"
git push --set-upstream codecommit main

3。按照以下步骤在开发和生产环境中引导中心账户和分支账户。 或者,按照本文中重点介绍的步骤,使用StackSet引导帐户。

确保在每个环境的 引导 过程中设置了正确的 IAM 账户证书 。

Hub 账户(开发环境)

cdk bootstrap aws://<Hub account id>/<Primary Region> —trust <Development account> --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess 
cdk bootstrap aws://<Hub account id>/<DR Region> —trust <Development account> --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Spoke 账户(开发环境)

cdk bootstrap aws://<Spoke account id>/<Primary Region> —trust <Development account> --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess
cdk bootstrap aws://<Spoke account id>/<DR Region> --trust <Development account> —cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Hub 账户(生产环境)

cdk bootstrap aws://<Hub account id>/<Primary Region> —trust <Development account> --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess
cdk bootstrap aws://<Hub account id>/<DR Region> —trust <Development account> --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

Spoke 账户(生产环境)

cdk bootstrap aws://<Spoke account id>/<Primary Region> —trust <Development account> --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess
cdk bootstrap aws://<Spoke account id>/<DR Region> --trust <Development account> —cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

4。要在 “开发账户” 中配置 NetDevOps 管道,请设置管道的 IAM 证书并运行以下命令。包含所有阶段的 NetDevOps 管道的部署如图 4 所示。

cdk deploy --all --require-approval=never
An example code pipeline with stages

图 4:带有阶段的 NetdevSecOps 管道示例

请注意,由于需要创建 CodePipelines 和 CloudFormation 模板,部署需要 10-15 分钟。在您的 Hub 账户主区域上 的 亚马逊云科技 CodePipeline 控制台 上查看进度。

5。NetDevOps 管道有一个手动批准阶段,用于验证中心和分支的连接。当 VPC 可访问性分析器 报告管道可访问时,将 发送 Amazon SNS 通知,如图 5 所示。要在生产环境中配置资源,请查看此通知并批准手动阶段。

An example analysis from VPC reachability analyzer

图 5:来自 VPC 可访问性分析器的示例分析

现在,您已经成功实现了多账户、多区域 NetDevOps Pipeline,能够识别一个 限制 网络访问控制。

验证安全性和合规性检查

在此步骤中,我们利用 cfn-nag 作为管道的一部分来验证安全性和合规性。这是在构建阶段(合成和部署验证)的一部分完成的:

1。复制此代码片段并替换管道堆栈文件夹中 DevSpokeInfraStack.py 文件中存在的 self.vpc 的内容,如图 6 所示。

self.vpc = ec2.Vpc(
            self,
            "spoke_vpc",
            max_azs=2,
            cidr=cidr,
            enable_dns_hostnames=True,
            enable_dns_support=True,
            subnet_configuration=[
                ec2.SubnetConfiguration(
                    subnet_type=ec2.SubnetType.PRIVATE_ISOLATED,
                    name="private",
                    cidr_mask=24,
                ),
                ec2.SubnetConfiguration(
                    subnet_type=ec2.SubnetType.PRIVATE_ISOLATED,
                    name="tgw",
                    cidr_mask=28,
                ),
                ec2.SubnetConfiguration(
                    subnet_type=ec2.SubnetType.PUBLIC,
                    name="Public",
                    cidr_mask=24,
                    map_public_ip_on_launch=True
                )
            ],
            nat_gateways=0,
        )
An example comparison for snippet of code for VPC subnet configuration

图 6:VPC 子网配置代码片段的示例比较

2。运行以下命令推送代码更改:

git commit -a -m "Adding Public subnet in the spoke stack" 
git push codecommit main

推送更改后,管道将被调用并进入失败状态,调查结果将发送到安全中心,如图 7 所示。

Findings sent to AWS Security Hub

图 7:调查结果已发送到 亚马逊云科技 Security Hub

验证单元测试

现有的 NetDevOps 管道仅允许您在美国东部 1(主要区域)和美国西部-2(辅助区域)中创建资源。如果配置发生在任何其他区域,则管道将在构建阶段(合成和部署验证)失败。

1。将 NetDevOps Pipeline 文件夹中存在的 accounts.py 更新为在 us-east-1(主要区域)和 us-west-2(次要区域)以外的任何区域进行配置,如图 8 所示。

An example of updated accounts.py file

图 8:更新后的 accounts.py 文件示例

请注意,您必须确保 Hub 和 Spoke 帐户在 “us-east-2” 区域的开发和生产环境中均已启动。

2。通过运行以下命令推送代码更改:

git commit -a -m "Adding invalid region subnet in the accounts.py" 
git push codecommit main

推送更改后,管道将被调用,管道将在构建阶段更改为失败状态。在查看构建失败日志时,你可以注意到这是由于 pytest 验证失败所致,如图 9 所示。

An example pytest failure

图 9:pytest 失败示例

清理

为避免不必要的费用,请删除在部署 NetDevOps 管道和测试期间创建的资源。要清理资源,请按此处显示的顺序执行以下步骤:

1。应从 CloudFormation 控制台手动删除 CodePipeline 创建的堆栈。因此,识别堆栈,然后在生产和开发环境的主区域和灾难恢复区域的中心和分支帐户中将其删除。此外,删除 S3 存储桶。

2。运行以下命令销毁 NetDevOps 基金会和 NetDevOps 管道应用程序:

cdk destroy --all
cdk destroy -c infra_type=NetDevopsFoundation

结论

NetDevOps 可帮助您更快地交付应用程序和服务。这意味着更快的变更和更短的网络交付生命周期。在这篇文章中,我们展示了如何利用 亚马逊云科技 CDK 在实践中实施 NetDevSecOps。我们展示了如何将安全和合规性检查作为您的网络 CI/CD 的一部分。通过使用提供的模板来配置所需的基础架构,我们消除了设置 CI/CD 管道时无差别的繁重工作。我们希望您发现这篇文章内容丰富,我们期待听到您如何使用这种方法!

作者简介

Shiva Vaidyanathan

Shiva Vaidyanathan 是 亚马逊云科技 的首席云架构师。他为客户提供技术指导、设计和领导实施项目,确保他们在 亚马逊云科技 上取得成功。他致力于让每个人都能更轻松地使用云网络。在加入 亚马逊云科技 之前,他参与了多项由美国国家科学基金会资助的有关如何在公有云基础设施中进行安全计算的研究项目。他拥有罗格斯大学的计算机科学硕士学位和纽约大学的电气工程硕士学位。

Gopinath Jagadesan

Gopinath Jagadesan 是 亚马逊云科技 的云基础设施架构师。他喜欢与客户进行反向合作,以解决亚马逊云科技 Cloud上的架构和运营挑战。他拥有伊利诺伊大学芝加哥分校的电气和计算机工程硕士学位,专攻计算机网络。工作之余,他喜欢踢足球,喜欢与家人和朋友共度时光。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。