Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

短命証明書(レガシー)

最終更新 Markdown で表示Agent セットアップ

Cloudflare Access can replace 従来の SSH 鍵を、Access ログインで生成されたトークンに基づいてユーザーへ発行する短命証明書に置き換えます。従来の運用では、ユーザーが SSH 鍵ペアを生成し、管理者が公開鍵を各 SSH サーバーに配置してアクセスを許可します。これらの SSH 鍵は、サーバー上で数か月から数年にわたって変更されないことがあります。Cloudflare Access は SSH 鍵の管理負担をなくし、長期間有効な SSH 鍵を短命の SSH 証明書に置き換えることでセキュリティも向上します。

1. サーバーを Cloudflare Access の背後で保護する

Cloudflare Access の短命証明書は、Access の背後にあるかどうかにかかわらず、最新の SSH サーバーで使えます。ただし、監査やブラウザーベースのターミナルなどの機能を追加できるため、サーバーを Access の背後に置くことをおすすめします。

サーバーを Cloudflare Access の背後で保護するには、次の手順を行います。

  1. 公開アプリケーションとして サーバーを Cloudflare に接続します
  2. サーバー向けに セルフホストの Access アプリケーション を作成します。

2. Unix のユーザー名を SSO の ID と揃える

Cloudflare Access はトークンから ID を取得し、短命証明書を使って対象インフラ上のユーザーを認可します。

いちばん簡単な構成は、ユーザーの Unix ユーザー名がメールアドレスのプレフィックスと一致する場合です。発行される短命証明書は、そのユーザーのメールアドレスのプレフィックスに対して有効です。たとえば、Okta または GSuite の組織に jdoe@example.com として登録されているユーザーは、SSH サーバーへ jdoe としてログインします。

テスト用に、次のコマンドでマシン上に Unix ユーザーを作成できます。

sudo adduser jdoe

高度な設定: ユーザー名が異なる場合

SSH 証明書の署名には、1 つ以上の principals が含まれます。これは、その証明書でログインできる Unix ユーザー名を示します。Cloudflare Access は、常にプリンシパルをユーザーのメールアドレスのプレフィックスに設定します。たとえば jdoe@example.com が接続しようとすると、Access はプリンシパル jdoe 向けに認可された短命証明書を発行します。

デフォルトでは、SSH サーバーは Unix ユーザー名を、ユーザーの証明書に記載されたプリンシパルと照合します。Unix ユーザー名と一致しないプリンシパルも受け入れるように、SSH サーバーを設定できます。

ユーザー名が別のメールアドレスに対応する場合

jdoe@example.com がユーザー johndoe としてログインできるようにするには、サーバーの /etc/ssh/sshd_config に次を追加します。

Match user johndoe
  AuthorizedPrincipalsCommand /bin/echo 'jdoe'
  AuthorizedPrincipalsCommandUser nobody

これは、誰かがユーザー johndoe として認証しようとしたときに、証明書にプリンシパル jdoe があるかを確認するよう SSH サーバーに指示します。これにより、ユーザー jdoe@example.com は次のようなコマンドでサーバーにサインインできます。

ssh johndoe@server

ユーザー名が複数のメールアドレスに対応する場合

複数のメールアドレスが vmuser としてログインできるようにするには、サーバーの /etc/ssh/sshd_config に次を追加します。

Match user vmuser
  AuthorizedPrincipalsFile /etc/ssh/vmusers-list.txt

これは、ファイルからプリンシパルの一覧を読み込むよう SSH サーバーに指示します。次に /etc/ssh/vmusers-list.txt に、vmuser としてログインできるメールプレフィックスを 1 行につき 1 つずつ列挙します。

jdoe
bwayne
robin

ユーザー名がすべてのユーザーに対応する場合

任意の Access ユーザーが vmuser としてログインできるようにするには、サーバーの /etc/ssh/sshd_config に次のコマンドを追加します。

Match user vmuser
  AuthorizedPrincipalsCommand /bin/bash -c "echo '%t %k' | ssh-keygen -L -f - | grep -A1 Principals"
  AuthorizedPrincipalsCommandUser nobody

このコマンドは、ユーザーが提示した証明書を受け取り、その証明書に記載されているプリンシパルを認可します。

すべてのユーザーを許可する

