組織での OS Login を管理する


このドキュメントでは、OS Login を使用して組織全体の VM インスタンスへのアクセスを管理する方法について説明します。

このトピックでは、次のタスクについて説明します。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

OS Login の組織のポリシー

組織で OS Login の制約を設定して、新しいすべてのプロジェクトとそれらの新しいプロジェクトで作成した VM インスタンスに対して OS Login を有効にすることが可能です。

この制約を設定すると、次の条件が適用されます。

  • enable-oslogin=true は、すべての新しいプロジェクトのプロジェクト メタデータに含まれています。
  • VM とプロジェクトが新規の場合でも既存の場合でも、インスタンスまたはプロジェクトのメタデータで enable-osloginfalse に設定するリクエストは拒否されます。

制限事項

OS Login は、次のプロダクト、機能、VM ではサポートされていません。
  • Cloud Data Fusion バージョン 6.1.4 以前
  • Cloud Composer 1
  • 1.23.5 より前のバージョンを実行する Google Kubernetes Engine(GKE)の一般公開クラスタ
  • 1.20.5 より前のバージョンのノードプールを実行する GKE の限定公開クラスタ
  • Dataproc Serverless
  • Windows Server と SQL Server VM
  • Fedora CoreOS VM。このイメージを使用して作成された VM へのインスタンス アクセスを管理するには、Fedora CoreOS Ignition システムを使用します。

Cloud Data Fusion、Cloud Composer、GKE の回避策

Cloud Data Fusion、Cloud Composer、GKE を使用する組織で OS Login を使用するには、組織レベルで OS Login の制約を有効にしてから、影響を受けるプロジェクトのプロジェクトまたはフォルダの制約を個別に無効にできます。

組織のポリシーの編集の詳細については、ポリシーの作成と編集をご覧ください。

組織のポリシーを有効にする

OS Login のポリシーを有効にするには、Google Cloud CLI を使用して、特定のプロジェクトやフォルダに対して OS Login の制約を設定します。Google Cloud コンソールまたは Google Cloud CLI を使用して、組織全体に OS Login の制約を設定することもできます。

コンソール

Console から OS Login の組織のポリシーを設定する手順は次のとおりです。

  1. Google Cloud Console で、[組織のポリシー] ページに移動します。

    [組織のポリシー] ページに移動

  2. ポリシーリストで、[OS Login が必須] をクリックして、OS Login の制約を表示します。
  3. [編集] をクリックして、既存の OS Login の制約を編集します。
  4. [編集] ページで、[カスタマイズ] を選択します。
  5. この制約の適用を有効にするには、[オン] を選択します。
  6. [保存] をクリックして制約の設定を適用します。

gcloud

OS Login の組織のポリシーを設定するには、gcloud beta resource-manager org-policies enable-enforce コマンドを使用します。

  1. 自分の組織 ID を確認します。

    gcloud organizations list
  2. 組織で制約を設定します。organization-id組織 ID に置き換えます。

    gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \
        --organization=organization-id
    

さらに、--folder フラグまたは --project フラグ、フォルダ ID またはプロジェクト ID をそれぞれ使用すると、フォルダやプロジェクトに対して組織のポリシーを適用できます。

フォルダの場合は、次のコマンドを実行します。

gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \
    --folder=folder-id

プロジェクトの場合は、次のコマンドを実行します。

gcloud beta resource-manager org-policies enable-enforce compute.requireOsLogin \
    --project=project-id

次のように置き換えます。

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

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

IAM ロールの roles/compute.osLoginExternalUser があると、外部 Google アカウントは POSIX アカウント情報を構成できるようになり、他の OS Login のロールと連携できます。

OS Login インスタンスにアクセスするために必要な roles/compute.osLoginExternalUser とその他のロールを組織外のユーザーに付与するには、次の手順を実施します。

  1. Google Cloud コンソールで、プロジェクトと組織の選択ページに移動します。

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

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

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

OS Login API を管理する

組織レベルでは、Google Workspace 管理コントロールを設定することで、OS Login API へのアクセスを制限できます。Google Workspace の管理コントロールを構成したり、構成オプションを表示したりするには、組織で Google Cloud を使用できるユーザーを管理するをご覧ください。Google Workspace 管理者は、OS Login API の特定の機能を有効または無効にできます。次のようなオプションがあります。

  • OS Login API によって生成されるユーザー名にドメイン サフィックスを含めるかどうかを選択できます。ドメイン サフィックスを含める設定がオンにされていない場合、たとえばドメイン example.com 内のユーザー user@example.com には user というユーザー名が生成されます。
  • 組織のメンバーが OS Login API を使用して SSH 認証鍵を管理できるかどうかを指定できます。
  • 組織外のユーザーに対して VM へのアクセスを制限または許可できます。

OS Login API の設定をオンまたはオフにする方法については、Google Cloud Platform の設定を選択するをご覧ください。

OS Login イベントを監査する

