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
	
	 Muhammad Atif Ali
						Muhammad Atif Ali