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

このガイドでは、SSH 認証鍵を作成し、公開 SSH 認証鍵のメタデータを編集することによって、Linux インスタンスへのアクセスを制御する方法を説明します。プロジェクトおよび組織のメンバーに IAM の役割を割り当てることによってインスタンスへのアクセスを制御する場合は、OS ログインを使用してインスタンス アクセスを管理するをご覧ください。

インスタンスに接続する方法については、インスタンスへの接続をご覧ください。

始める前に

このタスクに必要な権限

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

  • インスタンスのメタデータを設定する場合、そのインスタンスに対する 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 認証鍵を提示するユーザーは、Cloud Platform プロジェクトのメンバーではない場合でも、サードパーティ ツールを使用して、一致する公開 SSH 認証鍵ファイルを使用して構成されたインスタンスに接続できます。したがって、1 つ以上のインスタンスの公開 SSH 認証鍵メタデータを変更することで、ユーザーがアクセスできるインスタンスを制御できます。

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

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

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

  3. 公開 SSH 認証鍵のメタデータを編集し、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 認証鍵を生成します。

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

  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. 完了したら、ページの下部にある [保存] をクリックします。

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] の認証鍵が削除されます。SSH 認証鍵がリストに含まれているため、[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 メソッドで事前に取得したフィンガープリントです。

作業が終わったら、サードパーティ ツールを使用して 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. 完了したら、ページの下部にある [保存] をクリックします。

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. 完了したら、ページの下部にある [保存] をクリックします。

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] の認証鍵が削除されます。SSH 認証鍵がリストに含まれているため、[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 です。これにより、意図せずに同時変更を上書きすることを避けられます。

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

次のステップ

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

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

Compute Engine ドキュメント