任意の Access ユーザーが任意のユーザー名でログインできるようにするには、サーバーの /etc/ssh/sshd_config に次を追加します。

AuthorizedPrincipalsCommand /bin/bash -c "echo '%t %k' | ssh-keygen -L -f - | grep -A1 Principals"
AuthorizedPrincipalsCommandUser nobody

この設定では、サーバーのセキュリティが Access の構成に完全に依存します。Access ポリシー が正しく設定されていることを確認してください。

3. 短命証明書の公開鍵を生成する

  1. Cloudflare ダッシュボードZero Trust > Access controls > Service credentials > SSH を開きます。

  2. Add a certificate を選択します。

  3. Application のドロップダウンで、SSH サーバーを表す Access アプリケーションを選びます。

  4. Generate certificate を選択します。短命証明書の表に、Access アプリケーション名の行が追加されます。

  5. アプリケーションの短命証明書を選択します。

  6. CA public key をコピーします。この公開鍵は、あとからいつでもコピーできます。

4. 公開鍵を保存する

  1. 手順 3 でダッシュボードに表示された公開鍵をコピーします。
  1. 次のコマンドで、リモートの対象マシン上の SSH 設定ディレクトリに移動します。

    cd /etc/ssh
  2. 移動したら、次のコマンドでファイルを生成し、テキストエディターで公開鍵を入力または貼り付けます。

    vim ca.pub
  3. ca.pub ファイルに、公開鍵を変更せずに貼り付けます。

    ca.pubtxt
    ecdsa-sha2-nistp256 <redacted> open-ssh-ca@cloudflareaccess.org

    ca.pub ファイルには複数の鍵を、1 行に 1 つずつ記入できます。空行と、# で始まるコメントも使えます。

  4. ca.pub ファイルを保存します。一部のシステムでは、権限によっては次のコマンドで強制的に保存する必要があります。

    :w !sudo tee %
    :q!

5. sshd_config ファイルを変更する

リモートの対象マシンで sshd_config ファイルを更新し、SSH サーバーが Cloudflare SSH CA を信頼するように設定します。

  1. リモートマシンの /etc/ssh ディレクトリで、sshd_config ファイルを開きます。

     sudo vim /etc/ssh/sshd_config
  2. i を押して挿入モードに入り、ファイルの先頭(ほかのディレクティブより上)に次の行を追加します。

    PubkeyAuthentication yes
    TrustedUserCAKeys /etc/ssh/ca.pub
  3. esc を押し、:x と入力して Enter を押し、保存して終了します。

6. SSH サーバーを再起動する

sshd の設定を変更したら、変更を反映するためにリモートマシンで SSH サービスを再読み込みします。

Debian/Ubuntu の場合:

sudo systemctl reload ssh

CentOS/RHEL 7 以降の場合:

sudo systemctl reload sshd

7. ユーザーとして接続する

クライアントの SSH 設定を構成する

クライアント側では、保護されたマシンへ到達するために デバイスを設定 して Cloudflare Access を使います。短命証明書を使うには、SSH 設定ファイル(~/.ssh/config)に次の設定を含めます。

時間を節約するには、次の cloudflared コマンドで必要な設定コマンドを出力できます。

cloudflared access ssh-config --hostname vm.example.com --short-lived-cert

手動で設定する場合、生成される SSH 設定は次のとおりです。

Match host vm.example.com exec "/usr/local/bin/cloudflared access ssh-gen --hostname %h"
    HostName vm.example.com
    ProxyCommand /usr/local/bin/cloudflared access ssh --hostname %h
    IdentityFile ~/.cloudflared/vm.example.com-cf_key
    CertificateFile ~/.cloudflared/vm.example.com-cf_key-cert.pub

ブラウザーベースのターミナルで接続する

エンドユーザーは設定なしで、Cloudflare のブラウザーベースのターミナルから SSH セッションに接続できます。有効化の手順は Browser-rendered terminal を参照してください。

デフォルトでは、ブラウザーベースのターミナルはユーザー名とパスワードのログインを求めます。証明書ベースの認証を使う場合は、ブラウザー描画の SSH 用に設定した Access アプリケーション向けに 短命証明書を作成 済みであることを確認してください。


SSH サーバーは Cloudflare Access の背後で保護されます。接続前に、ID プロバイダーでの認証を求められます。

役に立ちましたか?