我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
NetDevSecOps 将 亚马逊云科技 网络部署现代化
NetDevOps 协调和自动执行网络变更以缩短网络交付生命周期,将网络视为允许版本控制的代码,并测试更改以确保质量和稳定性。这种提高的速度有助于组织更好地为客户提供服务,并在市场上更有效地竞争。《
注意事项
每个组织都是独一无二的,没有一种正确的方法来实施 NetDevOps。以下部分列出了您在做出决策时必须记住的一些注意事项。这些注意事项将帮助您定义一个框架,以便放心地发布更改,或者在不造成中断的情况下进行回滚。
1/ 基础设施即
代码 (IaC) 选项 — 亚马逊云科技 提供多个
|
我是否正在开发一个 简单的、基本上是无服务器的解决方案 ,其依赖关系或依赖项最少? |
CloudFormation(特别是
|
|
我的团队有很 强的编程背景 吗?他们想使用代码构建基础设施吗? |
亚马逊云科技 CDK 或 Terraform |
|
我想 完全留在 亚马逊云科技 生态系统中吗? |
CloudFormation 或 亚马逊云科技 CDK |
|
我需要编排 亚马逊云科技 生态系统 之外的资源吗? |
Terraform 或 亚马逊云科技 CDK for Terraform (CDKTF) |
|
我想要一个与 云无关的实用程序 ,尤其是用于多/混合云知识转移的实用程序吗? |
Terraform |
2/ 部署策略
— 定义您想要如何部署网络堆栈。组织 根据其业务模式遵循不同的
3/ 定义单元测试
— 当组织使用管道配置应用程序和基础设施时,基础架构测试在缓解与任何配置错误相关的问题方面起着关键作用。基础架构团队了解该组织的政策。因此,将单元测试作为配置管道的一部分编写和集成至关重要。根据您选择的 iaC 选项,您将创建单元测试策略工具和单元测试。
4/
安全与合规工具集成
— NetSecOps 通过在整个 CI/CD 流程中集成安全评估,为
5/ 定义阶段 — 您必须将网络的 CI/CD 定义为管道,其中新的网络配置或所需的更改作为代码在一端提交,经过构建、测试、暂存和验证等一系列阶段,然后才能部署到生产环境中。每个阶段都像看门人一样,评估代码的特定部分。随着代码在网络管道中的进展,我们假设代码在后期阶段的质量更高,因为它已经被验证了更多的次数。早期发现的问题使代码无法通过管道进行。网络运营团队会立即收到测试结果,如果软件未通过测试阶段,他们将停止所有进一步的构建和发布。
6/
多账户支持
— 在采用 亚马逊云科技 时,您必须确定如何满足您的业务、治理、安全和运营要求。使用
7/
8/ 监控网络 CI/CD 管道
— 您必须集成监控功能,在出现故障或特定事件时通知网络运营团队。 已为管道设置了@@
一个实际的例子
让我们考虑一个多账户、多区域的场景,在该场景中,企业希望将所有入口流量集中到 亚马逊云科技。作为合规性要求(
图 1:利用 Transit Gateway 的多账户中心和分支设计
为了实现这个用例,我们在定义我们的 NetDevSecOps 流水线时会考虑前面强调的注意事项,如图 2 所示。结果是:
- 注意事项 1 (IaC) — 我们使用 亚马逊云科技 CDK 构建了基础设施,它是作为部署阶段的一部分进行综合和部署的。
-
注意事项 2(部署策略)
— 在幕后,亚马逊云科技 CDK 管道结构使用 亚马逊云科技 C odePipeline 和 在这里,我们测试我们的基础架构代码,并在流程的不同阶段将其部署到我们的测试和生产环境中。A WS Cod eBuild,后者用作持续交付策略的一部分 。 -
注意事项 3(单元测试)
— 我们编写了一个 pytest 来验证 亚马逊云科技 CDK Synthesized 模板的资源属性 “
亚马逊云科技:: CodePipeline:: Pipeline ”。这仅将资源部署到主区域和灾难恢复区域。 - 注意事项 4(安全与合规工具集成) — 此合规性检查可验证 Hub VPC 子网是否通过 cfn-nag 使用公有 IP 启动,并将调查结果发布到 Security Hub。
-
注意事项 5(定义阶段)
— 管道分为中心、分支和验证阶段,用于在中心和分支环境中配置资源。我们使用
亚马逊云科技 VPC 可访问性分析器 来验证连接。 - 注意事项 6(多账户支持) — 管道为开发和生产环境提供资源。
- 注意事项 7(多区域支持) — 我们在主区域和灾难恢复区域提供资源。
- 注意事项 8(监控) — 我们将合规调查结果发送到安全中心。
图 2:运行中的 NetDevseCops 管道
先决条件
你需要以下内容:
1。五个
- 开发账户 — 用于配置 NetDevOps 管道(也可以是共享服务或部署账户)
- 开发中心账户 — NetDevOps Pipeline 配置开发中心工作负载
- 开发分支账户 — NetDevOps Pipeline 配置开发分支工作负载
- Prod Hub 账户 — NetDevOps Pipeline 配置 Prod Hub 工作负
- Prod Spoke 账户 — NetDevOps Pipeline 配置 Prod Spoke
2。在组织管理账户 中启用
3。在组织管理帐户中打开 S
4。在终端中配置开发账户的 亚马逊云科技 证书。
您必须遵守 亚马逊云科技 的包容性语言标准。有关包容性内容的规则,包括攻击性和敏感性条款,记录在 亚马逊云科技 风格指南中。包容性术语栏页面是另一个有用的参考资料。
部署步骤
接下来,我们在这个
1。NetDevOps 基础应用程序
— 此 亚马逊云科技 CDK 应用程序预置了 NetDevOps 管道中所需的所有基础。这包括
2。NetDevOps Pipeline 应用程序 — 此 亚马逊云科技 CDK 应用程序为网络基础设施配置 NetDevOps 管道,上述所有阶段均采用多账户和多区域设置。
NetDevOps 基金会应用程序
1。通过在终端窗口运行以下
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 所示。
图 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。按照以下步骤在开发和生产环境中引导中心账户和分支账户。
确保在每个环境的
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
图 4:带有阶段的 NetdevSecOps 管道示例
请注意,由于需要创建 CodePipelines 和 CloudFormation 模板,部署需要 10-15 分钟。在您的 Hub 账户主区域上
5。NetDevOps 管道有一个手动批准阶段,用于验证中心和分支的连接。当
图 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,
)
图 6:VPC 子网配置代码片段的示例比较
2。运行以下命令推送代码更改:
git commit -a -m "Adding Public subnet in the spoke stack"
git push codecommit main
推送更改后,管道将被调用并进入失败状态,调查结果将发送到安全中心,如图 7 所示。
图 7:调查结果已发送到 亚马逊云科技 Security Hub
验证单元测试
现有的 NetDevOps 管道仅允许您在美国东部 1(主要区域)和美国西部-2(辅助区域)中创建资源。如果配置发生在任何其他区域,则管道将在构建阶段(合成和部署验证)失败。
1。将 NetDevOps Pipeline 文件夹中存在的 accounts.py 更新为在 us-east-1(主要区域)和 us-west-2(次要区域)以外的任何区域进行配置,如图 8 所示。
图 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 所示。
图 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 管道时无差别的繁重工作。我们希望您发现这篇文章内容丰富,我们期待听到您如何使用这种方法!
作者简介
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。