2 段階認証プロセスを使用した OS Login の設定

このトピックでは、2 段階認証プロセスを使用した OS Login を設定する基本的な手順について説明します。

OS Login で仮想マシン(VM)へのアクセスを管理している場合、2 段階認証(2 要素認証、2FA 認証とも呼ばれます)を使用してセキュリティをさらに強化できます。OS Login を使用するその他のメリットについては、OS Login をご覧ください。

VM で OS Login 2FA を使用するには、次の手順を行います。

  1. ゲスト環境をインストールまたは更新する。
  2. (省略可)組織管理者の方は、組織での OS Login の管理をご覧ください。
  3. Google アカウントまたはドメインで 2 段階認証プロセスを有効にする

  4. プロジェクトまたは VM で 2FA を有効にする

  5. 自分自身、プロジェクトのメンバー、または組織のメンバーに必要な IAM のロールを付与する

  6. (省略可)自分自身、プロジェクト メンバー、または組織メンバーのユーザー アカウントにカスタム SSH 認証鍵を追加する。別の方法として、Compute Engine による SSH 認証鍵の自動生成も利用できます。その場合は、VM に接続するときに SSH 認証鍵が生成されます。

  7. VM に接続する

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

VM へのアクセスをさらに制限するには、ハードウェアでサポートされる SSH 認証鍵ペアを設定します。詳しくは、セキュリティ キーを使用した SSH をご覧ください。

OS Login 2FA を設定した後、監査ログを使用して認証セッションをモニタリングできます。

始める前に

制限事項

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

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

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

サポートされている方式または本人確認方法

OS Login は、次の 2 段階認証または本人確認の方法をサポートしています。

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

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

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

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

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

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

ステップ 3: Google アカウントまたはドメインに 2 段階認証プロセスを有効にする

プロジェクトまたは VM で OS Login 2FA を有効にする前に、Google アカウントまたはドメインで 2 段階認証プロセスを有効にする必要があります。プロジェクトまたは VM を含むドメイン、またはプロジェクトまたは VM を所有するユーザーに対して 2 段階認証プロセスを有効にします。

セキュリティの観点から、組織内のユーザー アカウントに対して 2 段階認証プロセスを必須にすることをおすすめします。OS Login 2FA を有効にしても、2 要素認証を構成していないユーザーへのログイン アクセスはブロックされません。

Google Workspace の管理者がドメインに対して、あるいは個々の Google ユーザーがユーザー アカウント レベルで 2 段階認証を有効にできます。

ドメイン

ドメインの 2 段階認証プロセスは、Google Workspace 管理者が有効にする必要があります。

ドメインで 2 段階認証を有効にするには、Google Workspace 管理者ガイドの 2 段階認証プロセスでビジネスを保護するをご覧ください。

ユーザー アカウント

ユーザー アカウントが Google Workspace の管理者によって管理されていない場合は、個々の Google アカウントに対して 2 段階認証プロセスを構成できます。

個々の Google アカウントに対して 2 段階認証を構成するには、Google の 2 段階認証プロセスをご覧ください。

ステップ 4: プロジェクトまたは VM で OS Login 2FA を有効にする

ドメインまたはユーザー アカウント レベルで 2 段階認証を有効にすると、個々の VM またはプロジェクトで OS Login 2FA を使用できるようになります。

OS Login 2FA を使用するには、VM またはプロジェクトで OS Login が有効になっている必要があります。

VM 作成時またはプロジェクト設定時に、OS Login と OS Login の 2FA の両方を構成できます。OS Login がすでに有効になっている既存の VM またはプロジェクトにも OS Login の 2FA を構成できます。

OS Login で 2 要素認証を使用するようにプロジェクトまたは VM を構成するには、プロジェクトまたはインスタンスのメタデータで enable-oslogin-2fa=TRUEenable-oslogin=TRUE を設定します。

