Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] - Sensitive values causing error in Terraform apply #109

Closed
ghost opened this issue Dec 23, 2020 · 4 comments
Closed

[BUG] - Sensitive values causing error in Terraform apply #109

ghost opened this issue Dec 23, 2020 · 4 comments
Labels
bug 🐛 An issue with the system

Comments

@ghost
Copy link

ghost commented Dec 23, 2020

Dear all,

I came across this error in terraform 0.14.3. I believe it has something to do with it here.

https://www.terraform.io/upgrade-guides/0-14.html#sensitive-values-in-plan-output

Error: Error in function call

  on .terraform/modules/prizor-chatbot-campaign-worker/main.tf line 6, in locals:
   6:   env_vars_as_map      = zipmap(local.env_vars_keys, local.env_vars_values)
    |----------------
    | local.env_vars_keys is (sensitive value)
    | local.env_vars_values is (sensitive value)

Call to function "zipmap" failed: panic in function implementation: value is
marked, so must be unmarked first
@ghost ghost added the bug 🐛 An issue with the system label Dec 23, 2020
@ghost ghost closed this as completed Dec 24, 2020
@mikedizon
Copy link

@0xdutra i'm having the same issue. what was the fix?

@jhole89
Copy link

jhole89 commented Jan 19, 2021

Same here, @0xdutra did you find a workaround?

@ghost
Copy link
Author

ghost commented Jan 19, 2021

@jhole89
unfortunately not yet, I'm using 0.13.5 :/

@jhole89
Copy link

jhole89 commented Jan 19, 2021

@0xdutra @mikedizon I managed to use a workaround via secretsmanager (TF v0.14.3, AWS provider v3.24.0, cloudposse/ecs-container-definition v0.46.1).

When previously I had the value stored in the environment block (causing the panic), you can avoid this by moving the value into secretsmanager and passing this arn to the secrets block - but you need to give the execution_role_arn permission to access this, e.g.:

resource "aws_secretsmanager_secret" "foo" {
  name  = "sensitive_foo"
}

resource "aws_secretsmanager_secret_version" "foo" {
  secret_id     = aws_secretsmanager_secret.foo.id
  secret_string = "I am the sensitive value - I most likely come from some other terraform resource"
}

module "container_definition" {
  source  = "cloudposse/ecs-container-definition/aws"
  version = "0.46.1"

  ...
  ...

  environment = []
  secrets = [
    {
      name : "MY_ENVAR_KEY",
      valueFrom : aws_secretsmanager_secret.foo.arn
    },
  ]
}

data "aws_iam_policy_document" "allow_secrets_access" {     // <-- Attach this to your ecs_execution_role
  statement {
    actions = [
      "secretsmanager:GetSecretValue",
    ]
    resources = [
      aws_secretsmanager_secret.foo.arn,
    ]
  }
}

An additional note is that if you use kms to securely store secrets, you'd also need to give "kms:Decrypt", "kms:DescribeKey", "kms:GenerateDataKey" to the kms key used for the secret to the ecs_execution_role, something like:

data "aws_iam_policy_document" "allow_kms" {
  statement {
    actions = [
      "kms:Decrypt",
      "kms:DescribeKey",
      "kms:GenerateDataKey",
    ]
    resources = [
      aws_kms_key.sensitive_foo.arn,
    ]
  }

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 🐛 An issue with the system
Projects
None yet
Development

No branches or pull requests

2 participants