OS ログインを使用してインスタンス アクセスを管理する

OS ログインを使用すると、Linux インスタンスへの SSH アクセスを Compute Engine の IAM の役割を使用して管理できます。この場合、メタデータに SSH キーを追加したり削除したりして、手動でインスタンスへのアクセスを管理する必要がありません。

OS ログインを構成してインスタンスに接続するには、次の手順に従います。

  1. プロジェクトまたは個々のインスタンスで OS ログイン機能を有効にします
  2. 自分自身、プロジェクトのメンバー、または組織のメンバーに必要な IAM の役割を付与します
  3. 必要に応じて、以下の手順のいずれかを実行します。
  4. インスタンスに接続します
  5. 予想されるログイン動作を確認します。

制限事項

  • OS ログインは、Google Kubernetes Engine では現在サポートされていません。OS ログインが有効になっている場合、Google Kubernetes Engine クラスタのノードは引き続きメタデータ SSH 認証鍵を使用します。

  • Windows Server および SQL Server のイメージ ファミリーは、まだ OS ログインをサポートしていません。

OS ログインを有効または無効にする

IAM の役割を使用してインスタンスへのアクセスを管理できるようにするには、最初に OS ログイン機能を有効にする必要があります。有効にするには、プロジェクトまたはインスタンスのメタデータの中で enable-oslogin=TRUE というメタデータの Key-Value ペアの設定を行います。OS ログインを無効にするには、このメタデータの値を FALSE に設定します。たとえば、この機能をプロジェクト全体で有効にするには enable-oslogin=TRUE をプロジェクト レベルで使用し、特定のインスタンスにはこの機能をまだ使用しないという場合はそのインスタンスに対して enable-oslogin=FALSE を設定します。

enable-oslogin メタデータ値をプロジェクトまたはインスタンスに適用するには、次の方法があります。

Console

enable-oslogin をプロジェクト レベルのメタデータの中で設定してプロジェクト内のすべてのインスタンスに適用する:

  1. [メタデータ] ページに移動します。
  2. [編集] をクリックします。
  3. キーが enable-oslogin で値が TRUE のメタデータ エントリを追加します。この機能を無効にする場合は値を FALSE に設定します。
  4. [保存] をクリックして変更を適用します。

CoreOS を実行していない VM の場合、この変更は即座に適用されます。インスタンスの再起動は不要です。CoreOS ディストリビューションの場合は、変更を有効にするためにインスタンスをリブートまたは再起動します。再起動するには、インスタンスを停止してから開始します。

既存インスタンスのメタデータの中で enable-oslogin を設定する:

  1. [VM インスタンス] ページに移動します。
  2. メタデータ値を設定するインスタンスの名前をクリックします。
  3. インスタンスの詳細ページの上部にある [編集] をクリックしてインスタンス設定の編集画面を開きます。
  4. [カスタム メタデータ] でメタデータ エントリを追加し、キーを enable-oslogin、値を TRUE に設定します。このインスタンスで OS ログイン機能を無効にするには、値を FALSE に設定します。
  5. インスタンスの詳細ページの一番下にある [保存] をクリックして変更内容をインスタンスに適用します。

CoreOS 以外のオペレーティングシステムの場合、この変更は即座に適用されます。インスタンスの再起動は不要です。CoreOS ディストリビューションの場合は、変更を有効にするためにインスタンスをリブートまたは再起動します。再起動するには、インスタンスを停止してから開始します。

インスタンスを作成するときにインスタンス メタデータの中で enable-oslogin を設定する:

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

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. [新しいインスタンスの作成] ページで、インスタンス向けに希望するプロパティを入力します。
  4. [メタデータ] セクションでメタデータ エントリを追加し、キーを enable-oslogin、値を TRUE に設定します。このインスタンスで OS ログイン機能を無効にするには、値を FALSE に設定します。
  5. [作成] をクリックしてインスタンスを作成します。

gcloud

enable-oslogin をプロジェクト レベルのメタデータの中で設定してプロジェクト内のすべてのインスタンスに適用する:

