多くのサーバーのSSHアクセスゲートウェイ


12

現在、Ansibleを介して3つのdevopを使用して、90を超える複数のサーバーを管理しています。すべてが順調に機能していますが、現在大きなセキュリティ問題があります。各devopは独自のローカルsshキーを使用して、サーバーに直接アクセスします。各devopはラップトップを使用しているため、各ラップトップが危険にさらされる可能性があるため、prodサーバーのネットワーク全体が攻撃にさらされる可能性があります。

アクセスを集中管理し、特定のキーのアクセスをブロックするソリューションを探しています。キーをbitbucketまたはgithubに追加する方法とは異なります。

私の頭の上から、ソリューションは1台のマシン、ゲートウェイから目的のprodサーバーへのトンネルになると仮定します...サーバ。その結果、ゲートウェイへのアクセスを拒否するだけで、数秒でdevopのアクセスを迅速かつ効率的に強制終了できます。

ここに画像の説明を入力してください

これは良いロジックですか?誰かがこの問題を阻止するための解決策をすでに見ていますか?


1
AWX / Towerに移行する時が来ました。
マイケルハンプトン

私は最近、SSH鍵管理と2FAのためにKryptoniteを試してみましたが、私にとってはかなりうまく機能しています。彼らのプロ/エンタープライズパッケージには、ログインの一層制御し、また監査を与えるようで...
アレックス・

2
答えはfreeIPA
ジェイコブエヴァンス

回答:


22

それは複雑すぎます(キーが特定のprodサーバーにアクセスできるかどうかを確認します)。すべての有効なキーを受け入れるジャンプホストとしてゲートウェイサーバーを使用します(ただし、特定のキーのアクセスを簡単に削除して、すべてのサーバーへのアクセスを順番に削除できます)。次に、許可されたキーのみを各サーバーに追加します。その後、ジャンプホスト経由でのみ、すべてのサーバーのSSHポートにアクセスできることを確認します。

これが標準的なアプローチです。


2
さらに良い:@Svenの言うことを実行するだけでなく、ジャンプホストで2FAを追加します。手動で行う必要がある場合にのみ、ラップトップから直接接続するので、正しいですか?ジャンプホスト内のサーバーから自動化されたものが実行されていますか?
アダム

1
ローカルの認証局(下位または分離)がある場合、それらの証明書をSSHで使用して、侵害されたと思われる証明書を集中的に無効にすることができます。
ランドール

11

開発/テスト環境でない限り、エンジニアはラップトップから直接ansibleを実行しないでください。

代わりに、gitからRunbookをプルする中央サーバーを用意します。これにより、追加のコントロール(4つの目、コードレビュー)が可能になります。

これを要塞またはジャンプホストと組み合わせて、アクセスをさらに制限します。


1
実際、これはAWX(またはその商用バージョンのTower)が解決する問題です。
マイケルハンプトン

1

Netflixがセットアップを実装し、その状況に役立つ無料ソフトウェアをリリースしました。

このビデオhttps://www.oreilly.com/learning/how-netflix-gives-all-its-engineers-ssh-accessまたはhttps://speakerdeck.com/rlewis/how-netflix-gives-のプレゼンテーションをご覧くださいすべてのエンジニア、ssh、インスタンスへのアクセス、実行中のコアポイント:

コアでSSOを使用してエンジニアを認証するSSH要塞アーキテクチャを確認し、次にインスタンスへの要塞のSSH認証のために、ユーザーごとの資格情報と短命証明書を発行します。これらの短命の資格情報は、それらが失われることに関連するリスクを減らします。アクセスを許可する前にエンジニアの速度を落とすのではなく、このアプローチを使用して監査後に事実に基づいて自動的にアラートを出す方法について説明します。

彼らのソフトウェアはここから入手できます:https : //github.com/Netflix/bless

ソリューション全体を実装しなくても、いくつかの興味深い点があります。

  • キーだけでなくSSH証明書を使用します。証明書にはるかに多くのメタデータを入れることができるため、要件ごとに多くの制約が可能になり、より簡単な監査が可能になります
  • 非常に短期間(5分など)の証明書の有効性を使用します(証明書の有効期限が切れた後でもSSHセッションは開いたままです)
  • 2FAを使用してスクリプトを作成することも困難にし、開発者に他のソリューションを見つけさせる
  • インフラストラクチャ外の特定のサブモジュールは、それが実行されているクラウドによって提供されるセキュリティメカニズムによって適切に保護され、各開発者が任意のホストにアクセスできるように証明書を動的に生成します

1

OneIdentity(元バラビット)SPSは、このシナリオで必要なものです。このアプライアンスを使用すると、基本的に任意のマシンでユーザーIDを管理し、ユーザーの行動を追跡し、監視と警告を行い、ユーザーが後のレビューのために行うすべてのインデックスを作成できます。


0

私の提案は、ユーザーマシンからのSSHアクセスを許可しないことです。

代わりに

  1. Gitでプレイブックをホストします。
  2. 「アクセスサーバー」をJenkinsサーバーに変えます。
  3. Grantは、devopsユーザーへのJenkinsアクセスのみを必要としました。
  4. Ansibleを実行すると、JenkinsでHTTP経由のビルドジョブが実行されます。
  5. 追加のセキュリティ対策として、必要に応じてJenkins CLIを無効にします。

サンプル実行モデル、

  1. Jenkins Ansibleプラグイン:https : //wiki.jenkins.io/display/JENKINS/Ansible+Plugin

または

  1. クラシックシェル-ジョブのタイプを実行します。git checkoutを含むビルドステップを手動で追加します。

サーバーリソースが限られている場合、同じJenkinsサーバーがGit(scm-manager)をホストできますが、開発者のマシンの1つが感染した場合、追加のセキュリティリスクがあります。Jenkinsサーバーをインターネットから切断し、ローカルでAnsible依存関係を解決することにより、これを軽減できる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.