この記事では、Google アカウントの代わりに外部 ID を Identity-Aware Proxy(IAP)で使用する方法について説明します。
概要
IAP は、アプリケーションとリソースへのアクセスを制御します。ユーザー ID とリクエストのコンテキストを利用して、ユーザーにアクセスを許可するかどうかを判断します。IAP は BeyondCorp の構成要素です。BeyondCorp は、信頼されないネットワークから VPN を使わずに従業員が作業できるようにするためのエンタープライズ向けセキュリティ モデルです。
IAP は、デフォルトで Google ID と IAM を使用します。Identity Platform を使用すると、次のように、さまざまな外部 ID プロバイダを使用してユーザーの認証を行うことができます。
- メール / パスワード
- OAuth(Google、Facebook、Twitter、GitHub、Microsoft など)
- SAML
- OIDC
- 電話番号
- カスタム
- 匿名
これは、アプリケーションですでに外部の認証システムが使用されているため、Google アカウントに移行するのが現実的でない場合に便利です。
マルチテナンシー
Identity Platform のマルチテナントは元々 B2B、つまり、企業間の取引向けに作成されました。この場合、ユーザー グループを独立したプールに分割するのが一般的です。こうしたサイロはテナントといいます。
次の関係図を見てください。図中の会社名などはすべて架空のものです。
この例にある Acme は自動車メーカー(エージェント)で、Identity Platform を使用してするディーラー(テナント)にサービスを提供しています。顧客、従業員、請負業者へはディーラーがサービスを提供しています。メーカーはサービスを所有していますが、ディーラーは認証用に独自の ID プロバイダを使用できます。ユーザー セッションとデータの有効範囲はテナント単位のため、ユーザーが複数のディーラーと関係がある場合は、それぞれが独立して処理されます。
ユースケースに応じて、テナントの階層を構造化します。その方法はいくつかあります。
テナントなし
リソースの分離が必要なのはマルチテナンシーのみです。すべてのアプリケーションで必要になるわけではありません。たとえば、App Engine アプリが 1 つだけで、ネットワーク外からのユーザー アクセスをすべてブロックする場合、マルチテナントは必要ありません。デフォルトでは、Identity Platform はプロジェクトごとにユーザーを格納し、認証を行います。この場合、追加の構成は必要ありません。
また、複数の子会社を持つ大企業で、子会社ごとに独自の管理認証システム(OIDC や SAML)を使用していても、従業員全員がヘルスケア、休暇、給与など、同じレベルのサービスを受けていることがあります。この場合もプロジェクト レベルでの認証で十分です。
リソースごとに 1 つのテナント
デフォルトでは、テナント以外の Identity Platform トークンはプロジェクト レベルで有効になります。この場合、1 つの IAP リソースで認証されたユーザーは、トークンを使用して同じプロジェクト内の別のサービスにアクセスできます。これはセキュリティ上のリスクとなります。
トークンの漏えいを防ぐには、各 IAP をそれぞれのテナントに割り当てて分離します。テナント固有のコンテキストで作成されたトークンは、そのテナントに対してのみ有効です。ユーザーがほかのテナントを使用する別の IAP リソースにアクセスしようとすると、再度認証を求められます。
リソースごとに複数のテナント
1 つの IAP リソースに複数のテナントを関連付けることができます。
ユーザーがリソースにアクセスするときに、使用するテナントを決める方法がいくつかあります。たとえば、プロンプトを表示してユーザーにメールアドレスの入力を求め、そのメールアドレスのドメインに一致するテナントをプログラムで選択することもできます。また、有効なすべてのテナントを UI に表示し、ユーザーに選択させることもできます。
1 つの環境にアクセスレベルの異なる複数のテナントが存在し、複数のユーザーが利用していることもあります。IAM を使用して外部 ID によるアクセス制御を管理することはできませんが、IAP によって生成された JSON Web Token が Identity Platform ID トークンの要求を伝え、アプリケーションがそれらの要求に基づいてアクセスをフィルタリングできます。
マルチテナンシーの例としては、福利厚生サービス企業のウェブポータルがあります。この環境では、1 つのポータルを複数の顧客で共有しています。ポータルにアクセスするときに、ユーザーはまず自分の会社(テナント)を選択します。次に、会社の認証情報を使用して、会社が利用しているプロバイダで認証を行います。