考えは、すべての機密データを置くことです[...]
この文の「すべて」の意味は、計画するソリューションを実装する前に非常に慎重に分析する必要があります。
Ansible vaultは非常に便利なツールですが、次の秘密を保存するためにのみ使用する必要があります。
- ansibleデプロイメントに特に必要
- 気付かないはずの所有者には簡単に役に立たないが、それは違法にそれらを「記憶」する可能性がある(通常、社外の従業員)
2番目のポイントは重要です。
多くの人々、場合によってはDevOpsチーム全体が、ansible vaultパスワード、したがってすべての秘密にアクセスできます。
したがって、ボールトに保存されているすべてのシークレットについて、それらへの不正アクセスを許可された人またはマシンが必要に応じてそれらを使用できない条件を保持する必要があります。
具体的には、ansibleを使用してデータベースとそのユーザーを展開する場合、パスワードをボールトに保存できますが、そのサービスをインターネットから利用できるようにする場合は非常に注意する必要があります(ほとんどの場合、別のソリューションを検討してください)そして、VPN認証を必要とせずに!
秘密にさらされたユーザー(DevOps)は、1つのセキュリティバリアが課されている場合(VPNアクセスが取り消された場合など)、「記憶された」パスワードを使用できないようにする必要があります。これに加えて、パスワードが変更される前に、ソースコードリポジトリ(ボールトが保存されている場所)へのアクセスも無効にする必要があります。
これらの条件下では、ansible vaultは非常に便利なツールです。
代わりに、インターネット上の任意の人またはマシンが使用できる秘密をボールトに保存しようとすると、間違いになります(たとえば、ユーザーのVPN資格情報)。
ansible-vaultパスワードを保存するための最良の(そして安全な)方法である他のオプションはありますか
前の段落の条件の下では、次のようにすることをお勧めします。
- ボールトパスワードを外部の安全なボールト(HashiCorpのVaultや資格情報管理用のSaaSなど)に保存する
- DevOps(テストにはパスワードが必要)およびCI / CDシステムまたはansibleコントローラーへの外部Vaultアイテムへのアクセスを許可します
秘密を使用する規則を守ってください!シークレットへの変更を確認することはできず、シークレットファイル内の不可解な変数をgrepすることもできません!ですから、最初から徹底してください。良い慣習は、ansible vaultに保存されているすべての変数にsecret_
プレフィックスを付けることです。次のようなものが表示されたら:
postgres.yml:
postgres_password: "{{ secret_postgres_password }}"
値がansible vaultに保存されていることがわかります。