メタデータ内の SSH 認証鍵の管理

このガイドでは、SSH 認証鍵を作成し、公開 SSH 認証鍵のメタデータを編集することによって、Linux インスタンスへのアクセスを制御する方法について説明します。

Google Cloud Platform Console からインスタンスに接続すると、Compute Engine が鍵のライフサイクル全体を自動的に管理します。また、SDK の gcloud コマンドラインを使用することもできます。この場合、Compute Engine が永続的な SSH 認証鍵のメタデータを構成します。

上級ユーザーが SSH 認証鍵を手動で管理する必要がある場合は、OS ログインを使用してインスタンスへのアクセスを管理するをご覧ください。OS ログインを使用して SSH 認証鍵を管理すると、そのインスタンスではメタデータによる SSH 認証鍵の構成が無効になります。

始める前に

このタスクに必要な権限

このタスクを実行するには、次の権限が必要です。

  • インスタンスのメタデータを設定する場合、そのインスタンスに対する compute.instances.setMetadata 権限
  • プロジェクト全体のメタデータを設定する場合、そのプロジェクトに対する compute.projects.setCommonInstanceMetadata 権限
  • プロジェクト全体のメタデータを設定する場合、そのプロジェクトに対する iam.serviceAccounts.actAs 権限

手動での鍵管理によるリスク

GCP Console、gcloud コマンドライン ツール、または API を使用して手動で公開 SSH 認証鍵を作成および管理する場合、使用された鍵を記録し、アクセスを許可しないユーザーの公開 SSH 認証鍵を削除する必要があります。たとえば、チームメンバーがプロジェクトを離れる場合、インスタンスにアクセスできなくなるように、メタデータから公開 SSH 認証鍵を削除します。

また、gcloud ツールや API の呼び出しが誤って指定されると、プロジェクトまたはインスタンスの公開 SSH 認証鍵がすべて消去され、プロジェクト メンバーの接続に影響が出る可能性があります。

手動での鍵管理が必要かどうかわからない場合は、代わりに Compute Engine ツールを使用してインスタンスに接続します。

概要

SSH 認証鍵を作成、管理することで、ユーザーがサードパーティ ツールを使用して Linux インスタンスにアクセスできるようになります。

SSH 認証鍵を構成するファイルを以下に示します。

  • インスタンス レベルのメタデータまたはプロジェクト全体のメタデータに適用される公開 SSH 認証鍵ファイル。
  • ユーザーがローカル デバイスに格納する秘密 SSH 認証鍵ファイル

ユーザーが秘密 SSH 認証鍵を提示すると、Google Cloud Platform プロジェクトのメンバーでなくても、サードパーティ ツールを使用して、一致する公開 SSH 認証鍵ファイルで構成されたインスタンスに接続できます。したがって、1 つ以上のインスタンスの公開 SSH 認証鍵メタデータを変更することで、ユーザーがアクセスできるインスタンスを制御できます。

公開 SSH 認証鍵のメタデータを編集するには:

  1. メタデータの編集に使用するツールを決定します。

  2. Linux インスタンスにユーザーを追加する必要がある場合、以下の手順で公開 SSH 認証鍵を準備します。

  3. 公開 SSH 認証鍵のメタデータを編集して、Linux インスタンスへのユーザーの追加や、Linux インスタンスからのユーザーの削除を行います。

  4. サードパーティ ツールを使用して Linux インスタンスに接続し、それぞれの公開 SSH 認証鍵が正しく追加または削除されていることを確認します。ユーザーがインスタンスに接続できるのは、インスタンスがメタデータ サーバー経由でユーザーの公開 SSH 認証鍵を利用でき、この鍵に対応する秘密 SSH 認証鍵をユーザーが持っている場合に限られます。

新しい SSH 認証鍵を作成する

既存の秘密 SSH 認証鍵ファイルと、使用可能な一致する公開 SSH 認証鍵ファイルがない場合は、新しい SSH 認証鍵を生成します。既存の SSH 認証鍵を使用する場合は、公開 SSH 認証鍵ファイルを見つけます

Linux / macOS

