Google Distributed Cloud(GDC)エアギャップは、鍵ベースの SSH 認証を使用して仮想マシン(VM)インスタンスへの接続を確立します。デフォルトでは、オペレーティング システム(OS)がインストールされた VM のローカル ユーザーにはパスワードは構成されていません。
始める前に
VM に接続する前に、次の前提条件を満たす必要があります。
- アクセス管理を有効にします。ゲスト環境でアクセス管理が有効になっていない場合、続行することはできません。デフォルトでは、新しい VM でアクセス管理が有効になっています。
- 伝送制御プロトコル(TCP)ポート 22 の任意のピアに対して VM 外部アクセスを有効にします。
ProjectNetworkPolicy(PNP)カスタム リソースを設定します。- プロジェクトで PNP を設定すると、プロジェクトまたは組織の外部にある VM にアクセスできます。
- PNP がないかどうかを診断するには、インフラストラクチャ オペレーター(IO)にお問い合わせください。
gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。
kubeconfig ファイルのパスを取得する
Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。
- Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。 
- これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して - MANAGEMENT_API_SERVERを置き換えます。
権限とアクセス権をリクエストする
このページに記載されているタスクを行うには、プロジェクトの VirtualMachine 管理者ロールが必要です。VM が存在するプロジェクトの名前空間にプロジェクト VirtualMachine 管理者(project-vm-admin)ロールがあることを確認する手順に沿って操作します。
GDC コンソールまたは gdcloud CLI を使用する VM オペレーションの場合は、プロジェクト IAM 管理者に、プロジェクトの VirtualMachine 管理者ロールとプロジェクト閲覧者(project-viewer)ロールの両方を割り当てるよう依頼します。
VM 接続を確立する
このセクションでは、特定のオペレーティング システム(OS)の VM への接続を確立する方法について説明します。
VM に接続する
特定の OS を使用する VM への接続を確立するには、GDC コンソール、gdcloud CLI、または Virtual Machine Manager API を使用します。
コンソール
- ナビゲーション メニューで、[仮想マシン] > [インスタンス] をクリックします。 
- VM のリストで、接続する実行中の VM の行を見つけます。[接続] 列で、[SSH] をクリックします。 
- SSH ブラウザ ターミナルが開きます。シェルにコマンドを入力するか、[FTP] をクリックしてファイル構造を移動し、ファイルをアップロードします。 
gdcloud
gdcloud compute ssh コマンドを実行して、SSH を使用して VM に接続する
gdcloud compute ssh VM_NAME \
  --project=PROJECT_ID
次の変数を置き換えます。
- VM_NAME: VM の名前。
- PROJECT_ID: VM が含まれているプロジェクトの ID。
CLI のデフォルト プロパティを設定している場合、このコマンドの --project フラグは省略できます。次に例を示します。
gdcloud compute ssh VM_NAME
API
VM に接続します。
- ターミナルを開きます。
- SSH 認証鍵ペアを作成します。
- 有効期間(TTL)値を使用して、公開鍵とユーザー名をアップロードします。
GDC は SSH 認証鍵とユーザー名を取得し、ユーザー名でユーザー アカウントを作成します。VM では、GDC は公開鍵を VM 上にあるユーザーの ~/.ssh/authorized_keys ファイルに保存します。
コマンドラインから VM に接続する手順は次のとおりです。
- SSH 認証鍵ペアとユーザー名を作成します。 - OS ワークステーションで、 - ssh-keygenユーティリティを使用して新しい SSH 認証鍵ペアを作成します。次のコードサンプルは、RSA(Rivest–Shamir–Adleman)鍵ペアを作成します。- ssh-keygen -t rsa \ -f ~/.ssh/KEY_FILENAME \ -C USERNAME \ -b 2048- 次の定義を使用して変数を置き換えます。 - 変数 - 定義 - KEY_FILENAME- SSH 認証鍵ファイルの名前。たとえば、 - my-ssh-keyというファイル名を指定した場合、- my-ssh-keyという名前の秘密鍵ファイルと- my-ssh-key.pubという名前の公開鍵ファイルが生成されます。- USERNAME- VM のユーザー名( - testuser、- testuser_gmail_comなど)。- ssh-keygenユーティリティは、秘密鍵ファイルを- ~/.ssh/KEY_FILENAMEパスに、公開鍵ファイルを- ~/.ssh/KEY_FILENAME.pubパスに保存します。- ユーザー - testuserの公開鍵は次のようになります。- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
- 鍵を VM にアップロードし、公開鍵、ユーザー名、鍵の有効期間(TTL)値を使用して Kubernetes リソースを作成します。 - 次の例では、 - access_request.yamlファイルを使用して、- KEY_FILENAME秘密鍵と 10 分の TTL 値で VM インスタンスへのアクセス権を付与します。- apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineAccessRequest metadata: namespace: VM_NAMESPACE name: AR_NAME spec: ssh: key: | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco ttl: 10m user: USERNAME vm: VM_NAME- 次の定義を使用して、変数を置き換えます。 - 変数 - 定義 - VM_NAMESPACE- VM の Namespace。 - AR_NAME- アクセス リクエスト名。 - USERNAME- VM のユーザー名( - testuser、- testuser_gmail_comなど)。- VM_NAME- VM インスタンスの名前。 
- 鍵を作成します。 - kubectl --kubeconfig MANAGEMENT_API_SERVER \ create -f access_request.yaml
- アクセス リクエストのステータスを確認します。 - kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachineaccessrequests.virtualmachine.gdc.goog- VM_NAMESPACEは、VM の Namespace に置き換えます。- configuredステータスは、VM に接続できることを示します。
- VM に接続します。 - ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP- 次の値を置き換えます。 - PATH_TO_PRIVATE_KEYは、VM に追加した公開鍵に対応する秘密 SSH 認証鍵ファイルへのパスです。
- USERNAMEは、SSH 認証鍵の作成時に指定したユーザー名に置き換えます。たとえば、- cloudysanfrancisco_example_comや- cloudysanfranciscoです。
- EXTERNAL_IPは、VM の外部上り(内向き)IP アドレスに置き換えます。
 
トラブルシューティング
このセクションでは、アクセス リクエストの作成後に VM インスタンスに接続する際に発生する可能性のある問題のトラブルシューティング方法について説明します。
次の手順に沿って、考えられる問題を特定します。
- VM が実行されていることを確認します。次のコマンドで、編集可能な変数を独自の値に置き換えます。 - kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachines.virtualmachine.gdc.goog VM_NAME- VM が実行されていない場合、新しいリクエストを接続または構成することはできません。 
- VM が数分間実行されていることを確認します。VM が起動したばかりの場合、SSH アクセスに必要なサービスがまだ実行されていない可能性があります。通常、起動後 5 分以内に実行されます。 
- アクセス リクエストの TTL 値を超えていないことを確認します。時間が TTL 値に達すると、キーは削除されます。 
- VirtualMachineAccessRequestに- configuredステータスが表示されている場合は、次の要件を確認してください。- ポート 22 で VM へのデータ転送を有効にしました。
- マシンが VM にルーティングされます。たとえば、
 curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22コマンドを使用してルーティングを確認できます。
 
- VirtualMachineAccessRequestに- failedステータスが表示されている場合は、完全なステータスを表示し、リクエストが失敗した原因を示すエラー メッセージを確認します。- kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME- 上記のコマンドの編集可能な変数を独自の値に置き換えます。 
- VirtualMachineAccessRequestのステータスが空白の場合、ゲスト環境が実行されていない可能性があります。