SSHキーなしでOpenPubkeyを使用してSSHを行う方法

この記事は BastionZero の寄稿によるものです。

SSHキーを気にせずにSSHできるとしたらどうでしょうか? SSHキーの紛失、盗難、共有、ローテーション、忘れを心配する必要はありませんか? この記事では、メールアカウントまたはシングルサインオン(SSO)だけでリモートDockerセットアップにSSH接続する方法について説明します。 OpenPubkey SSH の設定方法については 、こちらのドキュメントをご覧ください

バナー:sshキーなしでsshにopenpubkeyを使用する方法2400x1260px

SSH の何が問題になっていますか?

私たちは SSH が大好きで、いつも使っていますが、何年にもわたって蓄積したキーの数を数えるために立ち止まることはあまりありません。 これを書いている時点で、私は8つ持っています。 5つが何のためにあるのかは言えるが、少なくとも2つ持つべきではないし、少なくとももう1つ失った場合の素早い発射は間違いない。 「is_key.pem」とはいったい何なのでしょうか? 全然わからんし、いつ作ったかもわからなかったみたいです。

SSHキーが実際に無害なことはめったにありませんが、リモートDockerセットアップへのアクセスやデバッグにのみ使用している場合でも、そのキーはめったにありません。 テスト環境は 頻繁にクリプト ジャックや プロキシジャック され、インターネット全体がSSHハッキング専用になっています。 

最後にパッチを適用し sshdたのはいつですか? このツールはユビキタスですが、めったに更新されないため、これらの脅威はすぐには消えません。 鍵の管理は 煩わしい 作業であり、妥協につながることは避けられず、単純なミスが恐ろしい結果につながる可能性があります。 GitHubでさえ、昨年、公開リポジトリで SSH秘密鍵を公開し ました。 

では、どうすればいいのでしょうか? どうすれば改善できますか? そして、それは無料ですか? はい、はい、はい。 

現在、OpenPubkeyでSSHを使用する新しい方法があります。 OpenPubkey SSH(OPK SSH)を使用すると、SSHキーをジャグリングする代わりに、通常のメールアカウントまたはSSOを使用してログインし、1回限りの迅速なセットアップでSSHサーバーに安全に接続できます。 どのキーがあなたを解雇するかを推測したり、不適切な命名規則のために過去の自分を呪ったりする必要はもうありません。 キーはありません。

OpenPubkey SSHは、BastionZero、Docker、The Linux Foundationが主導するオープンソースプロジェクトである OpenPubkeyの最初の完全に開発されたユースケースです。 機能を強化し、進化するユーザーのニーズとセキュリティの課題に対応するために適応するにつれて、成長と改善が続けられます。 OpenPubkeyとは何か、そしてそれがどのように機能するかを学ぶために読んでください。

OpenPubkey SSH を使い始める 

現在、OPK SSH は Google 経由のログインのみをサポートしています。 ご希望のプロバイダーが決まっている場合は、 GitHub にアクセスする か、以下の「 参加する」 セクションで詳細をご確認ください。

OpenPubkey SSH は、BastionZero のゼロトラストコマンドラインユーティリティ zliである . のインストール zli 手順については 、BastionZeroのドキュメントを参照してください

をインストールし zliたら、次のことを行う必要があります。

  1. SSH サーバーを構成する (<1 分)
  2. Google でログイン (<1 分)
  3. 構成をテストする
  4. Docker リモート アクセスに OPK SSH を使用する
  5. ユーザーを管理する

SSH サーバーを構成する

最初のステップは、SSHサーバーを構成することです。 初めてのセットアップでは、Googleアカウントと、セットアップしようとしているSSHサーバーへの少なくともsudoerアクセスがあることを前提としています。

zli configure opk <your Google email> <user>@<hostname>

Googleでログイン

次に、ログインする必要があります。 これにより、ブラウザウィンドウが開き、Googleで認証できるようになります。

zli login --opk

構成をテストする

これで、OPK を使用して SSH を使用できるようになりました。 すべてが正しく構成され、アクセスが OPK SSH 経由で機能していることをテストするには、次のコマンドを実行します。

ssh -F /dev/null -o IdentityFile=~/.ssh/id_ecdsa -o IdentitiesOnly=yes user@server_ip

証明書をデフォルトの場所に保存するため、SSH は常にそれを使用して認証します。 そのため、既存のSSHキーを削除した後にを指定する IdentityFile 必要はありません。

Docker リモート アクセスに OPK SSH を使用する

すでにDockerでSSHを使用している場合は、準備が整っており、他に何もすることなく、既存のリモートDockerセットアップを維持できます。 それ以外の場合は、次のいずれかの操作を行って、ローカルの Docker クライアントがリモートの Docker インスタンスに接続するように設定できます。

# Set an environment variable
$ export DOCKER_HOST=ssh://user@server-ip

# Or, create a new context
$ docker context create ssh-box --docker "host=ssh://user@server-ip"

その後、通常どおりDockerを使用でき、内部でSSHを使用してリモートDockerインスタンスに接続します。

ユーザーを管理する

