Anda dapat menggunakan Terraform untuk membuat dan mengelola secret. Topik ini memberikan contoh cara membuat secret.
Ikhtisar
Key Management Service (KMS) menggunakan kunci tertentu untuk mengenkripsi dan melindungi secret. Sebelum membuat secret, Anda harus terlebih dahulu membuat kunci. Untuk informasi selengkapnya tentang secret, lihat Ikhtisar Manajemen Secret.
Kode contoh dalam topik ini mendukung eksekusi satu klik. Anda dapat menjalankan kode tersebut secara langsung. Jalankan kode
Prasyarat
Akun Alibaba Cloud memiliki izin penuh atas semua resource. Jika kredensial identitas Akun Alibaba Cloud bocor, resource Anda akan menghadapi risiko keamanan tinggi. Kami menyarankan agar Anda membuat pengguna Resource Access Management (RAM) beserta Pasangan Kunci Akses (AccessKey pair)-nya. Untuk informasi selengkapnya, lihat Buat RAM user dan Buat Pasangan Kunci Akses.
Berikan izin berikut kepada pengguna RAM: AliyunKMSFullAccess (untuk mengelola Key Management Service) dan AliyunRAMFullAccess (untuk mengelola Resource Access Management). Untuk informasi selengkapnya, lihat Berikan izin kepada RAM user.
{ "Version": "1", "Statement": [ { "Action": "kms:*", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Condition": { "StringEquals": { "ram:ServiceName": [ "secretsmanager-rds.kms.aliyuncs.com", "keystore.kms.aliyuncs.com" ] } }, "Resource": "*", "Effect": "Allow" } ] }Persiapkan lingkungan Terraform. Anda dapat menggunakan Terraform dengan salah satu cara berikut:
Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan lingkungan online untuk Terraform sehingga Anda tidak perlu menginstal Terraform. Setelah login, Anda dapat langsung menggunakan dan menguji Terraform secara online. Metode ini cocok untuk skenario pengujian dan debugging Terraform yang cepat, nyaman, dan tanpa biaya.
Cloud Shell: Komponen Terraform telah dipra-instal di Alibaba Cloud Cloud Shell dan kredensial identitas telah dikonfigurasi. Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario akses dan penggunaan Terraform yang cepat, nyaman, dan berbiaya rendah.
Instal dan konfigurasi Terraform di komputer Anda: Metode ini cocok untuk skenario dengan konektivitas jaringan yang buruk atau ketika Anda memerlukan lingkungan pengembangan kustom.
Pastikan versi Terraform Anda adalah 0.12.28 atau lebih baru. Untuk memeriksa versi, jalankan perintah terraform --version.
Resource yang digunakan
alicloud_kms_secret: Membuat dan mengelola secret.
alicloud_vpc: Membuat virtual private cloud (VPC).
alicloud_vswitch: Membuat virtual switch (vSwitch) untuk membagi VPC menjadi satu atau beberapa subnet.
alicloud_kms_instance: Membeli dan mengaktifkan instans manajemen kunci perangkat lunak.
alicloud_kms_key: Membuat dan mengelola kunci.
alicloud_kms_alias: Membuat dan mengelola alias.
Buat secret menggunakan Terraform
Atur sensitive = true untuk secret_data (nilai secret) guna mencegah nilai secret sensitif dicetak di log atau pada Konsol. Untuk informasi selengkapnya, lihat Lindungi Variabel Input Sensitif.
Contoh ini menunjukkan cara membuat secret generik.
Buat direktori kerja dan buat file konfigurasi bernama
main.tfdi dalam direktori tersebut.Tambahkan konten berikut ke
main.tf. Sebelum melanjutkan, pastikan Anda telah membuat instans KMS dan kunci:PentingKunci yang digunakan untuk mengenkripsi nilai secret harus berupa kunci simetris.
Buat instans KMS:
variable "region" { default = "cn-heyuan" } provider "alicloud" { region = var.region } variable "instance_name" { default = "tf-kms-vpc-172-16" } # Buat VPC. resource "alicloud_vpc" "vpc" { vpc_name = var.instance_name cidr_block = "192.168.0.0/16" } # Buat vSwitch dengan blok CIDR 192.168.10.0/24. resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "192.168.10.0/24" zone_id = "cn-heyuan-a" vswitch_name = "terraform-example-1" } # Buat vSwitch lain dengan blok CIDR 192.168.20.0/24. resource "alicloud_vswitch" "vsw1" { vpc_id = alicloud_vpc.vpc.id cidr_block = "192.168.20.0/24" zone_id = "cn-heyuan-b" vswitch_name = "terraform-example-2" } # Buat instans manajemen kunci perangkat lunak dan mulai dengan parameter jaringan. resource "alicloud_kms_instance" "default" { # Instans manajemen kunci perangkat lunak. product_version = "3" vpc_id = alicloud_vpc.vpc.id # Tentukan zona untuk instans KMS. Gunakan ID zona yang diperoleh sebelumnya. zone_ids = [ "cn-heyuan-a", "cn-heyuan-b", ] # ID vSwitch. vswitch_ids = [ alicloud_vswitch.vsw.id,alicloud_vswitch.vsw1.id ] # Performa komputasi, jumlah kunci, jumlah secret, dan jumlah operasi manajemen akses. vpc_num = "1" key_num = "1000" secret_num = "100" spec = "1000" # Opsional: Asosiasikan VPC lain dengan instans KMS. # Jika VPC dan VPC instans KMS berada di akun Alibaba Cloud yang berbeda, Anda harus terlebih dahulu berbagi vSwitch. #bind_vpcs { #vpc_id = "vpc-j6cy0l32yz9ttxfy6****" #vswitch_id = "vsw-j6cv7rd1nz8x13ram****" #region_id = "cn-shanghai" #vpc_owner_id = "119285303511****" #} #bind_vpcs { #vpc_id = "vpc-j6cy0l32yz9ttd7g3****" #vswitch_id = "vsw-3h4yrd1nz8x13ram****" #region_id = "cn-shanghai" #vpc_owner_id = "119285303511****" #} } # Simpan sertifikat CA instans KMS ke file lokal. resource "local_file" "ca_certificate_chain_pem" { content = alicloud_kms_instance.default.ca_certificate_chain_pem filename = "ca.pem" }Buat kunci di instans KMS:
# Kunci ini memiliki spesifikasi Aliyun_AES_256 dan digunakan untuk enkripsi dan dekripsi (ENCRYPT/DECRYPT). resource "alicloud_kms_key" "kms_software_key_encrypt_decrypt" { description = "default_key_encrypt_decrypt description" # Penggunaan kunci. Default: ENCRYPT/DECRYPT. Nilai valid: ENCRYPT/DECRYPT, yang menunjukkan bahwa kunci digunakan untuk mengenkripsi atau mendekripsi data. key_usage = "ENCRYPT/DECRYPT" # Spesifikasi kunci. Default: Aliyun_AES_256. key_spec = "Aliyun_AES_256" # ID instans KMS. dkms_instance_id = alicloud_kms_instance.default.id pending_window_in_days = 7 # Opsional: Peta tag yang ditetapkan ke resource. # tags = { # "Environment" = "Production" # "Name" = "KMS-01" # "SupportTeam" = "PlatformEngineering" # "Contact" = "ali***@test.com" # } } # Alias kunci adalah alias/kms_software_key_encrypt_decrypt, yang harus unik dalam Akun Alibaba Cloud. resource "alicloud_kms_alias" "kms_software_key_encrypt_decrypt_alias" { # Alias. alias_name = "alias/kms_software_key_encrypt_decrypt" # ID kunci. key_id = alicloud_kms_key.kms_software_key_encrypt_decrypt.id }Tambahkan konten berikut ke
main.tfuntuk membuat secret.Secret generik
# Buat secret generik bernama kms_secret_general1 dengan nilai secret_data_kms_secret_general1. resource "alicloud_kms_secret" "kms_secret_general" { # Nama. secret_name = "kms_secret_general1" # Deskripsi. description = "secret_data_kms_secret_general" # Tipe. secret_type = "Generic" # Menentukan apakah secret akan langsung dihapus. Default: false. Nilai valid: true, false. force_delete_without_recovery = true # ID instans KMS. dkms_instance_id = alicloud_kms_instance.default.id # ID kunci KMS. encryption_key_id = alicloud_kms_key.kms_software_key_encrypt_decrypt.id # ID versi. version_id = "v1" # Tipe nilai. Default: text. Nilai valid: text, binary. secret_data_type = "text" # Data. secret_data = "secret_data_kms_secret_general1" }Kredensial RAM
# Contoh pembuatan secret RAM. # Sebelum memulai, buat RAM user dan AccessKey yang ingin Anda buat sebagai secret RAM terkelola. # Proses ini terdiri dari dua langkah. # Langkah 1: Berikan izin kepada KMS untuk mengelola AccessKey RAM user. # 1.1 Buat kebijakan kustom bernama 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 Buat peran RAM bernama 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 Sambungkan kebijakan AliyunKMSManagedRAMCrendentialsRolePolicy ke peran AliyunKMSManagedRAMCrendentialsRole. 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 } # Langkah 2: Buat secret RAM. resource "alicloud_kms_secret" "kms_secret_RAMCredentials" { # Nama secret. secret_name = "my_secret" # Deskripsi. description = "secret_kms_secret_RAMCredentials" # Tipe secret. secret_type = "RAMCredentials" # ID instans KMS. dkms_instance_id = alicloud_kms_instance.default.id # ID kunci yang digunakan untuk mengenkripsi nilai secret. encryption_key_id = alicloud_kms_key.kms_software_key_encrypt_decrypt.id # Menentukan apakah secret akan langsung dihapus. Default: false. Nilai valid: true, false. force_delete_without_recovery = true # Menentukan apakah rotasi otomatis diaktifkan. Default: false. Nilai valid: true, false. enable_automatic_rotation = true # Interval rotasi otomatis. rotation_interval = "7d" # Konfigurasi tambahan. Ganti nilai UserName dengan username Anda. extended_config = "{\"SecretSubType\":\"RamUserAccessKey\", \"UserName\":\"testuser\"}" # Versi. version_id = "V1" # Tipe nilai secret. Default: text. Nilai valid: text, binary. secret_data_type ="text" # Data. secret_data = "{\"AccessKeys\":[{\"AccessKeyId\":\"LTAI****************\",\"AccessKeySecret\":\"yourAccessKeySecret\"}]}" }Rahasia RDS
Contoh ini menunjukkan cara membuat secret RDS dalam mode hosting akun ganda.
variable "region" { default = "cn-hangzhou" } provider "alicloud" { region = var.region } variable "zone_id" { default = "cn-hangzhou-b" } variable "instance_type" { default = "pg.n2.2c.2m" } # Buat VPC. resource "alicloud_vpc" "main" { vpc_name = "alicloud" cidr_block = "172.16.0.0/16" } # Buat vSwitch. resource "alicloud_vswitch" "main" { vpc_id = alicloud_vpc.main.id cidr_block = "172.16.192.0/20" zone_id = var.zone_id depends_on = [alicloud_vpc.main] } # Buat instans ApsaraDB RDS for PostgreSQL. resource "alicloud_db_instance" "instance" { engine = "PostgreSQL" engine_version = "13.0" instance_type = var.instance_type instance_storage = "30" instance_charge_type = "Postpaid" vswitch_id = alicloud_vswitch.main.id } # Buat secret RDS. resource "alicloud_kms_secret" "kms_secret_RDS_MYSQL" { # Nama secret. secret_name = "rds_secret/${alicloud_db_instance.id}" # Tipe. secret_type = "Rds" # ID instans KMS. dkms_instance_id = alicloud_kms_instance.default.id # ID kunci yang digunakan untuk mengenkripsi nilai secret. encryption_key_id = alicloud_kms_key.kms_software_key_encrypt_decrypt.id # Menentukan apakah rotasi otomatis diaktifkan. Default: false. Nilai valid: true, false. enable_automatic_rotation = true # Interval rotasi otomatis. rotation_interval = "7d" # Menentukan apakah secret akan langsung dihapus. Default: false. Nilai valid: true, false. force_delete_without_recovery = true # Konfigurasi. extended_config = "{\"SecretSubType\":\"DoubleUsers\", \"DBInstanceId\":\"rm-7xv1450tq4pj4****\" ,\"CustomData\": {}}" # Versi. version_id = "V1" # Tipe nilai secret. Default: text. Nilai valid: text, binary. secret_data_type = "text" # Data. secret_data = "{\"Accounts\":[{\"AccountName\":\"rdsuser1\",\"AccountPassword\":\"Admin****\"},{\"AccountName\":\"rdsuser2\",\"AccountPassword\":\"Admin****\"}]}" }
Jalankan perintah berikut untuk menginisialisasi lingkungan Terraform.
terraform initTerraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future. Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.Buat rencana eksekusi dan pratinjau perubahan.
terraform planJalankan perintah berikut untuk membuat secret generik.
terraform applyPada prompt, masukkan
yesdan tekan Enter. Tunggu hingga perintah selesai. Jika output berikut dikembalikan, secret generik berhasil dibuat.Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes ... alicloud_kms_key.kms_software_key_encrypt_decrypt: Creation complete after 0s [id=key-shh6715c21812y8i7z***] alicloud_kms_alias.kms_software_key_encrypt_decrypt_alias: Creating... alicloud_kms_secret.kms_secret_general: Creating... alicloud_kms_alias.kms_software_key_encrypt_decrypt_alias: Creation complete after 0s [id=alias/kms_secret] alicloud_kms_secret.kms_secret_general: Creation complete after 1s [id=kms_secret_general1] ... Apply complete! Resources: 2 added, 0 changed, 0 destroyed.Hasil verifikasi
Jalankan perintah terraform show
Jalankan perintah berikut untuk mengkueri detail resource yang Anda buat menggunakan Terraform:
terraform show
Login ke Konsol Key Management Service
Login ke Konsol Key Management Service untuk melihat secret yang Anda buat.
Bersihkan resource
Jika Anda tidak lagi memerlukan resource yang dibuat atau dikelola oleh Terraform, jalankan perintah berikut untuk melepaskannya. Untuk informasi selengkapnya tentang perintah terraform destroy, lihat Perintah umum.
terraform destroyContoh lengkap
Kode contoh dalam topik ini mendukung eksekusi satu klik. Anda dapat menjalankan kode tersebut secara langsung. Jalankan kode