OS Login を設定する

このトピックでは、OS Login を設定する際の基本手順を説明します。

OS Login では、Compute Engine IAM のロールを使用して、Linux インスタンスへの SSH アクセスを許可または取り消しできます。OS Login を使用すると、メタデータで SSH 認証鍵を追加および削除してインスタンスへのアクセスを管理する必要がなくなります。この機能を使用するメリットについては、OS Login をご覧ください。

2 段階認証プロセスを使用してセキュリティ レイヤで OS Login を有効にする場合は、2 段階認証プロセスを使用した OS Login の設定をご覧ください。VM へのアクセス管理のためのすべてのオプションを確認するには、アクセス方法の選択をご覧ください。

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

  1. ゲスト環境をインストールまたは更新する。
  2. (省略可)組織管理者の方は、組織での OS Login の管理をご覧ください。
  3. プロジェクトまたは個々のインスタンスで OS Login 機能を有効にします
  4. 自分自身、プロジェクトのメンバー、または組織のメンバーに必要な IAM のロールを付与する
  5. (省略可)自分自身、プロジェクトメンバー、または組織メンバーのユーザーアカウントにカスタム SSH 認証鍵を追加する。別の方法として、Compute Engine による SSH 認証鍵の自動生成も利用できます。その場合は、インスタンスに接続するときに SSH 認証鍵が生成されます。
  6. インスタンスに接続する

始める前に

制限事項

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

  • 現在、Fedora CoreOS イメージで OS Login はサポートされていません。このイメージを使用して作成された VM へのインスタンス アクセスを管理するには、Fedora CoreOS Ignition システムを使用します。

  • Windows Server および SQL Server のイメージは、OS Login をサポートしていません。

ステップ 1: ゲスト環境をインストールまたは更新する

インスタンスに最新バージョンのゲスト環境をインストールしておく必要があります。ほとんどの公開イメージには最新バージョンがインストールされています。

インポートしたカスタム イメージを実行するインスタンスがある場合は、その VM にゲスト環境をインストールします。

最新のゲスト環境がない場合は、ゲスト環境を更新します。

ステップ 2: (省略可)組織における OS Login の管理を確認する

組織管理者は、OS Login を組織レベルで有効にするなどの構成を行うことができます。組織での OS Login の管理をご覧ください。

ステップ 3: OS Login を有効化または無効化する

インスタンス レベルまたはプロジェクト レベルでメタデータ値を設定することで、OS Login を有効化または無効化できます。このメタデータ値を設定するには、Google Cloud Console または gcloud コマンドライン ツールを使用します。

Console

次のいずれかの方法で、プロジェクトまたは VM にメタデータ値を適用できます。

  • オプション 1: プロジェクト全体のメタデータに enable-oslogin を設定して、プロジェクト内のすべてのインスタンスに適用する。

    1. Google Cloud Console で、[メタデータ] ページに移動します。

      [メタデータ] ページに移動

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

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

  • オプション 2: 既存のインスタンスのメタデータに enable-oslogin を設定する。

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

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

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

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

  • オプション 3: インスタンスの作成時にインスタンス メタデータで enable-oslogin を設定する。

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

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

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

gcloud

次のいずれかの方法で、プロジェクトまたは VM にメタデータ値を適用できます。

  • オプション 1: プロジェクト全体のメタデータに enable-oslogin を設定して、プロジェクト内のすべてのインスタンスに適用する。

    gcloud コマンドライン ツールで project-info add-metadata コマンドを使用して、oslogin=TRUE を設定して OS Login を有効にするには:

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

    あるいは、enable-osloginFALSE に設定して OS Login を無効にすることもできます。

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

  • オプション 2: 既存のインスタンスのメタデータに enable-oslogin を設定する。

    gcloud コマンドライン ツールで instances add-metadata コマンドを使用して、oslogin=TRUE を設定して OS Login を有効にします。ここで、instance-name は実際のインスタンスの名前に置き換えます。

    gcloud compute instances add-metadata instance-name \
        --metadata enable-oslogin=TRUE
    

    あるいは、enable-osloginFALSE に設定してインスタンスが OS Login を使用できないようにすることもできます。

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

  • オプション 3: インスタンスの作成時にインスタンス メタデータで enable-oslogin を設定する。

    gcloud コマンドライン ツールで instances create コマンドを使用して、oslogin=TRUE を設定して OS Login を有効にします。ここで、instance-name は実際のインスタンスの名前に置き換えます。

    gcloud compute instances create instance-name \
        --metadata enable-oslogin=TRUE
    

    あるいは、enable-osloginFALSE に設定してインスタンスが OS Login を使用できないようにすることもできます。

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

ステップ 4: ユーザー アカウントに OS Login のロールを構成する

OS Login の IAM ロールを付与する

プロジェクトの 1 つ以上のインスタンスで OS Login を有効にすると、その VM は、プロジェクトまたは組織で必要な IAM ロールを持つユーザー アカウントからの接続のみを許可します。

