VM に SSH 認証鍵を追加する


このドキュメントでは、OS Login を使用する仮想マシン(VM)インスタンスとメタデータベースの SSH 認証鍵を使用する VM に SSH 認証鍵を追加する方法について説明します。ユーザーまたは組織管理者が OS Login を有効にしていない場合、VM はメタデータ ベースの SSH 認証鍵を使用します。

始める前に

  • Compute Engine VM へのアクセスの管理については、アクセス方法の選択をご覧ください。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    Terraform

    このページの Terraform サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。

    1. Google Cloud CLI をインストールします。
    2. gcloud CLI を初期化するには:

      gcloud init
    3. Google アカウントのローカル認証情報を作成します。

      gcloud auth application-default login

    詳細については、 ローカル開発環境の認証の設定 をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

OS Login を使用する VM に鍵を追加する

OS Login を使用する VM は、Google アカウントに関連付けられた SSH 認証鍵を受け入れます。gcloud CLI または OS Login API を使用して公開 SSH 認証鍵を Google アカウントに関連付けることができます。組織の管理者は、Directory API を使用して SSH 認証鍵をユーザー アカウントに追加できます。

Google アカウントに SSH 認証鍵を追加すると、Compute Engine により、Google アカウントに関連付けられているメールアドレスのユーザー名とドメインを組み合わせてユーザー名が生成されます。たとえば、メールアドレスが cloudysanfrancisco@gmail.com の場合、ユーザー名は cloudysanfrancisco_gmail_com になります。組織外のプロジェクトに SSH 認証鍵を追加する場合、ユーザー名には ext_ という接頭辞が付きます(例: ext_cloudysanfrancisco_gmail_com)。組織管理者は、Directory API を使用してユーザー名をカスタマイズできます。すでにユーザー名が構成されている場合、Compute Engine は SSH 認証鍵を追加するときにそのユーザー名を使用します。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. アカウントに公開 SSH 認証鍵を追加するには、gcloud compute os-login ssh-keys add コマンドを使用します。

    gcloud compute os-login ssh-keys add \
       --key-file=KEY_FILE_PATH \
       --project=PROJECT \
       --ttl=EXPIRE_TIME
    

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

    • KEY_FILE_PATH: ワークステーションの公開 SSH 認証鍵のパス。鍵は public-openssh 形式を使用する必要があります。
    • PROJECT: 省略可。SSH 認証鍵を使用するプロジェクト。このフィールドを指定すると、組織外のプロジェクトまたは Cloud Identity のメンバーではないプロジェクトで SSH 認証鍵を使用できます。
    • EXPIRE_TIME: 省略可。SSH 認証鍵の有効期限。

      たとえば、30m を指定すると、SSH 認証鍵は 30 分後に期限切れになります。

      このフラグには、以下の単位が使用されます。

      • s(秒)
      • m(分)
      • h(時間)
      • d(日)

Terraform

公開 SSH 認証鍵をアカウントに追加するには、google_client_openid_userinfo リソースと google_os_login_ssh_public_key リソースを使用します。

data "google_client_openid_userinfo" "me" {
}

resource "google_os_login_ssh_public_key" "default" {
  user = data.google_client_openid_userinfo.me.email
  key  = file("id_rsa.pub") # path/to/ssl/id_rsa.pub
}

REST

公開 SSH 認証鍵をアカウントに追加するには、OS Login API の users.importSshPublicKey メソッドを使用します。

POST https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL:importSshPublicKey

{
 "key": "SSH_KEY",
 "expirationTimeUsec": "EXPIRATION_TIMESTAMP"
}

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

  • ACCOUNT_EMAIL: アカウントに関連付けられたメールアドレス
  • SSH_KEY: アカウントに適用する公開鍵
  • EXPIRATION_TIMESTAMP: エポックを起点とする鍵の有効期間(マイクロ秒単位。1 秒 = 106 マイクロ秒)。

メタデータ ベースの SSH 認証鍵を使用する VM に SSH 認証鍵を追加する

OS Login を使用しないVM は、Compute Engine のプロジェクトとインスタンス メタデータに SSH 認証鍵を保存します。プロジェクト メタデータに保存された SSH 認証鍵を使用して、プロジェクト内のすべての VM にアクセスできます。インスタンス メタデータに保存された SSH 認証鍵を使用して、個々の VM にアクセスできます。

Compute Engine は、有効期限になった時点で期限切れの SSH 認証鍵を自動的にメタデータから削除しませんが、期限切れの鍵を使用して VM への新しい接続を確立することはできません。メタデータから期限切れの鍵を削除したい場合は、メタデータ ベースの鍵を使用する VM から SSH 認証鍵を削除するをご覧ください。