Linux または macOS ワークステーションでは、ssh-keygen ツールを使用して認証鍵を生成できます。

  1. ワークステーションでターミナルを開き、ssh-keygen コマンドを使用して新しい認証鍵を生成します。ユーザー名でコメントを追加するには、-C フラグを指定します。

    ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
    

    ここで

    • [KEY_FILENAME] は、SSH 認証鍵ファイルに使用する名前です。たとえば、my-ssh-key というファイル名を指定した場合、my-ssh-key という名前の秘密鍵ファイルと my-ssh-key.pub という名前の公開鍵ファイルが生成されます。
    • [USERNAME] は、インスタンスに接続するユーザーのユーザー名です。

    このコマンドは、次の構造を持つ秘密 SSH 認証鍵ファイルとそれに対応する公開 SSH 認証鍵を生成します。

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    ここで

    • [KEY_VALUE] は、生成した鍵の値です。
    • [USERNAME] は、この認証鍵が適用されるユーザーです。
  2. 秘密鍵へのアクセスを制限し、鍵の管理者だけが読み取れ、他の誰も書き込めないようにします。

    chmod 400 ~/.ssh/[KEY_FILENAME]
    

    ここで [KEY_FILENAME] は SSH 認証鍵ファイルに使用した名前です。

新しい鍵を必要とする各ユーザーに対してこのプロセスを繰り返します。次に、プロジェクトまたはインスタンスに追加する既存の公開 SSH 認証鍵と、作成した公開 SSH 認証鍵を見つけます

Windows

Windows には SSH 認証鍵を生成する組み込みツールがないため、Windows ワークステーションを使用している場合は、サードパーティのツールを使用して SSH 認証鍵を生成する必要があります。PuTTYgen ツールを使用して SSH 認証鍵を生成する方法は次のとおりです。

  1. puttygen.exe をダウンロードします。

  2. PuTTYgen を実行します。この例では、ダウンロードした puttygen.exe ファイルを実行します。鍵生成の設定値を構成できるウィンドウが開きます。

  3. [Generate] をクリックし、画面上の指示に従って新しい認証鍵を生成します。ほとんどの場合、デフォルトのパラメータで問題ありませんが、少なくとも 2,048 ビットで認証鍵を生成する必要があります。認証鍵の生成が完了すると、ツールに公開鍵の値が表示されます。

  4. [Key comment] セクションで、既存のテキストを、認証鍵を適用するユーザーのユーザー名に置き換えます。

  5. 必要に応じて、鍵パスフレーズを入力することで鍵を保護できます。

  6. [Save private key] をクリックして、拡張子 .ppk のファイルに秘密鍵を書き込みます。

  7. [Save public key] をクリックして、後で使用するために、公開鍵をファイルに書き込みます。ここでは、PuTTYgen ウィンドウを開いたままにします。

    正しくフォーマットされた公開鍵は PuTTYgen 画面の上部に表示されます。

    PuTTYgen 公開鍵のスクリーンショット

    この公開鍵の構造は次のとおりです。

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    ここで

    • [KEY_VALUE] は、生成した鍵の値です。
    • [USERNAME] は、この認証鍵が適用されるユーザーです。

鍵を作成する必要があるすべてのユーザーに対してこのプロセスを繰り返します。プロジェクトまたはインスタンスに追加するユーザーの公開 SSH 認証鍵が他にある場合には、この時点でユーザーの公開 SSH 認証鍵を見つける必要があります。それ以外の場合は、作成した公開 SSH 認証鍵をフォーマットします

SSH 認証鍵を探す

SSH 認証鍵を探す必要がある理由は複数あります。たとえば、ユーザーの公開 SSH 認証鍵をプロジェクトまたはインスタンスに追加する場合は、ユーザーの認証鍵の公開鍵ファイルにアクセスする必要があります。また、鍵の管理者自身が Linux インスタンスに接続するために、自分の秘密 SSH 認証鍵ファイルを探す必要が生じます。

作成された SSH 認証鍵は、デフォルトの場所に保存されます。公開 SSH 認証鍵ファイルと秘密 SSH 認証鍵ファイルのデフォルトの場所と名前は、認証鍵の作成に使用したツールに応じて異なります。

Linux / macOS

Linux または macOS ワークステーションで ssh-keygen ツールを使用して鍵を作成した場合、鍵は次の場所に保存されます。

  • 公開鍵ファイル: ~/.ssh/[KEY_FILENAME].pub
  • 秘密鍵ファイル: ~/.ssh/[KEY_FILENAME]

ここで [KEY_FILENAME] は、SSH 認証鍵の作成時に設定された SSH 認証鍵のファイル名です。

プロジェクトまたはインスタンスのメタデータから公開 SSH 認証鍵を追加または削除する必要がある場合、公開 SSH 認証鍵ファイルをフォーマットします

Windows

PuTTYgen ツールを使用して Windows ワークステーションで認証鍵を作成した場合、公開鍵ファイルと秘密鍵ファイルは、指定した場所に次のファイル形式で保存されます。

  • 公開鍵: [PUBLIC_KEY_FILENAME]
  • 秘密鍵: [PRIVATE_KEY_FILENAME].ppk