gcloud コマンドライン ツールで project-info add-metadata コマンドを使用して oslogin=TRUE に設定すると、OS ログインが有効になります。

gcloud compute project-info add-metadata --metadata enable-oslogin=TRUE

enable-osloginFALSE に設定すると OS ログインが無効になります。

CoreOS を実行していない VM の場合、この変更は即座に適用されます。インスタンスの再起動は不要です。CoreOS ディストリビューションの場合は、変更を有効にするためにインスタンスをリブートまたは再起動します。

既存インスタンスのメタデータの中で enable-oslogin を設定する:

gcloud コマンドライン ツールで instances add-metadata コマンドを使用して oslogin=TRUE に設定すると、OS ログインが有効になります。

gcloud compute instances add-metadata [INSTANCE_NAME] --metadata enable-oslogin=TRUE

enable-osloginFALSE に設定すると、そのインスタンスで OS ログインは無効になります。

CoreOS 以外のオペレーティングシステムの場合、この変更は即座に適用されます。インスタンスの再起動は不要です。CoreOS ディストリビューションの場合は、変更を有効にするためにインスタンスをリブートまたは再起動します。

インスタンスを作成するときにインスタンス メタデータの中で enable-oslogin を設定する:

gcloud コマンドライン ツールで instances create コマンドを使用して oslogin=TRUE に設定すると、OS ログインが有効になります。

gcloud compute instances create [INSTANCE_NAME] --metadata enable-oslogin=TRUE

enable-osloginFALSE に設定すると、そのインスタンスで OS ログインは無効になります。

必要なメタデータ値の他に、インスタンスには Linux Guest Environment の最新バージョンがインストールされている必要があります。インポートしたカスタム イメージをインスタンスで実行する場合、そのインスタンスで OS ログインを有効にするには、Linux Guest Environment をインストールします。

プロジェクト内のインスタンスで OS ログインを有効にした後、そのインスタンスに接続する許可をユーザーに付与します

ユーザー アカウントに対して OS ログインの役割を構成する

OS ログインの IAM 役割を付与する

プロジェクト内の OS ログインが有効になっているインスタンスは、プロジェクトまたは組織内の必要な IAM 役割を持つユーザー アカウントからの接続だけを受け入れます。

たとえば、以下の手順でインスタンスへのアクセス権をユーザーに付与できます。

  1. ユーザーに必要なインスタンス アクセスの役割を付与します。必要な役割は以下のとおりです。

  2. 組織外のメンバーにインスタンスへのアクセスを許可する場合は、組織の管理者が組織レベルでそれらのユーザーに roles/compute.osLoginExternalUser を付与します。

これらのユーザーは、インスタンスの詳細や外部 IP アドレスを表示することはできません。管理者がユーザーに直接提供しない限り、これらの情報をユーザーが知ることはありません。ユーザーにインスタンスの詳細を表示することを許可するには、追加の IAM 役割が必要です。たとえば、roles/compute.viewer 役割を付与されたユーザーは、プロジェクト内のすべてのリソース(インスタンスの詳細を含む)を見ることができます。

OS ログインの IAM 役割を取り消す

OS ログインの使用が有効になっているインスタンスへのユーザー アクセスを取り消すには、ユーザー アカウントからユーザー役割を削除します。そのユーザーのアカウントには公開 SSH 認証鍵が関連付けられたままになりますが、その鍵はインスタンスに対して機能しなくなります。

インスタンスに接続する

必要な役割を構成したら、Compute Engine のツールを使用してインスタンスに接続します。Compute Engine によって自動的に SSH 認証鍵が生成されてユーザー アカウントに関連付けられます。

別の方法として、SSH 認証鍵を手動で作成してその公開鍵をユーザー アカウントに追加し、サードパーティ製ツールを使用してインスタンスに接続することもできます。インスタンスはユーザー アカウントから公開鍵を取得し、正しいユーザー名と対応する秘密 SSH 認証鍵を使えばインスタンスに接続できるようになります。

インスタンスに接続したら、予想されるログイン動作を確認します。

組織外のユーザーにインスタンスへのアクセスを許可する

