您可以通過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)。
建立一個工作目錄,並且在工作目錄中建立以下名為
main.tf
的設定檔。在
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" } }
在
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****\"}]}" }
執行
terraform init
命令初始化Terraform運行環境。執行
terraform plan
命令產生資源規劃。執行
terraform apply
命令。