使用 Ansible amazon.aws.aws_secret 仅从 SecretString 中提取秘密值

Extract secret value only from SecretString using Ansible amazon.aws.aws_secret

我正在尝试使用 Ansible 从 AWS Secret Manager 获取 var 的秘密值。我原来的尝试是这样的:

mySecret: "{{ lookup('amazon.aws.aws_secret', 'my/awesome/secret', region='eu-west-2')}}"

这个 return 的值类似于:

{"password" : "mypassword"}

我想要的只是mypassword

我尝试了多种使用 json_query 的方法,包括:

mySecret: "{{ lookup('amazon.aws.aws_secret', 'my/awesome/secret', region='eu-west-2') | from_json | json_query('SecretString.password') }}"

但这不是 return 值。

仅在使用 json_query 和 Ansible 时提取值的正确方法是什么?

Ansible 的 JSON 功能非常强大,它可以正确读取 JSON 对象并通过点 . 符号获取所述 JSON 文档的属性。

鉴于 JSON

{ 
  "secret": { 
    "password" : "mypassword" 
  } 
}

您可以在 Ansible 中通过 secret.password 轻松访问它。

现在,从您的评论看来,查找 amazon.aws.aws_secret 没有返回 JSON,而是一个字符串,表示 JSON。因此,为了访问它,您必须首先使用 to_json 过滤器,正如您已经尝试过的那样。

但是,除此之外,上面的解释仍然适用,所以,这就是您要查找的内容:

secret: >-
  {{ 
    (lookup(
      'amazon.aws.aws_secret', 
      'my/awesome/secret', 
      region='eu-west-2'
    ) | from_json).password 
  }}