All Products
Search
Document Center

Key Management Service:Buat AAP dengan Terraform

Last Updated:Jul 02, 2025

Anda dapat menggunakan Terraform untuk membuat dan mengelola titik akses aplikasi (AAP). Topik ini menjelaskan cara membuat AAP.

Ikhtisar

Sebelum aplikasi yang dikelola sendiri melakukan operasi kriptografi atau mengambil rahasia, aplikasi tersebut harus menggunakan kunci klien dari AAP yang diperlukan untuk mengakses instance Key Management Service (KMS) Anda.

Catatan

Jika Anda menggunakan kunci dalam instance KMS untuk enkripsi sisi server di layanan Alibaba Cloud atau memanggil SDK KMS untuk menggunakan rahasia, Anda tidak perlu membuat AAP. Namun, jika Anda ingin memanggil SDK Instance KMS untuk menggunakan kunci atau rahasia dalam instance KMS, Anda harus membuat AAP.

Catatan

Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik. Untuk informasi lebih lanjut, kunjungi Terraform Explorer.

Prasyarat

  • Akun Alibaba Cloud memiliki izin penuh pada semua sumber daya yang dimiliki akun tersebut. Jika kredensial akun Alibaba Cloud bocor, risiko keamanan mungkin muncul. Kami menyarankan Anda menggunakan Pengguna Resource Access Management (RAM) dan membuat pasangan AccessKey untuk pengguna RAM. Untuk informasi lebih lanjut, lihat Buat pengguna RAM dan Buat pasangan AccessKey.

  • Kode berikut memberikan contoh tentang cara memberikan izin kepada pengguna RAM. Pastikan bahwa kebijakan AliyunKMSFullAccess dilampirkan ke pengguna RAM. Untuk informasi lebih lanjut, lihat Berikan izin kepada pengguna RAM.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "kms:*"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {}
        }
      ]
    }
  • Lingkungan runtime untuk Terraform disiapkan dengan menggunakan salah satu metode berikut:

    Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan lingkungan runtime online untuk Terraform. Anda dapat masuk ke lingkungan Terraform Explorer untuk menggunakan Terraform tanpa perlu menginstal Terraform. Metode ini cocok untuk skenario di mana Anda ingin menggunakan dan men-debug Terraform dengan cepat dan nyaman tanpa biaya tambahan.

    Gunakan Terraform di Cloud Shell: Terraform sudah diinstal sebelumnya di Cloud Shell, dan kredensial identitas telah dikonfigurasi. Anda dapat menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario di mana Anda ingin menggunakan dan men-debug Terraform dengan cepat dan nyaman dengan biaya rendah.

    Instal dan konfigurasikan Terraform di mesin lokal Anda: Metode ini cocok untuk skenario di mana koneksi jaringan tidak stabil atau lingkungan pengembangan kustom diperlukan.

    Penting

    Anda harus menginstal Terraform versi 0.12.28 atau yang lebih baru. Anda dapat menjalankan perintah terraform --version untuk memeriksa versi Terraform.

Sumber daya yang Diperlukan

Buat AAP dengan Terraform

