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

Compute Engine の IAM の役割を使用してインスタンスへの SSH アクセスを管理できます。この新機能を利用すると、どのユーザーがインスタンスに接続できるか、どのレベルの権限をユーザーに与えるかを細かく制御できます。IAM の役割は、プロジェクト、フォルダ、組織のレベルで適用できますが、個々のリソースには適用できません。

別の方法として、インスタンスへのアクセスを手動で管理することもできます。それには、メタデータの中で SSH 認証鍵の追加と削除を行います

役割に基づくインスタンス アクセスを構成するプロセスは次のとおりです。

  1. プロジェクトまたは個々のインスタンスで OS ログイン機能を有効にします
  2. 自分自身、プロジェクトのメンバー、または組織のメンバーに必要な IAM の役割を付与します
  3. 必要に応じて、自分自身、プロジェクトのメンバー、または組織のメンバーのユーザー アカウントにカスタム SSH 認証鍵を追加します。別の方法として、Compute Engine による自動生成も利用できます。その場合は、インスタンスに接続するときに認証鍵が生成されます。

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

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

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

Console

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

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

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

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

インスタンスを作成するときにインスタンス メタデータの中で 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 ログインが無効になります。

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

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

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

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

インスタンスを作成するときにインスタンス メタデータの中で 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 ログインはサポートされていません。

  • すべてのプロジェクト coreos-cloud(CoreOS)イメージ ファミリー
  • プロジェクト suse-cloud(SLES)イメージ ファミリー sles-11
  • すべての Windows Server と SQL Server のイメージ ファミリー

インポートしたカスタム イメージをインスタンスで実行する場合、そのインスタンスで OS ログインを有効にするには、Linux Guest Environment をインストールします

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

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

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

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

  1. ユーザーに必要なインスタンス アクセスの役割を付与します。必要な役割は以下のとおりです。
    • iam.serviceAccountUser 役割。
    • 次のログイン役割のいずれか。
      • compute.osLogin 役割(管理者の権限は付与されない)
      • compute.osAdminLogin 役割(管理者の権限が付与される)
  2. 組織外のメンバーにインスタンスへのアクセスを許可する場合は、組織の管理者が組織レベルでそれらのユーザーに compute.osLoginExternalUser 役割を付与します。

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

別の方法として、SSH 認証鍵を手動で作成してその鍵をユーザー アカウントに追加し、サードパーティ製ツールを使用してインスタンスに接続することもできます。インスタンスはユーザーの秘密鍵をユーザー アカウントから取得します。ユーザーが正しいユーザー名と秘密 SSH 認証鍵を提示すると、インスタンスへの接続が許可されます。

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

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

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

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

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

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

このエラー メッセージは無視してください。

次のステップ

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

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

Compute Engine ドキュメント