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

注意

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

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

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

要在 playbook 中使用它,请指定: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

字符串

生成的文件系统对象应具有的属性。

要获取支持的标志,请查看目标系统上的 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 密钥保管库 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 中添加

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

密钥服务必须以 protocol://address 的形式指定,例如 tcp://myserver.com:5000

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

kms

列表 / 元素=字符串

在 community.sops 1.0.0 中添加

要使用的 KMS ARN 列表。

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

mode

任何

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

对于那些习惯使用 /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 而不是用户名。避免使用数字用户名以避免这种混淆。

路径

路径 / 必需

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

整数

在 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)