部署LandingZone 账号网络基线
1. 版本定义

2. 背景介绍
账号和网络管理是LandingZone的核心,本文主要讲述如何帮助企业创建一个基线化的网络账号环境。
整体实验方案介绍:

大体分类3个步骤:1.拉取代码;2.修改脚本参数;3.执行Terraform脚本拉起环境
主要场景如下:
• 首先有两个组织:网络管理组织(负责网络环境搭建与运维)和业务组织(负责业务应用资源管理)
• 网络管理组织下面有一个网络账号:负责创建企业路由并分享给业务OU
• 业务组织下有两个应用:负责创建VPC及子网,并将VPC通过连接与企业路由打通
3. 实践前置条件
请确保已完成如下环境资源的准备:
✅ 已经申请了企业主账号
✅ 已准备好华为开发者空间云开发环境
✅ 已安装华为云的Terraform Provider
✅ 已创建用户凭证
4. 实操部分
Step1 从开源代码仓上拉取代码
1. 找到clone地址:访问LDZ代码仓:https://gitcode.com/Evan0603/LandingZone/tree/main,1. 点击右上角克隆/下载。2. 用HTTP克隆。3. 复制clone地址
2. 创建文件夹:回到vscode,在workspace目录下,执行mkdir 文件名创建一个文件夹存放代码,如LDZ-code
3. clone代码:在目录下执行命令clone代码到本地
git clone https://gitcode.com/Evan0603/LandingZone.git
4. 如图所示,代码下载完成
Step2 开通组织服务
1. 开通企业中心
2. 开通组织服务
3. 开通RAM资源共享服务的自动接收能力
4. 登录组织服务,获取根账号ID(即后续组织创建在哪个根组织下),复制图中的ID(r-31XXX……),保存好后续修改代码时需要
问题1:为什么要申请这些权限?
由于后续我们需要创建组织,所以要开通组织服务,而开通组织服务要先开通企业中心,当我们后面共享资源的时候需要接收方进行接收,我们打开自动接收就不用再去控制台上进行操作了。
问题2:为什么不都用代码实现?
理论上上述能力都可以通过代码接口实现,但是一般来说标准化动作我们建议用代码实现,而这种资源开通及一些开关,由于本身操作不复杂,且都是一次性工作,也没有必要完全追求全自动化。
Step3 代码仓结构介绍
1. 至此,我们所有准备工作已经完成,接下来调用Terraform脚本,先介绍一下代码结构:
.
├── LandingZone-Account/ # 创建组织及账号
│ ├── main.tf # 主配置文件 (调用各类资源)
│ ├── terraform.tfvars # 变量赋值文件(可理解为实参,存放具体的账号名、组织名等)
│ ├── variable.tf # 变量定义(可理解为形参)
│ └── versions.tf # Provider 版本约束(不用修改)
│
└── LandingZone-BaseLine/ # 基于组织与账号创建资源
├── Sources/ # 子模块集合目录
│ ├── CreateERAndShared/ # 子模块:创建 ER 和共享资源
│ │ ├── main.tf
│ │ ├── variable.tf
│ │ └── versions.tf
│ ├── CreateERVpcAttachment/ # 子模块:创建 ER VPC 附件
│ ├── CreateVpcAndSubnets/ # 子模块:创建 VPC 和子网
│ └── ...
├── main.tf
├── terraform.tfvars
├── variable.tf
└── versions.tf
对上述代码做个简单说明:
• 整体分为两个文件夹:
o LandingZone-Account用来创建组织与账号,LandingZone-BaseLine用来创建具体资源:
o CreateERAndShared创建ER企业路由(用来打通网络)、CreateVpcAndSubnets用来创建VPC和子网、CreateERVpcAttachment通过企业路由打通子账号的VPC网络
• 每个文件夹下都有4个子文件:
o main.tf用来编写主逻辑,创建各类资源
o variable.tf用来做变量的定义,类似于结构体或类
o versions.tf用来定义provider版本,我们可以不用过多关注,一般不会改
o terraform.tfvars存放具体的数值,也就是实参,如账号名,组织名,vpc名字,安全组的具体开放策略等。
Step4 修改脚本参数
1. 修改AK、SK,将从 Step 5 获取的AK、SK填入LandingZone-Account/main.tf和LandingZone-BaseLine/main.tf中provider 的access_key和secret_key部分:
provider "huaweicloud" {
region = "cn-north-7"
access_key = "填写AK"
secret_key = "填写SK"
……
}
2. 修改根账号,从 Step 6 中第4步获取的组织根账号ID,每个企业主账号都不同
• 写入LandingZone-Account/terraform.tfvars中ou_infos里面的parent_id:
ou_infos = {
IT_DEPART = {
name = "IT_OU_Demo_1"
parent_id = "填写root_id" #root_id
}
BU_DEPART = {
name = "BUS_OU_Demo_1"
parent_id = "填写root_id" #root_id
}
}
• 写入LandingZone-BaseLine/terraform.tfvars中root_account_id:
root_account_id = "填写root_id"
3. 修改子账号名,子账号名全网唯一,因此要更改,请尽量复杂一些避免重复(如:network_account_test_工号_01)
• 修改待创建的子账号名,写入LandingZone-Account/terraform.tfvars中accounts里面的account_name,3个account_name都需要修改(一个网络账号、2个业务账号)
accounts = [
{
account_name = "填写网络子账号1名称"
……
},
{
account_name = "填写业务子账号1名称"
……
},
{
account_name = "填写业务子账号2名称"
……
}
]
• 创建资源时依赖子账号名,将上述创建完的子账号名填入创建资源时的参数内,填入LandingZone-BaseLine/terraform.tfvars中的workload_account_test1、workload_account_test2、network_name、字段分别对应上面创建的业务子账号1、2及网络子账号1。
# Name of new account to be created
workload_account_test1 = "填写业务子账号2名称"
workload_account_test2 = "填写业务子账号1名称"
network_name = "填写网络子账号1名称"
Step5 执行Terraform脚本
经过上述准备动作,我们到了最后一步执行Terraform脚本,我们首先在LandingZone-Account文件夹内创建账号,在跳转到LandingZone-BaseLine里面利用账号创建相关资源。
1. 这里会用到3个关键命令:
• terraform init:初始化项目,下载所需的插件(Provider)和模块,并配置后端存储。
• terraform plan:预演执行计划,对比代码与云端现状,列出将要创建、修改或销毁的资源清单(不实际执行)。
• terraform apply:正式执行计划,根据** plan 的结果在云平台上创建、更新或删除资源。
2. 创建账号:
• 跳转到LandingZone-Account文件夹下:
• (可选)输入pwd确认目录:
• 执行terraform init 初始化项目
• 执行terraform plan 查看执行计划
• 执行terraform apply 执行创建账号,如提示确认创建,输入yes确认
• 提示apply complete即账号创建成功
3.创建资源:步骤和上面基本相同
• 跳转到LandingZone-Baseline文件夹下:
• 执行terraform init 初始化项目
• 执行terraform plan 查看执行计划
• 执行terraform apply 执行创建资源,如提示确认创建,输入yes确认
• 提示apply complete即资源创建成功
Step6 确认资源创建完成
• 登录到组织页面,查看组织和账号是否创建完成
• 通过右上角可以切换角色,账号名->切换角色->切换到其他角色
• 输入业务子账号1如workload_account_test_227_01,输入委托名OrganizationAccountAccessAgency(代码中默认的委托名),会话名称可不输入,点击确定切换用户
• 跳转到企业路由ER服务,可以看到网络账号分享的企业路由实例
• 可以看到相关连接已经创建好了
至此,最佳实践完成,Thanks!
- 点赞
- 收藏
- 关注作者
评论(0)