このページでは、Google エンジニアが Secure Shell(SSH)経由で Distributed Cloud 接続ゾーンのノードにアクセスしてトラブルシューティングできるように、Google Distributed Cloud 接続デプロイに踏み台ホストを構成する方法について説明します。
Google は、ビジネス要件に基づいてカスタマイズされた要塞ホスト仮想マシンを構築できる完全なソースコードを提供します。
前提条件
このセクションでは、Distributed Cloud 接続バストホスト ソリューションをデプロイするための前提条件について説明します。
アクセス承認を有効にする
要塞ホスト機能は、アクセスの透明性の Access Approval 機能を使用して、Google がデータへのアクセスをリクエストできるようにします。要塞ホストの仮想マシンをデプロイする前に、 Google Cloud プロジェクトでアクセスの透明性とアクセス承認を有効にする必要があります。詳しくは次のページをご覧ください。
仮想マシンの仕様
Distributed Cloud 接続バストホスト ソリューションには、次の仕様の small サイズの OpenStack デプロイメントと同等のものが必要です。
- CPU: 1 vCPU
- RAM: 2 GB
- ディスク: 20 GB
信頼性を高めるために、リージョンごとに N+1 個の踏み台ホスト仮想マシンをデプロイすることをおすすめします。 Google Cloud
ネットワーキングの要件
Distributed Cloud 接続の要塞ホスト ソリューションでは、各要塞ホスト仮想マシンに対して次のネットワーク ピアリング セッションを構成する必要があります。
- ノースバウンド。踏み台インスタンスの仮想マシンをインターネットに接続します。インターネット アクセスが必要で、Google が提供する特定の IP アドレスからのポート 22 での接続を許可する必要があります。これらの IP アドレスは、要塞ホスト ソリューションのディスク イメージとソースコード パッケージの一部です。
- サウスバウンド。ポート 22 経由で、単一の Google Cloud リージョン内の対応する Distributed Cloud 接続ゾーンに、要塞ホストの仮想マシンを接続します。
- 管理。運用とメンテナンスのために、要塞ホストの仮想マシンをローカル ネットワークに接続します。組織のセキュリティ ポリシーに従って、このピアリング セッションを構成します。
おすすめのセキュリティ対策
組織のセキュリティ ポリシーに加えて、Distributed Cloud 接続デプロイに要塞ホスト ソリューションを構成する際は、このセクションで説明するセキュリティのベスト プラクティスに従うことを強くおすすめします。
- 最小権限の原則に従い、ユーザーの職務分掌を明確に維持します。
- 管理者以外のすべてのユーザー アカウントで、証明書ベースの認証のみを使用します。パスワードベースの認証と、要塞ホスト仮想マシンへの root アクセスを無効にします。
- Google が提供するサポート IP アドレス リストに含まれていない、北方向のピアリング セッションのすべての IP からのアクセスを拒否します。
- ポート 22(SSH)を除くサウスバウンド ピアリング セッションのすべてのポートを閉じ、Google が提供するサポート IP アドレス リストの IP アドレスに対してのみ許可します。
- すべての踏み台ホスト仮想マシンを最新の状態に保ちます。Google は、セキュリティ パッチとバージョン アップデートごとに新しいソースコード パッケージを提供します。
- 組織のセキュリティ ポリシーを満たすアラート ソリューションと監査ソリューションを構成します。
踏み台ホストのサポートを有効にする
Distributed Cloud 接続デプロイで踏み台ホストのサポートを有効にするには、リクエストを送信します。
Distributed Cloud に接続されたゾーンごとに、個別に要塞ホストのサポートを有効にして構成する必要があります。これにより、組織のビジネスニーズに最適なさまざまなアクセス構成とネットワーク構成を、Distributed Cloud の接続ゾーンごとにデプロイできます。
踏み台インスタンスのソフトウェアを取得する
踏み台ホストのソフトウェア パッケージは、Google サポートが Distributed Cloud 接続デプロイの踏み台ホスト機能を有効にした後に送信されます。このパッケージには次のものが含まれます。
- ソースコード。ビジネス要件に基づいて、独自の要塞ホスト仮想マシン イメージをカスタマイズして構築できます。
- ドキュメント。証明書の構成などのタスクに関する追加のドキュメント。
踏み台ホストの仮想マシン イメージを構築する
このセクションでは、Google が提供するソースコードから踏み台ホストの仮想マシン イメージをビルドするために必要な手順の概要について説明します。完全な手順は、ソースコードに付属する README ファイルに記載されています。
前提条件
踏み台ホストの仮想マシン イメージを構築するには、次のものが必要です。
- Debian 11 を実行しているマシン。
- 最新の Debian クラウド サーバー イメージ。
- マシンにインストールされている
qemu-img、qemu-system-x86_x64、GNUmtoolsソフトウェア。 - 踏み台インスタンスにログインして
host-userセッションを開始するための公開 SSH 認証鍵を含むhost-user-key.pubという名前のファイル。この鍵は、直接認証に使用することも、認証局の署名鍵として使用することもできます。踏み台インスタンスはこの CA を信頼する必要があります。 - ターゲットの踏み台インスタンスで管理タスクを実行するための公開 SSH 認証鍵を含む
admin-user-key.pubという名前のファイル。この鍵は、直接認証に使用することも、認証局の署名鍵として使用することもできます。踏み台インスタンスはこの CA を信頼する必要があります。 - Google が提供する公開 SSH 認証局署名鍵を含む
guest-user-key.pubという名前のファイル。これにより、Google サポートは踏み台ホスト インスタンスに接続する際にguest-userとして認証できます。
仮想マシン イメージをビルドする
ソースコードに付属の README ファイルに記載されている手順に沿って、Google が提供するソースコードから要塞ホストの仮想マシン イメージをビルドします。このガイドの例では、生成された画像ファイルを bastion-host.img と呼びます。
HIBA パッケージをビルドする
SSH(HIBA)認証ソフトウェア レイヤのホスト ID ベースの認可用の Debian インストール パッケージを次のようにビルドします。
次のコマンドを使用して、必要な依存関係をインストールします。
sudo apt-get install autoconf autogen build-essential git libssl-dev libtool zlib1g-dev
次のコマンドを使用してインストール パッケージをビルドします。
./build-hiba.sh -j $(nproc) /tmp/hiba-build-workdir
インストール パッケージは /tmp/hiba-build-workdir ディレクトリに保存され、hiba_x.y-z_amd64.deb という名前になります。ここで、x、y、z は HIBA バージョン番号を表します。
cloud-init 構成を生成する
generate-cloud-init.py スクリプトを使用して、必要な cloud-init 構成を生成します。独自のツールを使用してこれらの構成を生成することもできます。これらの構成ファイルは次の処理を行います。
- 要塞ホストの仮想マシン イメージ内に必要なユーザー アカウントを作成し、前述の SSH 認証鍵を使用してこれらのアカウントを構成します。
- 確立された端末マルチプレクサ セッションへの参加のみに
guest-userアカウントの権限を制限するスクリプトを追加します。 - ターミナル マルチプレクサ セッションを作成して管理するスクリプトを追加します。
- HIBA 構成ファイルを準備します。
generate-cloud-init.py スクリプトには、以前にビルドした HIBA パッケージと、必要な SSH 認証鍵を含む 3 つのファイルが必要です。次のようにスクリプトを実行します。
./generate-cloud-init.py \ --hiba-package="${WORK_DIR}/hiba_1.0-1_amd64.deb" \ --host-user-key="HOST_USER_KEY_FILE" \ --manager-user-key="ADMIN_USER_KEY_FILE" \ --guest-user-ca="GUEST_USER_KEY_FILE" \ "${WORK_DIR}/cloud-init/"
次のように置き換えます。
HOST_USER_KEY_FILE:host-user-key.pubファイルのフルパスと名前。ADMIN_USER_KEY_FILE:admin-user-key.pubファイルのフルパスと名前。GUEST_USER_KEY_FILE:guest-user-key.pubファイルのフルパスと名前。
スクリプトは、ローカル作業ディレクトリ内の cloud-init ディレクトリに cloud-init.img ファイルを配置します。
踏み台ホストの仮想マシン イメージに cloud-init 構成を適用する
qemu-system-x86_64 ツールを使用して、前に生成した cloud-init 構成を次のように踏み台ホストの仮想マシン イメージ ファイルに適用します。
qemu-system-x86_64 \ -nographic \ -enable-kvm \ -smp 1 \ -m 1g \ -drive format=qcow2,index=0,file=${WORK_DIR}/bastion-host.img \ -drive format=raw,index=1,file=${WORK_DIR}/cloud-init/cloud-init.img \ -nic user,hostfwd=tcp::10022-:22
このコマンドがエラーを返した場合は、踏み台ホストの仮想マシン イメージでディスクサイズを変更する必要があります。
仮想マシンを起動すると、構成が正常に適用されたことを確認できます。auditd ログに次のような出力が表示されます。
[ 52.659013] cloud-init[615]: Cloud-init v. 20.4.1 finished at Fri, 28 Apr 2023 18:53:55 +0000.
ユーザー アカウントと sshd 構成を手動で調べて確認することもできます。
要塞ホストの仮想マシン イメージをインポートする
完全に構成された踏み台ホストの仮想マシン イメージをデプロイ インフラストラクチャにインポートする前に、次のように qemu-img ツールを使用してスナップショットを作成する必要があります。
qemu-img snapshot -c installed bastion-image.img
組織が確立したプロセスに沿って、踏み台ホストの仮想マシン イメージをデプロイ インフラストラクチャにインポートします。
踏み台ホストの仮想マシンを構成する
このセクションの手順に沿って、踏み台ホストの仮想マシンを構成します。
必要なユーザー アカウントを構成する
Distributed Cloud Connected の踏み台ホスト機能には、次のカテゴリのユーザー アカウントが 1 つ以上必要です。
- 管理。これは、踏み台ホストの仮想マシンの管理者アカウントです。ルートアクセス権限があります。
- ホストユーザー。これはオペレーション エンジニアのアカウントです。Google サポートのターミナル マルチプレクサ セッションを開始して管理できますが、これらのセッションにコマンドを入力することはできません。
- ゲストユーザー。これは Google サポート エンジニアのアカウントです。オペレーション エンジニアと共有されているターミナル マルチプレクサ セッション内で、踏み台ホスト仮想マシンに SSH 接続を確立できます。他の権限はありません。
- 共同ユーザー。このアカウントは、踏み台ホストの仮想マシンでターミナル マルチプレクサ セッションを確立します。オペレーション エンジニアと Google サポート エンジニアがこのセッションに共同で接続します。
証明書を構成する
前のセクションで説明したアカウントが要塞ホストの仮想マシンにアクセスできるようにする証明書を構成する必要があります。要塞ホストのソフトウェア パッケージには、必要な cloud-init 構成を生成する generate-cloud-init.py という名前のスクリプトが含まれています。この構成には、各アカウントに必要なアカウント、SSH 鍵、証明書が含まれています。
手順については、cloud-init 構成を生成するをご覧ください。
ロギングを構成する
踏み台ホストのログは、audit デーモンからリアルタイムでオンデマンドで取得できます。ロギング構成は auditd.conf ファイルで管理できます。ビジネス要件に基づいて、踏み台ホストの仮想マシンからログをローテーションしてエクスポートする責任はお客様にあります。また、仮想マシンに保存するための十分なディスク容量を維持する必要があります。
設定をテストする
このセクションの手順を完了して、両端からの接続や、必要なユーザー アカウントに対する適切なアクセス制御など、踏み台ホストの仮想マシンのデプロイをテストします。また、Google サポートと連携してライブテストを実施することをおすすめします。
デプロイをローカルでテストする
踏み台インスタンスの仮想マシンで
host-userとして SSH セッションを確立できることを確認します。失敗した場合は、SSH 認証鍵と証明書を確認します。次のコマンドを使用して、ターミナル マルチプレクサ セッションを開始できることを確認します。
./opt/create-shared-tmux-session
次のコマンドを使用して、Distributed Cloud 接続デプロイが踏み台ホストの仮想マシンから到達可能であることを確認します。
ssh -vv bastion-user@TARGET_ADDRESS
TARGET_ADDRESSは、ターゲットの Distributed Cloud マシンまたは ToR スイッチの IP アドレスに置き換えます。リクエストは SSH 認証によって拒否されますが、SSH 転送と認証のリクエストは Distributed Cloud 接続のデプロイに到達する必要があります。失敗した場合は、ファイアウォールの構成を確認します。
このガイドの前半で説明したように、 Google Cloud 組織とターゲット プロジェクトの両方でアクセスの透明性とアクセスの承認が有効になっていることを確認します。
Google サポートでデプロイをライブでテストする
踏み台ホストのデプロイをローカルでテストしたら、Google サポートに連絡してライブテスト セッションのスケジュールを設定します。セッションの前に、Google サポートからアクセス承認リクエストが送信されます。ライブテスト セッションでは、Google とともに次の内容を確認します。
- アクセス承認リクエストの生成と承認。
- 踏み台インスタンスのデプロイのエンドツーエンドのアクセス ワークフロー。
- アクセスの承認とアクセスの透明性のログ。
- 次のシナリオのトラブルシューティング方法:
- Google が、Access Approval リクエストで指定されていない踏み台インスタンスへの接続を試行している。
- ターミナル マルチプレクサ セッションを開始していないときに、Google が踏み台インスタンスへの接続を試行している。
- 対応するアクセス承認リクエストが拒否または取り消された後に、Google が踏み台ホスト インスタンスに接続しようとしている。
- ターミナル マルチプレクサ セッションから切断するか、終了した場合。