Add Hashicorp Vault Secrets Integration module (#144)
							parent
							
								
									acab6437bc
								
							
						
					
					
						commit
						5a7e3f6ca4
					
				@ -0,0 +1,68 @@
 | 
			
		||||
---
 | 
			
		||||
display_name: "HCP Vault Secrets"
 | 
			
		||||
description: "Fetch secrets from HCP Vault"
 | 
			
		||||
icon: ../.icons/vault.svg
 | 
			
		||||
maintainer_github: coder
 | 
			
		||||
partner_github: hashicorp
 | 
			
		||||
verified: true
 | 
			
		||||
tags: [helper, integration, vault, hashicorp, hvs]
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
# HCP Vault Secrets
 | 
			
		||||
 | 
			
		||||
This module lets you fetch all or selective secrets from a [HCP Vault Secrets](https://developer.hashicorp.com/hcp/docs/vault-secrets) app into your [Coder](https://coder.com) workspaces. It makes use of the [`hcp_vault_secrets_app`](https://registry.terraform.io/providers/hashicorp/hcp/latest/docs/data-sources/vault_secrets_app) data source from the [HCP provider](https://registry.terraform.io/providers/hashicorp/hcp/latest).
 | 
			
		||||
 | 
			
		||||
```tf
 | 
			
		||||
module "vault" {
 | 
			
		||||
  source   = "registry.coder.com/modules/hcp-vault-secrets/coder"
 | 
			
		||||
  version  = "1.0.3"
 | 
			
		||||
  agent_id = coder_agent.example.id
 | 
			
		||||
  app_name = "demo-app"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Configuration
 | 
			
		||||
 | 
			
		||||
To configure the HCP Vault Secrets module, you must create an HCP Service Principal from the HCP Vault Secrets app in the HCP console. This will give you the `HCP_CLIENT_ID` and `HCP_CLIENT_SECRET` that you need to authenticate with HCP Vault Secrets. See the [HCP Vault Secrets documentation](https://developer.hashicorp.com/hcp/docs/vault-secrets) for more information.
 | 
			
		||||
 | 
			
		||||
## Fetch All Secrets
 | 
			
		||||
 | 
			
		||||
To fetch all secrets from the HCP Vault Secrets app, skip the `secrets` input.
 | 
			
		||||
 | 
			
		||||
```tf
 | 
			
		||||
module "vault" {
 | 
			
		||||
  source   = "registry.coder.com/modules/hcp-vault-secrets/coder"
 | 
			
		||||
  version  = "1.0.3"
 | 
			
		||||
  agent_id = coder_agent.example.id
 | 
			
		||||
  app_name = "demo-app"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Fetch Selective Secrets
 | 
			
		||||
 | 
			
		||||
To fetch selective secrets from the HCP Vault Secrets app, set the `secrets` input.
 | 
			
		||||
 | 
			
		||||
```tf
 | 
			
		||||
module "vault" {
 | 
			
		||||
  source   = "registry.coder.com/modules/hcp-vault-secrets/coder"
 | 
			
		||||
  version  = "1.0.3"
 | 
			
		||||
  agent_id = coder_agent.example.id
 | 
			
		||||
  app_name = "demo-app"
 | 
			
		||||
  secrets  = ["MY_SECRET_1", "MY_SECRET_2"]
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Set Client ID and Client Secret as Inputs
 | 
			
		||||
 | 
			
		||||
Set `client_id` and `client_secret` as module inputs.
 | 
			
		||||
 | 
			
		||||
```tf
 | 
			
		||||
module "vault" {
 | 
			
		||||
  source        = "registry.coder.com/modules/hcp-vault-secrets/coder"
 | 
			
		||||
  version       = "1.0.3"
 | 
			
		||||
  agent_id      = coder_agent.example.id
 | 
			
		||||
  app_name      = "demo-app"
 | 
			
		||||
  client_id     = "HCP_CLIENT_ID"
 | 
			
		||||
  client_secret = "HCP_CLIENT_SECRET"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
@ -0,0 +1,67 @@
 | 
			
		||||
terraform {
 | 
			
		||||
  required_version = ">= 1.0"
 | 
			
		||||
 | 
			
		||||
  required_providers {
 | 
			
		||||
    coder = {
 | 
			
		||||
      source  = "coder/coder"
 | 
			
		||||
      version = ">= 0.12.4"
 | 
			
		||||
    }
 | 
			
		||||
    hcp = {
 | 
			
		||||
      source  = "hashicorp/hcp"
 | 
			
		||||
      version = ">= 0.82.0"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
provider "hcp" {
 | 
			
		||||
  client_id     = var.client_id
 | 
			
		||||
  client_secret = var.client_secret
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
provider "coder" {}
 | 
			
		||||
 | 
			
		||||
variable "agent_id" {
 | 
			
		||||
  type        = string
 | 
			
		||||
  description = "The ID of a Coder agent."
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "client_id" {
 | 
			
		||||
  type        = string
 | 
			
		||||
  description = <<-EOF
 | 
			
		||||
  The client ID for the HCP Vault Secrets service principal. (Optional if HCP_CLIENT_ID is set as an environment variable.)
 | 
			
		||||
  EOF
 | 
			
		||||
  default     = null
 | 
			
		||||
  sensitive   = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "client_secret" {
 | 
			
		||||
  type        = string
 | 
			
		||||
  description = <<-EOF
 | 
			
		||||
  The client secret for the HCP Vault Secrets service principal. (Optional if HCP_CLIENT_SECRET is set as an environment variable.)
 | 
			
		||||
  EOF
 | 
			
		||||
  default     = null
 | 
			
		||||
  sensitive   = true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "app_name" {
 | 
			
		||||
  type        = string
 | 
			
		||||
  description = "The name of the secrets app in HCP Vault Secrets"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
variable "secrets" {
 | 
			
		||||
  type        = list(string)
 | 
			
		||||
  description = "The names of the secrets to retrieve from HCP Vault Secrets"
 | 
			
		||||
  default     = null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
data "hcp_vault_secrets_app" "secrets" {
 | 
			
		||||
  app_name = var.app_name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
resource "coder_env" "hvs_secrets" {
 | 
			
		||||
  # https://support.hashicorp.com/hc/en-us/articles/4538432032787-Variable-has-a-sensitive-value-and-cannot-be-used-as-for-each-arguments
 | 
			
		||||
  for_each = var.secrets != null ? toset(var.secrets) : nonsensitive(toset(keys(data.hcp_vault_secrets_app.secrets.secrets)))
 | 
			
		||||
  agent_id = var.agent_id
 | 
			
		||||
  name     = each.key
 | 
			
		||||
  value    = data.hcp_vault_secrets_app.secrets.secrets[each.key]
 | 
			
		||||
}
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue