Armazenando dados sensíveis em código Terraform utilizando KMS
A grande maioria das ferramentas hoje conta com pelo menos um mecanismo para resolver esse pequeno probleminha. 예를 들어 Ansible Vault에 포함된 Ansible. Terraform은 Vault(Hashicorp에 가입)와 통합된 예를 포함하여 다양한 유형에 포함되어 있습니다.
AWS KMS(키 관리 서비스)를 통해 AWS KMS(키 관리 서비스)를 사용할 수 있고 AWS를 서비스할 수 있고 서비스를 제공할 수 있습니다. 보라라?
KMS의 가장 중요한 문제 중 하나는 Terraform 또는 콘솔의 성능입니다. 가장 먼저 선택해야 하는 옵션은 Terraform의 다른 객체를 선택하는 데 필요한 것입니다. 데이터 원본(aws_iam_policy_document) 및 작업 리소스(aws_kms_key 및 aws_kms_alias). Abaixo uma breve descrição do papel que cada um desempenhará:
aws_iam_policy_document: este é o 데이터 원본 onde definiremos o documento da politica informando usuários e suas eacheverivs permissões reference às chaves e recursos dentro do KMS.
Detalhe: aqui nós estamos utilizando uma policy do tipo resource-based.
Terraform 및 Codigo Terraform:
data "aws_iam_policy_document" "how_to_terraform_kms_pd" {
statement {
sid = "Enable IAM User Permissions"
effect = "Allow"
principals {
type = "AWS"
identifiers = [
"arn:aws:iam::111111111111:root"
]
}
actions = [
"kms:*"
]
resources = [
"*"
]
}
statement {
sid = "Allow use of the key"
effect = "Allow"
principals {
type = "AWS"
identifiers = [
"arn:aws:iam::111111111111:user/meu-usuario"
]
}
actions = [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
]
resources = [
"*"
]
}
statement {
sid = "Allow attachment of persistent resources"
principals {
type = "AWS"
identifiers = [
"arn:aws:iam::111111111111:user/meu-usuario"
]
}
actions = [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
]
resources = [
"*"
]
condition {
test = "Bool"
variable = "kms:GrantIsForAWSResource"
values = [
"true"
]
}
}
}
resource "aws_kms_key" "how_to_terraform_kms" {
description = "Teste de criptografia com KMS"
key_usage = "ENCRYPT_DECRYPT"
customer_master_key_spec = "SYMMETRIC_DEFAULT"
policy = data.aws_iam_policy_document.how_to_terraform_kms_pd.json
}
resource "aws_kms_alias" "how_to_terraform_kms_alias" {
name = "alias/how_to_terraform_kms"
target_key_id = aws_kms_key.how_to_terraform_kms.key_id
}
output "how_to_terraform_kms_id" {
value = aws_kms_key.how_to_terraform_kms.key_id
}
Nota: no data source
how_to_terraform_kms_pd
, nós definimos o account ID como 111111111111 e o usuário como meu-usuario. Ajuste esses valores para o seu caso.
Após um
terraform plan
e um terraform apply
os recursos já devem estar는 AWS에 대해 이야기합니다. Note que há também um output
que imprime o ID da chave recém-criada e caso você opte por Consultá-lo diretamente na Console, o mesmo pode ser removido.Com a chave pronta para uso, agora é hora de criptografar algo. E é aí que o nosso velho amigo AWS CLI entra em cena. para isso o seguinte comando 활용:
aws kms encrypt --key-id ${key_id} \
--plaintext ${texto_a_ser_criptografado} \
--output text \
--query CiphertextBlob
Nota: não se esqueça que você deve ter exportado as variáveis como
AWS_SECRET_ACCESS_KEY
eAWS_ACCESS_KEY_ID
corretamente no seu terminal para acessar sua conta.
Se tudo der certo, o valor criptografado deve aparecer na tela.
Neste momento você deve estar se perguntando "OK, mas o propósito não era esconder as coisas no código do Terraform?". Estamos chegando 라. Este valor criptografado que nós geramos utilizando o AWS CLI pod ser resgatado dentro do próprio Terraform, que Consulta o o KMS durante sua execução utilizando o data source aws_kms_secrets da seguinte forma:
data "aws_kms_secrets" "teste_kms" {
secret {
name = "valor_resgatado"
payload = "AQICAHhAVXI4s1jnWVzWUxKnuk9yI2/aDoEQu8vyYkhh0tUC2QEMKXf54sQFje6ImNjDyraEAAAAcjBwBgkqhkiG9w0BBwagYzBhAgEAMFwGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMoKPEjuATAOXqrzraAgEQgC9Kwf2DiUTxrDy0g8kggiLc+bhWhuYLDQaB/DhsMxyV9pD6ROsT/boZztyJFD30oQ=="
}
}
output "valor_resgatado" {
value = data.aws_kms_secrets.teste_kms.plaintext["valor_resgatado"]
}
Dentro do bloco secret do data source você deve dar um nome único para referencenciá-lo eo seu valor criptográfico. 차브를 알리는 것이 필요하지 않은 경우 페이로드를 계속 사용할 수 없습니다. 메모를 사용하여 비밀 번호를 참조할 수 있습니다
data.aws_kms_secrets.teste_kms.plaintext["valor_resgatado"]
. Você pode incluir quantos blocossecret
quiser dentro do 데이터 소스.참조
Reference
이 문제에 관하여(Armazenando dados sensíveis em código Terraform utilizando KMS), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/stefanomartins/armazenando-dados-sensiveis-em-codigo-terraform-utilizando-kms-49fi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)