公開 SSH 認証鍵は、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用して、プロジェクトまたはインスタンスのメタデータに追加できます。

プロジェクト メタデータに SSH 認証鍵を追加する

公開 SSH 認証鍵をプロジェクト メタデータに追加して、プロジェクト内のすべての VM にアクセスできます(ただし、プロジェクト全体の SSH 認証鍵をブロックする VM は除きます)。プロジェクト全体の SSH 認証鍵をブロックする方法については、メメタデータ ベースの SSH 認証鍵を使用する VM からの SSH 認証鍵をブロックするをご覧ください。

コンソール

Google Cloud コンソールを使用して公開 SSH 認証鍵をプロジェクト メタデータに追加する手順は、次のとおりです。

  1. Google Cloud コンソールで、[メタデータ] ページに移動します。

    [メタデータ] に移動

  2. [SSH 認証鍵] タブをクリックします。

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

  4. [項目を追加] をクリックします。テキスト ボックスが開きます。

  5. テキスト ボックスに公開鍵を追加します。鍵の形式は次のいずれかにする必要があります。

    • 有効期限のない鍵の形式:

      KEY_VALUE USERNAME
    • 有効期限のある鍵の形式:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

    • KEY_VALUE: 公開 SSH 認証鍵の値
    • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

      Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとして Linux VM に接続するをご覧ください。

      Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

    • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000
  6. [保存] をクリックします。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. プロジェクト メタデータに既存の SSH 認証鍵がある場合は、gcloud CLI を使用して新しい SSH 認証鍵を追加するたびに、プロジェクト メタデータに再追加する必要があります。既存の鍵を再追加しないと、新しい鍵を追加したときに既存の鍵が消去されます。

    gcloud CLI を使用して公開 SSH 認証鍵をプロジェクト メタデータに追加する手順は、次のとおりです。

    1. プロジェクトにすでにプロジェクト全体の公開 SSH 認証鍵がある場合は、メタデータから取得して新しいファイルに追加します。

      1. gcloud compute project-info describe コマンドを実行して、プロジェクトの SSH 認証鍵を取得します。

        gcloud compute project-info describe \
         --format="value(commonInstanceMetadata[items][ssh-keys])"
        

        出力は次のようになります。

        username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... username:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
        
      2. ssh-keys メタデータ値をコピーします。

      3. ワークステーションで新しいテキスト ファイルを作成して開きます。

      4. コピーした鍵のリストをファイルに貼り付けます。

      5. 新しい鍵を次の形式でリストの末尾に追加します。

        • 有効期限のない鍵の形式:

          USERNAME:KEY_VALUE
        • 有効期限のある鍵の形式:

          USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

        • KEY_VALUE: 公開 SSH 認証鍵の値
        • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

          Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとしてのインスタンスへの接続をご覧ください。

          Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

        • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000
      6. ファイルを保存して閉じます。

    2. gcloud compute project-info add-metadata コマンドを実行して、プロジェクト全体の ssh-keys 値を設定します。

      gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
      

      KEY_FILE を次のいずれかに置き換えます。

      • プロジェクトに既存の SSH 認証鍵がある場合は、前の手順で作成したファイルのパス
      • プロジェクトに既存の SSH 認証鍵がない場合は、新しい公開 SSH 認証鍵ファイルのパス

Terraform

公開 SSH 認証鍵をプロジェクト メタデータに追加するには、google_compute_project_metadata リソースを使用します。

resource "google_compute_project_metadata" "default" {
  metadata = {
    ssh-keys = <<EOF
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
    EOF
  }
}

REST

プロジェクト メタデータに既存の SSH 認証鍵がある場合は、Compute Engine API を使用して新しい SSH 認証鍵を追加するたびに、プロジェクト メタデータに再追加する必要があります。既存の鍵を再追加しないと、新しい鍵を追加したときに既存の鍵が消去されます。

Compute Engine API を使用して公開 SSH 認証鍵をプロジェクト メタデータに追加するには、次の手順を行います。

  1. projects.get メソッドを使用して、メタデータから fingerprintssh-keys の値を取得します。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

    レスポンスは次の例のようになります。

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. projects.setCommonInstanceMetadata メソッドを使用して、新しい ssh-keys 値を追加します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

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

    • PROJECT_ID: プロジェクト ID
    • EXISTING_SSH_KEYS: projects.get リクエストのレスポンスからの ssh-keys 鍵の値
    • FINGERPRINT: projects.get リクエストのレスポンスからの fingerprint の値
    • NEW_SSH_KEY: 新しい SSH 認証鍵。次のいずれかの形式です。

      • 有効期限のない鍵の形式:

        USERNAME:KEY_VALUE
      • 有効期限のある鍵の形式:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: 公開 SSH 認証鍵の値
      • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

        Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとしてのインスタンスへの接続をご覧ください。

        Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

      • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000

