Terraform leverantör
Bitwarden erbjuder en Terraform-leverantör som kan hämta information om hemligheter, samt skapa och manipulera hemligheter, för säker hantering av dina infrastrukturhemligheter när du använder Terraform. Ytterligare leverantörsdokumentation finns tillgänglig i Bitwarden Terraform Provider-förrådet.
Krav
Terraform version 1.5 eller högre.
En Secrets Manager-organisation med ett maskinkonto och bifogad åtkomsttoken.
tip
Vi rekommenderar:
Använd webbappen Secrets Manager för att diktera vilka projekt och hemligheter ditt maskinkonto har tillgång till innan du fortsätter med konfigurationen.
Använd Secrets Manager-webbappen för att generera en åtkomsttoken när du är redo att konfigurera Terraform-leverantören, eftersom åtkomsttokenvärden endast kan kopieras vid skapandet.
Konfiguration
Som ett minimum måste din Terraform-konfigurationsfil(er) (.tf) innehålla följande:
Bashterraform {
required_providers {
bitwarden-secrets = {
source = "registry.terraform.io/bitwarden/bitwarden-secrets"
}
}
}Flera valfria attribut kan läggas till dina .tf-filer. Vissa av dessa värden bör anses vara känsliga. Alla dessa värden kan istället tillhandahållas av en miljövariabel, men alla dessa värden måste tillhandahållas med någon av dessa två metoder:
Attribut | Ekvivalent variabel | Beskrivning |
|---|---|---|
|
| (Känslig) Åtkomsttokenvärdet för det konfigurerade maskinkontot. Detta kommer att ge Terraform-leverantören tillgång till endast specifik data i Secrets Manager. |
|
| Den unika identifieraren för din organisation. Tillgängligt från adressfältet när du är inloggad på webbappen Secrets Manager. |
|
| URI för Bitwarden Secrets Manager |
|
| URI för Secrets Manager/ |
En .tf-fil med alla attribut uttryckligen inkluderade, istället för att skickas av miljövariabler, bör se ut så här:
Bashterraform {
required_providers {
bitwarden-secrets = {
source = "registry.terraform.io/bitwarden/bitwarden-secrets"
}
}
}
provider "bitwarden-secrets" {
api_url = "https://api.bitwarden.com"
identity_url = "https://identity.bitwarden.com"
access_token = "<access_token_value>"
organization_id = "< organization_unique_identifier>"
}Snabbstart
Följande steg leder dig genom att ta med en hemlighet som finns i Bitwarden Secrets Manager under Terraform-hantering genom att lägga till den i både tillstånd och konfiguration:
Använd
bitwarden-sm_secret-resursen för att lägga till en hemlighet till en.tf-konfigurationsfil:Bashresource "bitwarden-secrets_secret" "my_secret" {}Använd kommandot
terraform importi Terraform CLI för att importera hemligheten till staten, och ersätt det angivna platshållarvärdet med den unika identifieraren för hemligheten (som kan kopieras direkt från den hemliga posten i Secrets Manager-webbappen):Bashterraform import "bitwarden-secrets_secret.my_secret" "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"Med din hemlighet importerad till Terraform-tillståndet, använd kommandot
terraform showi Terraform CLI för att visa importerade data. Kopiera nyckelvärdet från utgången och lägg till det i.tf-konfigurationenför att slutföra installationen:Bashresource "bitwarden-secrets_secret" "my_secret" { key = "db_admin_password" }
Bitwarden-sm_secret-resursen kommer att använda nyckelvärdet (i det här fallet db_admin_password) för att manipulera hemligheten i ytterligare operationer, för att säkerställa att hemligheten förblir säker och synkroniserad mellan Bitwarden Secrets Manager och Terraform.
Datakällor
bitwarden-sm_projects
Datakällan bitwarden-sm_projects hämtar en lista över alla projekt som är tillgängliga för maskinkontot. Följande är ett exempel på ett datablock med en bitwarden-sm_projects datakälladeklaration och ett exempel på ett utdatablock som refererar till det med hjälp av .projects-attributet:
Bashdata "bitwarden-secrets_projects" "example" {}
output "example" {
value = data.bitwarden-secrets_projects.projects
}För varje projekt kan följande attribut exporteras i output:
creation_date: (String) Tidsstämpeln vid vilken projektet skapades.id: (String) Den unika identifieraren för projektet.name: (String) Namnet på projektet.organisation_id: (String) Den unika identifieraren för den organisation som projektet tillhör.revision_date: (String) Tidsstämpeln vid vilken projektet senast reviderades.
bitwarden-sm_list_secrets
Datakällan bitwarden-sm_list_secrets hämtar en lista över alla hemligheter som är tillgängliga för maskinkontot. Följande är ett exempel på ett datablock med en bitwarden-sm_list_secrets datakälladeklaration och ett exempel på ett utdatablock som refererar till det med hjälp av .secrets-attributet:
Bashdata "bitwarden-secrets_list_secrets" "example" {}
output "example" {
value = data.bitwarden-secrets_list_secrets.secrets
}För varje hemlighet kan följande attribut exporteras i utdata:
id: (String) Den unika identifieraren för hemligheten.key: (String) Nyckeln som är associerad med hemligheten, kallad "Namn" i Secrets Manager UI.
note
Datakällan bitwarden-sm_list_secrets hämtar inte hemliga värden.
bitwarden-sm_secret
Datakällan bitwarden-sm_secret hämtar en viss hemlighet, som måste vara tillgänglig för maskinkontot. Följande argument krävs när du hämtar en hemlighet med datakällan bitwarden-sm_secret:
id: (String) Den unika identifieraren för hemligheten att hämta. Detta värde kan kopieras direkt från den hemliga posten i webbappen Secrets Manager.
Följande är ett exempel på ett datablock med en bitwarden-sm_secret datakälladeklaration och ett exempel på ett utdatablock som refererar till alla exporterbara attribut:
Bashdata "bitwarden-secrets_secret" "example" {
id = "e6a8066c-81e6-428e-bf5d-b1b900fe1b42"
}
output "example" {
value = {
id = data.bitwarden-secrets_secret.secret.id
key = data.bitwarden-secrets_secret.secret.key
value = data.bitwarden-secrets_secret.secret.value #The actual secret value is marked sensitive and will not be printed to stdout
note = resource.bitwarden-secrets_secret.secret.note
project_id = resource.bitwarden-secrets_secret.secret.project_id
organization_id = resource.bitwarden-secrets_secret.secret.organization_id
creation_date = resource.bitwarden-secrets_secret.secret.creation_date
revision_date = resource.bitwarden-secrets_secret.secret.revision_date
}
}För varje hemlighet kan följande attribut exporteras i utdata:
id: (String) Den unika identifieraren för hemligheten.key: (String) Nyckeln som är associerad med hemligheten, kallad "Namn" i Secrets Manager UI.värde: (String) Värdet som är associerat med hemligheten. Anses som känslig och har aldrig skrivits ut till standard.note: (Sträng) All text som sparas i hemlighetens anteckningsfält.project_id: (String) Den unika identifieraren för projektet hemligheten tillhör.organisation_id: (String) Den unika identifieraren för organisationen hemligheten tillhör.creation_date: (String) Tidsstämpeln vid vilken hemligheten skapades.revision_date: (String) Tidsstämpeln vid vilken hemligheten senast reviderades.
Resurser
bitwarden-sm_secret
Bitwarden-sm_secret-resursen kan användas för att skapa nya eller hantera befintliga hemligheter i Bitwarden Secrets Manager. Som ett minimum krävs följande argument för en bitwarden-sm_secret resursblockdeklaration:
key: (String) Nyckeln som är associerad med hemligheten, kallad "Namn" i Secrets Manager UI.
Följande är ett exempel på ett resursblock med en bitwarden-sm_secret resursdeklaration:
Bashresource "bitwarden-secrets_secret" "db_admin_secret" {
key = "db_admin_password"
value = var.value #It is not recommended to provide the actual secret value via configuration file! By using a terraform variable, users can inject the secret value during runtime via environment variables.
project_id = var.project_id
note = "The secret value was provided via terraform configuration."
}Ytterligare valfria argument, som ses i exemplet ovan, inkluderar:
värde: (String) Värdet på hemligheten. Det rekommenderas inte att ange det hemliga värdet via konfigurationsfilen. Genom att använda en terraform-variabel kan användare injicera det hemliga värdet under körning via miljövariabler.project_id: (String) Den unika identifieraren för projektet hemligheten ska läggas till. Maskinkontot måste ha åtkomst till det projektet.note: (Sträng) Vilken text som helst som ska sparas i hemlighetens anteckningsfält.
Hemlig värdegenerering
Om inget hemligt värde tillhandahålls kommer Terraform-leverantören att generera ett åt dig. Detta är det föreslagna tillvägagångssättet. Du kan ange valfria attribut för att anpassa värdegenerering, till exempel:
Bashresource "bitwarden-secrets_secret" "db_admin_secret" {
key = "db_admin_password"
project_id = var.project_id
length = 32
special = true
min_special = 5
}För varje hemlighet kan följande attribut användas för att anpassa värdegenerering:
avoid_ambiguous: (Boolean) Standardinställningen ärfalsk. När det är satt tillsant kommerdet genererade värdet inte att innehålla tvetydiga tecken (I,l,1,0,0).längd: (Nummer) Standardinställningen är64tecken. När det är inställt på ett annat nummer kommer det genererade värdet att vara det antalet tecken.gemener: (Boolesk) Standardinställningen ärsann. Om det är inställt påfalsekommer det genererade värdet inte att innehålla gemener.min_lowercase: (Number) Ignoreras omgemenerärfalska. Om det är inställt på ett tal kommer det genererade värdet att innehålla minst det antalet gemener (måste vara mellan 1-9).
versaler: (Boolesk) Standardinställningen ärsann. Om det är inställt påfalsekommer det genererade värdet inte att innehålla versaler.min_uppercase: (Nummer) Ignoreras omversalerärfalska. Om det är inställt på ett tal kommer det genererade värdet att innehålla minst det antalet versaler (måste vara mellan 1-9).
siffror: (Booleska) Standardinställningen ärsann. Om det är inställt påfalse kommerdet genererade värdet inte att innehålla nummer (0-9).min_numbers: (Number) Ignoreras omsiffrorärfalska. Om det är inställt på ett tal kommer det genererade värdet att innehålla minst det antalet siffror (måste vara mellan 1-9).
special: (Boolesk) Standardinställningen ärsann. Om inställt påfalsekommer det genererade värdet inte att innehålla specialtecken (@&,, #, $, %, ^,*).min_special: (Number) Ignoreras omspecialärfalskt. Om det är inställt på ett tal kommer det genererade värdet att innehålla minst det antalet specialtecken (måste vara mellan 1-9).