デフォルトでは、組織外のユーザーは、組織内のインスタンスの SSH 認証鍵を設定することも、組織内のインスタンスにアクセスすることもできません。場合によっては、別の組織のユーザーやコンシューマ向け Google gmail.com アカウントを持つユーザーにインスタンスへのアクセスを許可しなければならないことがあります。

IAM 役割の roles/compute.osLoginExternalUser は、外部 Google アカウントが POSIX アカウント情報を構成できるようにすることで、それらの外部アカウントに他の OS ログインの役割と連携することを許可します。

roles/compute.osLoginExternalUser と必要なその他の OS ログイン インスタンス アクセスの役割を組織外のユーザーに付与します。

  1. プロジェクトと組織の選択ページに移動します。

    プロジェクトと組織の選択ページに移動

  2. [組織] プルダウン メニューで組織を選択します。
  3. すべての組織を表示するには、[すべて] をクリックします。
  4. 組織の名前をクリックします。
  5. [追加] をクリックして、ユーザーに新しい役割を追加します。
  6. インスタンス アクセスを構成するユーザーのユーザー名を指定します。
  7. [役割を選択] をクリックして、ユーザーに付与する役割を指定します。
  8. Compute Engine の役割リストに含まれる [Compute OS ログインの外部ユーザー] 役割を選択します。
  9. [追加] をクリックして、選択した役割をユーザーに付与します。
  10. まだ行っていない場合は、プロジェクトまたは組織レベルで他の OS ログイン インスタンス アクセスの役割をユーザーに付与します。

これで、指定したユーザーが、プロジェクト内の OS ログインが有効になっているインスタンスに接続できます。

SSH 認証鍵をユーザー アカウントに追加する

公開 SSH 認証鍵を関連付けることができるユーザー アカウント タイプを以下に示します。

gcloud コマンドライン ツールまたは OS Login API を使用して、SSH 認証鍵を自分のアカウントに追加できます。あるいは、組織のドメイン管理者が Directory API を使用して、組織内のユーザー アカウントに SSH 認証鍵を追加できます。

gcloud

gcloud compute os-login コマンドは、Google Cloud SDK バージョン 184 以降でのみ使用できます。

gcloud コマンドライン ツールを使用して公開 SSH 認証鍵をアカウントに関連付けます。

gcloud compute os-login ssh-keys add \
    --key-file [KEY_FILE_PATH] \
    --ttl [EXPIRE_TIME]

ここで

  • [KEY_FILE_PATH] は、ローカル ワークステーションの公開 SSH 認証鍵のパスです。
  • [EXPIRE_TIME] は、公開 SSH 認証鍵の有効期限を設定するオプションのフラグです。たとえば 30m と指定すると、30 分後に SSH 認証鍵が期限切れになります。このフラグの有効な単位は、s(秒)、m(分)、h(時間)、d(日)です。有効期限がないことを指定するには、この値を 0 に設定します。

OS Login API

OS Login API を使用して、アカウントに公開 SSH 認証鍵を関連付けます。

POST https://oslogin.googleapis.com/v1/users/[ACCOUNT_EMAIL]:importSshPublicKey

{
 "key": "[SSH_KEY]",
 "expirationTimeUsec": "[EXPIRATION_TIMESTAMP]"
}

ここで

  • [ACCOUNT_EMAIL] は、マネージド ユーザー アカウントを示すメールアドレスです。
  • [SSH_KEY] は、アカウントに適用する公開鍵です。
  • [EXPIRATION_TIMESTAMP] は、エポックを起点とする鍵の有効期間(マイクロ秒単位)です。

Directory API

組織のドメイン管理者は、Directory API リファレンスを使用して組織内の別のユーザーのアカウントに SSH 認証鍵を追加できます。たとえば、directory.users.update メソッドに対する PUT リクエストを作成し、1 つ以上の SSH sshPublicKeys エントリを指定します。

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
 "sshPublicKeys": [
  {
   "key": "[SSH_KEY]",
   "expirationTimeUsec": "[EXPIRATION_TIMESTAMP]"
  },
  {
   "key": "[SSH_KEY]",
   "expirationTimeUsec": "[EXPIRATION_TIMESTAMP]"
  }
 ]
}

