Crie e gerencie pontos de acesso de aplicativo com o Terraform. Este tópico demonstra como criar um ponto de acesso de aplicativo.
Visão geral
Antes que suas aplicações autogerenciadas executem operações criptográficas ou recuperem valores secretos, elas devem usar uma chave de cliente de um ponto de acesso de aplicativo para acessar uma instância do KMS.
O ponto de acesso de aplicativo é necessário apenas ao usar o SDK da instância do KMS para acessar chaves ou segredos. Ele não é obrigatório para criptografia no lado do servidor com outros serviços da Alibaba Cloud nem para acessar segredos com o SDK principal do KMS.
Execute o código de exemplo deste tópico diretamente no Terraform Explorer.
Pré-requisitos
-
Sua conta raiz tem permissões totais sobre todos os recursos. Uma conta raiz comprometida representa riscos significativos de segurança. Recomendamos usar um usuário RAM e criar um par de AccessKey para ele. Para mais informações, consulte Criar um usuário RAM e Criar um AccessKey.
-
Conceda ao usuário RAM a permissão
AliyunKMSFullAccesspara gerenciar o Key Management Service (KMS). Para mais informações, consulte Gerenciar permissões de usuário RAM.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:*" ], "Resource": [ "*" ], "Condition": {} } ] } -
Prepare um ambiente de execução do Terraform. Use um dos métodos abaixo:
Use o Terraform no Terraform Explorer: a Alibaba Cloud oferece um ambiente online para usar o Terraform sem instalação local. Esta opção é ideal para testar e depurar o Terraform de forma rápida, fácil e gratuita.
Usar o Terraform para criar recursos rapidamente: o Cloud Shell da Alibaba Cloud já vem com o Terraform pré-instalado e autenticação pré-configurada. Execute comandos do Terraform diretamente no Cloud Shell. Este método proporciona acesso prático e de baixo custo ao Terraform.
Instalar e configurar o Terraform na sua máquina local: recomendado para ambientes com conectividade de rede limitada ou para usuários que precisam personalizar a configuração de desenvolvimento.
ImportanteCertifique-se de usar o Terraform 0.12.28 ou posterior. Para verificar a versão do Terraform, execute o comando
terraform --version.
Recursos utilizados
alicloud_kms_network_rule: cria uma regra de rede.
alicloud_kms_application_access_point: define um recurso para um ponto de acesso de aplicativo.
alicloud_kms_client_key: define um recurso para uma chave de cliente.
alicloud_kms_policy: cria uma política de controle de acesso.
Procedimento
Este exemplo demonstra como criar um ponto de acesso de aplicativo em uma instância do KMS.
-
Crie um diretório de trabalho e adicione o arquivo de configuração
main.tf. O arquivo main.tf é o arquivo principal do Terraform que define os recursos a implantar. Antes de continuar, certifique-se de ter criado uma instância do KMS.variable "region" { # The ID of the region. This example uses cn-heyuan, which corresponds to the China (Heyuan) 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" } # Use a data source to query availability zones. Resources can be created only in specified availability zones. data "alicloud_zones" "default" { available_disk_category = "cloud_efficiency" available_resource_creation = "VSwitch" available_instance_type = var.instance_type } # Create a Virtual Private Cloud (VPC). resource "alicloud_vpc" "vpc" { vpc_name = var.instance_name cidr_block = "192.168.0.0/16" } # Create a VSwitch with the CIDR block 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" } # Create another VSwitch with the CIDR block 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" } # Create a software key management instance and start it with network parameters. resource "alicloud_kms_instance" "default" { # The type of the KMS instance. A value of 3 specifies a software key management instance. product_version = "3" vpc_id = alicloud_vpc.vpc.id # The availability zones of the KMS instance. Use the IDs of the availability zones that you queried. zone_ids = [ "cn-heyuan-a", "cn-heyuan-b", ] # The IDs of the VSwitches. vswitch_ids = [ alicloud_vswitch.vsw.id,alicloud_vswitch.vsw1.id ] # The performance level, and the maximum number of keys, secrets, and VPCs. vpc_num = "1" key_num = "1000" secret_num = "100" spec = "1000" # (Optional) Associate the KMS instance with other VPCs. # If a VPC and the KMS instance belong to different Alibaba Cloud accounts, you must share the VSwitch first. #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****" #} } # Save the CA certificate of the KMS instance to a local file. resource "local_file" "ca_certificate_chain_pem" { content = alicloud_kms_instance.default.ca_certificate_chain_pem filename = "ca.pem" }Crie o ponto de acesso de aplicativo:
# Create a network rule. resource "alicloud_kms_network_rule" "network_rule_example" { # The name of the network rule. network_rule_name = "sample_network_rule" # The description. description = "description_test_module" # The allowed source private IP address ranges. source_private_ip = ["172.16.0.0/12"] } # Create an access control policy. resource "alicloud_kms_policy" "policy_example" { # The name of the policy. policy_name = "sample_policy" # The description. description = "description_test_module" # The list of permissions, including access to cryptographic service keys and secrets. permissions = ["RbacPermission/Template/CryptoServiceKeyUser", "RbacPermission/Template/CryptoServiceSecretUser"] # The list of resources, which applies to all keys and secrets. resources = ["key/*", "secret/*"] # The ID of the KMS instance. kms_instance_id = alicloud_kms_instance.default.id # The access control rules in JSON format, referencing the previously defined network rule. access_control_rules = <<EOF { "NetworkRules":[ "alicloud_kms_network_rule.network_rule_example.network_rule_name" ] } EOF } # Define the application access point resource. resource "alicloud_kms_application_access_point" "application_access_point_example" { # The name of the application access point. application_access_point_name = "sample_aap" # The list of associated policies, referencing the name of the access control policy created earlier. policies = [alicloud_kms_policy.policy_example.policy_name] # The description of the application access point. description = "aap_description" } # Define the client key resource. resource "alicloud_kms_client_key" "client_key" { # The name of the application access point. aap_name = alicloud_kms_application_access_point.application_access_point_example.application_access_point_name # The password for the client key. Replace this with your own password. password = "testPassword@" # The start time of the validity period for the client key. not_before = "2023-09-01T14:11:22Z" # The end time of the validity period for the client key. not_after = "2032-09-01T14:11:22Z" # The local file path to save the client key. private_key_data_file = "./client_key.json" }ImportanteApós criar o ponto de acesso de aplicativo, recupere a chave de cliente no caminho de arquivo local especificado e mantenha-a confidencial.
Como prática recomendada, defina a
passwordusando variáveis de entrada sensíveis no Terraform para evitar exposição em texto simples.
-
Execute o comando a seguir para inicializar o ambiente do Terraform:
terraform initA saída abaixo indica que a inicialização foi bem-sucedida:
Initializing the backend... Initializing provider plugins... - Reusing previous version of hashicorp/alicloud from the dependency lock file - Using previously-installed hashicorp/alicloud v1.231.0 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. -
Execute o comando a seguir para criar um plano de execução e visualizar as alterações:
terraform plan -
Execute o comando a seguir para criar o ponto de acesso de aplicativo:
terraform applyQuando solicitado, insira
yese pressione Enter. A saída a seguir indica que o ponto de acesso de aplicativo foi criado com sucesso: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_network_rule.network_rule_example: Creating... alicloud_kms_policy.policy_example: Creating... alicloud_kms_network_rule.network_rule_example: Creation complete after 0s [id=sample_network_***] alicloud_kms_policy.policy_example: Creation complete after 0s [id=sample_pol***] alicloud_kms_application_access_point.application_access_point_example: Creating... alicloud_kms_application_access_point.application_access_point_example: Creation complete after 0s [id=sample_***] alicloud_kms_client_key.client_key: Creation complete after 0s [id=KAAP.5093ea57-0b84-4455-a8e9-7679bdc****] ... Apply complete! Resources: 4 added, 0 changed, 0 destroyed. -
Verifique o resultado.
Comando show do Terraform
Execute o comando a seguir para visualizar os detalhes dos recursos criados com o Terraform:
terraform show
Console do KMS
Faça login no console do Key Management Service (KMS) para visualizar o ponto de acesso de aplicativo.

Limpar recursos
Quando não precisar mais dos recursos criados ou gerenciados pelo Terraform, execute o comando a seguir para liberá-los. Para mais informações sobre o comando terraform destroy, consulte Comandos comuns.
terraform destroy
Exemplo completo
Execute o código de exemplo deste tópico diretamente no Terraform Explorer.