全部產品
Search
文件中心

Key Management Service:建立憑據

更新時間:Jul 06, 2024

您可以通過Terraform建立並管理認證。本文以建立憑據為例進行介紹。

概述

KMS使用指定的金鑰組憑據進行加密保護,因此在建立憑據前,請先建立密鑰。關於憑據的更多資訊,請參見憑據管理概述

瞭解更多關於憑據的Terraform配置資訊,請參見alicloud_kms_secret

使用限制

Terraform需要為0.14.0及以上版本,建議使用最新版本,您可以登入Terraform官網下載。

前提條件

使用RAM使用者登入Terraform時,需要為該RAM使用者授予AliyunKMSFullAccess(管理Key Management Service)和AliyunRAMFullAccess(管理存取控制RAM的許可權)許可權。具體操作,請參見為RAM使用者授權

操作步驟

重要

建議您對secret_data(憑據值)設定sensitive = true以避免將敏感的憑據值在日誌或控制台中列印。更多介紹請參考保護敏感輸入變數(Protect Sensitive Input Variables)。

  1. 建立一個工作目錄,並且在工作目錄中建立以下名為main.tf的設定檔。

    1. main.tf中增加以下內容,建立用於加密憑據值的密鑰。

      重要

      加密憑據值的密鑰必須為對稱金鑰。

      // KMS執行個體ID
      variable "kms_instance_id" {
        default  = "kst-gzz650d0533ntu2fm****"
      }
      
      //在KMS執行個體中建立一個AES密鑰
      //密鑰規格為Aliyun_AES_256,密鑰用途是加密解密(ENCRYPT/DECRYPT)
      resource "alicloud_kms_key" "aes_key" {
        description = "default_key_encrypt_decrypt description"
        key_usage = "ENCRYPT/DECRYPT"
        key_spec = "Aliyun_AES_256"
        dkms_instance_id = var.kms_instance_id
        pending_window_in_days = 7
        tags = {
            "Environment" = "Production"
            "Name" = "KMS-01"
            "SupportTeam" = "PlatformEngineering"
            "Contact" = "aliyun@example.com"
          }
      }
    2. main.tf中增加以下內容,建立憑據。

      • 通用憑據

        //建立通用憑據,憑據名稱為kms_secret_general1,憑據值為secret_data_kms_secret_general1
        resource "alicloud_kms_secret" "kms_secret_general" {
          secret_name = "kms_secret_general1"
          description = "secret_data_kms_secret_general"
          secret_type = "Generic"
          force_delete_without_recovery = true
          dkms_instance_id = var.kms_instance_id
          encryption_key_id = alicloud_kms_key.aes_key.id
          version_id = "v1"
          secret_data_type ="text"
          secret_data = "secret_data_kms_secret_general1"
        }
      • RAM憑據

        //建立RAM憑據樣本
        //前提條件是您建立需要託管RAM憑據的RAM使用者和AccessKey。
        //共分為2個步驟。
        
        //步驟1:授予KMS管理RAM使用者的Accesskey的許可權
        //1.1 建立自訂權限原則AliyunKMSManagedRAMCrendentialsRolePolicy
        resource "alicloud_ram_policy" "AliyunKMSManagedRAMCrendentialsRolePolicy" {
          policy_name     = "AliyunKMSManagedRAMCrendentialsRolePolicy"
          policy_document = <<EOF
          {
              "Version": "1",
              "Statement": [
                  {
                      "Effect": "Allow",
                      "Action": [
                          "ram:ListAccessKeys",
                          "ram:CreateAccessKey",
                          "ram:DeleteAccessKey",
                          "ram:UpdateAccessKey"
                      ],
                      "Resource": "*"
                  }
              ]
          }
          EOF
          description     = "AliyunKMSManagedRAMCrendentialsRolePolicy"
          force           = true
        }
        
        //1.2 建立RAM角色AliyunKMSManagedRAMCrendentialsRole
        resource "alicloud_ram_role" "AliyunKMSManagedRAMCrendentialsRole" {
          name        = "AliyunKMSManagedRAMCrendentialsRole"
          description = "AliyunKMSManagedRAMCrendentialsRole"
          document    = <<EOF
          {
            "Statement": [
              {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "kms.aliyuncs.com"
                  ]
                }
              }
            ],
            "Version": "1"
          }
          EOF
          force       = true
        }
        
        // 1.3 為RAM角色AliyunKMSManagedRAMCrendentialsRole授權AliyunKMSManagedRAMCrendentialsRolePolicy
        resource "alicloud_ram_role_policy_attachment" "attach" {
          policy_name = alicloud_ram_policy.AliyunKMSManagedRAMCrendentialsRolePolicy.policy_name
          policy_type = alicloud_ram_policy.AliyunKMSManagedRAMCrendentialsRolePolicy.type
          role_name   = alicloud_ram_role.AliyunKMSManagedRAMCrendentialsRole.name
        }
        
        //步驟2:建立RAM憑據
        resource "alicloud_kms_secret" "kms_secret_RAMCredentials" {
          secret_name = "$Auto"
          description = "secret_kms_secret_RAMCredentials"
          secret_type = "RAMCredentials"
          dkms_instance_id = var.kms_instance_id
          //用於加密憑據值的密鑰ID。
          encryption_key_id = alicloud_kms_key.aes_key.id
          force_delete_without_recovery = true
          enable_automatic_rotation = true
          rotation_interval = "7d"
          extended_config = "{\"SecretSubType\":\"RamUserAccessKey\", \"UserName\":\"exampleUser2\"}" 
          version_id = "V1"
          secret_data_type ="text"
          secret_data = "{\"AccessKeys\":[{\"AccessKeyId\":\"********\",\"AccessKeySecret\":\"********\"}]}"
        }
      • RDS憑據

        以“雙帳號託管”方式為例介紹如何建立RDS憑據。

      • //建立RDS憑據
        //前提是您已經建立了RDS執行個體rm-7xv1450tq4pj4****,使用者名稱為rdsuser1和rdsuser2,密碼為Admin****。
        resource "alicloud_kms_secret" "kms_secret_RDS_MYSQL" {
          secret_name = "rds_secret/rm-7xv1450tq4pj4****"
          secret_type = "Rds"
          dkms_instance_id = var.kms_instance_id
        
          //用於加密憑據值的密鑰ID。
          encryption_key_id = alicloud_kms_key.aes_key.id
          enable_automatic_rotation = true
          rotation_interval = "7d"
          force_delete_without_recovery = true
        
          extended_config = "{\"SecretSubType\":\"DoubleUsers\", \"DBInstanceId\":\"rm-7xv1450tq4pj4****\" ,\"CustomData\": {}}"
        
          version_id = "V1"
          secret_data_type = "text"
          secret_data = "{\"Accounts\":[{\"AccountName\":\"rdsuser1\",\"AccountPassword\":\"Admin****\"},{\"AccountName\":\"rdsuser2\",\"AccountPassword\":\"Admin****\"}]}"
        }
  2. 執行terraform init命令初始化Terraform運行環境。

  3. 執行terraform plan命令產生資源規劃。

  4. 執行terraform apply命令。