SSH 接続に SSH 証明書を必要とするように OS Login を設定する


OS Login 証明書をサポートする VM は、SSH 認証鍵と SSH 証明書からの接続をサポートします。SSH 証明書は、別の信頼できる鍵(この場合は OS Login が管理する認証局)によって署名された SSH 認証鍵です。このドキュメントでは、SSH 接続に SSH 証明書を要求し、署名なしの SSH 認証鍵からの接続をブロックするように OS Login VM を設定する方法について説明します。

VM への接続に SSH 証明書を必要とするように OS Login を設定すると、証明書認証局によって署名された SSH 証明書のみが VM への接続を許可されます。署名されていない SSH 認証鍵からの接続は拒否されます。SSH 証明書の有効期限は 5 分です。有効期限が切れると、VM への接続に使用できなくなるため、新しい証明書を生成する必要があります。

悪意のあるユーザーに対するセキュリティを強化するために、SSH 接続に SSH 証明書を必要とするよう OS Login を設定することをおすすめします。SSH 証明書は有効期間が短く、特定の VM でのみ有効です。つまり、不正使用された場合、攻撃対象領域は大幅に小さくなり、攻撃期間は有効期間の長い SSH 認証鍵よりも大幅に短くなります。

組織で Workforce Identity 連携を使用している場合は、Workforce Identity 連携と OS Login を使用するで、組織の SSH 証明書を有効にする方法を確認してください。

始める前に

  • OS Login を設定し、OS Login の IAM ロールを割り当てます
  • まだ設定していない場合は、認証を設定します。認証とは、 Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.

制限事項

  • SSH 証明書を使用するには、接続先の VM に OpenSSH バージョン 7.4 以降が必要です。

SSH 証明書を必須にする

プロジェクト内の OS Login VM または単一の VM へのすべての SSH 接続に SSH 証明書を必要とするように OS Login を設定できます。SSH 証明書を必須にするように OS Login を設定すると、 Google Cloud コンソールと gcloud CLI からの SSH 接続で SSH 証明書がデフォルトで使用されます。OS Login で証明書を必須にせずに、証明書を使用して VM に接続する場合は、SSH 証明書を使用して VM に接続するで説明されているように、サードパーティ製ツールを使用して接続する必要があります。

OS Login が有効になっているプロジェクト内のすべての VM で SSH 証明書を必須にする

OS Login を使用するプロジェクト内のすべての VM へのすべての接続で SSH 証明書を必須にするには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

OS Login が有効になっている VM へのすべての接続で SSH 証明書を必須にするには、 Google Cloud コンソールを使用して、プロジェクトのメタデータで enable-osloginenable-oslogin-certificatesTRUE に設定します。

  1. [メタデータ] ページに移動します。

    [メタデータ] に移動

  2. [編集] をクリックします。

  3. [項目を追加] をクリックします。

    1. [キー] フィールドに「enable-oslogin」と入力します。
    2. [] に「TRUE」と入力します。
  4. [項目を追加] をクリックします。

    1. [キー] フィールドに「enable-oslogin-certificates」と入力します。
    2. [] に「TRUE」と入力します。
  5. [保存] をクリックします。

gcloud

OS Login が有効になっている VM へのすべての接続で SSH 証明書を必須にするには、gcloud compute project-info add-metadata コマンドを使用して、プロジェクトのメタデータで enable-oslogin=TRUEenable-oslogin-certificates=TRUE を設定します。

gcloud compute project-info add-metadata \
    --metadata enable-oslogin=TRUE,enable-oslogin-certificates=TRUE

OS Login が有効になっている単一の VM で SSH 証明書を必須にする

OS Login を使用する単一の VM へのすべての SSH 接続で証明書を必須にするには、 Google Cloud コンソールまたは gcloud CLI を使用します。

コンソール

