このドキュメントでは、ユーザーが VM から SSH 認証鍵を削除してブロックすることで、仮想マシン(VM)インスタンスにアクセスできないようにする方法について説明します。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
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 認証鍵を削除する方法は次のとおりです。
削除する鍵がわからない場合は、
gcloud compute os-login describe-profile
コマンドを実行して、アカウントに関連付けられているすべての鍵を表示します。gcloud compute os-login describe-profile
削除する鍵の
fingerprint
の値をコピーします。gcloud compute os-login ssh-keys remove
コマンドを使用して、アカウントから鍵を削除します。gcloud compute os-login ssh-keys remove --key=KEY
KEY
は、削除する公開 SSH 認証鍵か、削除する鍵の OS Login フィンガープリントに置き換えます。
REST
アカウントから公開 SSH 認証鍵を削除する方法は次のとおりです。
削除する鍵がわからない場合は、
users.getLoginProfile
メソッドを使用して、アカウントに関連付けられているすべての鍵を表示します。GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
ACCOUNT_EMAIL
は、アカウントに関連付けられているメールアドレスに置き換えます。削除する鍵の
fingerprint
の値をコピーします。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
ファイルを削除します。
プロジェクト メタデータから公開鍵を削除する
プロジェクトのすべての VM へのアクセス権を削除するには、プロジェクトのメタデータから公開 SSH 認証鍵を削除します。
gcloud CLI と Compute Engine API を使用してメタデータから鍵を削除する場合は、既存の鍵のリストを取得します。次のセクションで説明するように、鍵のリストを編集して不要な鍵を削除してから、保持する鍵のリストで古い鍵を上書きする必要があります。
コンソール
Google Cloud コンソールでプロジェクト メタデータから公開 SSH 認証鍵を削除するには、次の操作を行います。
Google Cloud コンソールで、[メタデータ] ページに移動します。
[SSH 認証鍵] タブをクリックします。
ページ上部の
[編集] をクリックします。削除する SSH 認証鍵に移動し、SSH 認証鍵の横にある
削除ボタンをクリックします。削除する SSH 認証鍵ごとに、このステップを繰り返します。
[保存] をクリックします。
gcloud
gcloud CLI を使用してプロジェクト メタデータから公開 SSH 認証鍵を削除するには、次の操作を行います。
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"} ...ssh-keys
メタデータ値をコピーします。ワークステーションで新しいテキスト ファイルを作成して開きます。
コピーした SSH 認証鍵のリストをファイルに貼り付け、プロジェクトのメタデータから削除する鍵を削除します。
ファイルを保存して閉じます。
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 認証鍵を削除するには、次の操作を行います。
projects.get
メソッドを使用して、メタデータからfingerprint
とssh-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"}" } ] ...
SSH 認証鍵の値のリストをコピーし、削除する鍵を削除します。
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
: プロジェクト IDEXISTING_SSH_KEYS
: 保持する SSH 認証鍵のリストFINGERPRINT
:projects.get
リクエストのレスポンスからのfingerprint
の値
インスタンス メタデータから公開 SSH 認証鍵を削除する
インスタンス メタデータから公開 SSH 認証鍵を削除して、単一の VM へのアクセス権を削除します。
gcloud CLI と Compute Engine API を使用してメタデータから鍵を削除する場合は、既存の鍵のリストを取得します。次のセクションで説明するように、鍵のリストを編集して不要な鍵を削除してから、保持する鍵のリストで古い鍵を上書きする必要があります。
コンソール
Google Cloud コンソールでインスタンス メタデータから公開 SSH 認証鍵を削除するには、次の操作を行います。
Google Cloud コンソールで、[メタデータ] ページに移動します。
鍵を削除する VM の名前をクリックします。
[編集] をクリックします。
中央ペインの [SSH 認証鍵] で、[表示して編集する] をクリックします。セクションが展開され、すべてのインスタンス レベルの公開 SSH 認証鍵が表示されます。
削除する鍵の横にある削除ボタンをクリックします。
[保存] をクリックします。
gcloud
gcloud CLI を使用してインスタンス メタデータから公開 SSH 認証鍵を削除するには、次の操作を行います。
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"} ...ssh-keys
メタデータ値をコピーします。ローカル ワークステーションで新しいテキスト ファイルを作成して開きます。
コピーした SSH 認証鍵のリストをファイルに貼り付け、不要な鍵を削除します。
ファイルを保存して閉じます。
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 認証鍵を削除する VMKEY_FILE
: すべてのプロジェクトの SSH 認証鍵のリストを含むファイルのパス
REST
Compute Engine API を使用してインスタンス メタデータから公開 SSH 認証鍵を削除するには、次の操作を行います。
instances.get
メソッドを使用して、メタデータからfingerprint
とssh-keys
の値を取得します。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: 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"}" } ] ...
SSH 認証鍵の値のリストをコピーし、削除する鍵を削除します。
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
: プロジェクト IDEXISTING_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 認証鍵を受け入れないようにするには、次の操作を行います。
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
VM の詳細を指定します。
[詳細オプション] セクションを開き、次の操作を行います。
[セキュリティ] セクションを開きます。
[プロジェクト全体の SSH 認証鍵をブロック] をオンにします。
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
: プロジェクト IDZONE
: 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 の接続を受け入れないようにするには、次の操作を行います。
Google Cloud コンソールで、[メタデータ] ページに移動します。
プロジェクトの SSH 認証鍵をブロックする VM の名前をクリックします。
[編集] をクリックします。
[SSH 認証鍵] で、[プロジェクト全体の SSH 認証鍵をブロック] チェックボックスをオンにします。
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 が受け入れないようにするには、次の操作を行います。
instances.get
メソッドを使用して、メタデータからfingerprint
を取得します。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
次のように置き換えます。
PROJECT_ID
: プロジェクト IDZONE
: SSH 認証鍵を追加する VM のゾーンVM_NAME
: SSH 認証鍵を追加する VM
レスポンスは次の例のようになります。
... "fingerprint": "utgYE_XWtE8=" ...
instances.setMetadata
メソッドを使用してblock-project-ssh-keys
をTRUE
に設定します。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
の値。
次のステップ
- アクセス管理に OS Login を使用するメリットを確認する。
- 独自の SSH 認証鍵を管理する必要がないように、Google のツールを使用して VM に接続する。