この VM への OS Login アクセスを許可するには、ユーザーに必要なロールを付与する必要があります。OS Login アクセスを許可する手順は次のとおりです。

  1. 次のいずれかのインスタンス アクセスロールを付与します。

    gcloud compute instances add-iam-policy-binding コマンドを使用すると、こういったインスタンス アクセスロールをインスタンス レベルで付与できます。

  2. VM インスタンスがサービス アカウントを使用する場合は、各ユーザーにそのサービス アカウントに対する roles/iam.serviceAccountUser ロールを構成する必要があります。ユーザーにサービス アカウントへのアクセス権を追加する方法については、サービス アカウントの偽装の管理をご覧ください。

  3. 組織外のユーザーに VM にアクセスさせる場合は、インスタンス アクセスロールを付与する以外に、roles/compute.osLoginExternalUser ロールも付与します。このロールは、組織管理者により組織レベルで付与する必要があります。詳細については、組織外のユーザーにインスタンスへのアクセスを許可するをご覧ください。

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

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

SSH アクセス権をサービス アカウントに付与するには、次のプロセスを使用します:

  1. サービス アカウントを作成します
  2. サービス アカウントに必要な OS Login のロールを付与します。サービス アカウントにはユーザー アカウントと同じロールが必要です。サービス アカウントのロールと権限を構成する方法については、サービス アカウントへのロールの付与をご覧ください。
  3. サービス アカウントにアプリケーションのデフォルト認証情報を提供し、サービス アカウントで必要な API に対するリクエストを許可できるようにします。アプリケーションのデフォルト認証情報を提供するには、次のいずれかのオプションを使用します。

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

OS Login の IAM ロールを取り消す

OS Login の使用が有効になっているインスタンスへのユーザー アクセスを取り消すには、ユーザー アカウントからユーザーのロールを削除します。ユーザーの IAM のロールの削除に関する詳細は、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

ユーザーのアクセス権が取り消されると、そのユーザーは公開 SSH 認証鍵がまだアカウントに関連付けられていますが、これらの鍵が VM インスタンスでは機能しなくなります。

ステップ 5: (省略可)ユーザーアカウントに SSH 認証鍵を追加する

サードパーティのツールを使用して VM に接続する場合は、ユーザー アカウントに SSH 認証鍵を追加する必要があります。ブラウザから gcloud コマンドラインツールや SSH などの他のオプションを使用してインスタンスに接続する場合は、Compute Engine によって SSH 認証鍵が自動的に生成されるため、このステップを無視してください。

公開 SSH 認証鍵は、以下のユーザー アカウント タイプに関連付けできます。

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

gcloud

gcloud compute os-login コマンドは、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 を指定すると、SSH 認証鍵は 30 分後に期限切れになります。このフラグには、以下の単位が使用されます。
    • 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 を本文として指定し、user-id-key をユーザーの不変の ID に置き換えます。

PUT https://www.googleapis.com/admin/directory/v1/users/user-id-key

{
  "sshPublicKeys": null
}

アカウントに鍵を追加したら、アカウントに関連付けられているユーザー名とサードパーティ ツールを使用してインスタンスに接続できます。組織の管理者はこのユーザー名を変更できます。

自分のアカウントの現在のユーザー名を調べるには、gcloud compute os-login describe-profile コマンドを実行します。

たとえば、出力は次のようになります。

name: '314159265358979323846'
posixAccounts:
- gid: '27182818'
  homeDirectory: /home/user_example_com
  ⋮
  uid: '27182818'
  username: user_example_com
⋮

ステップ 6: インスタンスに接続する

VM に接続する場合は、主に次の 3 つの方法で接続できます。

ブラウザから gcloud コマンドライン ツールまたは SSH を使用して VM に接続すると、Compute Engine によって SSH 認証鍵が自動的に生成され、ユーザー アカウントに関連付けられます。

サードパーティ ツールを使用してインスタンスに接続する場合は、ユーザー アカウントに公開鍵を追加する必要があります。正しいユーザー名とこれに対応する秘密 SSH 認証鍵を指定すると、VM がユーザー アカウントから公開鍵を取得し、インスタンスに接続できます。

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

予想されるログイン動作を確認する

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

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

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

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

    G Suite の組織では、必要に応じてデフォルト値を変更して、新しく生成されたユーザー名のドメイン サフィックスを削除できます。たとえば、Google プロフィールに関連付けられたユーザーメールが user@example.com の場合、生成されるユーザー名は user です。詳細は、OS Login API を管理するをご覧ください。

    ユーザーが別の G Suite 組織に属している場合、生成されるユーザー名には接頭辞「ext_」が追加されます。たとえば、user@example.com が別の組織の VM にアクセスしている場合、生成されるユーザー名は ext_user_example_com です。

  • gcloud compute ssh コマンドでインスタンスにログインすると、example.com ドメインに属するユーザー user 用にフォーマットされたログイン メッセージが表示されます。

    Using OS Login user user_example_com instead of default user user

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

次のステップ