概述

当企业确认好自身Landing Zone的设计方案,接下来就是需要实施到云上了。实施的方案有多种,除了云上的服务之外,一些第三方的工具也可以协助您完成整个Landing Zone的搭建。这里,我们以Terraform为例,借助 IaC 的理念,提供了一个包含基础设施构建(多账号体系搭建、网络规划、访问控制、安全合规),以及账号工厂(新账号初始化)的Landing Zone的搭建过程示例。

IaC理念

IaC(Infrastructure as Code),即基础设施即代码,是使用软件开发原则和实践的基础设施自动化。简而言之,就是把基础架构像软件一样来对待,然后通过编写、测试和执行代码以定义、部署、更新和释放基础架构。通过编写代码来管理云上Landing Zone的部署和配置,可以更快地实现基础设施的交付,降低手工配置的成本,监测配置偏移,以实现自动化、可维护的部署和实施过程。当需要更改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示例代码介绍

您可以在我们的官网Github仓库查看示例代码。这里我们针对复杂企业、跨国企业样板间案例进行介绍。在示例脚本中,我们包含了两大模块:
  • 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 也建议进行修改,因为审计日志投递到的OSS Bucket以及审计跟踪的名称均需要全局唯一,不能和其它用户的命名重复,建议修改为一个含有企业特定标示的名称(假定这里公司名为 AlibabaCloud),如下:
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命令,耐心等待基础架构初始化成功。

初始化成功后,Terraform会返回类似下方的输出,请妥善保存该输出,便于后续执行账号工厂的步骤。
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_productionnetwork.vpc_non_production中,可以根据业务需要给该业务分配相应的网段,修改vswitches配置,添加对应网段,删除不需要的网段即可。

applications_accounts中,可以一次性配置多个账号,但我们建议如果没有特殊需求,一个工作空间只配置一个账号。

配置完成后,执行Terraform相关命令,指定使用新的配置文件运行,完成新账号创建。