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


このガイドでは、手動で SSH 認証鍵を作成し、公開 SSH 認証鍵のメタデータを編集することによって、Linux インスタンスへのアクセスを制御する方法について説明します。アクセス方法の選択で、メタデータで SSH 鍵を管理することがユースケースに最適かどうかご確認ください。

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

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

始める前に

このタスクに必要な権限

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

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

手動での鍵管理のリスク

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

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

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

概要

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

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

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

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

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

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

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

    • SSH 認証鍵を持たないユーザーを追加する必要がある場合は、新しいユーザーごとに新しい SSH 認証鍵を生成します。
    • 既存の SSH 認証鍵を持つユーザーを追加するには、各ユーザーの公開 SSH 認証鍵ファイルを見つけます
    • 追加する公開 SSH 認証鍵をフォーマットして、メタデータの編集に使用するツールで正しく機能するようにします。必要に応じて、公開 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]: VM に接続するユーザー名。たとえば、cloudysanfrancisco@gmail.comcloudysanfrancisco です。

    このコマンドは、次の構造を持つ秘密 SSH 認証鍵ファイルとそれに対応する公開 SSH 認証鍵を生成します(生成先: ~/.ssh/[KEY_FILENAME].pub)。

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    ここで

    • [KEY_VALUE] は、ssh-keygen によって生成された鍵の値です。これは長い文字列です。
    • [USERNAME]: VM に接続するユーザー名。たとえば、cloudysanfrancisco@gmail.comcloudysanfrancisco です。
  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] セクションで、既存のテキストを、鍵を使用して VM に接続するユーザーのユーザー名に置き換えます。たとえば、cloudysanfrancisco@gmail.comcloudysanfrancisco です。

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

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

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

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

    PuTTYgen 公開鍵。

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

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    ここで

    • [KEY_VALUE]: 生成された鍵の値。
    • [USERNAME]: VM に接続するユーザー名。たとえば、cloudysanfrancisco@gmail.comcloudysanfrancisco です。

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

SSH 認証鍵を探す

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

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

Linux / macOS

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

  • 公開鍵ファイル: ~/.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 認証鍵ファイルそれぞれのフォーマットを確認しておく必要があります。

メタデータの編集に使用するツールに応じて、Cloud 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

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

  1. プロジェクトの [メタデータ] ページに移動します。

    [メタデータ] に移動

  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

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

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

    GET https://compute.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://compute.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

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

  1. [VM インスタンス] ページに移動します。

    [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://compute.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://compute.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 インスタンスに接続し、変更をテストします。

VM レベルの公開 SSH 認証鍵を編集する

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

VM 作成時に VM レベルの公開 SSH 認証鍵を追加する

VM の作成時に VM レベルの公開 SSH 認証鍵を追加する手順は次のとおりです。

Console

VM 作成時に Cloud Console から VM レベルの公開 SSH 認証鍵を追加するには:

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

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

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

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

    1. [セキュリティ] セクションを展開します。
    2. 省略可: プロジェクト全体の SSH 認証鍵のユーザーが VM に接続できないようにするには、[プロジェクト全体の SSH 認証鍵をブロック] チェックボックスをオンにします。
    3. VM の SSH 認証鍵を追加するには、[項目を追加] をクリックします。
    4. 公開 SSH 認証鍵ファイルの内容を次の形式で入力します。

      ssh-rsa KEY_VALUE USERNAME
      

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

      • KEY_VALUE: 公開 SSH 認証鍵
      • USERNAME: SSH 認証鍵を使用して VM に接続するユーザー名
    5. 省略可: VM に複数の SSH 認証鍵を追加するには、上記の手順を繰り返します。

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

gcloud

gcloud compute instances create コマンドを使用して VM を作成します。

gcloud compute instances create VM_NAME \
    --metadata=ssh-keys=USERNAME_1:ssh-rsa\ KEY_VALUE_1\ USERNAME_1
    ...

--metadata-from-file=ssh-keys=FILE_PATH フラグを使用すると、複数の SSH 認証鍵を追加できます。このファイルに、ユーザー名と公開 SSH 認証鍵のリストを次の形式で追加します。

USERNAME_1:ssh-rsa KEY_VALUE_1 USERNAME_1
USERNAME_2:ssh-rsa KEY_VALUE_2 USERNAME_2

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

  • VM_NAME: VM の名前
  • USERNAME_1USERNAME_2: SSH 認証鍵を使用して VM に接続するユーザー名
  • KEY_VALUE_1KEY_VALUE_2: 公開 SSH 認証鍵
  • FILE_PATH: SSH 認証鍵を含むファイルのパス

たとえば、次のコマンドは、公開 SSH 認証鍵を使用して cloudysanfrancisco ユーザー名に example-vm という名前の VM を作成します。

gcloud compute instances create example-vm \
    --metadata=ssh-keys=cloudysanfrancisco:ssh-rsa\ AAAAB3N..\ cloudysanfrancisco \
    ...

API

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": "ssh-keys",
     "value": "USERNAME_1:ssh-rsa KEY_VALUE_1 USERNAME_1"
    }
    {
     "key": "ssh-keys",
     "value": "USERNAME_2:ssh-rsa KEY_VALUE_2 USERNAME_2"
    }
   ]
}
...

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

  • USERNAME_1USERNAME_2: SSH 認証鍵を使用して VM に接続するユーザー名
  • KEY_VALUE_1KEY_VALUE_2: 公開 SSH 認証鍵

既存の VM のインスタンス レベルの公開 SSH 認証鍵を追加または削除する

既存の VM のインスタンス レベルの公開 SSH 認証鍵を追加または削除するには、次の手順を行います。

Console

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

  1. [VM インスタンス] ページに移動します。[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://compute.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://compute.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 インスタンスに接続して、変更をテストします。

次のステップ