Bird
Raised Fist0
Terraformcloud~5 mins

Secret management integration (Vault, Secrets Manager) in Terraform - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the main purpose of secret management tools like Vault or Secrets Manager?
They securely store, manage, and control access to sensitive information such as passwords, API keys, and certificates.
Click to reveal answer
intermediate
How does HashiCorp Vault protect secrets?
Vault encrypts secrets before storing them and controls access through policies and authentication methods.
Click to reveal answer
intermediate
In Terraform, how do you typically retrieve a secret from AWS Secrets Manager?
By using the data source `aws_secretsmanager_secret_version` to fetch the secret value during Terraform runs.
Click to reveal answer
beginner
Why should secrets not be hardcoded in Terraform configuration files?
Hardcoding secrets risks accidental exposure in version control and logs, reducing security.
Click to reveal answer
intermediate
What is a common method to authenticate Terraform with Vault?
Using a Vault token or AppRole authentication to securely access secrets during Terraform runs.
Click to reveal answer
Which Terraform resource is used to fetch a secret from AWS Secrets Manager?
Aaws_secretsmanager_secret_version
Baws_secret
Caws_vault_secret
Daws_secret_manager
What does Vault use to control access to secrets?
ARoles only
BBuckets
CGroups
DPolicies
Why is it important to avoid storing secrets directly in Terraform files?
ATerraform does not support secrets
BIt can cause syntax errors
CIt risks exposing secrets in version control
DIt slows down Terraform runs
Which authentication method is commonly used by Terraform to access Vault?
AAppRole
BOAuth
CSAML
DLDAP
What is a key benefit of using a secret manager service?
AAutomatic code generation
BCentralized and secure secret storage
CFaster application deployment
DReduced cloud costs
Explain how Terraform integrates with Vault or AWS Secrets Manager to manage secrets securely.
Think about how Terraform reads secrets at runtime without exposing them.
You got /4 concepts.
    Describe best practices for secret management in cloud infrastructure using Vault or Secrets Manager.
    Consider security and operational practices to keep secrets safe.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of integrating Terraform with a secret management tool like Vault or AWS Secrets Manager?
      easy
      A. To securely store and access sensitive data like passwords and API keys outside the code
      B. To speed up Terraform plan and apply operations
      C. To automatically generate Terraform configuration files
      D. To monitor cloud resource usage and billing

      Solution

      1. Step 1: Understand secret management purpose

        Secret management tools keep sensitive data safe and separate from code to reduce risk.
      2. Step 2: Connect to Terraform integration goal

        Terraform uses these tools to fetch secrets securely during infrastructure deployment without hardcoding them.
      3. Final Answer:

        To securely store and access sensitive data like passwords and API keys outside the code -> Option A
      4. Quick Check:

        Secret management = Secure external storage [OK]
      Hint: Secrets keep sensitive data out of code [OK]
      Common Mistakes:
      • Thinking secret managers speed up Terraform
      • Confusing secret management with billing tools
      • Assuming secret managers generate configs
      2. Which Terraform block correctly configures AWS Secrets Manager to read a secret named db_password?
      easy
      A. variable "db_password" { default = "aws_secretsmanager_secret.db_password" }
      B. resource "aws_secretsmanager_secret" "example" { name = "db_password" }
      C. provider "aws" { secret_name = "db_password" }
      D. data "aws_secretsmanager_secret_version" "example" { secret_id = "db_password" }

      Solution

      1. Step 1: Identify correct Terraform data source for reading secret

        Terraform uses data "aws_secretsmanager_secret_version" to read secret values from AWS Secrets Manager.
      2. Step 2: Check syntax correctness

        The block uses secret_id = "db_password" to specify the secret name, which is correct for reading.
      3. Final Answer:

        data "aws_secretsmanager_secret_version" "example" { secret_id = "db_password" } -> Option D
      4. Quick Check:

        Read secret = data source block [OK]
      Hint: Use data block to read secrets, not resource [OK]
      Common Mistakes:
      • Using resource block to read secrets
      • Putting secret name in provider block
      • Assigning secret as variable default incorrectly
      3. Given this Terraform snippet using Vault provider:
      data "vault_generic_secret" "db" {
        path = "secret/data/database"
      }
      
      output "db_password" {
        value = data.vault_generic_secret.db.data["password"]
      }

      What will be the output if the secret at secret/data/database contains {"password": "pass123"}?
      medium
      A. "data.vault_generic_secret.db.data[\"password\"]"
      B. "pass123"
      C. Error: secret not found
      D. null

      Solution

      1. Step 1: Understand Vault data source usage

        The vault_generic_secret data source reads secrets at the given path and stores them in data map.
      2. Step 2: Access the password key in output

        The output accesses data.vault_generic_secret.db.data["password"], which matches the secret's password value "pass123".
      3. Final Answer:

        "pass123" -> Option B
      4. Quick Check:

        Output secret value = "pass123" [OK]
      Hint: Access secret data map keys directly [OK]
      Common Mistakes:
      • Expecting error if secret exists
      • Outputting the literal string instead of value
      • Confusing data structure keys
      4. You wrote this Terraform code to read a secret from AWS Secrets Manager:
      data "aws_secretsmanager_secret_version" "db" {
        secret_id = aws_secretsmanager_secret.db.name
      }
      
      resource "aws_secretsmanager_secret" "db" {
        name = "my_db_password"
      }

      Terraform plan fails with error: Reference to undeclared resource. What is the problem?
      medium
      A. The resource block is missing required parameters
      B. The secret_id should be a string, not a resource attribute
      C. The data source references the resource before it is declared
      D. Terraform cannot read secrets from AWS Secrets Manager

      Solution

      1. Step 1: Analyze resource and data source order

        The data source references aws_secretsmanager_secret.db.name before the resource is declared, causing a dependency error.
      2. Step 2: Understand Terraform resource referencing rules

        Terraform requires resources to be declared before referencing them in data sources to resolve dependencies correctly.
      3. Final Answer:

        The data source references the resource before it is declared -> Option C
      4. Quick Check:

        Reference order matters in Terraform [OK]
      Hint: Declare resources before referencing them [OK]
      Common Mistakes:
      • Using resource attributes as string literals
      • Ignoring declaration order
      • Assuming Terraform can't read AWS secrets
      5. You want to securely pass a database password stored in Vault to an AWS RDS instance using Terraform. Which approach follows best practices?
      hard
      A. Use vault_generic_secret data source to fetch password, then pass it as password argument in aws_db_instance resource without storing it in Terraform state
      B. Hardcode the password in Terraform variables and update Vault manually
      C. Store the password in a local file and read it in Terraform
      D. Create the RDS instance first, then manually update password in Vault

      Solution

      1. Step 1: Identify secure secret retrieval method

        Using vault_generic_secret data source fetches the password securely at runtime without hardcoding.
      2. Step 2: Pass secret directly to resource without storing in state

        Passing the secret as an argument avoids exposing it in Terraform files or state, following best practices.
      3. Final Answer:

        Use vault_generic_secret data source to fetch password, then pass it as password argument in aws_db_instance resource without storing it in Terraform state -> Option A
      4. Quick Check:

        Fetch secrets dynamically and avoid hardcoding [OK]
      Hint: Fetch secrets dynamically, never hardcode passwords [OK]
      Common Mistakes:
      • Hardcoding secrets in variables
      • Storing secrets in local files
      • Manual secret updates outside Terraform