community.sops.sops_encrypt 模块 – 使用 SOPS 加密数据

注意

此模块是 community.sops 集合(版本 2.0.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用: ansible-galaxy collection install community.sops。您需要进一步的要求才能使用此模块,请参阅 要求 了解详细信息。

要在剧本中使用它,请指定:community.sops.sops_encrypt

community.sops 0.1.0 中的新增功能

概要

  • 允许使用 SOPS 加密二进制数据(Base64 编码)、文本数据、JSON 或 YAML 数据。

要求

在执行此模块的主机上需要以下要求。

参数

参数

注释

age

列表 / 元素=字符串

在 community.sops 1.4.0 中添加

要使用的 Age 指纹。

这对应于 SOPS --age 选项。

age_key

字符串

在 community.sops 1.4.0 中添加

一个或多个可用于解密加密文件的 age 私钥。

在调用 SOPS 时,将设置为 SOPS_AGE_KEY 环境变量。

需要 SOPS 3.7.1+。

age_keyfile

路径

在 community.sops 1.4.0 中添加

包含 SOPS 可用于解密加密文件的 age 私钥的文件。

在调用 SOPS 时,将设置为 SOPS_AGE_KEY_FILE 环境变量。

默认情况下,SOPS 会在您的用户配置目录中查找 sops/age/keys.txt

需要 SOPS 3.7.0+。

attributes

别名: attr

字符串

生成的filesystem对象应具有的属性。

要获取支持的标志,请查看目标系统上的 chattr 的手册页。

此字符串应包含属性,顺序与 lsattr 显示的顺序相同。

= 运算符被假定为默认值,否则需要在字符串中包含 +- 运算符。

aws_access_key_id

字符串

在 community.sops 1.0.0 中添加

用于向 AWS 发出请求的 AWS 访问密钥 ID。

为 SOPS 调用设置环境变量 AWS_ACCESS_KEY_ID

aws_profile

字符串

在 community.sops 1.0.0 中添加

用于向 AWS 发出请求的 AWS 配置文件。

这对应于 SOPS --aws-profile 选项。

aws_secret_access_key

字符串

在 community.sops 1.0.0 中添加

用于向 AWS 发出请求的 AWS 秘密访问密钥。

为 SOPS 调用设置环境变量 AWS_SECRET_ACCESS_KEY

aws_session_token

字符串

在 community.sops 1.0.0 中添加

用于向 AWS 发出请求的 AWS 会话令牌。

为 SOPS 调用设置环境变量 AWS_SESSION_TOKEN

azure_kv

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

要使用的 Azure Key Vault URL。

这对应于 SOPS --azure-kv 选项。

config_path

路径

在 community.sops 1.0.0 中添加

SOPS 配置文件的路径。

如果未设置,SOPS 将从加密或解密的文件开始递归搜索配置文件。

这对应于 SOPS --config 选项。

content_binary

字符串

要加密的数据。必须是 Base64 编码的二进制数据。

请注意,如果数据可以解析为 JSON 或 YAML,则模块可能不是幂等的。

必须指定 content_textcontent_binarycontent_jsoncontent_yaml 中的一个。

content_json

字典

要加密的数据。必须是 JSON 字典。

必须指定 content_textcontent_binarycontent_jsoncontent_yaml 中的一个。

content_text

字符串

要加密的数据。必须是 Unicode 文本。

请注意,如果文本可以解析为 JSON 或 YAML,则模块可能不是幂等的。

必须指定 content_textcontent_binarycontent_jsoncontent_yaml 中的一个。

content_yaml

字典

要加密的数据。必须是 YAML 字典。

请注意,Ansible 只允许传递可以表示为 JSON 字典的数据。

必须指定 content_textcontent_binarycontent_jsoncontent_yaml 中的一个。

enable_local_keyservice

布尔值

在 community.sops 1.0.0 中添加

告诉 SOPS 使用本地密钥服务。

这对应于 SOPS --enable-local-keyservice 选项。

选项

  • false ← (默认)

  • true

encrypted_regex

字符串

在 community.sops 1.0.0 中添加

设置加密密钥后缀。

指定后,只有与正则表达式匹配的密钥才会被加密。

这对应于 SOPS --encrypted-regex 选项。

encrypted_suffix

字符串

在 community.sops 1.0.0 中添加

覆盖加密密钥后缀。

当设置为空字符串时,所有未通过 unencrypted_suffix 显式标记的密钥都将被加密。

这对应于 SOPS 的 --encrypted-suffix 选项。

encryption_context

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

格式为 key:value 的 KMS 加密上下文对的列表。

这对应于 SOPS 的 --encryption-context 选项。

force

布尔值

强制重写加密文件。

选项

  • false ← (默认)

  • true

gcp_kms

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

要使用的 GCP KMS 资源 ID。

这对应于 SOPS 的 --gcp-kms 选项。

group

字符串

应该拥有文件系统对象的用户组名称,就像传递给 chown 的一样。

如果未指定,则使用当前用户的当前组,除非您是 root 用户,在这种情况下,它可以保留之前的所属关系。

hc_vault_transit

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

要使用的 HashiCorp Vault 密钥 URI。

例如,https://vault.example.org:8200/v1/transit/keys/dev

这对应于 SOPS 的 --hc-vault-transit 选项。

keyservice

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

指定要使用的本地密钥服务以外的密钥服务。

必须以 协议://地址 的形式指定密钥服务,例如 tcp://myserver.com:5000

这对应于 SOPS 的 --keyservice 选项。

kms

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

要使用的 KMS ARN 列表。

这对应于 SOPS 的 --kms 选项。

mode

any

生成的文件系统对象应具有的权限。

对于那些习惯使用 /usr/bin/chmod 的人来说,请记住模式实际上是八进制数。您必须给 Ansible 提供足够的信息来正确解析它们。为了获得一致的结果,请引用八进制数(例如,'644''1777'),以便 Ansible 接收字符串并可以自己将字符串转换为数字。添加前导零(例如,0755)有时有效,但在循环和其他一些情况下可能会失败。

如果不遵循这些规则,直接给 Ansible 一个数字,最终会得到一个十进制数,这将产生意想不到的结果。

从 Ansible 1.8 开始,模式可以指定为符号模式(例如,u+rwxu=rw,g=r,o=r)。

如果未指定 mode 且目标文件系统对象不存在,则在为新创建的文件系统对象设置模式时,将使用系统上的默认 umask

如果未指定 mode 且目标文件系统对象存在,则将使用现有文件系统对象的模式。

指定 mode 是确保使用正确权限创建文件系统对象的最佳方法。有关更多详细信息,请参阅 CVE-2020-1736。

owner

字符串

应该拥有文件系统对象的用户名称,就像传递给 chown 的一样。

如果未指定,则使用当前用户,除非您是 root 用户,在这种情况下,它可以保留之前的所属关系。

指定数字用户名将被假定为用户 ID 而不是用户名。请避免使用数字用户名以避免这种混淆。

路径

path / required

SOPS 加密文件。

pgp

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

要使用的 PGP 指纹。

这对应于 SOPS 的 --pgp 选项。

selevel

字符串

SELinux 文件系统对象上下文的级别部分。

这是 MLS/MCS 属性,有时称为 range

设置为 _default 时,如果可用,它将使用策略的 level 部分。

serole

字符串

SELinux 文件系统对象上下文的角色部分。

设置为 _default 时,如果可用,它将使用策略的 role 部分。

setype

字符串

SELinux 文件系统对象上下文的类型部分。

设置为 _default 时,如果可用,它将使用策略的 type 部分。

seuser

字符串

SELinux 文件系统对象上下文的用户部分。

默认情况下,它使用 system 策略(如果适用)。

设置为 _default 时,如果可用,它将使用策略的 user 部分。

shamir_secret_sharing_threshold

integer

在 community.sops 1.0.0 中添加

使用 Shamir 秘密共享 检索数据密钥所需的唯一密钥数量。

如果此处和 SOPS 配置文件中都未设置,则默认为 0

这对应于 SOPS 的 --shamir-secret-sharing-threshold 选项。

sops_binary

路径

在 community.sops 1.0.0 中添加

SOPS 二进制文件的路径。

默认情况下使用 sops

unencrypted_regex

字符串

在 community.sops 1.0.0 中添加

设置未加密的密钥后缀。

指定后,只有与正则表达式匹配的密钥才会保持未加密状态。

这对应于 SOPS 的 --unencrypted-regex 选项。

unencrypted_suffix

字符串

在 community.sops 1.0.0 中添加

覆盖未加密的密钥后缀。

这对应于 SOPS 的 --unencrypted-suffix 选项。

unsafe_writes

布尔值

影响何时使用原子操作来防止数据损坏或从目标文件系统对象读取不一致的数据。

默认情况下,此模块使用原子操作来防止数据损坏或从目标文件系统对象读取不一致的数据,但有时系统的配置方式或只是以某种方式损坏,会阻止这样做。一个示例是 Docker 挂载的文件系统对象,它们无法从容器内部原子地更新,只能以不安全的方式写入。

此选项允许 Ansible 在原子操作失败时回退到更新文件系统对象的不安全方法(但是,它不会强制 Ansible 执行不安全的写入)。

重要提示!不安全的写入容易出现竞争条件,并可能导致数据损坏。

选项

  • false ← (默认)

  • true

属性

属性

支持

描述

check_mode

支持: 完全

可以在 check_mode 中运行并返回更改状态预测,而无需修改目标。

diff_mode

支持:

在 diff 模式下,将返回有关已更改的内容(或可能需要在 check_mode 中更改的内容)的详细信息。

safe_file_operations

支持: 完全

使用 Ansible 的严格文件操作函数来确保适当的权限并避免数据损坏。

另请参阅

另请参阅

community.sops.sops 查找插件

sops 查找可用于解密 SOPS 加密的文件。

示例

- name: Encrypt a secret text
  community.sops.sops_encrypt:
    path: text-data.sops
    content_text: This is a secret text.

- name: Encrypt the contents of a file
  community.sops.sops_encrypt:
    path: binary-data.sops
    content_binary: "{{ lookup('ansible.builtin.file', '/path/to/file', rstrip=false) | b64encode }}"

- name: Encrypt some datastructure as YAML
  community.sops.sops_encrypt:
    path: stuff.sops.yaml
    content_yaml: "{{ result }}"

作者

  • Felix Fontein (@felixfontein)