VM からの SSH 認証鍵を制限する


このドキュメントでは、ユーザーが VM から SSH 認証鍵を削除してブロックすることで、仮想マシン(VM)インスタンスにアクセスできないようにする方法について説明します。

始める前に

SSH 認証鍵を削除する

OS Login を使用する VMメタデータ ベースの SSH 認証鍵を使用する VM から SSH 認証鍵を削除できます。

OS Login を使用する VM から SSH 認証鍵を削除する

OS Login を使用する VM は、Google アカウントに関連付けられた SSH 認証鍵を受け入れます。ユーザー アカウントの公開 SSH 認証鍵は、Google Cloud CLI または OS Login API を使用して削除できます。組織の管理者であれば、ユーザー アカウントの SSH 認証鍵は、Directory API を使用して削除できます。Compute Engine により、期限切れの鍵が Google アカウントから自動的に削除されます。

gcloud

アカウントから公開 SSH 認証鍵を削除する方法は次のとおりです。

  1. 削除する鍵がわからない場合は、gcloud compute os-login describe-profile コマンドを実行して、アカウントに関連付けられているすべての鍵を表示します。

    gcloud compute os-login describe-profile
    
  2. 削除する鍵の fingerprint の値をコピーします。

  3. gcloud compute os-login ssh-keys remove コマンドを使用して、アカウントから鍵を削除します。

    gcloud compute os-login ssh-keys remove --key=KEY
    

    KEY は、削除する公開 SSH 認証鍵に置き換えます。または、削除する鍵の OS Login フィンガープリントに置き換えます。

OS Login API

アカウントから公開 SSH 認証鍵を削除する方法は次のとおりです。

  1. 削除する鍵がわからない場合は、users.getLoginProfile メソッドを使用して、アカウントに関連付けられているすべての鍵を表示します。

    GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
    

    ACCOUNT_EMAIL は、アカウントに関連付けられているメールアドレスに置き換えます。

  2. 削除する鍵の fingerprint の値をコピーします。

  3. users.sshPublicKeys.delete メソッドを使用して、アカウントから鍵を削除します。

    DELETE https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/sshPublicKeys/FINGERPRINT
    

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

    • ACCOUNT_EMAIL: アカウントに関連付けられたメールアドレス
    • FINGERPRINT: 削除する鍵の SHA-256 フィンガープリント

メタデータ ベースの鍵を使用する VM から SSH 認証鍵を削除する

プロジェクトまたはインスタンスのメタデータから公開 SSH 認証鍵を削除するには、Google Cloud Console、gcloud CLI、または Compute Engine API を使用します。

特定のユーザーのメタデータから最後の鍵を削除するか、そのユーザーのメタデータの最後の鍵の期限が切れると、Compute Engine は VM 上のそのユーザーの ~/.ssh/authorized_keys ファイルを削除します。

プロジェクト メタデータから公開鍵を削除する

プロジェクトのすべての VM へのアクセス権を削除するには、プロジェクトのメタデータから公開 SSH 認証鍵を削除します。

gcloud CLI と Compute Engine API を使用してメタデータから鍵を削除する場合は、既存の鍵のリストを取得します。次のセクションで説明するように、鍵のリストを編集して不要な鍵を削除してから、保持する鍵のリストで古い鍵を上書きする必要があります。

コンソール

コンソールを使用してプロジェクト メタデータから公開 SSH 認証鍵を削除するには、次の手順を行います。

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

    [メタデータ] に移動

  2. [SSH 認証鍵] で、[編集] をクリックします。

  3. SSH 認証鍵の横にある削除ボタンをクリックします。

    PuTTYgen 公開鍵。

  4. [保存] をクリックします。

gcloud

gcloud CLI を使用してプロジェクト メタデータから公開 SSH 認証鍵を削除するには、次の手順を行います。

  1. gcloud compute project-info describe コマンドを実行して、プロジェクトのメタデータを取得します。

    gcloud compute project-info describe
    

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

    ...
    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. コピーした SSH 認証鍵のリストをファイルに貼り付け、プロジェクトのメタデータから削除する鍵を削除します。

  5. ファイルを保存して閉じます。

  6. 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 認証鍵ファイルのパス

API

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. SSH 認証鍵の値のリストをコピーし、削除する鍵を削除します。

  3. projects.setCommonInstanceMetadata を使用して SSH 認証鍵を削除します。

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

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

    • PROJECT_ID: プロジェクト ID
    • EXISTING_SSH_KEYS: 保持する SSH 認証鍵のリスト
    • FINGERPRINT: projects.get リクエストのレスポンスからの fingerprint の値

インスタンス メタデータから公開 SSH 認証鍵を削除する

インスタンス メタデータから公開 SSH 認証鍵を削除して、単一の VM へのアクセス権を削除します。