Console

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

  • オプション 1: VM の作成時にインスタンス メタデータで enable-oslogin-2fa=TRUEenable-oslogin=TRUE を設定する。

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

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

    2. [インスタンスを作成] をクリックします。
    3. [新しいインスタンスの作成] ページで、インスタンスに必要なプロパティを入力します。
    4. [メタデータ] セクションで、次のメタデータ エントリを追加します。

      • enable-oslogin。値は TRUE
      • enable-oslogin-2fa。値は TRUE
    5. [作成] をクリックして VM を作成します。

  • オプション 2: プロジェクト全体のメタデータに enable-oslogin-2faenable-oslogin=TRUE を設定し、設定がプロジェクト内のすべての VM に適用されるようにする。

    1. [メタデータ] ページに移動します。

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

    2. [編集] をクリックします。
    3. [メタデータ] セクションで、次のメタデータ エントリを追加します。

      • enable-oslogin。値は TRUE
      • enable-oslogin-2fa。値は TRUE
    4. [保存] をクリックして変更を適用します。

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

  • オプション 3: 既存の VM のメタデータに enable-oslogin-2faenable-oslogin=TRUE を設定する。

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

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

    2. メタデータ値を設定する VM の名前をクリックします。
    3. インスタンスの詳細ページの上部にある [編集] をクリックしてインスタンス設定の編集画面を開きます。
    4. [カスタム メタデータ] の下に、次のメタデータ エントリを追加します。

      • enable-oslogin。値は TRUE
      • enable-oslogin-2fa。値は TRUE
    5. インスタンスの詳細ページの一番下にある [保存] をクリックして、変更内容をインスタンスに適用します。

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

gcloud

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

  • オプション 1: VM の作成時にインスタンス メタデータで enable-oslogin-2fa=TRUEenable-oslogin=TRUE を設定する。

    vm-name は実際の VM 名に置き換えます。

    gcloud compute instances create vm-name \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    
  • オプション 2: プロジェクト全体のメタデータに enable-oslogin-2fa=TRUEenable-oslogin=TRUE を設定して、プロジェクト内のすべての VM に適用する。

    gcloud compute project-info add-metadata \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    
  • オプション 3: 既存の VM のメタデータに enable-oslogin-2fa=TRUEenable-oslogin=TRUE を設定する。

    vm-name は実際の VM 名に置き換えます。

    gcloud compute instances add-metadata \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True vm-name
    

ステップ 5: ユーザー アカウントに 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 インスタンスでは機能しなくなります。

ステップ 6: (省略可)ユーザー アカウントに 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
⋮

ステップ 7: VM に接続する

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

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

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

VM に接続すると、選択した 2 段階認証方式または本人確認方法に基づいてメッセージが表示されます。

  • Google 認証システムの場合は、次のメッセージが表示されます。

    "Enter your one-time password:"

  • テキスト メッセージまたは音声通話による確認の場合は、次のメッセージが表示されます。

    "A security code has been sent to your phone. Enter code to continue:"

  • スマートフォン プロンプトの場合は、次のメッセージが表示されます。

    A login prompt has been sent to your enrolled device:"

    スマートフォン プロンプトの場合は、スマートフォンまたはタブレットに表示されたプロンプトに同意して続行します。 他の方法の場合は、セキュリティ コードまたはワンタイム パスワードを入力します。

ステップ 8: 予想されるログイン動作

  • 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 プロフィールでログインしていることを知らせるものです。

OS Login の 2FA 監査ログの表示

