
# 创建IAM用户并配置CCE最小权限
华为云主账号具有账号的所有权限，使用主账号进行日常操作风险较高，误操作可能导致资源不可用或数据泄露。在团队协作场景下，不同成员需要不同的权限，直接共享主账号无法实现权限隔离。
建议创建IAM用户并授予最小权限，仅开放业务所需的操作权限，降低安全风险。本文介绍如何通过Terraform创建IAM用户和用户组，并将CCE相关系统权限绑定到用户组，实现权限的精细化管控。
#### 前提条件
- 当前账号具有IAM管理员权限（如IAMFullPolicy），用于创建用户、用户组和授权。
- 已安装Terraform，详情请参见[安装Terraform并配置华为云Provider](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_100712.html)。
 
#### 操作步骤
#### 步骤一：创建项目目录并初始化配置
1. 创建IAM用户管理目录（目录名可自定义）。
   ```
   mkdir terraform_iam_user
   cd ./terraform_iam_user
   ```
   
2. 将已准备好的Provider配置文件复制到当前目录。init.tf已在"安装Terraform并配置华为云Provider"章节的terraform_hw_demo目录中创建。
   ```
   cp ../terraform_hw_demo/init.tf .
   ```
   
 
#### 步骤二：创建配置文件
以下所有配置文件均在项目目录下创建。
1. 查询IAM权限策略数据源。 创建policy_data.tf文件，查询系统策略信息并按名称过滤，用于后续绑定到用户组。
   ```
   variable "policy_type" {
     description = "The type of the policy"
     type        = string
     default     = "system"
   }
   variable "policy_names" {
     description = "The name list of policies to be associated with the user group"
     type        = list(string)
   }
   # 获取指定region（region参数缺省时默认继承当前provider块中所指定的region）下所有的IAM策略信息，用于关联到用户组
   data "huaweicloud_identityv5_policies" "test" {
     policy_type = var.policy_type
   }
   # 根据策略名称过滤策略列表
   locals {
     filtered_policies = [for policy in data.huaweicloud_identityv5_policies.test.policies : policy if contains(var.policy_names, policy.policy_name)]
   }
   ```
   涉及参数说明如下表所示。
   
   | 参数           | 说明                                                                                                                                                                                                                                                                                                         |
   |:---|:---|
   | policy_type  | 策略类型。取值： - system（默认）：系统策略  - custom：自定义策略   |
   | policy_names | 需要绑定到用户组的策略名称列表。                                                                                                                                                                                                                                                                                           |
      
   
2. 创建用户组。 创建group.tf文件，创建IAM用户组，用于承载策略和用户。
   ```
   variable "group_name" {
     description = "The name of the user group"
     type        = string
   }
   variable "group_description" {
     description = "The description of the user group"
     type        = string
     default     = ""
   }
   # 在指定region（region参数缺省时默认继承当前provider块中所指定的region）下创建IAM用户组资源
   resource "huaweicloud_identityv5_group" "test" {
     group_name  = var.group_name
     description = var.group_description
   }
   ```
   涉及参数说明如下表所示。
   
   | 参数                | 说明     |
   |:---|:---|
   | group_name        | 用户组名称。 |
   | group_description | 用户组描述。 |
      
   
3. 创建group_attach.tf文件，给用户组授权。
   ```
   # 在指定region（region参数缺省时默认继承当前provider块中所指定的region）下创建IAM策略与用户组关联资源
   resource "huaweicloud_identityv5_policy_group_attach" "test" {
     count = length(local.filtered_policies)
     policy_id = try(local.filtered_policies[count.index].policy_id, null)
     group_id  = huaweicloud_identityv5_group.test.id
     depends_on = [
       huaweicloud_identityv5_group.test
     ]
   }
   ```
   涉及参数说明如下表所示。
   
   | 参数        | 说明                   |
   |:---|:---|
   | count     | 创建资源数量，等于需要绑定的策略数量。  |
   | policy_id | 策略ID，从步骤1的查询结果中获取。   |
   | group_id  | 用户组ID，即步骤2中创建的用户组ID。 |
      
   