ここで

  • [USER_ID_KEY] は、ユーザーの不変の ID です。
  • [SSH_KEY] は、アカウントに適用する公開鍵です。
  • [EXPIRATION_TIMESTAMP] は、エポックを起点とする鍵の有効期間(マイクロ秒単位)です。

アカウントからすべての鍵を削除するには、本文として "sshPublicKeys": null を指定します。

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
  "sshPublicKeys": null
}

ここで、[USER_ID_KEY] はユーザーの不変の ID です。

アカウントに鍵を追加したら、アカウントに関連付けられているユーザー名とサードパーティ ツールを使用してインスタンスに接続できます。組織の管理者はこのユーザー名を変更できます。自分のアカウントのユーザー名を調べるには、gcloud compute os-login describe-profile コマンドを実行します。

gcloud compute os-login describe-profile

name: [ACCOUNT_EMAIL]
posixAccounts:
⋮
  username: [USER_NAME]
⋮

ここで

  • [ACCOUNT_EMAIL] は、マネージド ユーザー アカウントを示すメールアドレスです。
  • [USER_NAME] は、SSH 接続を確立するためのユーザー名です。デフォルトでは、これは [ACCOUNT_EMAIL] から生成されます。

Directory API を使用してユーザー アカウントに変更を加える

組織の管理者は、ユーザー アカウントのインスタンス ログイン設定を、他の多くのユーザー プロパティと同様に変更できます。特定のユーザーを管理者にする方法については、Directory API ガイドをご覧ください。この API を使用すると、ユーザーの SSH 認証鍵の追加や削除、POSIX アカウント情報の変更、インスタンスへの接続に使用されるユーザー名の変更を行うことができます。

たとえば、directory.users.update メソッドに対する PUT リクエストを作成し、ユーザー アカウントのどのプロパティを変更するかを指定します。

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
 "posixAccounts": [
   {
    "username": "[USER_NAME]",
    "uid": "[UID]",
    "gid": "[GID]",
    "homeDirectory": "[USER_HOME_PATH]",
    "shell": "[SHELL_PATH]"
   }
  ],
}

ここで

  • [USER_ID_KEY] は、ユーザーの不変の ID です。
  • [USER_NAME] は、Compute Engine がそのユーザーのためにインスタンスに追加するユーザー名です。この値は、組織内で一意であることが必要です。
  • [UID] は、インスタンスでのこのユーザーのユーザー ID です。このプロパティには 100165000 または 655352147483647 の範囲の値を指定する必要があります。UID は組織内で一意でなければなりません。
  • [GID] は、このインスタンスでこのユーザーが属するグループ ID です。
  • [USER_HOME_PATH] は、このインスタンスでのこのユーザーのホーム ディレクトリです。たとえば /home/example_username です。
  • [SHELL_PATH] は、このユーザーがインスタンスに接続した後のデフォルトのシェルへのパスです。たとえば、/bin/bash または /bin/sh です。

編集可能なすべてのアカウント プロパティについては、Directory API リファレンスをご覧ください。

予想されるログイン動作

  • OS ログインを使用するときは、接続が確立された後に次のエラー メッセージが返されることがあります。

    /usr/bin/id: cannot find name for group ID 123456789

    このエラー メッセージは無視してください。このエラーはインスタンスには影響しません。

  • G Suite 管理者がユーザー名を設定していない場合、OS ログインがデフォルトの Linux ユーザー名を生成します。このユーザー名は、ユーザーの Google プロフィールに関連付けられたメールアドレスのユーザー名とドメインを組み合わせたものです。この命名規則により一意性が保証されます。たとえば、Google プロフィールに関連付けられているユーザーのメールアドレスが user@example.com である場合、生成されるユーザー名は user_example_com となります。

  • gcloud compute ssh コマンドを使用してインスタンスにログインすると、次のメッセージが表示されます。

    WARNING: Using OS Login user [user_example_com] instead of default user [user]

    このメッセージは、OS ログイン プロフィールでログインしていることを知らせるものです。

次のステップ

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

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

Compute Engine ドキュメント