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


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

始める前に

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

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

    コンソール

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

    gcloud

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

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

    REST

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

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

      gcloud init

SSH 認証鍵を削除する

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

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

OS Login を使用する VM は、Google アカウントに関連付けられた SSH 認証鍵を受け入れます。ユーザー アカウントの公開 SSH 認証鍵は、Google Cloud CLI または OS Login API を使用して削除できます。組織の管理者は、Directory API を使用してユーザー アカウントから SSH 認証鍵を削除できます。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 フィンガープリントに置き換えます。

REST

アカウントから公開 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 コンソール、gcloud CLI、または Compute Engine API を使用します。

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

注意: メタデータで SSH 認証鍵を管理すると、プロジェクト メンバーが VM に接続できなくなる場合があります。また、プロジェクト外のユーザーを含むユーザーに VM への意図しないアクセス権を付与するリスクがあります。詳しくは、手動での鍵管理のリスクをご覧ください。

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

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

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

コンソール

Google Cloud コンソールでプロジェクト メタデータから公開 SSH 認証鍵を削除するには、次の操作を行います。

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

    [メタデータ] に移動

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

REST

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

コンソール

Google Cloud コンソールでインスタンス メタデータから公開 SSH 認証鍵を削除するには、次の操作を行います。

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

    [メタデータ] に移動

  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 認証鍵のリストを含むファイルのパス

REST

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 の作成時に、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用して VM からブロックできます。

コンソール

Google Cloud コンソールを使用して、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 の名前で置き換えます。

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

VM 作成後にプロジェクトの SSH 認証鍵を VM からブロックする

プロジェクトの SSH 認証鍵は、VM の作成後に、Google Cloud コンソール、gcloud CLI、または Compute Engine API を使用して VM からブロックできます。

コンソール

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

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

    [メタデータ] に移動

  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 の名前に置き換えます。

REST

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 の値。

次のステップ