私の会社では、LDAPを使用してすべてのマシンに一貫したアカウントのセットを作成し、構成管理ツール(この場合は現在cfengine)をauthorized_keys
使用して、すべてのサーバーに各ユーザーのファイルを配布しています。キーファイル自体は(他のシステム構成情報とともに)gitリポジトリに保持されるため、キーがいつ出入りするかを確認できます。cfengine sudoers
は、LDAPディレクトリのユーザーとグループを使用して、各ホストでrootとして何を実行するアクセス権を持つユーザーを制御するファイルも配布します。
本番サーバーではパスワード認証が完全に無効になっているため、SSHキー認証は必須です。ポリシーでは、ラップトップ/デスクトップ/その他に個別のキーを使用し、すべてのキーにパスフレーズを使用して、ラップトップの紛失/盗難の影響を軽減することを推奨しています。
また、実稼働ネットワーク上のホストにアクセスするために使用される要塞ホストがあり、そのネットワークの周りに非常に制限的なファイアウォールルールを設定できます。ほとんどのエンジニアには、これを透過的にするための特別なSSH設定があります。
Host prod-*.example.com
User jsmith
ForwardAgent yes
ProxyCommand ssh -q bastion.example.com "nc %h %p"
このセットアップでは、新しいキーを追加したり古いキーを削除したりするのに多少の儀式が必要です。新しいキーを追加するには、それが監査証跡を残し、すべての人に見える操作であることが望ましいと主張します。ただし、オーバーヘッドが関係するため、古いキーが不要になった場合、人々は時々古いキーを削除することを怠り、従業員が会社を辞めたときをクリーンアップする以外、それを追跡する実際の方法はないと思います。また、完全に生産的になる前に新しいキーを生成し、それをすべてのホストにプッシュする必要があるため、新しいエンジニアをオンボーディングするときに追加の摩擦が発生します。
ただし、最大の利点は、ユーザーごとに個別のユーザー名を持つことです。これにより、必要に応じてよりきめ細かなアクセス制御を簡単に実行でき、監査ログに表示されるIDを各ユーザーに付与できます。 sysadminアクションに戻る運用上の問題。
このセットアップでは、「既知の」SSHキーが代替アクセスパスとして機能する可能性があるため、実稼働ホストに対してアクションを実行する自動システムを持つのは面倒です。これまでのところ、これらの自動システムのユーザーアカウントに、ジョブを実行するために必要な最小限のアクセスのみを許可し、悪意のあるユーザー(既に実稼働アクセスを持つエンジニアである必要があります)が同じアクションを実行できることを受け入れました。アプリケーションのキーを匿名で使用します。