Spanner Omni の認証と認可

このドキュメントでは、安全な Spanner Omni デプロイメントが認証と認可によってアクセスを制御する方法について説明します。ユーザーを作成して管理し、権限を定義するロールを割り当てます。ユーザーは次のいずれかの方法で認証できます。

  • パスワード認証: OPAQUE パスワード プロトコルを使用します。 このプロトコルは、後続のリクエストに署名付きアクセス トークンを提供することでセキュリティを強化します。
  • クライアント証明書認証: API サーバー証明書に署名したのと同じ 認証局(CA)によって署名された証明書を使用します。証明書の Common Name はユーザーを識別します。

Spanner Omni の認可では、Spanner と同様に Identity and Access Management(IAM)のロールと権限名を使用します。特定の権限を付与するロールをユーザーに割り当てます。Spanner Omni IAM は Spanner IAM とは異なります。たとえば、カスタムロールはサポートされておらず、特定の Spanner Omni 権限が含まれています。

ユーザー

安全なデプロイメントでは、Spanner Omni API にアクセスするにはユーザーが必要です。Spanner Omni CLI を使用して、ユーザーの作成、更新、削除を行うことができます。各 Spanner Omni デプロイメントでは、デフォルトでパスワード admin を持つ単一の admin ユーザーが作成されます。

ユーザーの作成

新しいユーザーを作成して、さまざまなロールを割り当て、使用状況を監査できるようにします。次のコマンドは、新しいユーザーに roles/spanner.databaseUser ロールを割り当てて、Spanner Omni データベースの読み取りと書き込みができるようにします。

spanner users create USER_NAME --roles=roles/spanner.databaseUser

ユーザーを削除

システムから不要になったユーザーを削除します。

spanner users delete USER_NAME

ユーザーを更新する

ユーザーの状態とロールを更新します。このコマンドは、既存の状態とロールを上書きします。

spanner users update USER_NAME --roles=NEW_ROLES --state=ACTIVE

認証

安全なデプロイメントでは、ユーザーは Spanner Omni デプロイメントにアクセスする前にログインする必要があります。

Spanner Omni には、ユーザーを認証するための 2 つのメカニズムが用意されています。

メカニズム 説明
パスワード ユーザーはユーザー名とパスワードの両方を入力します。
クライアント証明書 クライアントは、API サーバー証明書に署名したのと同じ認証局(CA)によって署名された証明書を使用します。

パスワード

パスワード認証では、ユーザー名とパスワードを入力する必要があります。これは、サーバーで TLS が有効になっている場合にのみ機能します。

spanner auth login USER_NAME

Spanner Omni は、OPAQUE プロトコルの実装を使用して、パスワードをサーバーに送信しないようにします。これにより、システムは中間者攻撃から保護されます。Spanner Omni はサーバーにパスワードを保存しないため、サーバーへの意図しないアクセスによってユーザー認証情報が漏洩することはありません。 認証に成功すると、Spanner Omni は署名付きアクセス トークンを返します。以降のリクエストにはすべてアクセス トークンを添付します。Spanner Omni CLI は、アクセス トークンを ~/.config/spanner/access_token/token.txt に保存します。システムのセキュリティを維持するため、このトークンを他のユーザーと共有しないでください。

デフォルトでは、アクセス トークンの有効期限は 60 分です。60 分経過すると、サーバーはアクセス トークンを受け入れなくなるため、再度ログインする必要があります。Spanner Omni は、改ざんを防ぐためにアクセス トークンに署名します。

環境変数やコマンドライン フラグなど、パスワードが表示される可能性のある場所でパスワードが表示されないように、Spanner Omni CLI コマンドでは次の 2 つの方法でパスワードを受け入れます。

  • 入力内容をマスクするプロンプト。
  • ファイル内の文字列。Spanner Omni は、ファイル権限が 600 であることを確認し、ファイルをランダムなデータで上書きして、読み取り後に削除します。

詳細については、spanner auth --help を実行してください。

クライアント証明書

クライアント証明書認証では、クライアントは API サーバー証明書に署名したのと同じ認証局(CA)によって署名された証明書を使用する必要があります。 証明書の Common Name[Common Name] フィールドに、有効なアクティブ ユーザーのユーザー名を含めます。認可を行う際に、割り当てるロールによって、リクエストされたオペレーションを実行する権限があるかどうかが決まります。クライアント証明書をリクエストに添付するには、--ca-certificate-file フラグと --client-certificate-directory フラグを使用します。データベースの一覧表示の例を次に示します。

spanner databases list --ca-certificate-file PATH_TO_CA_CERT --client-certificate-directory PATH_TO_CLIENT_CERT_DIR

クライアント証明書を使用してログインすることもできます。

spanner auth login USER_NAME --ca-certificate-file PATH_TO_CA_CERT --client-certificate-directory PATH_TO_CLIENT_CERT_DIR

承認

Spanner Omni は、Spanner とほぼ同じ IAM ロールと権限名 を使用します。ユーザーを作成するときに、1 つ以上のロールをユーザーに割り当てることができます。各ロールには 1 つ以上の権限が含まれています。

Spanner Omni で使用可能なロールを一覧表示するには、次のコマンドを使用します。

spanner roles list

Spanner Omni の IAM 権限については、 IAM の概要をご覧ください。