ここで [PUBLIC_KEY_FILENAME][PRIVATE_KEY_FILENAME] は、公開 SSH 認証鍵と秘密 SSH 認証鍵が初めて保存されたときに設定された、各認証鍵のファイル名です。

PuTTYgen で作成されたデフォルトの公開 SSH 認証鍵のフォーマットは、次のとおりです。

ssh-rsa [KEY_VALUE] [USERNAME]

ここで

  • [KEY_VALUE] は公開 SSH 認証鍵の値です。
  • [USERNAME] は認証鍵を適用したインスタンス上のユーザーです。

PuTTYgen の公開 SSH 認証鍵を正しいフォーマットで表示するには:

  1. PuTTYgen を実行します。PuTTYgen がない場合は、puttygen.exe をダウンロードして実行します。

  2. [Load] をクリックして、公開 SSH 認証鍵ファイルを選択して開きます。

  3. 公開鍵ファイルが読み込まれると、適切にフォーマットされた公開 SSH 認証鍵の値が PuTTYgen 画面の上部に表示されます。

    PuTTYgen 公開鍵のスクリーンショット

プロジェクトまたはインスタンスのメタデータから公開 SSH 認証鍵を追加または削除する必要がある場合、公開 SSH 認証鍵ファイルをフォーマットします

gcloud

gcloud ツールでインスタンスとの接続を確立している場合、認証鍵がすでに生成され、プロジェクトやインスタンスに適用されています。認証鍵ファイルは次の場所にあります。

  • Linux と macOS
    • 公開鍵: $HOME/.ssh/google_compute_engine.pub
    • 秘密鍵: $HOME/.ssh/google_compute_engine
  • Windows
    • 公開鍵: C:\Users\[USERNAME]\.ssh\google_compute_engine.pub
    • 秘密鍵: C:\Users\[USERNAME]\.ssh\google_compute_engine

[USERNAME] は、ローカル ワークステーションでのユーザー名です。

公開 SSH 認証鍵の適用先を確認するには、プロジェクトのメタデータインスタンスのメタデータで公開鍵を探します。プロジェクトまたはインスタンスのメタデータに公開 SSH 認証鍵を追加または削除する必要がある場合は、まず公開 SSH 認証鍵ファイルをフォーマットします

公開 SSH 認証鍵ファイルのフォーマット

公開 SSH 認証鍵をプロジェクトまたはインスタンスのメタデータにアップロードするには、追加する公開 SSH 認証鍵ファイルそれぞれのフォーマットを確認しておく必要があります。

メタデータの編集に使用するツールに応じて、GCP Consolegcloud コマンドライン ツールAPI メソッドで機能するように認証鍵をフォーマットします。必要に応じて、公開 SSH 認証鍵を変更して有効期限の追加、編集、削除を行うこともできます。

Console

公開 SSH 認証鍵のフォーマットを確認するには:

  1. 公開 SSH 認証鍵ファイルを探して開きます。

  2. 公開 SSH 認証鍵ファイルのフォーマットを確認します。

    • 公開 SSH 認証鍵に有効期限が設定されている場合、フォーマットは次のとおりです。

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

      ここで

      • [KEY_VALUE] は公開 SSH 認証鍵の値です。
      • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
      • [EXPIRE_TIME] は、ISO 8601 形式の値です。たとえば、2018-12-04T20:12:00+0000 と記述します。
    • それ以外の場合、公開 SSH 認証鍵のフォーマットは次のとおりです。

      ssh-rsa [KEY_VALUE] [USERNAME]

      ここで

      • [KEY_VALUE] は公開 SSH 認証鍵の値です。
      • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
  3. 認証鍵が上記の形式のいずれとも一致しない場合、または有効期限を追加、編集、削除する場合は、以下の手順に従って公開 SSH 認証鍵をフォーマットします。それ以外の場合は、ファイルを開いたままにして、プロジェクトやインスタンスのメタデータに公開 SSH 認証鍵を追加します

