Tengo una política de IAM existente adjunta a un rol. Cada vez que se crea un nuevo secreto en Secrets Manager, necesito agregar el nuevo ARN a la política. ¿Se puede hacer esto con Terraform? Logré importar la política en el archivo terraform.state, pero no sé cómo: 1) Agregar un nuevo ARN dentro de la lista de "Recursos" 2) Enviar el cambio a AWS
Así es como se ve la política ahora:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "SECRET_ARN_1", "SECRET_ARN_2", "SECRET_ARN_3" ] }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "KMS_ARN" } ]}
Y así es como necesito que se vea:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "SECRET_ARN_1", "SECRET_ARN_2", "SECRET_ARN_3", "MY_BRAND_NEW_SECRET_ARN" ] }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "KMS_ARN" } ]}
La siguiente importación funciona al importar la política existente al objeto aws_iam_policy.mysimplepolicy, pero no sé cómo proceder desde aquí.
terraform import aws_iam_policy.mysimplepolicy <MY_POLICY_ARN>Parece que ya descubrió cómo importar la póliza a su estado. Ahora debe definir el recurso en su código de Terraform para que coincida con la política.
Primero, defina variables para los ARN:
variable "secret_arns" { description = "A list of secret manager ARNs that the IAM policy should permit access to." type = list(string) } variable "kms_key_arns" { description = "A list of KMS Key ARNs that the IAM policy should permit access to." type = list(string) }A continuación, defina el documento de política como fuente de datos, utilizando las variables:
data "aws_iam_policy_document" "secret_access" { statement { sid = "SecretsAccess" actions = ["secretsmanager:GetSecretValue"] resources = var.secret_arns effect = "Allow" } statement { sid = "KMSAccess" actions = "kms:Decrypt" resources = var.kms_key_arns effect = "Allow" } }Ahora cree una política utilizando la fuente de datos:
resource "aws_iam_policy" "mysimplepolicy" { name = "MySimplePolicy" # Make sure this has the name you want policy = data.aws_iam_policy_document.secret_access.json } Finalmente, cuando llame al código, pase los ARN en sus variables utilizando el método que prefiera. Podría ser desde un archivo terraform.tfvars o en la línea de comando usando la sintaxis -var o como resultado de otro módulo de Terraform que crea los secretos. Por ejemplo:
terraform apply -var='secret_arns=["arn1", "arn2", <etc>]' -var='kms_key_arns=["key-arn1", "key-arn2"]' Cada vez que agrega un elemento nuevo a una de las variables y ejecuta terraform apply , Terraform actualizará la política en consecuencia.
Otra opción, posiblemente más sencilla, sería utilizar la autorización basada en etiquetas. Es decir, modifique la política para otorgar acceso solo a secretos con una etiqueta específica y luego, cuando cree el secreto, agregue esa etiqueta. También hay documentos de ejemplo para hacer esto.