Cloudflare Access can replace 従来の SSH 鍵を、Access ログインで生成されたトークンに基づいてユーザーへ発行する短命証明書に置き換えます。従来の運用では、ユーザーが SSH 鍵ペアを生成し、管理者が公開鍵を各 SSH サーバーに配置してアクセスを許可します。これらの SSH 鍵は、サーバー上で数か月から数年にわたって変更されないことがあります。Cloudflare Access は SSH 鍵の管理負担をなくし、長期間有効な SSH 鍵を短命の SSH 証明書に置き換えることでセキュリティも向上します。
Cloudflare Access の短命証明書は、Access の背後にあるかどうかにかかわらず、最新の SSH サーバーで使えます。ただし、監査やブラウザーベースのターミナルなどの機能を追加できるため、サーバーを Access の背後に置くことをおすすめします。
サーバーを Cloudflare Access の背後で保護するには、次の手順を行います。
- 公開アプリケーションとして サーバーを Cloudflare に接続します。
- サーバー向けに セルフホストの Access アプリケーション を作成します。
Cloudflare Access はトークンから ID を取得し、短命証明書を使って対象インフラ上のユーザーを認可します。
いちばん簡単な構成は、ユーザーの Unix ユーザー名がメールアドレスのプレフィックスと一致する場合です。発行される短命証明書は、そのユーザーのメールアドレスのプレフィックスに対して有効です。たとえば、Okta または GSuite の組織に [email protected] として登録されているユーザーは、SSH サーバーへ jdoe としてログインします。
テスト用に、次のコマンドでマシン上に Unix ユーザーを作成できます。
sudo adduser jdoe高度な設定: ユーザー名が異なる場合
SSH 証明書の署名には、1 つ以上の principals が含まれます。これは、その証明書でログインできる Unix ユーザー名を示します。Cloudflare Access は、常にプリンシパルをユーザーのメールアドレスのプレフィックスに設定します。たとえば [email protected] が接続しようとすると、Access はプリンシパル jdoe 向けに認可された短命証明書を発行します。
デフォルトでは、SSH サーバーは Unix ユーザー名を、ユーザーの証明書に記載されたプリンシパルと照合します。Unix ユーザー名と一致しないプリンシパルも受け入れるように、SSH サーバーを設定できます。
ユーザー名が別のメールアドレスに対応する場合
[email protected] がユーザー johndoe としてログインできるようにするには、サーバーの /etc/ssh/sshd_config に次を追加します。
Match user johndoe
AuthorizedPrincipalsCommand /bin/echo 'jdoe'
AuthorizedPrincipalsCommandUser nobodyこれは、誰かがユーザー johndoe として認証しようとしたときに、証明書にプリンシパル jdoe があるかを確認するよう SSH サーバーに指示します。これにより、ユーザー [email protected] は次のようなコマンドでサーバーにサインインできます。
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 ポリシー が正しく設定されていることを確認してください。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Service credentials > SSH を開きます。
-
Add a certificate を選択します。
-
Application のドロップダウンで、SSH サーバーを表す Access アプリケーションを選びます。
-
Generate certificate を選択します。短命証明書の表に、Access アプリケーション名の行が追加されます。
-
アプリケーションの短命証明書を選択します。
-
CA public key をコピーします。この公開鍵は、あとからいつでもコピーできます。
- 手順 3 でダッシュボードに表示された公開鍵をコピーします。
-
次のコマンドで、リモートの対象マシン上の SSH 設定ディレクトリに移動します。
cd /etc/ssh -
移動したら、次のコマンドでファイルを生成し、テキストエディターで公開鍵を入力または貼り付けます。
vim ca.pub -
ca.pubファイルに、公開鍵を変更せずに貼り付けます。ca.pubtxt ecdsa-sha2-nistp256 <redacted> [email protected]ca.pubファイルには複数の鍵を、1 行に 1 つずつ記入できます。空行と、#で始まるコメントも使えます。 -
ca.pubファイルを保存します。一部のシステムでは、権限によっては次のコマンドで強制的に保存する必要があります。:w !sudo tee % :q!
リモートの対象マシンで sshd_config ファイルを更新し、SSH サーバーが Cloudflare SSH CA を信頼するように設定します。
-
リモートマシンの
/etc/sshディレクトリで、sshd_configファイルを開きます。sudo vim /etc/ssh/sshd_config -
iを押して挿入モードに入り、ファイルの先頭(ほかのディレクティブより上)に次の行を追加します。PubkeyAuthentication yes TrustedUserCAKeys /etc/ssh/ca.pub -
escを押し、:xと入力してEnterを押し、保存して終了します。
sshd の設定を変更したら、変更を反映するためにリモートマシンで SSH サービスを再読み込みします。
Debian/Ubuntu の場合:
sudo systemctl reload sshCentOS/RHEL 7 以降の場合:
sudo systemctl reload sshdクライアント側では、保護されたマシンへ到達するために デバイスを設定 して 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 プロバイダーでの認証を求められます。