Console 向けに公開 SSH 認証鍵をフォーマットするには:

  1. 公開鍵ファイルのコピーを作成します。このコピーを Compute Engine で使用し、元のファイルは他の SSH 構成で使用するために残しておきます。

  2. 公開鍵ファイルのコピーを開きます。

  3. 次のフォーマットになるように、公開鍵ファイルを変更します。

    ssh-rsa [KEY_VALUE] [USERNAME]

    ここで

    • [KEY_VALUE] は公開 SSH 認証鍵の値です。
    • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。

    または、公開 SSH 認証鍵に有効期限を設定する場合、ファイルを次のフォーマットに変更します。

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

    ここで

    • [KEY_VALUE] は公開 SSH 認証鍵の値です。
    • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
    • [EXPIRE_TIME] は、ISO 8601 形式の値です。たとえば、2018-12-04T20:12:00+0000 と記述します。
  4. 変更を保存し、ファイルを開いたままにします。

これで、プロジェクトまたはインスタンスのメタデータに公開 SSH 認証鍵を追加する準備ができました。

gcloud または API

公開 SSH 認証鍵のフォーマットを確認するには:

  1. 公開 SSH 認証鍵ファイルを探して開きます。

  2. 公開 SSH 認証鍵ファイルのフォーマットを確認します。

    • 公開 SSH 認証鍵に有効期限が設定されている場合、フォーマットは次のとおりです。

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

      ここで

      • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
      • [KEY_VALUE] は公開 SSH 認証鍵の値です。
      • [EXPIRE_TIME] は、ISO 8601 形式の値です。たとえば、2018-12-04T20:12:00+0000 と記述します。
    • それ以外の場合、公開 SSH 認証鍵のフォーマットは次のとおりです。

      [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

      ここで

      • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
      • [KEY_VALUE] は公開 SSH 認証鍵の値です。
  3. 認証鍵が上記の形式のいずれとも一致しない場合、または有効期限を追加、編集、削除する場合は、以下の手順に従って公開 SSH 認証鍵をフォーマットします。それ以外の場合は、ファイルを開いたままにして、プロジェクトやインスタンスのメタデータに公開 SSH 認証鍵を追加します

gcloud ツールまたは API 向けに公開 SSH 認証鍵をフォーマットするには:

  1. 公開鍵ファイルのコピーを作成します。このコピーを Compute Engine で使用し、元のファイルは他の SSH 構成で使用するために残しておきます。

  2. 公開鍵ファイルのコピーを開きます。デフォルトでは、このファイルのフォーマットは次のとおりです。

    ssh-rsa [KEY_VALUE] [USERNAME]

    ここで

    • [KEY_VALUE] は公開 SSH 認証鍵の値です。
    • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
  3. ファイルの最後にあるユーザー名をコピーし、ファイルの先頭に貼り付け、その後にコロンを入力します。その結果、この公開 SSH 認証鍵ファイルのフォーマットは次のようになります。

    [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

    ここで

    • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
    • [KEY_VALUE] は公開 SSH 認証鍵の値です。
  4. 必要に応じて、2 番目の [USERNAME] を削除し、認証鍵ファイルの最後に google-ssh を追加して、その後に JSON 形式で userName フィールドと expireOn フィールドを追加することで、認証鍵の有効期限を設定できます。

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

    ここで

    • [USERNAME] は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
    • [KEY_VALUE] は公開 SSH 認証鍵の値です。
    • [EXPIRE_TIME] は、ISO 8601 形式の値です。たとえば、2018-12-04T20:12:00+0000 と記述します。
  5. 変更を保存し、ファイルを開いたままにします。

これで、プロジェクトまたはインスタンスのメタデータに公開 SSH 認証鍵を追加する準備ができました。

公開 SSH 認証鍵のメタデータの編集

ユーザーがサードパーティ ツールを使用して Linux インスタンスにアクセスできるかどうかは、インスタンスが利用できる公開 SSH 認証鍵によって決まります。公開 SSH 認証鍵と関連情報が格納されているメタデータを編集することで、Linux インスタンスが利用できる公開 SSH 認証鍵を制御できます。公開 SSH 認証鍵には、次の 3 種類のメタデータがあります。

  • プロジェクト全体の公開 SSH 認証鍵: このメタデータは、プロジェクトのほとんどのインスタンスに接続できる一般的なアクセス権をユーザーに付与します。
  • プロジェクト全体の公開 SSH 認証鍵の許可またはブロック: このメタデータ値は、特定のインスタンスに対するプロジェクト全体の公開 SSH 認証鍵をブロックまたは許可します。デフォルトでは、インスタンスはプロジェクト全体の公開 SSH 認証鍵をすべて受け入れます。インスタンスへの接続を、インスタンス レベルの公開 SSH 認証鍵のユーザーのみに制限する場合は、プロジェクト全体の公開 SSH 認証鍵をブロックします。
  • インスタンス レベルの公開 SSH 認証鍵: このメタデータは、プロジェクト内の特定のインスタンスがプロジェクト全体の公開 SSH 認証鍵をブロックしている場合でも、そのインスタンスに接続できる特別なアクセス権をユーザーに付与します。

プロジェクト全体の公開 SSH 認証鍵の追加または削除

ユーザーに Linux インスタンスへの一般的なアクセス権を付与するには、プロジェクト全体の公開 SSH 認証鍵を使用します。プロジェクト全体の公開 SSH 認証鍵により、プロジェクト内でプロジェクト全体の公開 SSH 認証鍵を許可するすべての Linux インスタンスにアクセスできます。インスタンスがプロジェクト全体の公開 SSH 認証鍵をブロックしている場合は、同じ公開 SSH 認証鍵がインスタンスのメタデータにも追加されない限り、ユーザーはプロジェクト全体の公開 SSH 認証鍵でインスタンスに接続することはできません。

Console

GCP Console からプロジェクト全体の公開 SSH 認証鍵を追加または削除するには:

  1. Google Cloud Platform Console で、プロジェクトのメタデータ ページに移動します。

    [メタデータ] ページに移動

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

  3. プロジェクト全体の公開 SSH 認証鍵を変更します。

    • 公開 SSH 認証鍵を追加するには、[項目を追加] をクリックします。テキスト ボックスが開きます。
    • 公開 SSH 認証鍵ファイルの内容をコピーしてテキスト ボックスに貼り付けます。

      追加する公開 SSH 認証鍵ごとに、この手順を繰り返します。

    • 公開 SSH 認証鍵を削除するには、隣にある削除ボタンをクリックします。

      PuTTYgen 公開鍵のスクリーンショット

      削除する公開 SSH 認証鍵ごとに、この手順を繰り返します。

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

gcloud

gcloud ツールでプロジェクト全体の公開 SSH 認証鍵を追加または削除するには:

  1. プロジェクトにすでにプロジェクト全体の公開 SSH 認証鍵がある場合は、それらの公開 SSH 認証鍵をメタデータから取得します。

    1. プロジェクトの既存のメタデータを取得します。

      gcloud compute project-info describe
      
    2. 出力から ssh-keys メタデータ値を探します。

      ...
      metadata:
        fingerprint: QCofVTHlggs=
        items:
        - key: ssh-keys
          value: |-
            [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
            [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
      ...
      

      ここで

      • [USERNAME_1][USERNAME_2] は、既存の認証鍵のユーザー名です。
      • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] は、プロジェクトにすでに適用されている公開鍵の値です。
    3. 公開 SSH 認証鍵をコピーします。

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

  3. このファイルで、プロジェクト メタデータに追加または保持するすべての公開 SSH 認証鍵のリストを作成します。プロジェクト全体の認証鍵がすでにある場合、リストに含めなかった認証鍵はすべて削除されます。

    たとえば、SSH 認証鍵が省略されているため、以下のサンプルリストでは [USERNAME_1] の認証鍵が削除されます。一方、リストに含まれている [USERNAME_2] の SSH 認証鍵はメタデータに保持され、[USERNAME_3] の SSH 認証鍵はメタデータに追加されます。

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    ここで

    • [USERNAME_1][USERNAME_2][USERNAME_3] は、公開 SSH 認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1] は、削除する SSH 認証鍵の公開鍵の値です。
    • [EXISTING_KEY_VALUE_2] は、保持する SSH 認証鍵の公開鍵の値です。
    • [NEW_KEY_VALUE] は、追加する SSH 認証鍵の公開鍵の値です。
  4. ファイルを保存して閉じます。

  5. コマンド プロンプトで compute project-info add-metadata コマンドを使用して、プロジェクト全体の ssh-keys 値を設定します。--metadata-from-file フラグを含めて、リストファイルへのパスを指定します。

    gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
    

    ここで、[LIST_PATH] は公開 SSH 認証鍵のリストへのパスです。

API

instances.setMetadata メソッドを使用して、プロジェクト全体の公開鍵を追加または削除します。

  1. projects.get メソッドを使用して、メタデータ fingerprint 値を取得します。既存のプロジェクト全体の鍵を保持する場合は、既存の ssh-keys 値を取得します。

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]
    
    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...

    ここで

    • [PROJECT_ID] は、固有のプロジェクト ID です。
    • [FINGERPRINT] は、このメタデータ構成の固有 ID です。これにより、意図せずに同時変更を上書きすることを避けられます。
    • [USERNAME_1][USERNAME_2] は、既存の認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] は、プロジェクトにすでに適用されている公開鍵の値です。
  2. プロジェクト全体のメタデータに追加または保持する、すべての公開 SSH 認証鍵のリストを作成します。現在、プロジェクト全体のメタデータに公開 SSH 認証鍵がある場合、リストに含めなかった認証鍵はすべて削除されます。

    この例では、ファイルには新しい [KEY_VALUE] と、その後に前のステップで取得した既存の鍵の値が含まれています。[EXISTING_KEY_VALUE_1] は除外されているので、次のステップでインスタンスから削除されます。各認証鍵の値の区切りには、\n 文字を使用します。

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    ここで

    • [USERNAME_1][USERNAME_2][USERNAME_3] は、認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1] は、削除する SSH 認証鍵の公開鍵の値です。
    • [EXISTING_KEY_VALUE_2] は、保持する SSH 認証鍵の公開鍵の値です。
    • [NEW_KEY_VALUE] は、追加する SSH 認証鍵の公開鍵の値です。
  3. projects.setcommoninstancemetadata メソッドを使用して、プロジェクト全体の ssh-keys 値を設定します。fingerprint 値を組み込んで、このメタデータ値への同時変更が上書きされないようにします。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/setCommonInstanceMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    ここで

    • [PROJECT_ID] は、固有のプロジェクト ID です。
    • [USERNAME_1][USERNAME_2][USERNAME_3] は、認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1] は、削除する SSH 認証鍵の公開鍵の値です。
    • [EXISTING_KEY_VALUE_2] は、保持する SSH 認証鍵の公開鍵の値です。
    • [NEW_KEY_VALUE] は、追加する SSH 認証鍵の公開鍵の値です。
    • [FINGERPRINT] は、projects.get メソッドで事前に取得したフィンガープリントです。