Dalam contoh berikut, sebuah AAP dibuat dalam instance KMS.

  1. Buat direktori kerja dan file konfigurasi bernama main.tf di direktori kerja. File main.tf adalah file utama Terraform dan mendefinisikan sumber daya yang ingin Anda deploy. Pastikan instance KMS telah dibuat terlebih dahulu.

    variable "region" {
      default = "cn-heyuan"
    }
    provider "alicloud" {
      region = var.region
    }
    variable "instance_name" {
      default = "tf-kms-vpc-172-16"
    }
    variable "instance_type" {
      default = "ecs.n1.tiny"
    }
    # Gunakan sumber data untuk mendapatkan informasi tentang zona yang tersedia. Anda hanya dapat membuat sumber daya di zona tertentu.
    data "alicloud_zones" "default" {
      available_disk_category     = "cloud_efficiency"
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    # Buat virtual private cloud (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    = data.alicloud_zones.default.zones.0.id
      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    = data.alicloud_zones.default.zones.0.id
      vswitch_name = "terraform-example-2"
    }
    # Buat instance tipe manajemen kunci perangkat lunak dan konfigurasikan parameter jaringan untuk mengaktifkan instance.
    resource "alicloud_kms_instance" "default" {
      # Instance tipe manajemen kunci perangkat lunak.
      product_version = "3"
      vpc_id          = alicloud_vpc.vpc.id
      # Tentukan zona untuk instance KMS dengan menggunakan ID zona yang diperoleh.
      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 rahasia, dan kuota manajemen akses.
      vpc_num    = "1"
      key_num    = "1000"
      secret_num = "100"
      spec       = "1000"
      # Asosiasikan VPC lain dengan instance. Parameter ini opsional.
      # Jika dua VPC milik akun Alibaba Cloud yang berbeda, Anda harus terlebih dahulu membagikan vSwitch di VPC kedua dengan VPC pertama.
      #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 otoritas sertifikat (CA) instance ke file lokal.
     resource "local_file" "ca_certificate_chain_pem" {
     content  = alicloud_kms_instance.default.ca_certificate_chain_pem
     filename = "ca.pem"
    }

    Buat AAP:

    # Buat aturan jaringan.
    resource "alicloud_kms_network_rule" "network_rule_example" {
      # Nama aturan jaringan.
      network_rule_name = "sample_network_rule"
      # Deskripsi aturan jaringan.
      description = "description_test_module"
      # Rentang alamat IP pribadi sumber yang diizinkan.
      source_private_ip = ["172.16.0.0/12"]
    }
    # Buat kebijakan kontrol akses.
    resource "alicloud_kms_policy" "policy_example" {
      # Nama kebijakan.
      policy_name = "sample_policy"
      # Deskripsi kebijakan.
      description = "description_test_module"
      # Daftar izin yang ditentukan, termasuk izin untuk menggunakan kunci dan izin untuk mengakses kunci.
      permissions = ["RbacPermission/Template/CryptoServiceKeyUser", "RbacPermission/Template/CryptoServiceSecretUser"]
      # Daftar sumber daya, yang menunjukkan semua kunci dan rahasia.
      resources = ["key/*", "secret/*"]
      # ID instance KMS.
      kms_instance_id = alicloud_kms_instance.default.id
      # Aturan kontrol akses dalam format JSON. Aturan jaringan yang ditentukan di bagian sebelumnya digunakan.
      access_control_rules = <<EOF
      {
          "NetworkRules":[
              "alicloud_kms_network_rule.network_rule_example.network_rule_name"
          ]
      }
      EOF
    }
    
    # Buat AAP.
    resource "alicloud_kms_application_access_point" "application_access_point_example" {
      # Nama AAP.
      application_access_point_name = "sample_aap"
      # Daftar kebijakan yang terkait. Kebijakan kontrol akses yang ditentukan di bagian sebelumnya digunakan.
      policies = [alicloud_kms_policy.policy_example.policy_name]
      # Deskripsi AAP.
      description = "aap_description"
    }
    
    # Buat kunci klien.
    resource "alicloud_kms_client_key" "client_key" {
      # Nama AAP yang ditentukan.
      aap_name = alicloud_kms_application_access_point.application_access_point_example.application_access_point_name
      # Kata sandi kunci klien. Tentukan kata sandi kustom.
      password = "testPassword@"
      # Waktu mulai periode validitas kunci klien.
      not_before = "2023-09-01T14:11:22Z"
      not_after  = "2032-09-01T14:11:22Z"
      # Jalur file lokal yang menyimpan kunci klien.
      private_key_data_file = "./client_key.json"
    
    }
    Penting
    • Setelah AAP dibuat, Anda harus mendapatkan kunci klien melalui jalur file lokal dan menyimpan kunci klien di lokasi yang aman.

    • Anda dapat mengonfigurasi parameter kata sandi menggunakan input sensitif Terraform.

  2. Jalankan perintah berikut untuk menginisialisasi lingkungan runtime untuk Terraform:

    terraform init

    Jika informasi berikut dikembalikan, Terraform telah diinisialisasi:

    Menginisialisasi backend...
    
    Menginisialisasi plugin penyedia...
    - Menggunakan kembali versi sebelumnya dari hashicorp/alicloud dari file kunci dependensi
    - Menggunakan hashicorp/alicloud v1.231.0 yang diinstal sebelumnya
    
    Terraform berhasil diinisialisasi!
    
    Anda sekarang dapat mulai bekerja dengan Terraform. Coba jalankan "terraform plan" untuk melihat
    perubahan apa pun yang diperlukan untuk infrastruktur Anda. Semua perintah Terraform
    seharusnya sekarang berfungsi.
    
    Jika Anda pernah mengatur atau mengubah modul atau konfigurasi backend untuk Terraform,
    jalankan ulang perintah ini untuk menginisialisasi ulang direktori kerja Anda. Jika Anda lupa, perintah lain
    akan mendeteksinya dan mengingatkan Anda untuk melakukannya jika perlu.
  3. Buat rencana eksekusi dan pratinjau perubahan.

    terraform plan
  4. Jalankan perintah berikut untuk membuat AAP:

    terraform apply

    Selama eksekusi, masukkan yes sesuai prompt dan tekan tombol Enter. Tunggu hingga perintah dieksekusi. Jika informasi berikut dikembalikan, AAP telah dibuat:

    Apakah Anda ingin melakukan tindakan ini?
      Terraform akan melakukan tindakan yang dijelaskan di atas.
      Hanya 'yes' yang akan diterima untuk menyetujui.
    
      Masukkan nilai: yes
    
    ...
    alicloud_kms_network_rule.network_rule_example: Membuat...
    alicloud_kms_policy.policy_example: Membuat...
    alicloud_kms_network_rule.network_rule_example: Pembuatan selesai setelah 0s [id=sample_network_***]
    alicloud_kms_policy.policy_example: Pembuatan selesai setelah 0s [id=sample_pol***]
    alicloud_kms_application_access_point.application_access_point_example: Membuat...
    alicloud_kms_application_access_point.application_access_point_example: Pembuatan selesai setelah 0s [id=sample_***]
    alicloud_kms_client_key.client_key: Pembuatan selesai setelah 0s [id=KAAP.5093ea57-0b84-4455-a8e9-7679bdc****]
    ...
    
    Penerapan selesai! Sumber daya: 4 ditambahkan, 0 diubah, 0 dihapus.
  5. Verifikasi hasilnya.

    Jalankan perintah terraform show

    Anda dapat menjalankan perintah berikut untuk memeriksa sumber daya yang dibuat menggunakan Terraform:

    terraform show

    image

    Masuk ke konsol KMS

    Masuk ke KMS console untuk melihat AAP yang telah dibuat.image

Rilis sumber daya

Jika Anda tidak lagi memerlukan sumber daya yang dibuat atau dikelola menggunakan Terraform, jalankan perintah berikut untuk melepaskan sumber daya. Untuk informasi lebih lanjut tentang terraform destroy, lihat Perintah umum.

terraform destroy

Kode contoh lengkap

Catatan

Anda dapat menjalankan kode contoh dengan beberapa klik. Untuk informasi lebih lanjut, kunjungi Terraform Explorer.

Kode contoh

variable "region" {
  default = "cn-heyuan"
}
provider "alicloud" {
  region = var.region
}
variable "instance_name" {
  default = "tf-kms-vpc-172-16"
}
variable "instance_type" {
  default = "ecs.n1.tiny"
}
# Gunakan sumber data untuk mendapatkan informasi tentang zona yang tersedia. Anda hanya dapat membuat sumber daya di zona tertentu.
data "alicloud_zones" "default" {
  available_disk_category     = "cloud_efficiency"
  available_resource_creation = "VSwitch"
  available_instance_type     = var.instance_type
}
# 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    = data.alicloud_zones.default.zones.0.id
  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    = data.alicloud_zones.default.zones.0.id
  vswitch_name = "terraform-example-2"
}
# Buat instance tipe manajemen kunci perangkat lunak dan konfigurasikan parameter jaringan untuk mengaktifkan instance.
resource "alicloud_kms_instance" "default" {
  # Instance tipe manajemen kunci perangkat lunak.
  product_version = "3"
  vpc_id          = alicloud_vpc.vpc.id
  # Tentukan zona untuk instance KMS dengan menggunakan ID zona yang diperoleh.
  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 rahasia, dan kuota manajemen akses.
  vpc_num    = "1"
  key_num    = "1000"
  secret_num = "100"
  spec       = "1000"
  # Asosiasikan VPC lain dengan instance. Parameter ini opsional.
  # Jika dua VPC milik akun Alibaba Cloud yang berbeda, Anda harus terlebih dahulu membagikan vSwitch di VPC kedua dengan VPC pertama.
  #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 instance ke file lokal.
 resource "local_file" "ca_certificate_chain_pem" {
 content  = alicloud_kms_instance.default.ca_certificate_chain_pem
 filename = "ca.pem"
}
# Buat aturan jaringan.
resource "alicloud_kms_network_rule" "network_rule_example" {
  # Nama aturan jaringan.
  network_rule_name = "sample_network_rule"
  # Deskripsi aturan jaringan.
  description = "description_test_module"
  # Rentang alamat IP pribadi sumber yang diizinkan.
  source_private_ip = ["172.16.0.0/12"]
}

# Buat kebijakan kontrol akses.
resource "alicloud_kms_policy" "policy_example" {
  # Nama kebijakan.
  policy_name = "sample_policy"
  # Deskripsi kebijakan.
  description = "description_test_module"
  # Daftar izin yang ditentukan, termasuk izin untuk menggunakan kunci dan izin untuk mengakses kunci.
  permissions = ["RbacPermission/Template/CryptoServiceKeyUser", "RbacPermission/Template/CryptoServiceSecretUser"]
  # Daftar sumber daya, yang menunjukkan semua kunci dan rahasia.
  resources = ["key/*", "secret/*"]
  # ID instance KMS.
  kms_instance_id = alicloud_kms_instance.default.id
  # Aturan kontrol akses dalam format JSON. Aturan jaringan yang ditentukan di bagian sebelumnya digunakan.
  access_control_rules = <<EOF
  {
      "NetworkRules":[
          "alicloud_kms_network_rule.network_rule_example.network_rule_name"
      ]
  }
  EOF
}

# Buat AAP.
resource "alicloud_kms_application_access_point" "application_access_point_example" {
  # Nama AAP.
  application_access_point_name = "sample_aap"
  # Daftar kebijakan yang terkait. Kebijakan kontrol akses yang ditentukan di bagian sebelumnya digunakan.
  policies = [alicloud_kms_policy.policy_example.policy_name]
  # Deskripsi AAP.
  description = "aap_description"
}

# Buat kunci klien.
resource "alicloud_kms_client_key" "client_key" {
  # Nama AAP yang ditentukan.
  aap_name = alicloud_kms_application_access_point.application_access_point_example.application_access_point_name
  # Kata sandi kunci klien. Tentukan kata sandi kustom.
  password = "testPassword@"
  # Waktu mulai periode validitas kunci klien.
  not_before = "2023-09-01T14:11:22Z"
  not_after  = "2032-09-01T14:11:22Z"
  # Jalur file lokal yang menyimpan kunci klien.
  private_key_data_file = "./client_key.json"
}