Google ワークスペース管理者は、Google Workspace Admin SDK を使用して、OS Login API で実行される操作を監査できます。これらのイベントを確認すると、ユーザーが SSH 認証鍵の追加、削除、更新、POSIX アカウント情報の削除をいつ行ったかを追跡できます。

Google Workspace Admin SDK から OS Login API の監査アクティビティ イベントを取得するには、applicationName=gcp を指定して Activities.list() を呼び出します。詳細については、Google Workspace Admin SDK Reports API ドキュメントの Google Cloud アクティビティ イベントをご覧ください。

Directory API を使用してユーザー アカウントに変更を行う

OS Login では、インスタンスへの接続時に Cloud Identity または Google Workspace のユーザー設定を使用します。組織管理者は、Google Workspace または Cloud Identity のユーザー アカウントに対し、Directory API を使用して次のタスクを行うことができます。

  • インスタンスのログイン設定を変更する。
  • ユーザーを管理者にする
  • アカウント名やメールアドレスなどのユーザー プロパティを変更する
  • ユーザーの SSH 認証鍵の追加と削除を行う
  • POSIX アカウント情報を変更する
  • ユーザーがインスタンスに接続するユーザー名を変更する。

次の例では、Directory API を使用してユーザー アカウントを変更または削除します。編集できるアカウント プロパティの詳細については、Directory API リファレンスをご覧ください。

アカウントのプロパティを変更する

ユーザーの POSIX アカウント情報を変更するか、ユーザーの SSH 認証鍵を管理するには、directory.users.update メソッドPUT リクエストを発行し、変更するユーザー アカウントの 1 つ以上のプロパティを指定します。

ユーザーの posixAccounts プロパティを変更する場合は、リクエストで現在の、または新しい usernameuidgid の値を指定する必要があります。

ユーザーの sshPublicKeys プロパティを変更する場合は、リクエストで key 値を指定する必要があります。

PUT リクエストの例を次に示します。

PUT https://admin.googleapis.com/admin/directory/v1/users/USER_KEY

{
 "posixAccounts": [
  {
    "username": "USERNAME",
    "uid": "UID",
    "gid": "GID",
    "homeDirectory": "USER_HOME_PATH",
    "shell": "SHELL_PATH"
   }
  ],
 "sshPublicKeys": [
  {
    "key": "KEY_VALUE",
    "expirationTimeUsec": EXPIRATION_TIME
   }
  ],
}

次のように置き換えます。

  • USER_KEY: ユーザーのメインのメールアドレス、エイリアス メールアドレス、または一意のユーザー ID。
  • USERNAME: Compute Engine がそのユーザーのために VM に追加するユーザー名。この値は、組織内で一意でなければならず、チルダ(「~」)で終わったり、ピリオド(「.」)を含めてはなりません。
  • UID: この VM における、このユーザーのユーザー ID。このプロパティには 100160000 または 655352147483647 の範囲の値を指定する必要があります。Container-Optimized OS にアクセスする場合は、UID には 65536214748646 の範囲の値を設定する必要があります。UID は組織内で一意でなければなりません。
  • GID: ユーザーが属する VM のグループ ID。
  • USER_HOME_PATH: (省略可)ユーザー用の VM のホーム ディレクトリ。たとえば、/home/example_username です。
  • SHELL_PATH: (省略可)このユーザーがインスタンスに接続した後のデフォルトのシェルのパス。たとえば、/bin/bash/bin/sh です。
  • KEY_VALUE: 公開 SSH 認証鍵の値。
  • EXPIRATION_TIME: エポックを起点とする鍵の有効期間(マイクロ秒単位。1 秒 = 106 マイクロ秒)。

アカウントのプロパティを削除する

ユーザーの posixAccountssshPublicKeys データを消去するには、directory.users.update メソッドPUT リクエストを発行して、posixAccounts フィールドと sshPublicKeys フィールドを null に設定します。

PUT https://admin.googleapis.com/admin/directory/v1/users/USER_KEY

{
 "posixAccounts": null,
 "sshPublicKeys": null
}

USER_KEY は、ユーザーのメインのメールアドレス、エイリアス メールアドレス、または一意のユーザー ID に置き換えます。

OS Login で Linux グループを使用する

組織管理者は、POSIX グループを作成して管理することで、Cloud Identity Groups API を使用して OS Login ユーザー用に追加の Linux グループを構成できます。OS Login は、POSIX グループを組織の VM 内の追加の Linux グループにリンクして、VM に対するユーザーの権限を管理できるようにします。

Linux グループでユーザー メンバーシップを管理する

POSIX グループを作成する方法については、POSIX グループの作成と更新をご覧ください。

ユーザーをグループに追加する方法については、ユーザーをグループに追加または招待するをご覧ください。

メンバーシップの更新は 10 分以内に反映されます。グループの変更は、新しく作成されたすべての VM に反映されます。POSIX グループの更新が実行中のすべての VM に反映されるまでに、最大で 6 時間ほどかかることがあります。場合によっては、ユーザーをログアウトするか、newgrp コマンドを使用してグループの変更を監視する必要があります。

OS Login の Linux グループのレート制限