SSH 認証鍵の編集が終了したら、サードパーティ ツールで Linux インスタンスに接続して、変更をテストします。

問題が発生した場合は、接続しようとしているインスタンスのメタデータを確認してください。プロジェクト全体の SSH 認証鍵をブロックするようにインスタンス レベルのメタデータが設定されているか、インスタンス専用の sshKeys 値(非推奨)がメタデータに含まれている場合、そのインスタンスはプロジェクト全体の SSH 認証鍵をすべて無視(ブロック)します。プロジェクト全体の認証鍵をインスタンスに適用するには、インスタンスでプロジェクト全体の公開 SSH 認証鍵が許可されていることを確認し、インスタンス専用の sshKeys 値(非推奨)がインスタンス メタデータに存在する場合は削除します。

Linux インスタンスによるプロジェクト全体の公開 SSH 認証鍵の使用を許可またはブロックする

インスタンスでプロジェクト全体の公開 SSH 認証鍵を無視し、インスタンス レベルの認証鍵のみを使用する必要がある場合、インスタンスからプロジェクト全体の公開 SSH 認証鍵をブロックできます。これにより、インスタンス レベルのメタデータに公開 SSH 認証鍵が格納されているユーザーのみインスタンスにアクセスできるようになります。インスタンスがプロジェクト全体とインスタンス レベルの両方の公開 SSH 認証鍵を使用できるようにする場合は、プロジェクト全体の SSH 認証鍵を許可するようにインスタンスのメタデータを設定します。これにより、プロジェクト全体またはインスタンス レベルのメタデータに公開 SSH 認証鍵が格納されているユーザーがすべてインスタンスにアクセスできるようになります。