4. 创建users.tf文件，创建IAM用户。
   ```
   variable "users_configuration" {
     description = "IAM用户的配置"
     type        = list(object({
       name     = string
       password = optional(string, "")
     }))
     nullable    = false
   }
   # 在指定region（region参数缺省时默认继承当前provider块中所指定的region）下创建IAM用户资源
   resource "huaweicloud_identity_user" "test" {
     count = length(var.users_configuration)
     name     = lookup(var.users_configuration[count.index], "name", null)
     password = lookup(var.users_configuration[count.index], "password", null)
   }
   ```
   涉及参数说明如下表所示。
   
   | 参数       | 说明                       |
   |:---|:---|
   | name     | 用户名。                     |
   | password | 用户密码。新建用户首次登录控制台时需要重置密码。 |
      
   
5. 将用户加入用户组。 创建group_members.tf文件，将步骤4中创建的用户加入步骤2中创建的用户组，用户将继承该用户组的所有权限。
   ```
   resource "huaweicloud_identity_group_membership" "test" {
     count = length(var.users_configuration)
     group = huaweicloud_identityv5_group.test.id
     users = huaweicloud_identity_user.test[*].id
     depends_on = [
       huaweicloud_identityv5_group.test,
       huaweicloud_identity_user.test
     ]
   }
   ```
   涉及参数说明如下表所示。
   
   | 参数    | 说明                     |
   |:---|:---|
   | group | 用户组ID，即步骤2中创建的用户组ID。   |
   | users | 用户ID列表，即步骤4中创建的所有用户ID。 |
      
   
6. 配置资源参数。 创建terraform.tfvars文件，预设资源所需的入参。以下为示例配置，请根据实际业务需求修改。
   ```
   # IAM用户组配置
   group_name        = "cce_operate"
   group_description = "CCE resource management"
   # IAM策略配置
   policy_type  = "system"
   policy_names = [
     "CCEFullPolicy"  # 策略名称，此策略拥有CCE的所有权限
   ]
   # IAM用户配置
   users_configuration = [
     {
       name     = "cce_use"   # 新建用户的用户名
       password = "*******"  # 新建用户的密码，新建的用户初次登录控制台需要重置密码
     }
   ]
   ```
   涉及参数说明如下表所示。
   
   | 参数                  | 说明                                                                        |
   |:---|:---|
   | group_name          | 用户组名称，示例为cce_operate。                                                     |
   | group_description   | 用户组描述。                                                                    |
   | policy_type         | 策略类型，示例为system（系统策略）。                                                     |
   | policy_names        | 策略名称列表，示例为CCEFullPolicy（CCE完全访问权限）。如需最小权限，可替换为CCEReadOnlyPolicy（CCE只读权限）。 |
   | users_configuration | 用户配置列表，包含用户名和密码。                                                          |
      
   
 
#### 步骤三：初始化并应用Terraform配置
1. 初始化环境。
   ```
   terraform init
   ```
   
2. 查看执行计划，确认资源变更是否符合预期。
   ```
   terraform plan
   ```
   
3. 计划确认无误后，创建资源。执行时Terraform会向用户确认，输入yes确认执行。
   ```
   terraform apply
   ```
   
4. 查看已创建的资源。
   ```
   terraform show
   ```
   
 
#### 步骤四：清理资源
当不再需要通过Terraform创建的资源时，可以执行以下命令释放资源。执行时Terraform会向用户确认，输入yes确认执行。
![](https://support.huaweicloud.com/bestpractice-cce/public_sys-resources/caution_3.0-zh-cn.png)
此操作将永久删除通过Terraform创建的所有IAM用户、用户组和授权关系，请确认不再需要后再执行。
```
terraform destroy
```
#### 相关文档
- 如需了解Terraform的安装和华为云Provider的配置，请参见[安装Terraform并配置华为云Provider](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_100712.html)。
- 如需了解CCE支持的系统权限策略，请参见[权限管理](https://support.huaweicloud.com/productdesc-cce/cce_productdesc_0002.html)。
- 如需通过Terraform创建CCE集群，请参见[使用Terraform创建CCE集群](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_100714.html)。
 
