ときどきAnsible日記

主にITインフラ基盤の自動化に関する事を書いているブログです

Ansibleのセキュリティについて考える

お疲れ様です。伊藤です。

本日はAnsibleのセキュリティについて考えてみます。
AnsibleはSSHを使用する、という特性上、管理対象側のサーバでSSHを通す必要があります。また、OSの設定変更などをする際にはroot権限でアクセスする必要が出てきます。つまりrootでのSSH接続を許可する必要があると。さらに、Ansibleでいちいちパスワードを入力するという手間もありますので、鍵認証などを行い、rootでノンパスワードでSSH疎通できる、という状態になります。(そうしないこともできますが)

これは非常に危険です。そもそもSSHでのroot接続する時点で非常に危険なのに、さらにノンパスワードで疎通できてしまう状態になると、すべてのサーバが乗っ取られてしまう可能性もあります。


まずはSSHの接続設定で接続可能なサーバを指定しましょう。
管理対象側のサーバで/etc/hosts.allowと/etc/hosts.denyを設定します。allowは許可設定、denyは拒否設定になります。
/etc/hosts.deny

ALL: ALL

/etc/hosts.allow

sshd: 192.168.1.100

とすることで192.168.1.100からの接続しか受け付けなくなります。これはこれで困るので他のアドレスも追加しておきましょう。(二度とログインできなくなるので)もしくは192.168.1というように範囲指定しておきましょう。


しかしこれだけではAnsibleが入った管理サーバを乗っ取られた場合に全てのサーバが操作できてしまう可能性があります。その部分を考慮してコンテナを使い、その中にAnsibleを入れることで通常時はコンテナを停止させておき、構築時のみコンテナを起動するような構成にします。

f:id:pj_doaa:20171108102654p:plain

こちらのような構成であれば、運用時に管理サーバに何かあったとしても全サーバに被害を拡大する可能性を薄めることができます。当然そのほかのセキュリティ対策はしている前提になります。
以上です。お疲れ様でした。