Compute Engine は、2 要素認証のリクエストを追跡するための監査ログを提供します。 2 要素認証には 2 つのリクエスト タイプがあります。

  • StartSession。新しい認証セッションを開始します。StartSession 呼び出しでは、クライアントはその機能をサーバーに宣言し、最初の本人確認に関する情報を取得します。StartSession 呼び出しは以下を返します。

    • セッション ID。このセッション ID は、後続のすべての ContinueSession 呼び出しに渡されます。
    • この新しい認証セッションで使用された本人確認方法または 2FA 方式に関する情報。
  • ContinueSession。既存の認証セッションを続行します。ContinueSession API は、与えられたセッション ID を使用して、次の 2 つのアクションのいずれかを実行できます。

    • 本人確認または方式に対するレスポンスを受け入れてから、認証または拒否する。あるいは、ユーザーからの追加の本人確認をリクエストする。
    • 前回の API 呼び出しでサーバーから最初に提案されたものとは異なる本人確認方法に切り替える。クライアントが別の本人確認方法を選択した場合(スマートフォン プロンプトの代わりに Google 認証システムを使用するなど)、クライアントはサーバーへの呼び出しで別の本人確認方法をリクエストする際にその方法の request.challengeId を使用できます。

ログを表示するには、ログビューアの権限を持っているか、プロジェクトの閲覧者または編集者である必要があります。

  1. Cloud Console の [ログ] ページに移動します。

    [ログ] ページに移動

  2. プルダウン メニューを展開して、Audited Resource を選択します。
  3. 検索バーに「oslogin.googleapis.com」と入力して、Enter を押します。
  4. 2 要素認証リクエストを示す監査ログのリストが表示されます。任意のエントリを展開して詳細情報を表示します。

    2 要素認証の監査ログ。

監査ログでは、次の操作ができます。

  1. protoPayload プロパティを展開します。

    2 要素認証の監査ログ指標。

  2. methodName を探し、このログが適用されるアクティビティ(StartSession リクエストまたは ContinueSession リクエスト)を確認します。たとえば、このログで StartSession リクエストを追跡する場合、メソッド名は "google.cloud.oslogin.OsLoginService.v1.StartSession" になります。同様に、ContinueSession ログは "google.cloud.oslogin.OsLoginService.v1.ContinueSession" になります。監査ログエントリは、セッションの開始リクエストと続行リクエストのすべてについて記録されます。

ログタイプに応じてさまざまな監査ログプロパティがあります。たとえば、StartSession に関連する監査ログにはセッションの開始に固有のプロパティがあり、ContinueSession の監査ログには独自のプロパティ セットがあります。また、監査ログの一部のプロパティは、この 2 つのログタイプ間で共有されます。

すべての 2 要素認証監査ログ

プロパティ
serviceName oslogin.googleapis.com
resourceName プロジェクト番号を含む文字列。このプロジェクト番号は、監査ログがどのログイン リクエストに属しているかを示します。 例: projects/myproject12345
severity ログメッセージの重大度。例: INFO または WARNING
request.email API 呼び出しが認証しているユーザーのメールアドレス。
request.numericProjectId Google Cloud プロジェクトのプロジェクト番号。
response.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartOrContinueSessionResponse
response.sessionId セッションを一意に識別する ID 文字列。このセッション ID は、シーケンス内の次の API 呼び出しに渡されます。
response.authenticationStatus セッションのステータス。例: AuthenticatedChallenge required、または Challenge pending
response.challenges この回の認証で試みることができる本人確認方法のセット。これらの本人確認方法のうち最大 1 つが開始され、ステータスが READY になります。他の方法は、提案された最初の本人確認方法の代わりにユーザーが指定できるオプションとして提示されます。

StartSession 監査ログ

プロパティ
methodName google.cloud.oslogin.OsLoginService.v1.StartSession
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartSessionRequest
request.supportedChallengeTypes 選択可能な本人確認方法または 2FA 方式のリスト。

ContinueSession 監査ログ

プロパティ
methodName google.cloud.oslogin.OsLoginService.v1.ContinueSession
request.sessionId 前のセッションを一意に識別する ID 文字列。このセッション ID は、シーケンス内の前の API 呼び出しから渡されます。
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.ContinueSessionRequest
request.challengeId 開始または実行する本人確認方法を識別する ID 文字列。この ID は、前の API レスポンスで response.challenges 呼び出しから返された本人確認方法に属している必要があります。
request.action 実行する操作。

次のステップ