OS ログインと 2 要素認証の設定

OS ログインを使用してインスタンスへのアクセスを管理する場合は、2 要素認証(2FA とも呼ばれます)を使用してセキュリティをさらに強化できます。

インスタンスで OS ログインと 2FA 認証を使用するには、以下の手順に従います。

  1. Google アカウントまたはドメインで 2FA を有効にする
  2. プロジェクトまたはインスタンスで 2FA を有効にする
  3. 自分自身、プロジェクトのメンバー、または組織のメンバーに必要な IAM の役割を付与する
  4. [任意] プロジェクトが組織の一部である場合は、組織での OS ログインの管理を確認する。
  5. インスタンスに接続する
  6. 予想されるログイン動作を確認する。

OS ログインと 2FA 認証を設定した後は、監査ログを使用して認証セッションを監視できます。

始める前に

制限事項

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

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

サポートされているオペレーティング システム

OS ログインの 2 要素認証では、以下の日付より後に作成されたオペレーティング システム イメージが必要です。

オペレーティング システム 日付
CentOS 6、7 2019 年 3 月 26 日
Debian 9 2019 年 3 月 26 日
RHEL 6 または 7 2019 年 3 月 26 日
SUSE 12 または 15 2019 年 6 月 17 日
Ubuntu 16.04 LTS、18.04 LTS、18.10、19.04 2019 年 6 月 28 日

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

OS ログインは、次の 2FA 方式または本人確認方法をサポートしています。

Google アカウントまたはドメインで 2FA を有効にする

プロジェクトまたはインスタンスに対して 2 要素認証を有効にする前に、Google アカウントまたはドメインで 2FA を有効にする必要があります。プロジェクトまたはインスタンスを含むドメイン、あるいはプロジェクトまたはインスタンスを所有するユーザーに対して 2FA を必ず有効にしてください。

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

ドメイン

ドメインに対する 2 要素認証は、G Suite 管理者が有効にする必要があります。

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

ユーザー アカウント

ユーザー アカウントが G Suite 管理者によって管理されていない場合は、個々の Google アカウントに対して 2FA を構成できます。

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

プロジェクトまたはインスタンスで 2FA を有効にする

ドメインまたはユーザー アカウント レベルで 2 要素認証を有効にした後は、個々のインスタンスまたはプロジェクトで OS ログインの 2FA の使用を有効にできます。

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

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

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

Console

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

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

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

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

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

プロジェクト全体のメタデータで enable-oslogin-2fa を設定し、プロジェクト内のすべてのインスタンスに適用するには:

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

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

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

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

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

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

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

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

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

gcloud

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

gcloud compute instances create [INSTANCE_NAME] \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True

プロジェクト全体のメタデータで enable-oslogin-2fa を設定し、プロジェクト内のすべてのインスタンスに適用するには:

gcloud compute project-info add-metadata \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True

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

gcloud compute instances add-metadata \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True [INSTANCE_NAME]

[INSTANCE_NAME] はインスタンスの名前です。

ユーザー アカウントに対して 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 認証鍵を使えばインスタンスに接続できます。

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

  • 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:"

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

予想されるログイン動作

  • 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 コマンドを使用してインスタンスにログインすると、次のメッセージが表示されます。

    Using OS Login user [user_example_com] instead of default user [user]

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

OS ログインの 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 実行する操作。

次のステップ