インスタンス メタデータに SSH 認証鍵を追加する

公開 SSH 認証鍵は、VM の作成時または VM の作成後に、インスタンス メタデータに追加できます。

VM の作成時にインスタンス メタデータに SSH 認証鍵を追加する

VM の作成時に、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用して SSH 認証鍵をインスタンス メタデータに追加できます。

コンソール

Google Cloud コンソールを使用して VM を作成すると同時に、公開 SSH 認証鍵をインスタンス メタデータに追加する手順は、次のとおりです。

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. VM の詳細を指定します。

  3. [詳細オプション] セクションを開き、次の操作を行います。

    1. [セキュリティ] セクションを開きます。

    2. [手動で生成した SSH 認証鍵の追加] を選択します。

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

    4. テキスト ボックスに公開鍵を追加します。鍵の形式は、次のいずれかにする必要があります。

      • 有効期限のない鍵の形式:

        KEY_VALUE USERNAME
      • 有効期限のある鍵の形式:

        KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: 公開 SSH 認証鍵の値
      • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

        Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとして Linux VM に接続するをご覧ください。

        Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

      • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000
  4. VM を作成して起動するには、[作成] をクリックします。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. VM を作成し、gcloud CLI を使用して公開 SSH 認証鍵をインスタンス メタデータに追加するには、gcloud compute instances create コマンドを使用します。

    gcloud compute instances create VM_NAME \
       --metadata=ssh-keys=PUBLIC_KEY
    

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

    • VM_NAME: 新しい VM の名前
    • PUBLIC_KEY: 次のいずれかの形式の公開 SSH 認証鍵:

      • 有効期限のない鍵の形式:

        USERNAME:KEY_VALUE
      • 有効期限のある鍵の形式:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: 公開 SSH 認証鍵の値
      • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

        Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとしてのインスタンスへの接続をご覧ください。

        Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

      • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000

    --metadata-from-file=ssh-keys=FILE_PATH フラグを使用すると、複数の SSH 認証鍵を追加できます。このファイルに、上記のいずれかの形式でユーザー名と公開 SSH 認証鍵のリストを追加します。

Terraform

公開 SSH 認証鍵をインスタンス メタデータに追加するには、google_compute_instance リソースを使用します。

resource "google_compute_instance" "default" {
  name         = "my-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "ubuntu-1404-trusty-v20160627"
    }
  }

  # Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"
    access_config {}
  }
  metadata = {
    "ssh-keys" = <<EOT
      dev:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT dev
      test:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT test
     EOT
  }
}

REST

VM を作成すると同時に、Compute Engine を使用して公開 SSH 認証鍵をインスタンス メタデータに追加するには、instances.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

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

  • PROJECT_ID: プロジェクト ID
  • ZONE: VM のゾーン

リクエストの本文で、items プロパティにユーザー名と公開 SSH 認証鍵を入力します。

...
{
 "items": [
    {
     "key": "ssh-keys",
     "value": "PUBLIC_KEY"
    }
   ]
}
...

PUBLIC_KEY は、次のいずれかの形式の公開鍵に置き換えます。

  • 有効期限のない鍵の形式:

    USERNAME:KEY_VALUE
  • 有効期限のある鍵の形式:

    USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

  • KEY_VALUE: 公開 SSH 認証鍵の値
  • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

    Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとしてのインスタンスへの接続をご覧ください。

    Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

  • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000

複数の SSH 認証鍵を追加するには、鍵の間に \n を追加します。

VM 作成後のインスタンス メタデータに SSH 認証鍵を追加する

VM の作成後に、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用して SSH 認証鍵をインスタンス メタデータに追加できます。

コンソール

