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 之间的数字)。
最后更新于