OS Login の Linux グループは、oslogin.googleapis.com/metadata_server_groups_requests 割り当てを使用します。デフォルトでは割り当て上限は、特定のリージョンのプロジェクトごとに 60 リクエスト/分です。

レート制限を引き上げる必要がある場合は、Google Cloud コンソールの割り当てページから追加の割り当てをリクエストできます。

[割り当て] に移動

Workforce Identity 連携と OS Login を使用する

Workforce Identity 連携を使用している組織は、OS Login を使って VM へのアクセスを管理できます。組織で Workforce Identity 連携が有効になっている場合、OS Login では鍵ベースの認証ではなく証明書ベースの認証を使用して、ユーザー ID を検証します。

始める前に

制限事項

  • Workforce Identity 連携と OS Login を使用するには、接続先の VM に OpenSSH バージョン 7.4 以降が必要です。

  • Workforce Identity 連携を使用している組織のユーザーは、VM のシリアルポートにアクセスできません。

OS Login と Workforce Identity 連携を使用する VM に接続する

Google Cloud コンソール、gcloud CLI、またはその他の SSH クライアントを使用して、OS Login と Workforce Identity 連携を使用する VM に接続します。

コンソール

OS Login と Workforce Identity 連携を使用する VM にブラウザでの SSH で接続する場合、接続の試行時に Compute Engine によって SSH 証明書が構成されます。

VM に接続するには、次の操作を行います。

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.

    SSH button next to instance name.

gcloud

OS Login と Workforce Identity 連携を使用する VM に gcloud CLI で接続する場合、接続の試行時に Compute Engine によって SSH 証明書が構成されます。

gcloud beta compute ssh コマンドを実行して、SSH を使用して VM に接続します。

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 次のコマンドを実行します。

    gcloud beta compute ssh --project=PROJECT_ID --zone=ZONE VM_NAME

    次のように置き換えます。

    • PROJECT_ID: VM が含まれているプロジェクトの ID
    • ZONE: VM が配置されているゾーンの名前
    • VM_NAME: VM の名前

    Google Cloud CLI のデフォルト プロパティを設定している場合、このコマンドの --project フラグと --zone フラグは省略できます。次に例を示します。

    gcloud compute ssh VM_NAME

IAP Desktop

OS Login と Workforce Identity 連携を使用する VM に IAP Desktop で接続する場合、接続の試行時に Compute Engine によって SSH 証明書が構成されます。

IAP Desktop を使用して VM に接続するには、次の操作を行います。

  1. まだインストールしていない場合は、ワークステーションに IAP Desktop をインストールします。

  2. IAP Desktop を開きます。[Add projects] ウィンドウが開きます。

  3. メッセージが表示されたら、Workforce Identity 連携でログインします。

  4. [Add projects] ウィンドウで、接続する VM が含まれているプロジェクトのプロジェクト ID または名前を入力します。

  5. [Project Explorer] ウィンドウで、VM の名前を再度右クリックし、[Connect] を選択して VM に接続します。

SSH クライアント

OS Login と Workforce Identity 連携を使用する VM に SSH クライアントで接続するには、次の操作を行います。

  1. SSH 認証鍵を作成します(まだ作成していない場合)。
  2. users.projects.locations.signSshPublicKey メソッドを使用して公開 SSH 認証鍵に署名します。

    POST https://oslogin.googleapis.com/v1beta/users/USER/projects/PROJECT_ID/locations/LOCATION:signSshPublicKey
    
    {
     "ssh_public_key": "PUBLIC_KEY"
    }
    

    次のように置き換えます。

    • USER: Workforce プール内の単一の ID。次の形式で指定します。

      principal:%2F%2Fiam.googleapis.com%2Flocations%2Fglobal%2FworkforcePools%2POOL_ID%2Fsubject%2FSUBJECT_ATTRIBUTE_VALUE
      

      次のように置き換えます。

    • PROJECT_ID: 接続する VM を含むプロジェクトのプロジェクト ID。

    • LOCATION: 接続する VM が配置されているゾーン。

    • PUBLIC_KEY: SSH 公開鍵ファイルの内容。

  3. user.signSshPublicKey メソッドの出力から SSH 証明書をコピーし、その内容を新しいファイルに保存します。

  4. 次のコマンドを実行して、SSH 証明書ファイルに権限を設定します。

    sudo chmod 600 FILE_NAME
    

    FILE_NAME は、ファイル名に置き換えます。

  5. 次のコマンドを使用して VM に接続します。

    ssh -i PATH_TO_PRIVATE_KEY -o CertificateFile=PATH_TO_SSH_CERTIFICATE USERNAME@EXTERNAL_IP
    

    次のように置き換えます。

    • PATH_TO_PRIVATE_KEY: 秘密 SSH 認証鍵ファイルのパス。
    • PATH_TO_SSH_CERTIFICATE: SSH 証明書ファイルのパス。
    • USERNAME: ユーザーの google.posix_username 属性マッピングの値。
    • EXTERNAL_IP: VM の外部 IP アドレス。

次のステップ