Google Cloud コンソールを使用して公開 SSH 認証鍵をインスタンス メタデータに追加する手順は、次のとおりです。

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

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

  2. SSH 認証鍵を追加する VM の名前をクリックします。

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

  4. [SSH 認証鍵] で、[項目を追加] をクリックします。

  5. テキスト ボックスに公開鍵を追加します。鍵の形式は次のいずれかにする必要があります。

    • 有効期限のない鍵の形式:

      KEY_VALUE USERNAME
    • 有効期限のある鍵の形式:

      KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

    • KEY_VALUE: 公開 SSH 認証鍵の値
    • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

      Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとして Linux VM に接続するをご覧ください。

      Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

    • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000
  6. [保存] をクリックします。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. インスタンス メタデータに既存の SSH 認証鍵がある場合は、gcloud CLI を使用して新しい SSH 認証鍵を追加するたびに、インスタンス メタデータに再追加する必要があります。既存の鍵を再追加しないと、新しい鍵を追加したときに既存の鍵が消去されます。

    gcloud CLI を使用して公開 SSH 認証鍵をインスタンス メタデータに追加する手順は、次のとおりです。

    1. VM にインスタンス レベルの公開 SSH 認証鍵がすでにある場合は、メタデータから取得して新しいファイルに追加します。

      1. gcloud compute instances describe コマンドを実行して、VM のメタデータを取得します。

        gcloud compute instances describe VM_NAME
        

        VM_NAME は、公開 SSH 認証鍵を追加または削除する必要がある VM の名前に置き換えます。

        出力は次のようになります。

        ...
        metadata:
        ...
        - key: ssh-keys
         value: |-
           cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...
           baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
        ...
        
      2. ssh-keys メタデータ値をコピーします。

      3. ワークステーションで新しいテキスト ファイルを作成して開きます。

      4. コピーした鍵のリストをファイルに貼り付けます。

      5. 新しい鍵を次の形式でリストの末尾に追加します。

      • 有効期限のない鍵の形式:

        USERNAME:KEY_VALUE
      • 有効期限のある鍵の形式:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: 公開 SSH 認証鍵の値
      • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

        Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとしてのインスタンスへの接続をご覧ください。

        Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

      • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000
      1. ファイルを保存して閉じます。
    2. gcloud compute instances add-metadata コマンドを実行して、ssh-keys 値を設定します。

      gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
      

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

      • VM_NAME: SSH 認証鍵を追加する VM
      • KEY_FILE は、次のいずれかに置き換えます。
      • VM に既存の SSH 認証鍵がある場合、前の手順で作成したファイルのパス
      • VM に既存の SSH 認証鍵がない場合は、新しい公開 SSH 認証鍵ファイルのパス

REST

インスタンス メタデータに既存の SSH 認証鍵がある場合は、Compute Engine API を使用して新しい SSH 認証鍵を追加するたびに、インスタンス メタデータに再追加する必要があります。既存の鍵を再追加しないと、新しい鍵を追加したときに既存の鍵が消去されます。

Compute Engine API を使用して公開 SSH 認証鍵をインスタンス メタデータに追加するには、次の手順を行います。

  1. instances.get メソッドを使用して、メタデータから fingerprintssh-keys の値を取得します。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

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

    • PROJECT_ID: プロジェクト ID
    • ZONE: SSH 認証鍵を追加する VM のゾーン
    • VM_NAME: SSH 認証鍵を追加する VM

    レスポンスは次の例のようになります。

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF...\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8... google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. instances.setMetadata メソッドを使用して、新しい ssh-keys 値を追加します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS\nNEW_SSH_KEY"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

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

    • PROJECT_ID: プロジェクト ID
    • EXISTING_SSH_KEYS: instances.get リクエストのレスポンスからの ssh-keys 鍵の値
    • FINGERPRINT: projects.get リクエストのレスポンスからの fingerprint
    • NEW_SSH_KEY: 新しい SSH 認証鍵。次のいずれかの形式です。

      • 有効期限のない鍵の形式:

        USERNAME:KEY_VALUE
      • 有効期限のある鍵の形式:

        USERNAME:KEY_VALUE google-ssh {"userName":"USERNAME","expireOn":"EXPIRE_TIME"}

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

      • KEY_VALUE: 公開 SSH 認証鍵の値
      • USERNAME: ユーザー名。例: cloudysanfranciscocloudysanfrancisco_gmail_com

        Linux VM の場合、root ログインを許可するように VM を構成した場合を除き、USERNAMEroot にすることはできません。詳細については、root ユーザーとしてのインスタンスへの接続をご覧ください。

        Active Directory(AD)を使用する Windows VM の場合、ユーザー名の前に AD ドメインを DOMAIN\ 形式で追加する必要があります。たとえば、ad.example.com AD 内のユーザー cloudysanfranciscoUSERNAMEexample\cloudysanfrancisco です。

      • EXPIRE_TIME: 鍵が期限切れになる時刻(ISO 8601 形式)。例: 2021-12-04T20:12:00+0000

次のステップ