gcloud CLI と Compute Engine API を使用してメタデータから鍵を削除する場合は、既存の鍵のリストを取得します。次のセクションで説明するように、鍵のリストを編集して不要な鍵を削除してから、保持する鍵のリストで古い鍵を上書きする必要があります。

コンソール

コンソールを使用してインスタンス メタデータから公開 SSH 認証鍵を削除するには、次の手順を行います。

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

    [メタデータ] に移動

  2. 鍵を削除する VM の名前をクリックします。

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

  4. 中央ペインの [SSH 認証鍵] で、[表示して編集する] をクリックします。セクションが展開され、すべてのインスタンス レベルの公開 SSH 認証鍵が表示されます。

  5. 削除する鍵の横にある削除ボタンをクリックします。

    PuTTYgen 公開鍵。

  6. [保存] をクリックします。

gcloud

gcloud CLI を使用してインスタンス メタデータから公開 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. コピーした SSH 認証鍵のリストをファイルに貼り付け、不要な鍵を削除します。

  5. ファイルを保存して閉じます。

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

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

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

    • VM_NAME: SSH 認証鍵を削除する VM
    • KEY_FILE: すべてのプロジェクトの SSH 認証鍵のリストを含むファイルのパス

API

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. SSH 認証鍵の値のリストをコピーし、削除する鍵を削除します。

  3. instances.setMetadata を使用して SSH 認証鍵を削除します。

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

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

    • PROJECT_ID: プロジェクト ID
    • EXISTING_SSH_KEYS: projects.get リクエストのレスポンスからの ssh-keys 鍵の値
    • FINGERPRINT: instances.get リクエストのレスポンスからの fingerprint の値

メタデータ ベースの SSH 認証鍵を使用する VM からのプロジェクトの SSH 認証鍵をブロックする

プロジェクト メタデータに保存された SSH 認証鍵を VM が受け入れないようにするには、VM からのプロジェクトの SSH 認証鍵をブロックします。 VM からのプロジェクトの SSH 認証鍵は、VM の作成時VM の作成後にブロックできます。

VM 作成時にプロジェクトの SSH 認証鍵を VM から締め出す

プロジェクトの SSH 認証鍵は、VM の作成時に、コンソール、gcloud CLI、または Compute Engine API を使用して VM から締め出せます。

コンソール

コンソール を使用して、VM を作成し、それがプロジェクト メタデータに保存された SSH 認証鍵を受け入れないようにするには、次の手順を行います。

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

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

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

  3. [ネットワーク、ディスク、セキュリティ、管理、単一テナンシー] セクションを開き、次の操作を行います。

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

    2. [プロジェクト全体の SSH 認証鍵をブロック] をオンにします。

  4. VM を作成して起動するには、[作成] をクリックします。

gcloud

gcloud CLI を使用して、VM を作成し、それがプロジェクト メタデータに保存された SSH 認証鍵を受け入れないようにするには、gcloud compute instances create コマンドを使用します。

gcloud compute instances create VM_NAME \
    --metadata block-project-ssh-keys=TRUE

VM_NAME は、新しいVMの名前に置き換えます。

API

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": "block-project-ssh-keys",
     "value": TRUE
    }
   ]
}
...

VM 作成後にプロジェクトの SSH 認証鍵を VM から締め出す

プロジェクトの SSH 認証鍵は、VM の作成後に、コンソール、gcloud CLI、または Compute Engine API を使用して VM から締め出せます。

コンソール

コンソール を使用して、プロジェクト メタデータに保存された SSH 認証鍵からの 接続をVMが受け入れないようにするには、次の手順を行います。

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

    [メタデータ] に移動

  2. プロジェクトの SSH 認証鍵をブロックする VM の名前をクリックします。

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

  4. [SSH 認証鍵] で、[プロジェクト全体の SSH 認証鍵をブロック] チェックボックスをオンにします。

  5. SSH 認証鍵の接続設定の編集が終了したら、[保存] をクリックします。

gcloud

gcloud CLI を使用して、プロジェクト メタデータに保存された SSH 認証鍵からの接続を VM が受け入れないようにするには、次の手順を行います。

gcloud compute instances add-metadata コマンドを実行します。

gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE

VM_NAME は、プロジェクト全体の公開 SSH 認証鍵をブロックする VM の名前に置き換えます。

API

Compute Engine API を使用して、プロジェクト メタデータに保存された SSH 認証鍵からの接続を VM が受け入れないようにするには、次の手順を行います。

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

    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="
    ...
    
  2. instances.setMetadata メソッドを使用して block-project-ssh-keysTRUE に設定します。

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

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

    • PROJECT_ID はプロジェクト ID です。
    • ZONE はインスタンスが配置されているゾーンです。
    • INSTANCE_NAME は、プロジェクト全体の認証鍵をブロックするインスタンスです。
    • FINGERPRINT: instances.get リクエストのレスポンスから取得した fingerprint の値。

次のステップ