EntraID認証でSSH鍵を動的生成するOPKSSH入門

この記事の内容

  • SSHをEntra ID(OpenID Connect)認証と連携させるツール「OPKSSH」の概要を解説します
  • 認証成功時に動的にSSH鍵を生成し、鍵管理の手間を大幅に削減できます
  • サーバー側に必要な2つの設定ファイル(providersauth.id)の書き方を紹介します
  • クライアントPCでのopkssh loginから実際のSSH接続までのフローを説明します
  • Entra IDの条件付きアクセスポリシーをSSH接続に適用できるセキュリティ上のメリットを紹介します

OPKSSHとは

こんにちは、あさです。今回は、SSH接続をEntra ID(旧Azure AD)の認証——正確にはOpenID Connect(OIDC)認証——に対応させるツール「OPKSSH」をご紹介します。

通常、サーバーへSSH接続する際には、事前に生成・配布されたSSH鍵ファイルを使った認証が必要です。しかし、この方法では鍵の管理が煩雑になりがちです。OPKSSHは、この課題を解決するために開発されたツールです。Entra IDでの認証が成功した場合にのみ、動的にSSH鍵を生成し、それを用いてサーバーへの接続を許可する仕組みを提供します。


OPKSSHの仕組み

OPKSSHはOpenID Connect(OIDC)プロトコルを利用してSSH認証を制御します。具体的なフローは以下の通りです。

  1. ユーザーがクライアントPCから opkssh login コマンドを実行します
  2. ブラウザが起動し、Entra IDの認証画面が表示されます
  3. ユーザーがEntra IDで認証(多要素認証などを含む)を完了します
  4. 認証が成功すると、Entra IDから認証トークンが発行されます
  5. OPKSSHがそのトークンを受け取り、一時的なSSH鍵ペアをクライアントPC上に生成します
  6. ユーザーは生成された鍵を使って、目的のサーバーへSSH接続します
  7. サーバー側では、その鍵が信頼できる発行者(この場合はEntra ID)から発行されたものか検証し、接続を許可します

これにより、ユーザーはSSH鍵自体を意識・管理する必要がなくなります。また、管理者はEntra IDの強力な認証基盤(条件付きアクセスなど)をSSH接続に適用できるようになります。


サーバー側の設定

OPKSSHを動作させるには、サーバー側でいくつかの設定ファイルを用意する必要があります。主要な2つのファイルを見ていきましょう。

1. プロバイダー設定(providersファイル)

このファイルには、どのIDプロバイダーからの認証トークンを信頼するかを定義します。今回はEntra IDを設定します。

#lopgrionv.imdiecrrsosoftonline.com/{ID}{ID}
  • テナントID: ご自身のEntra IDテナントのIDです
  • クライアントID: Entra IDに事前登録した「OPKSSH用アプリケーション」のアプリケーションIDです

この設定により、指定したEntra IDテナントに属する特定のアプリケーションが発行したトークンのみを許可するようになります。

2. ユーザーマッピング設定(auth.idファイル)

次に、Entra IDのユーザーとサーバー上のどのローカルユーザーとしてログインを許可するかを紐付けます。

# auth.idファイルの中身(例)
azureuser:
  - name: masaki@example.com
    issuer: https://login.microsoftonline.com/{テナントID}/v2.0

この例では、masaki@example.com というEntra IDユーザーが、発行者(issuer)として指定されたテナントから発行されたトークンを使って認証した場合に、サーバー上の azureuser というローカルユーザーとしてログインできることを定義しています。


実際の接続フロー

設定が完了したら、実際にクライアントPCから接続してみましょう。

ステップ1: ログインコマンドの実行

まず、クライアントPCで以下のコマンドを実行し、鍵を取得します。

opkssh login --provider={テナントID}

ステップ2: ブラウザでの認証

コマンドを実行するとブラウザが起動し、Entra IDのサインイン画面が表示されます。ユーザー名とパスワードを入力して認証し、アプリケーションへのアクセス許可に同意します。

ステップ3: SSH鍵の生成

認証が成功すると、クライアントPCの .ssh ディレクトリなどに id_opkid_opk.pub といった鍵ファイルが自動的に生成されます。

ステップ4: サーバーへのSSH接続

鍵が生成されたら、通常のSSHコマンドでサーバーに接続します。

ssh azureuser@{サーバーのIPアドレス}

鍵が存在しない状態では拒否されていた接続が、認証後は成功することを確認できます。


OPKSSHを利用するメリット

OPKSSHを導入することで、以下のようなメリットが得られます。

  • 鍵管理の簡素化: ユーザーはSSH鍵の生成や管理を意識する必要がなくなります
  • 認証の一元化: SSH認証をEntra IDに集約できます
  • 高度なセキュリティ: Entra IDの条件付きアクセスポリシー(多要素認証の強制、準拠済みデバイスからのアクセス限定など)をSSH接続にも適用でき、セキュリティを大幅に向上させることが可能です

まとめ

今回は、OPKSSHの基本的な仕組みと使い方について解説しました。このツールを使えば、Entra ID認証と連携したセキュアで便利なSSH接続環境を構築できます。

サーバー側の設定は providers ファイルと auth.id ファイルの2つを用意するだけで、クライアント側も opkssh login を実行してブラウザ認証するだけという手軽さが魅力です。SSH鍵の煩雑な管理から解放されつつ、Entra IDの強力な認証基盤を活用したいという方はぜひ試してみてください。

次回は、このOPKSSHに条件付きアクセスをより厳密に適用し、特定の条件を満たすクライアントからのみアクセスを許可する設定方法や、その際に発生する特殊な挙動について詳しく解説する予定です。