このガイドでは、手動で SSH 認証鍵を作成し、公開 SSH 認証鍵のメタデータを編集することによって、Linux インスタンスへのアクセスを制御する方法について説明します。アクセス方法の選択で、メタデータで SSH 鍵を管理することがユースケースに最適かどうかご確認ください。
また、Google Cloud Console を介してインスタンスに接続することもできます。この場合、Compute Engine は鍵のすべてのライフサイクルを自動的に管理します。または、SDK で gcloud
コマンドライン ツールを使用してインスタンスに接続することもできます。この場合、Compute Engine によって永続的な SSH 認証鍵のメタデータが自動的に構成されます。
上級ユーザーが SSH 認証鍵を手動で管理する必要がある場合は、OS Login を使用してインスタンスへのアクセスを管理するをご覧ください。OS Login を使用して SSH 認証鍵を管理すると、そのインスタンスではメタデータによる SSH 認証鍵の構成が無効になります。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
このタスクに必要な権限
このタスクを行うには、次の権限が必要です。
- インスタンスでメタデータを設定する場合、インスタンスに対する
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 認証鍵のメタデータを編集するには:
メタデータの編集に使用するツールを決定します。
- Google Cloud Console を使用して、ブラウザからメタデータを編集します。
- コマンドラインを使用する場合は、
gcloud
コマンドライン ツールでメタデータを編集します。 - 上級ユーザーの場合、API メソッドを使用して公開 SSH 認証鍵の管理を自動化できます。
Linux インスタンスにユーザーを追加する必要がある場合、以下の手順で公開 SSH 認証鍵を準備します。
- SSH 認証鍵を持たないユーザーを追加する必要がある場合は、新しいユーザーごとに新しい SSH 認証鍵を生成します。
- 既存の SSH 認証鍵を持つユーザーを追加するには、各ユーザーの公開 SSH 認証鍵ファイルを見つけます。
- 追加する公開 SSH 認証鍵をフォーマットして、メタデータの編集に使用するツールで正しく機能するようにします。必要に応じて、公開 SSH 認証鍵をフォーマットして有効期限を追加、編集、削除することもできます。
公開 SSH 認証鍵のメタデータを編集して、Linux インスタンスへのユーザーの追加や、Linux インスタンスからのユーザーの削除を行います。
サードパーティ ツールを使用して Linux インスタンスに接続し、それぞれの公開 SSH 認証鍵が正しく追加または削除されていることを確認します。ユーザーがインスタンスに接続できるのは、インスタンスがメタデータ サーバー経由でユーザーの公開 SSH 認証鍵を利用でき、この鍵に対応する秘密 SSH 認証鍵をユーザーが持っている場合に限られます。
新しい SSH 認証鍵を作成する
既存の秘密 SSH 認証鍵ファイルと、使用可能な一致する公開 SSH 認証鍵ファイルがない場合は、新しい SSH 認証鍵を生成します。既存の SSH 認証鍵を使用する場合は、公開 SSH 認証鍵ファイルを見つけます。
Linux / macOS
Linux または macOS ワークステーションでは、ssh-keygen
ツールを使用して鍵を生成できます。
ワークステーションでデバイスを開き、
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.com
やcloudysanfrancisco
です。
このコマンドは、次の構造を持つ秘密 SSH 認証鍵ファイルとそれに対応する公開 SSH 認証鍵を生成します(生成先:
~/.ssh/[KEY_FILENAME].pub
)。ssh-rsa [KEY_VALUE] [USERNAME]
ここで
[KEY_VALUE]
は、ssh-keygen
によって生成された鍵の値です。これは長い文字列です。[USERNAME]
: VM に接続するユーザー名。たとえば、cloudysanfrancisco@gmail.com
やcloudysanfrancisco
です。
秘密鍵へのアクセスを制限し、鍵の管理者だけが読み取れ、他の誰も書き込めないようにします。
chmod 400 ~/.ssh/[KEY_FILENAME]
ここで
[KEY_FILENAME]
は SSH 認証鍵ファイルに使用した名前です。
新しい鍵を必要とする各ユーザーに対してこのプロセスを繰り返します。次に、作成した公開 SSH 認証鍵を見つけて、プロジェクトまたはインスタンスに追加する既存の公開 SSH 認証鍵を見つけます。
Windows
Windows には SSH 認証鍵を生成する組み込みツールがないため、Windows ワークステーションを使用している場合は、サードパーティのツールを使用して SSH 認証鍵を生成する必要があります。PuTTYgen ツールを使用して SSH 認証鍵を生成する方法は次のとおりです。
PuTTYgen を実行します。この例では、ダウンロードした
puttygen.exe
ファイルを実行します。鍵生成の設定値を構成できるウィンドウが開きます。[Generate] をクリックし、画面上の指示に従って新しい認証鍵を生成します。ほとんどの場合、デフォルトのパラメータで問題ありませんが、少なくとも 2,048 ビットで認証鍵を生成する必要があります。認証鍵の生成が完了すると、ツールに公開鍵の値が表示されます。
[Key comment] セクションで、既存のテキストを、鍵を使用して VM に接続するユーザーのユーザー名に置き換えます。たとえば、
cloudysanfrancisco@gmail.com
やcloudysanfrancisco
です。必要に応じて、鍵パスフレーズを入力することで鍵を保護できます。
[Save private key] をクリックして、拡張子
.ppk
のファイルに秘密鍵を書き込みます。[Save public key] をクリックして、後で使用するために、公開鍵をファイルに書き込みます。ここでは、PuTTYgen ウィンドウを開いたままにします。
正しくフォーマットされた公開鍵は PuTTYgen 画面の上部に表示されます。
この公開鍵の構造は次のとおりです。
ssh-rsa [KEY_VALUE] [USERNAME]
ここで
[KEY_VALUE]
: 生成された鍵の値。[USERNAME]
: VM に接続するユーザー名。たとえば、cloudysanfrancisco@gmail.com
やcloudysanfrancisco
です。
鍵を作成する必要があるすべてのユーザーに対してこのプロセスを繰り返します。次に、プロジェクトまたはインスタンスに追加するユーザー用のその他の公開 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 認証鍵を正しいフォーマットで表示するには:
PuTTYgen を実行します。PuTTYgen を持っていない場合は、
puttygen.exe
をダウンロードして実行してください。[Load] をクリックして、公開 SSH 認証鍵ファイルを選択して開きます。
公開鍵ファイルが読み込まれると、適切にフォーマットされた公開 SSH 認証鍵の値が 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 Console、gcloud
コマンドライン ツール、または API メソッドで機能するように認証鍵をフォーマットします。必要に応じて公開 SSH 認証鍵を変更して、有効期限の追加、編集、削除を行うことができます。
Console
公開 SSH 認証鍵のフォーマットを確認するには:
公開 SSH 認証鍵ファイルを探して開きます。
公開 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 認証鍵の作成時に指定したユーザーの名前です。
認証鍵が上記の形式のいずれとも一致しない場合、または有効期限を追加、編集、削除する場合は、以下の手順で公開 SSH 認証鍵をフォーマットします。それ以外の場合は、ファイルを開いたままにして、プロジェクトやインスタンスのメタデータに公開 SSH 認証鍵を追加します。
Console 向けに公開 SSH 認証鍵をフォーマットするには:
公開鍵ファイルのコピーを作成します。このコピーを Compute Engine で使用し、元のファイルは他の SSH 構成で使用するために残しておきます。
公開鍵ファイルのコピーを開きます。
次のフォーマットになるように、公開鍵ファイルを変更します。
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
。
変更を保存し、ファイルを開いたままにします。
これで、プロジェクトまたはインスタンスのメタデータに公開 SSH 認証鍵を追加する準備ができました。
gcloud または API
公開 SSH 認証鍵のフォーマットを確認するには:
公開 SSH 認証鍵ファイルを探して開きます。
公開 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 認証鍵の値です。
認証鍵が上記の形式のいずれとも一致しない場合、または有効期限を追加、編集、削除する場合は、以下の手順で公開 SSH 認証鍵をフォーマットします。それ以外の場合は、ファイルを開いたままにして、プロジェクトやインスタンスのメタデータに公開 SSH 認証鍵を追加します。
gcloud
ツールまたは API 向けに公開 SSH 認証鍵をフォーマットするには:
公開鍵ファイルのコピーを作成します。このコピーを Compute Engine で使用し、元のファイルは他の SSH 構成で使用するために残しておきます。
公開鍵ファイルのコピーを開きます。デフォルトでは、このファイルのフォーマットは次のとおりです。
ssh-rsa [KEY_VALUE] [USERNAME]
ここで
[KEY_VALUE]
は公開 SSH 認証鍵の値です。[USERNAME]
は、この SSH 認証鍵の作成時に指定したユーザーの名前です。
ファイルの最後にあるユーザー名をコピーし、ファイルの先頭に貼り付け、その後にコロンを入力します。その結果、この公開 SSH 認証鍵ファイルのフォーマットは次のようになります。
[USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]
ここで
[USERNAME]
は、この SSH 認証鍵の作成時に指定したユーザーの名前です。[KEY_VALUE]
は公開 SSH 認証鍵の値です。
オプションで、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
変更を保存し、ファイルを開いたままにします。
これで、プロジェクトまたはインスタンスのメタデータに公開 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 認証鍵を追加または削除するには:
Google Cloud Console で、プロジェクトの [メタデータ] ページに移動します。
[SSH 認証鍵] で、[編集] をクリックします。
プロジェクト全体の公開 SSH 認証鍵を変更します。
- 公開 SSH 認証鍵を追加するには、[項目を追加] をクリックします。テキスト ボックスが開きます。
公開 SSH 認証鍵ファイルの内容をコピーしてテキスト ボックスに貼り付けます。
追加する公開 SSH 認証鍵ごとに、この手順を繰り返します。
公開 SSH 認証鍵を削除するには、隣にある削除ボタンをクリックします。
削除する公開 SSH 認証鍵ごとに、この手順を繰り返します。
SSH 認証鍵の編集が終了したら、[保存] をクリックします。
gcloud
gcloud
ツールでプロジェクト全体の公開 SSH 認証鍵を追加または削除するには:
プロジェクトにすでにプロジェクト全体の公開 SSH 認証鍵がある場合は、それらの公開 SSH 認証鍵をメタデータから取得します。
プロジェクトの既存のメタデータを取得します。
gcloud compute project-info describe
出力から
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]
は、プロジェクトにすでに適用されている公開鍵の値です。
公開 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 認証鍵の公開鍵の値です。
ファイルを保存して閉じます。
コマンド プロンプトで、
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
メソッドを使用して、プロジェクト全体の公開鍵を追加または削除します。
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]
は、プロジェクトにすでに適用されている公開鍵の値です。
プロジェクト全体のメタデータに追加または保持する、すべての公開 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 認証鍵の公開鍵の値です。
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 認証鍵を許可またはブロックするには:
Google Cloud Console で、[VM インスタンス] ページに移動します。
変更するインスタンスの名前をクリックします。
[編集] をクリックします。
[SSH 認証鍵] で、[プロジェクト全体の SSH 認証鍵をブロック] チェックボックスに移動します。
- プロジェクト全体の SSH 認証鍵のユーザーがこのインスタンスに接続できないようにするには、[プロジェクト全体の SSH 認証鍵をブロック] を選択します。
- プロジェクト全体の SSH 認証鍵のユーザーがこのインスタンスに接続できるようにするには、[プロジェクト全体の SSH 認証鍵をブロック] をクリアします。
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 インスタンスに接続し、変更をテストします。
インスタンス レベルの公開 SSH 認証鍵の追加または削除
インスタンス レベルの公開 SSH 認証鍵を使用すると、特定の Linux インスタンスにアクセスできます。インスタンス レベルの公開 SSH 認証鍵のユーザーは、Linux インスタンスがプロジェクト全体の公開 SSH 認証鍵をブロックしている場合でも、そのインスタンスにアクセスできます。
Console
Cloud Console からインスタンス レベルの公開 SSH 認証鍵を追加または削除するには:
Google Cloud Console で、[VM インスタンス] ページに移動します。
変更するインスタンスの名前をクリックします。
[編集] をクリックします。
中央ペインの [SSH 認証鍵] で、[表示して編集する] をクリックします。セクションが展開され、すべてのインスタンスレベルの公開 SSH 認証鍵が表示されます。
インスタンスレベルの公開 SSH 認証鍵を変更します。
- 公開 SSH 認証鍵を追加するには、公開 SSH 認証鍵ファイルの内容をコピーしてテキスト ボックスに貼り付けます。
[項目を追加] をクリックします。
追加する公開 SSH 認証鍵ごとに、この手順を繰り返します。
公開 SSH 認証鍵を削除するには、隣にある削除ボタンをクリックします。
削除する公開 SSH 認証鍵ごとに、この手順を繰り返します。
SSH 認証鍵の編集が終了したら、[保存] をクリックします。
gcloud
gcloud
ツールでインスタンス レベルの公開 SSH 認証鍵を追加または削除するには:
インスタンスにすでにインスタンス レベルの公開 SSH 認証鍵がある場合は、それらの公開 SSH 認証鍵をメタデータから取得します。
インスタンスの既存のメタデータを取得します。
gcloud compute instances describe [INSTANCE_NAME]
ここで、
[INSTANCE_NAME]
は、公開 SSH 認証鍵を追加または削除する必要があるインスタンスの名前です。出力から
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]
は、インスタンスにすでに適用されている公開鍵の値です。
公開 SSH 認証鍵を
ssh-keys
メタデータ値にコピーします。
ローカル ワークステーションで新しいテキスト ファイルを作成して開きます。
このファイルで、インスタンス レベルのメタデータに追加または保持する、すべての公開 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 認証鍵の公開鍵の値です。
ファイルを保存して閉じます。
コマンド プロンプトで
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
値をメタデータに追加します。
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]
は、インスタンスにすでに適用されている公開鍵の値です。
インスタンス レベルのメタデータに追加または保持する、すべての公開 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 認証鍵の公開鍵の値です。
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 インスタンスに接続して、変更をテストします。