Console

GCP Console からプロジェクト全体の公開 SSH 認証鍵を許可またはブロックするには:

  1. Google Cloud Platform Console で、[VM インスタンス] のページに移動します。

    インスタンス ページに移動

  2. 変更するインスタンスの名前をクリックします。

  3. ツールバーで [編集] をクリックします。

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

    • プロジェクト全体の SSH 認証鍵のユーザーがこのインスタンスに接続できないようにするには、[プロジェクト全体の SSH 認証鍵をブロック] を選択します。
    • プロジェクト全体の SSH 認証鍵のユーザーがこのインスタンスに接続できるようにするには、[プロジェクト全体の SSH 認証鍵をブロック] をクリアします。
  5. SSH 認証鍵の接続設定の編集が終了したら、[保存] をクリックします。

gcloud

Linux インスタンスによるプロジェクト全体の公開 SSH 認証鍵の使用を許可またはブロックするには、block-project-ssh-keys メタデータ値をインスタンスに追加します。

  • プロジェクト全体の公開 SSH 認証鍵をブロックするには、メタデータ値を TRUE に設定します。

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=TRUE
    

    [INSTANCE_NAME] は、プロジェクト全体の公開 SSH 認証鍵をブロックするインスタンスの名前です。

  • プロジェクト全体の公開 SSH 認証鍵を許可するには、メタデータ値を FALSE に設定します。

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=FALSE
    

    [INSTANCE_NAME] は、プロジェクト全体の公開 SSH 認証鍵を許可するインスタンスの名前です。

