Terraform 提供程序
对应的官方文档地址
Bitwarden 提供了一个用于获取、创建和管理机密的 Terraform 提供程序,帮助您使用 Terraform 保护您的基础设施机密。Bitwarden Terraform registry 中提供了更多提供程序文档。
要求
Terraform 版本 1.5 或更高版本。
拥有机器账户和附加访问令牌的 Secrets Manager 组织。
配置
您的 Terraform 配置文件 ( .tf ) 至少必须包含以下内容:
terraform {
required_providers {
bitwarden-secrets = {
source = "registry.terraform.io/bitwarden/bitwarden-secrets"
}
}
}您可以在您的 .tf 文件中添加几个可选属性。其中一些值应被视为敏感信息。所有这些值也可以通过环境变量提供,但是所有这些值只能使用这两种方法中的一种来提供:
organization_id
BW_ORGANIZATION_ID
您组织的唯一标识符。您登录到 Secrets Manager 网页 App 时,可以在地址栏中找到。
api_url
BW_API_URL
Bitwarden Secrets Manager /api 终端的 URI。对于美国和欧盟云托管的客户,这将分别是 https://api.bitwarden.com 和 https://identity.bitwarden.eu,对于自托管的客户,则由部署决定。
identity_url
BW_IDENTITY_URL
Secrets Manager /identity 终端的 URI。对于美国和欧盟云托管的客户,这将分别是 https://api.bitwarden.com 和 https://identity.bitwarden.eu,对于自托管的客户,则由部署决定。
一个明确包含所有属性(而不是由环境变量传递)的 .tf 文件应如下所示:
terraform {
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>"
}快速入门
以下步骤将指导您通过将 Bitwarden Secrets Manager 中的机密添加到状态和配置中,以将其纳入 Terraform 管理范围:
1、使用 bitwarden-secrets_secret 资源将机密添加到 .tf 配置文件中:
resource "bitwarden-secrets_secret" "my_secret" {}2、使用 Terraform CLI 中的 terraform import 命令将机密导入到状态,将指示的占位符值替换为机密的唯一标识符(可直接从 Secrets Manager 网页 App 的机密条目复制):
terraform import "bitwarden-secrets_secret.my_secret" "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"3、将您的机密导入 Terraform 状态后,在 Terraform CLI 中使用 terraform show 命令显示导入的数据。从输出中复制键值,并将其添加到 .tf 配置中以完成设置:
resource "bitwarden-secrets_secret" "my_secret" {
key = "db_admin_password"
}bitwarden-secrets_secret 资源将使用键值(在此情况下为 db_admin_password )在后续操作中操作机密,确保机密在 Bitwarden Secrets Manager 和 Terraform 之间保持安全和同步。
数据源
bitwarden-secrets_projects
bitwarden-secrets_projects 数据源获取机器账户可访问的所有工程列表。以下是一个包含 bitwarden-secrets_projects 数据源声明的 data 块示例,以及一个使用 .projects 属性引用它的 output 块示例:
data "bitwarden-secrets_projects" "example" {}
output "example" {
value = data.bitwarden-secrets_projects.projects
}对于每个工程,以下属性可以导出到输出:
creation_date:(字符串)工程创建的时间戳。id:(字符串型)工程的唯一标识符。name:(字符串型)工程的名称。organization_id:(字符串型)工程所属组织的唯一标识符。revision_date:(字符串型)工程最近一次修订的时间戳。
bitwarden-secrets_list_secrets
bitwarden-secrets_list_secrets 数据源获取机器账户可访问的所有机密列表。以下是一个 data 块的示例,其中包含 bitwarden-secrets_list_secrets 数据源声明,以及一个使用 .secrets 属性引用它的 output 块示例:
data "bitwarden-secrets_list_secrets" "example" {}
output "example" {
value = data.bitwarden-secrets_list_secrets.secrets
}对于每个机密,可以在输出中导出以下属性:
id:(字符串型)机密的唯一标识符。key:(字符串型)与机密关联的键,在 Secrets Manager UI 中称为「名称」。
bitwarden-secrets_secret
bitwarden-secrets_secret 数据源获取特定的机密,该机密必须可被机器账户访问。使用 bitwarden-secrets_secret 数据源获取机密时,需要以下参数:
id:(字符串型)要获取的机密的唯一标识符。此值可以直接从 Secrets Manager 网页 App 中的机密条目中复制。
以下是一个包含 data 数据源声明和引用所有可导出属性的 output 示例代码块:
data "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
}
}对于每个密钥,可以在输出中导出以下属性:
id:(字符串型)机密的唯一标识符。key:(字符串型)与机密关联的键,在 Secrets Manager UI 中称为「名称」。value:(字符串型)与机密关联的值。被视为敏感信息,永远不会打印到 stdout。note:(字符串型)保存于机密备注字段中的任何文本。project_id:(字符串型)机密所属工程的唯一标识符。organization_id:(字符串型)机密所属组织的唯一标识符。creation_date:(字符串型)机密创建的时间戳。revision_date:(字符串型)机密最近一次修订的时间戳。
资源
bitwarden-secrets_secret
bitwarden-secrets_secret 资源可用于在 Bitwarden 密钥管理器中创建新机密或管理现有机密。要声明一个 bitwarden-secrets_secret 资源块,至少需要以下参数:
key:(字符串型)与机密关联的键,在 Secrets Manager UI 中称为「名称」。
以下是一个包含 bitwarden-secrets_secret 资源声明的 resource 块示例:
resource "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."
}在上述示例中,其他可选参数包括:
value:(字符串型)机密的值。不推荐通过配置文件提供机密值。通过使用 terraform 变量,用户可以在运行时通过环境变量注入机密值。project_id:(字符串型)机密应添加到的工程的唯一标识符。机器账户必须对该工程有访问权限。note:(字符串型)保存于机密备注字段中的任何文本。
机密值生成
如果没有提供机密值,Terraform 提供者将为您生成一个。这是推荐的方法。您可以指定可选属性来自定义值的生成,例如:
resource "bitwarden-secrets_secret" "db_admin_secret" {
key = "db_admin_password"
project_id = var.project_id
length = 32
special = true
min_special = 5
}对于每个机密,可以使用以下属性来自定义值的生成:
avoid_ambiguous:(布尔型)默认为false。设置为true时,生成的值将不包含歧义字符(I、l、1、0、0)。length:(数值型)默认为64个字符。设置为其他数字时,生成的值将是该数字数量的字符。lowercase:(布尔型)默认为true。设置为false时,生成的值将不包含小写字符。min_lowercase:(数值型)如果lowercase为false,则忽略。设置为数字时,生成的值将至少包含该数字数量的小写字符(必须为 1-9 之间的数字)。
uppercase:(布尔型)默认为true。如果设置为false,生成的值将不包含大写字母。min_uppercase:(数值型)如果uppercase为false,则忽略。如果设置为数字,生成的值将至少包含该数字数量的大写字母(必须为 1-9 之间的数字)。
numbers:(布尔型)默认为true。如果设置为false,生成的值将不包含数字(0-9)。min_numbers:(数值型)如果numbers为false,则忽略。如果设置为数字,生成的值将至少包含该数字数量的数字(必须为 1-9 之间的数字)。
special:(布尔型)默认为true。如果设置为false,生成的值将不包含特殊字符(@,#,$,%,^,&,*)。min_special:(数值型)如果special为false,则忽略。如果设置为数字,生成的值将至少包含该数字数量的特殊字符(必须为 1-9 之间的数字)。
最后更新于