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 インスタンス] ページに移動します。

    [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 ログインは無効になります。

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

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

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

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

プロジェクト内の 1 つ以上のインスタンスで OS ログインが有効化すると、それらのインスタンスはプロジェクトまたは組織内で必要な IAM 役割が割り当てられたユーザー アカウントからの接続だけを受け入れます。

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

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

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

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

サービス アカウントに SSH アクセス権を付与する

OS ログインの役割を使用して、サービス アカウントがインスタンスへの SSH 接続を確立できるようにすることができます。こうすると、次のタスクに役立ちます。

サービス アカウントに SSH アクセス権を付与するには、次のプロセスに従います。

  1. サービス アカウントを作成します
  2. サービス アカウントに必要な OS ログインの役割を付与します。サービス アカウントにはユーザー アカウントと同じ役割が必要です。サービス アカウントの役割と権限を構成する方法については、サービス アカウントへの役割の付与をご覧ください。
  3. サービス アカウントにアプリケーションのデフォルト認証情報を提供し、サービス アカウントで必要な API に対するリクエストを許可できるようにします。アプリケーションのデフォルト認証情報を提供するには、次のいずれかのオプションを使用します。
    • サービス アカウントに関連付けたインスタンスを作成する。このインスタンスからサービス アカウントにアプリケーションのデフォルト認証情報を提供します。
    • アプリケーションに手動でサービス アカウント認証情報を提供する。Compute Engine 環境の外部でアプリケーションを実行している場合は、このオプションを使用します。

サービス アカウントに SSH アクセス権を付与した後は、SSH 認証鍵を作成して VPC ネットワーク上の他のインスタンスに SSH で接続を確立するようにアプリケーションを構成できます。サービス アカウントで SSH 接続を確立するサンプル アプリケーションについては、SSH を使用したアプリケーションのインスタンスへの接続チュートリアルをご覧ください。

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 認証鍵を関連付けることができるユーザー アカウント タイプを以下に示します。

SSH 認証鍵を自分のアカウントに追加するには、gcloud コマンドライン ツールまたは OS Login API を使用します。あるいは、組織のドメイン管理者が 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 認証鍵のパスです。正しい形式の公開 SSH 認証鍵になるようにしてください。Linux システムで PuTTYgen を使用して公開認証鍵を生成する場合は、public-openssh 形式を使用する必要があります。
  • [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] は、アカウントに適用する公開鍵です。正しい形式の公開 SSH 認証鍵になるようにしてください。Linux システムで PuTTYgen を使用して公開認証鍵を生成する場合は、public-openssh 形式を使用する必要があります。
  • [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] は、アカウントに適用する公開鍵です。正しい形式の公開 SSH 認証鍵になるようにしてください。Linux システムで PuTTYgen を使用して公開認証鍵を生成する場合は、public-openssh 形式を使用する必要があります。
  • [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 です。このプロパティには 100160000 または 655352147483647 の範囲の値を指定する必要があります。Container-Optimized OS にアクセスする場合は、UID には 65536214748646 の範囲の値を設定する必要があります。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 というユーザー名が生成されます。

    生成されるこのユーザー名は、G Suite アカウントに関連付けられているドメインに基づきます。ユーザーが別の G Suite 組織に属している場合、生成されるユーザー名には接頭辞「ext_」が追加されます。たとえば、user@example.com が別の組織に属する VM にアクセスする場合、ext_user_example_com というユーザー名が生成されます。

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

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

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

次のステップ

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

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

Compute Engine ドキュメント