API

Linux インスタンスによるプロジェクト全体の公開 SSH 認証鍵の使用をブロックまたは許可するには:

  • プロジェクト全体の公開 SSH 認証鍵をブロックするには、block-project-ssh-keys メタデータ値をインスタンスに追加し、TRUE に設定します。このメタデータ値は、プロジェクト全体のすべての認証鍵がこのインスタンス上で機能しないようにブロックして、インスタンス レベルの認証鍵のみが機能するようにします。

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

    ここで

    • [PROJECT_ID] は、固有のプロジェクト ID です。
    • [ZONE] はインスタンスが配置されているゾーンです。
    • [INSTANCE_NAME] は、プロジェクト全体の認証鍵をブロックするインスタンスです。
    • [FINGERPRINT] は、このメタデータ構成の固有 ID です。これにより、意図せずに同時変更を上書きすることを避けられます。
  • プロジェクト全体の公開 SSH 認証鍵を許可するには、block-project-ssh-keys メタデータ値をインスタンスに追加し、それを FALSE に設定します。このメタデータ値を使用すると、プロジェクト全体のすべての認証鍵(およびインスタンス レベルの認証鍵)をこのインスタンスで機能させることができます。

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

    ここで

    • [PROJECT_ID] は、固有のプロジェクト ID です。
    • [ZONE] はインスタンスが配置されているゾーンです。
    • [INSTANCE_NAME] は、プロジェクト全体の認証鍵を許可するインスタンスです。
    • [FINGERPRINT] は、このメタデータ構成の固有 ID です。これにより、意図せずに同時変更を上書きすることを避けられます。

作業が終わったら、サードパーティ ツールを使用して Linux インスタンスに接続し、変更をテストします。

インスタンス レベルの公開 SSH 認証鍵の追加または削除

インスタンス レベルの公開 SSH 認証鍵を使用すると、特定の Linux インスタンスにアクセスできます。インスタンス レベルの公開 SSH 認証鍵のユーザーは、Linux インスタンスがプロジェクト全体の公開 SSH 認証鍵をブロックしている場合でも、そのインスタンスにアクセスできます。

Console

GCP Console からインスタンス レベルの公開 SSH 認証鍵を追加または削除するには:

  1. Google Cloud Platform Console で、[VM インスタンス] のページに移動します。

    インスタンス ページに移動

  2. 変更するインスタンスの名前をクリックします。

  3. ツールバーで [編集] をクリックします。

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

  5. インスタンス レベルの公開 SSH 認証鍵を変更します。

    • 公開 SSH 認証鍵を追加するには、[項目を追加] をクリックします。テキスト ボックスが開きます。
    • 公開 SSH 認証鍵ファイルの内容をコピーしてテキスト ボックスに貼り付けます。

      追加する公開 SSH 認証鍵ごとに、この手順を繰り返します。

    • 公開 SSH 認証鍵を削除するには、隣にある削除ボタンをクリックします。

      PuTTYgen 公開鍵のスクリーンショット

      削除する公開 SSH 認証鍵ごとに、この手順を繰り返します。

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

gcloud

