OS ログインを設定する

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

このトピックでは、OS ログインを設定する際の基本手順を説明します。OS ログインを設定するとき、2 要素認証プロセスを使用することでセキュリティ レイヤを追加できます。詳しくは、OS ログインと 2 要素認証の設定をご覧ください。

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

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

始める前に

制限事項

  • OS ログインが現在は Google Kubernetes Engine(GKE)でサポートされていません。OS ログインが有効になっている場合、GKE クラスタのノードは引き続きメタデータ 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. Google Cloud Console で、[メタデータ] ページに移動します。

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

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

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

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

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

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

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

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

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

console true

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 ログインを有効にします。instance-name は実際のインスタンス名に置き換えます。

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

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

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

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

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

    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 に対するリクエストを許可できるようにします。アプリケーションのデフォルト認証情報を提供するには、次のいずれかのオプションを使用します。

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

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

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

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

インスタンスに接続する

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

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

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

予想されるログイン動作

  • 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 コマンドでインスタンスにログインすると、example.com ドメインに属するユーザー user 用にフォーマットされたログイン メッセージが表示されます。

    Using OS Login user user_example_com instead of default user user

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

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

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

gcloud コマンドライン ツールまたは OS ログイン 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 コマンドを実行します。

    gcloud compute os-login describe-profile
    
    name: account-email
    posixAccounts:
    ⋮
      username: user-name

以下を置き換えます。

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

次のステップ