如何使用 Ansible 在 AWS 机密管理器中设置 key/value 机密?

How do you set key/value secret in AWS secrets manager using Ansible?

下面的代码没有为秘密设置 key/value 对。它只创建一个字符串。但是我想创建 key/value 而文档甚至没有提到它....

- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - name: Add string to AWS Secrets Manager
      aws_secret:
        name: 'testvar'
        state: present
        secret_type: 'string'
        secret: "i love devops"
      register: secret_facts
    - debug:
        var: secret_facts

如果这匹配 Secrets Manager CLI 之类的任何内容,那么要设置键值对,您应该期望创建如下所示的键值对:

- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - name: Add string to AWS Secrets Manager
      aws_secret:
        name: 'testvar'
        state: present
        secret_type: 'string'
        secret: "{\"username\":\"bob\",\"password\":\"abc123xyz456\"}"
      register: secret_facts
    - debug:
        var: secret_facts

虽然这里的答案不是“错误”,但如果您需要使用变量来构建您的秘密,它将不起作用。原因是当字符串被移交给 Jinja2 来处理变量时,会发生一些变量杂耍,最终双引号被单引号替换 无论你做什么

所以上面的例子是用变量完成的:

secret: "{\"username\":\"{{ myusername }}\",\"password\":\"{{ mypassword }}\"}"

结果为:

{'username:'bob','password':'abc123xyz456'}

当然 AWS 无法解析它。解决方案非常简单,我在这里找到了它:

如果您在字符串的开头放一个 space 或换行就可以了!

secret: " {\"username\":\"{{ myusername }}\",\"password\":\"{{ mypassword }}\"}"