1 人のユーザー用に設定したので、次は複数のユーザー用に構成する方法について説明しましょう。 OPK SSH では、ユーザーにアクセス権を付与するためにユーザーと調整する必要がありません。 サーバーへのアクセスを許可するユーザーの選択は、次のような読みやすい YAML ポリシー ファイルで指定します。

$ cat policy.yaml
users:
    - email: [email protected]
      principals:
        - root
        - luffy
    - email: [email protected]
      principals:
        - luffy

principalsこれは、SSH が許可されているユーザーの SSH スピークであることに注意してください。

単独または少人数のグループで飛行する場合は、このファイルを直接処理する必要はないでしょう。私たちの zli configuration コマンドがあなたのためにこれを処理します。 ただし、大規模なグループでは、これが大規模にどのように機能するかに関心がある可能性があり、その答えがあります。 OPK SSH がお客様のニーズにどのように適合するかについては、 BastionZero までお問い合わせください。 プロセス中の問題やトラブルシューティングに関する質問については、 ガイドをご覧ください。

仕組み

Dockerでは、環境変数またはコンテキストの一部として別のホストを指定することで、SSHを使用してリモートコンテナでDockerコマンドを実行できます。

# Set an environment variable
$ export DOCKER_HOST=ssh://user@server-ip

# Or, create a new context
$ docker context create ssh-box --docker "host=ssh://user@server-ip"

OPK SSH の場合は、何も変更する必要はありません。 Dockerは、事前に構成されたSSHを内部で使用しています。 OpenPubkeyは、より安全でありながら、DockerやSSHに依存するその他のアクセスユースケースと完全に互換性のある別の構成です(図1)。

Dockerクライアント、sshクライアント、sso、dockerホスト、opkベリファイアの概要を示す図。
図1:OpenPubkey SSHを使用したコンテナへのアクセス

OpenPubkeyは、SSHがすでに設計されている方法とうまくスライドします。 私たちは、よく使用され、広く展開されている統合メカニズムのみを使用しています。 まず、SSH キーの代わりに SSH 証明書を使用し、次に を使用して AuthorizedKeysCommand OpenPubkey 検証プログラムを呼び出します。これはすべて私たちの zli configure コマンドによってあなたのために世話をされます。

$ cat /etc/ssh/sshd_config
...
AuthorizedKeysCommand /etc/opk/opk-ssh verify %u %k %t
AuthorizedKeysCommandUser root
...

SSH 証明書を使用すると、キーが不要になります。 x509 などの従来の証明書エコシステムのように使用する代わりに、サーバー上で検証できる特別なトークンで埋め込むことが目標です。 そこで、の AuthorizedKeysCommand 出番です。 

を使用すると AuthorizedKeysCommand 、ユーザーは、ファイル内の authorized_keys 事前構成された公開キーと比較するのではなく、プログラムによってアクセスを評価できます。 OPK 検証ツールを使用するように構成 sshd すると、今後付与するすべての OPK 生成 SSH 証明書へのアクセスを許可または拒否できます。

OpenPubkeyとは何ですか?

OpenPubkeyはSSHだけではありません。それだけではありません。 Dockerは Docker公式イメージの署名 に使用し、BastionZeroはゼロトラストインフラストラクチャアクセスに使用しています。 OpenPubkeyは、Linux Foundation、BastionZero、Dockerの共同 の取り組み です。 これは、OpenID Connect(OIDC)上に構築されたオープンソースプロジェクトであり、古い機能に影響を与えることなく新しい機能を追加します。 

OIDCは、個人(または仕事用)の電子メールアカウントを使用してWebサイトまたはアプリケーションにログインできるようにするプロトコルです。 ログインすると、実際には、特定のアプリケーション専用の ID トークン (ID トークン) が生成され、自分が自分であることが証明されます。 また、便利な個人情報も含まれており、基本的には、そのアプリケーションに要求の許可を与えたものです。 

基本的に、OpenPubkeyは一時的な公開鍵をIDトークンに追加して、メッセージに署名できるようにします。 Google、Microsoft、Oktaなどの信頼できるIDプロバイダーによって証明されているため、いつでもどこでも誰でも検証できます。

しかし、OpenPubkeyは、IDトークンに公開鍵を追加するだけではありません。また、それをどのように使用するかについても同様です。 バニラ OIDC の問題の 1 つは、そのトークンを尊重するアプリケーションが、あなたがあなたであると想定することです。 OpenPubkeyでは、公開トークンを提示するだけでなく、1回限りの署名付きメッセージを提示することで、あなたが誰であるかを証明することができます。 したがって、あなたになりすます唯一の方法は、あなたの公開トークン あなたのマシンを離れることのない秘密を盗むことです。  

参加するには

参加する方法はたくさんあります。 私たちは、情熱的で熱心なコミュニティを構築しています。 私たちは、アーキテクトが好きな人のための高いレベルのものと、異なる種類のアーキテクトになりたい人のための楽しくて骨太な技術的なレベルの両方で物事を議論します。 たむろしに来てください。皆様のご支援に感謝いたします。

参加をご希望の方は、 OpenPubkey リポジトリをご覧ください。 また、SSH キーを使用せずに OPK SSH to SSH を試す準備ができている場合は、ドキュメントの包括的なガイドを参照してください。

さらに詳しく

コンテナ、OpenPubkey、セキュリティ