単一の VM へのすべての接続で SSH 証明書を必須にするには、Google Cloud コンソールを使用して、インスタンス メタデータで enable-osloginenable-oslogin-certificatesTRUE に設定します。

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. SSH 証明書を必須にする VM の名前をクリックします。

  3. [編集] をクリックします。

  4. [カスタム メタデータ] セクションで [項目を追加] をクリックします。

    1. [キー] フィールドに「enable-oslogin」と入力します。
    2. [] に「TRUE」と入力します。
  5. [項目を追加] をクリックします。

    1. [キー] フィールドに「enable-oslogin-certificates」と入力します。
    2. [] に「TRUE」と入力します。
  6. [保存] をクリックします。

gcloud

単一の VM へのすべての接続に SSH 証明書を要求するには、gcloud compute instances add-metadata コマンドを使用して、インスタンス メタデータに enable-oslogin=TRUEenable-oslogin-certificates=TRUE を設定します。

gcloud compute instances add-metadata VM_NAME \
    --metadata enable-oslogin=TRUE,enable-oslogin-certificates=TRUE

VM_NAME は実際の VM 名に置き換えます。

SSH 証明書を使用して VM に接続する

SSH 証明書を必須にするように OS Login を設定すると、 Google Cloud コンソールと gcloud CLI からの SSH 接続で SSH 証明書がデフォルトで使用されます。OS Login で証明書を必須にせず、証明書を使用して VM に接続する場合は、サードパーティのツールを使用して接続する必要があります。

コンソール

次の手順で、Google Cloud コンソールのブラウザから SSH を使用して VM に接続します。

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

    SSH button next to instance name.

gcloud

gcloud beta compute ssh コマンドを使用して、証明書を使用して VM に接続します。

gcloud beta compute ssh VM_NAME

VM_NAME は、接続する VM インスタンスの名前に置き換えます。

サードパーティ製ツール

サードパーティの SSH クライアントで SSH 証明書を使用するには、次の操作を行います。

  1. SSH 認証鍵を作成します(まだ作成していない場合)。

  2. projects.locations.signSshPublicKey メソッドを使用して公開 SSH 認証鍵に署名します。

    POST https://oslogin.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION:signSshPublicKey
    
    {
     "ssh_public_key": "PUBLIC_KEY"
     "compute_instance": "COMPUTE_INSTANCE",
     "service_account": "SERVICE_ACCOUNT"
    }
    

    次のように置き換えます。

    • PROJECT_ID: 接続する VM を含むプロジェクトのプロジェクト ID。
    • LOCATION: 接続する VM が配置されているリージョン
    • PUBLIC_KEY: SSH 公開鍵ファイルの内容
    • COMPUTE_INSTANCE: 接続する Compute Engine インスタンス(projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID の形式)
    • SERVICE_ACCOUNT: インスタンスに関連付けられているサービス アカウント。インスタンスにサービス アカウントが関連付けられていない場合は、このフィールドを削除します。
  3. projects.locations.signSshPublicKey メソッドの出力から SSH 証明書をコピーし、その内容を新しいファイルに保存します。

  4. 次のコマンドを実行して、SSH 証明書ファイルに権限を設定します。

    sudo chmod 600 FILE_NAME
    

    FILE_NAME は、ファイル名に置き換えます。

  5. 次のコマンドを使用して VM に接続します。

    ssh -i PATH_TO_PRIVATE_KEY -o CertificateFile=PATH_TO_SSH_CERTIFICATE USERNAME@EXTERNAL_IP
    

    次のように置き換えます。

    • PATH_TO_PRIVATE_KEY: 秘密 SSH 認証鍵ファイルのパス。
    • PATH_TO_SSH_CERTIFICATE: SSH 証明書ファイルのパス。
    • USERNAME: OS Login のユーザー名
    • EXTERNAL_IP: VM の外部 IP アドレス。

トラブルシューティング

SSH 証明書を必須に設定した VM に接続できない場合は、次の原因が考えられます。

次のステップ