概述
当企业确认好自身Landing Zone的设计方案,接下来就是需要实施到云上了。实施的方案有多种,除了云上的服务之外,一些第三方的工具也可以协助您完成整个Landing Zone的搭建。这里,我们以Terraform为例,借助 IaC 的理念,提供了一个包含基础设施构建(多账号体系搭建、网络规划、访问控制、安全合规),以及账号工厂(新账号初始化)的Landing Zone的搭建过程示例。
IaC理念
IaC(Infrastructure as Code),即基础设施即代码,是使用软件开发原则和实践的基础设施自动化。简而言之,就是把基础架构像软件一样来对待,然后通过编写、测试和执行代码以定义、部署、更新和释放基础架构。通过编写代码来管理云上Landing Zone的部署和配置,可以更快地实现基础设施的交付,降低手工配置的成本,监测配置偏移,以实现自动化、可维护的部署和实施过程。当需要更改Landing Zone的设计方案时,可以更改代码,对其进行测试,然后将其应用于系统中。
设计建议
- 独立的POC(Proof of Concept)验证环境:创建单独的云账号,用于基础设施等的验证。一个Landing Zone的实施包含了很多方面的内容。一个独立的POC环境有助于您发现代码中的问题,并且方便后续方案修改。在应用到生产环境之前,也可以作为验证阶段,避免影响线上业务。
- 选择合适的地域:在部署网络等资源之前,确保选定的地域有满足您业务所需的资源类型。您可以参考对应云产品的官方文档,来确认所需资源是否在您选定的地域提供服务。
- 使用Terraform backend保存部署状态:通过使用Alibaba Cloud Terraform provider提供的backend能力,将 Terraform执行过程的状态保存在云端,避免状态保存在本地丢失导致后续难以变更,同时也便于多人协作。
- 使用Terraform workspace来隔离不同云账号的状态:在账号工厂新建云账号过程中,我们建议您给每个新账号都创建唯一的workspace,后续在该账号中部署业务资源时,也可以复用该workspace。
- 使用版本控制管理部署脚本:基于IaC理念将基础设施代码化后,即可加入到版本控制里。通过版本控制,可以实现基础设施架构变更的追踪、回滚等能力。
- 使用CI/CD(Continuous Integration/Continuous Delivery)流程实现自动化部署:结合CI/CD流程,可以实现代码变更后的评审、预检查、自动化部署,规范化运维链路,保障实施过程的准确性。因为部署过程中需要用到的AK权限较大,使用自动化流程,可以避免AK存放在运维人员电脑上,降低AK泄露风险。同时,对于账号工厂能力,也可以结合企业ITSM系统,实现业务方提交新账号需求,审批通过后自动完成账号创建,提升效率。
Landing Zone示例代码介绍
- foundations:即基础设施,在该模块中,会完成云上Landing Zone基础的搭建。如果后期Landing Zone的设计方案没有变化,该模块只需要运行一次即可。具体包含以下内容:
- 多账号结构:初始化Core、Applications资源夹以及创建SharedServices账号。
- 身份管理和访问控制:初始化安全策略,在SharedServices账号中创建相应角色。
- 网络:基于SharedVPC方案,在SharedServices账号中初始化网络架构,会创建DMZ VPC、SharedServices VPC、生产VPC和非生产VPC,并通过 NACL、云防火墙等实现网络访问控制。
- 治理框架:创建多账号统一的操作日志投递和跟踪,初始化基础的配置审计规则。
- account-baseline:即账号工厂,用于创建新的用于部署业务的云账号。具体包含以下操作:
- 账号创建:通过资源目录创建账号并放入Applications资源夹内。
- 访问控制:初始化基础的RAM角色。
- 网络:在SharedServices账号中的生产VPC和非生产VPC内创建业务使用的VSwitch,并通过资源共享能力,共享给该业务云账号,同时配置适当的NACL规则实现业务间的访问控制。
- 治理框架:这部分由于已经在foundations中配置过,所以在创建新的业务云账号过程中,无需再次配置。
在具体的实施过程中,账号工厂需要在基础设施初始化好之后才可以运行。基础设施运行完毕后,会打印出已经创建好的资源信息,账号工厂创建新账号的过程,会依赖这些信息。后续如果需要新的云账号,可以再次运行账号工厂模块,提供一份新的配置,完成云账号的创建和初始化步骤,以保障所有的业务云账号,都能够满足企业Landing Zone的设计要求。
部署Landing Zone
接下来,我们通过示例代码,介绍Landing Zone的部署过程。
在开始之前,我们假设您已经对Terraform的使用方式有了一定的了解。如果您还不熟悉Terraform的操作,请参考Hashicorp官方提供的文档。
在开始部署之前,请先在管理账号下创建一个RAM用户,并授予AdministratorAccess权限,生成一个AK,用于执行接下来的所有操作。
基础设施初始化
首先将我们的示例代码克隆到您的本地,然后进入到example/03-complex-enterprise/foundations
这个文件夹。我们提供了丰富的配置项,您可以通过修改settings.tfvars
中的配置项,来自定义您的Landing Zone设置。在执行过程中,Terraform会自动使用您修改后的配置项。
在foundations的配置项中,主要包含基础设置(basic_settings)和网络设置(network_settings)两个部分,我们首先看一下基础设置部分。
shared_services_account_roles
这个配置项,该配置项定义了SharedServices账号内置的角色,是个数组,可以根据需求进行修改和添加。比如需要新增一个查看监控的角色,则在最下面新增:
{
role_name = "EnterpriseIdP-MonitorViewer"
policies = [
"AliyunCloudMonitorReadOnlyAccess"
]
}
governance = {
bucket_enterprise_audit_logs = "alibabacloud-landingzone-enterprise-audit-logs"
trail_enterprise_audit_logs = "alibabacloud-enterprise-audit-logs"
}
在network_settings
中,请关注每个vpc_开头的配置项里的cidr_block
,代表了该VPC的网段。请根据自身业务规模合理规划网段,确保能够容纳所需资源数量,并且保证四个VPC的网段不重合,一旦设置并部署业务之后,后期难以修改。
确保配置项正确后,通过Terraform plan预检查配置,确认无误后执行apply命令,耐心等待基础架构初始化成功。
foundations = {
"cloudfirewall" = {
"cen_instance_id" = "cen-xxxxxxxxxx"
"vpc_dmz_cidr_block" = "10.36.11.0/24"
"vpc_dmz_id" = "vpc-uf69oajtsxxxxxxxx"
"vpc_non_production_cidr_block" = "10.34.96.0/22"
"vpc_non_production_id" = "vpc-uf64c9axxxxxxx"
"vpc_production_cidr_block" = "10.34.64.0/20"
"vpc_production_id" = "vpc-uf6tbrxxxxx"
"vpc_shared_service_id" = "vpc-uf6ih5xxxxxxx"
"vpc_shared_services_cidr_block" = "10.36.10.0/24"
}
"master_uid" = "1888888888888"
"rd_folder_application_id" = "fd-xxxxxxx"
"shared_services_uid" = "19999999999"
}
账号工厂
当基础设施部署完毕后,我们给需要上云的业务分配一个用于部署资源的云账号,该部分我们在账号工厂里完成。
切换到example/03-complex-enterprise/account-baseline目录下,使用Terraform workspace
命令创建一个工作空间,工作空间命名中建议包含新的云账号名称用以区分,比如这个账号用于部署公司官方博客,则命名为account-blog。后续创建其它账号时,也使用单独的命名空间进行操作。
复制settings.tfvars为一个新的配置项,比如settings-blog.tfvars
,然后修改该配置。在foundations
中,根据基础设施部署完毕后的输出信息进行填写即可。
在applications_accounts
中,需要配置这个新账号的相关信息,如账号名称account_name
,地域region
确保和基础设施中配置的地域一致。在network.vpc_production
和network.vpc_non_production
中,可以根据业务需要给该业务分配相应的网段,修改vswitches配置,添加对应网段,删除不需要的网段即可。
在applications_accounts
中,可以一次性配置多个账号,但我们建议如果没有特殊需求,一个工作空间只配置一个账号。
配置完成后,执行Terraform相关命令,指定使用新的配置文件运行,完成新账号创建。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/153818.html