首页 文章

使用Ansit从Gitlab CI部署,处理密码

提问于
浏览
5

我'm trying to achieve an 2657661 deployment workflow using Gitlab CI and Ansible. Some steps do require a password (I'我已经在任何时候都使用SSH密钥)所以我将这些密码存储在Ansible Vault中 . 接下来,我只需要在运行playbook时提供Vault密码 .

But how could I integrate this nicely with Gitlab CI?

我可以注册一个gitlab-ci工作(或者工作只适用于构建吗?),它只是以某种方式运行提供保险库密码的剧本?!如果没有密码以纯文本形式存在,这可以实现吗?!

另外,如果有人可以向我指出一些显示我们如何使用Ansible部署构建的材料,我会非常高兴 . 你可以注意到,我确实没有发现任何相关信息 .

2 回答

  • 3

    您可以在GitLab CI中设置环境变量,该变量将包含Ansible Vault密码 . 在我的例子中,我称之为 $ANSIBLE_VAULT_PASSWORD

    以下是.gitlab-ci.yml的示例:

    deploy:
      only:
        - master
      script:
        - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
        - ansible-playbook -i ansible/staging.yml --vault-password-file .vault_password.txt
    

    希望这个技巧可以帮助你 .

  • 1

    我对gitlab ci或者ansible vault并不是很熟悉,但我喜欢这种情况的一种策略是创建一个单独的,隔离的,安全的,持久的密码或其他秘密存在的地方 . 例如,私人s3桶 . 然后,为您的构建框或构建集群提供对该安全位置的显式访问权限 . 当然,您需要确保您的构建框或群集也被锁定,例如在不可公开访问的vpc中,并且只能通过vpn或其他非常安全的方式访问 .

    我们的想法是让需要密码的机器明确知道从何处获取密码,并分别获得获取密码所需的权限和访问权限 . 前者不一定是秘密(所以它可以存在于源代码控制中),但后者实际上是不可能在不损害整个系统的情况下实现的,此时你已经被剔除了 .

    因此,更具体地说,运行ansible的机器可能位于安全集群内 . 它知道如何访问密码 . 它有权这样做 . 因此,它可以简单地获取pw,作为变量存储,并在运行时使用它来访问安全资源 . 您需要注意不要在此过程中泄漏密码(例如将带有pw的ansible日志传送到群集外的某个地方,甚至可能在任何地方) . 如果您想从群集外部启动ansible脚本,那么您将vpn在远程计算机上运行ansible playbook .

相关问题