gcloud ツールでインスタンス レベルの公開 SSH 認証鍵を追加または削除するには:

  1. インスタンスにすでにインスタンス レベルの公開 SSH 認証鍵がある場合は、それらの公開 SSH 認証鍵をメタデータから取得します。

    1. インスタンスの既存のメタデータを取得します。

       gcloud compute instances describe [INSTANCE_NAME]
       

      ここで [INSTANCE_NAME] は公開 SSH 認証鍵を追加または削除する必要があるインスタンスの名前です。

    2. 出力から ssh-keys メタデータ値を探します。

       ...
       metadata:
         fingerprint: QCofVTHlggs=
         items:
         ...
         - key: ssh-keys
           value: |-
             [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
             [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
       ...
      

      ここで

      • [USERNAME_1][USERNAME_2] は、既存の認証鍵のユーザー名です。
      • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] は、インスタンスにすでに適用されている公開鍵の値です。

    3. 公開 SSH 認証鍵を ssh-keys メタデータ値にコピーします。

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

  3. このファイルで、インスタンス レベルのメタデータに追加または保持する、すべての公開 SSH 認証鍵のリストを作成します。現在、インスタンス レベルのメタデータに公開 SSH 認証鍵がある場合、リストに含めなかった認証鍵はすべて削除されます。

    たとえば、SSH 認証鍵が省略されているため、以下のサンプルリストでは [USERNAME_1] の認証鍵が削除されます。一方、リストに含まれている [USERNAME_2] の SSH 認証鍵はメタデータに保持され、[USERNAME_3] の SSH 認証鍵はメタデータに追加されます。

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    ここで

    • [USERNAME_1][USERNAME_2][USERNAME_3] は、公開 SSH 認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1] は、削除する SSH 認証鍵の公開鍵の値です。
    • [EXISTING_KEY_VALUE_2] は、保持する SSH 認証鍵の公開鍵の値です。
    • [NEW_KEY_VALUE] は、追加する SSH 認証鍵の公開鍵の値です。
  4. ファイルを保存して閉じます。

  5. コマンド プロンプトで compute instances add-metadata コマンドを使用して、インスタンス専用の ssh-key 値を設定します。--metadata-from-file フラグを含めて、作成した公開鍵ファイルリストへのパスを指定します。

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=[LIST_PATH]
    

    ここで

    • [INSTANCE_NAME] は、公開 SSH 認証鍵ファイルを適用するインスタンスの名前です。
    • [LIST_PATH] は公開 SSH 認証鍵のリストへのパスです。

API

instances.setMetadata メソッドを使用して、インスタンス専用の ssh-keys 値を追加します。

  1. instances.get メソッドを使用して、リクエストに使用するメタデータ fingerprint 値を取得します。既存のインスタンス レベルの認証鍵を保持する場合は、既存の ssh-keys 値を取得します。

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]
    

    サーバーは次のようなレスポンスを返します。

    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...
    

    ここで

    • [PROJECT_ID] は、固有のプロジェクト ID です。
    • [ZONE] はインスタンスが配置されているゾーンです。
    • [INSTANCE_NAME] は、インスタンス レベルの公開 SSH 認証鍵を編集するインスタンスです。
    • [FINGERPRINT] は、このメタデータ構成の固有 ID です。これにより、意図せずに同時変更を上書きすることを避けられます。
    • [USERNAME_1][USERNAME_2] は、既存の認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1][EXISTING_KEY_VALUE_2] は、インスタンスにすでに適用されている公開鍵の値です。
  2. インスタンス レベルのメタデータに追加または保持する、すべての公開 SSH 認証鍵のリストを作成します。現在、インスタンス レベルのメタデータに公開 SSH 認証鍵がある場合、リストに含めなかった認証鍵はすべて削除されます。

    この例では、ファイルには新しい [KEY_VALUE] と、その後に前のステップで取得した既存の鍵の値が含まれています。[EXISTING_KEY_VALUE_1] は除外されているので、次のステップでインスタンスから削除されます。各認証鍵の値の区切りには、\n 文字を使用します。

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    ここで

    • [USERNAME_1][USERNAME_2][USERNAME_3] は、認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1] は、削除する SSH 認証鍵の公開鍵の値です。
    • [EXISTING_KEY_VALUE_2] は、保持する SSH 認証鍵の公開鍵の値です。
    • [NEW_KEY_VALUE] は、追加する SSH 認証鍵の公開鍵の値です。
  3. instances.setMetadata メソッドを使用して、インスタンス専用の ssh-keys 値を設定します。fingerprint 値を組み込んで、このメタデータ値への同時変更が上書きされないようにします。

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    ここで

    • [PROJECT_ID] は、固有のプロジェクト ID です。
    • [ZONE] はインスタンスが配置されているゾーンです。
    • [INSTANCE_NAME] は、インスタンス レベルの公開 SSH 認証鍵を編集するインスタンスです。
    • [USERNAME_1][USERNAME_2][USERNAME_3] は、認証鍵のユーザー名です。
    • [EXISTING_KEY_VALUE_1] は、削除する SSH 認証鍵の公開鍵の値です。
    • [EXISTING_KEY_VALUE_2] は、保持する SSH 認証鍵の公開鍵の値です。
    • [NEW_KEY_VALUE] は、追加する SSH 認証鍵の公開鍵の値です。
    • [FINGERPRINT] は、このメタデータ構成の固有 ID です。これにより、意図せずに同時変更を上書きすることを避けられます。

SSH 認証鍵の編集が終了したら、サードパーティ ツールで Linux インスタンスに接続して、変更をテストします。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント