サービス アカウントの権限借用

認証されたプリンシパル(ユーザーやサービス アカウントなど)がサービス アカウントとして認証され、サービス アカウントの権限が取得される場合、これはサービス アカウントの権限借用と呼ばれます。サービス アカウントの権限を借用すると、認証されたプリンシパルは、そのサービス アカウントが許可されているすべてのものにアクセスできます。サービス アカウントの権限を借用できるのは、適切な権限を持つ認証済みのプリンシパルのみです。

権限借用は、Identity and Access Management(IAM)ポリシーを変更せずにユーザーの権限を変更する場合に便利です。たとえば、権限借用を使用して、一時的に昇格されたアクセス権をユーザーに付与したり、特定の権限セットがタスクに十分かどうかをテストできます。また、権限借用を使用して、サービス アカウントとしてのみ実行できるアプリケーションをローカルで開発したり、Google Cloud の外部で実行されるアプリケーションを認証することもできます。

Google Cloud サービス アカウントの権限借用は、AssumeRole などのアマゾン ウェブ サービス(AWS)Security Token Service API メソッドに似ています。

サービス アカウントの権限借用の仕組み

サービス アカウントの権限借用には、常に 2 つの ID(認証済みプリンシパルと、プリンシパルが権限を借用するサービス アカウント)が存在します。サービス アカウントの権限を借用するために、認証されたプリンシパルはサービス アカウントのトークンを取得し、そのトークンを使用してサービス アカウントとして認証を受けます。

サービス アカウントの権限を借用する方法はいくつかあります。

  • Google Cloud CLI コマンドを実行するときに、--impersonate-service-account フラグまたは impersonate-service-account プロパティを設定します。この設定で gcloud CLI コマンドを実行すると、サービス アカウントに有効期間の短い認証情報が作成され、これらの認証情報を使用してコマンドが実行されます。

    また、アプリケーションのデフォルト認証情報ファイルを設定するときに、--impersonate-service-account フラグを使用します。この設定により、権限借用をサポートするクライアント ライブラリがサービス アカウントの権限を自動的に借用できるようになります。

  • Service Account Credentials API を使用して有効期間の短い認証情報を作成し、その認証情報を使用して API リクエストを認証します。

    有効期間の短い認証情報は存続期間が限定されています(数時間程度)。また、自動的に更新されることはありません。サービス アカウント キーのように長期間有効な認証情報よりもリスクが低くなります。

  • 認証情報の構成ファイルを使用して、サービス アカウントの権限を借用するように外部アプリケーションを構成します。このオプションは、Workload Identity 連携を使用するアプリケーションでのみ使用できます。

    アプリケーションが認証情報の構成ファイルを使用して Google Cloud にアクセスすると、まず、環境固有の認証情報を使用して、指定されたサービス アカウントの有効期間の短い認証情報を取得します。次に、その有効期間の短い認証情報を使用して Google Cloud に対する認証を行います。

サービス アカウントの権限借用中にプリンシパルがリソースにアクセスすると、ほとんどの監査ログには、その ID と権限借用元のサービス アカウントの ID の両方が含まれます。詳細については、監査ログの解釈をご覧ください。

Google Cloud コンソールを使用する場合は、常にユーザー認証情報で認証を行います。サービス アカウントの権限を借用して Google Cloud コンソールのリソースにアクセスすることはできません。

権限借用のない認証

サービス アカウントの権限を借用せずに、ワークロードまたはユーザーがサービス アカウントとして認証する方法はいくつかあります。

  • ワークロードは、接続されたサービス アカウントを使用して Google API に対する認証を行います。この場合、接続されたサービス アカウントはワークロードの ID として機能し、リクエストに関連する唯一の認証済み ID になります。

    ワークロードの Google Cloud に対する認証方法については、ワークロードの ID をご覧ください。

  • プリンシパルは、サービス アカウント キーを使用してサービス アカウントとして認証します。サービス アカウントとして認証するためにサービス アカウント キーを使用する場合、サービス アカウントの ID のみが関係します。関係する ID が 1 つであるため、キーを使用してもサービス アカウントの権限は借用されません。

このような場合、監査ログにはサービス アカウントの ID のみが記録されます。ワークロードでコードを実行したユーザーの ID や、サービス アカウント キーを使用して認証したユーザーの ID など、他の ID は記録されません。そのため、サービス アカウント キーを使用するか、特権リソース(VM インスタンスへの SSH セッションなど)でコードを実行する権限をデベロッパーに付与すると、権限昇格や否認防止のリスクが発生する可能性があります。

必要な権限

サービス アカウントの権限を借用するには、iam.serviceAccounts.getAccessToken 権限が必要です。この権限は、サービス アカウント トークン作成者ロールroles/iam.serviceAccountTokenCreator)などのロールに含まれています。

権限借用に必要なロールの詳細については、サービス アカウントの認証に必要なロールをご覧ください。

サービス アカウントの権限借用のユースケース

サービス アカウントの権限借用は、次のようなタスクを行うときに役立ちます。

  • ユーザーに一時的に昇格したアクセス権を付与する
  • 特定の権限セットがタスクに十分かどうかをテストする
  • サービス アカウントとしてのみ実行可能なアプリケーションをローカルで開発する
  • 外部アプリケーションを認証する

一時的に昇格されたアクセス権を付与する

ユーザーが特定のリソースに一時的にアクセスできるようにしたい場合があります。たとえば、インシデントを解決できるようにユーザーに追加のアクセス権を付与する場合や、理由を記録した後、期間限定で機密データにアクセスできるようにする場合です。

サービス アカウントの権限借用は、この一時的な昇格されたアクセス権をユーザーに付与する方法の一つです。サービス アカウントを使用して一時的に昇格されたアクセス権を付与するには、ユーザーに一時的に許可する IAM ロールを付与します。次に、ユーザーがサービス アカウントの権限を借用できるようにします。サービス アカウントの権限借用を許可するか、トークン ブローカーを使用して有効期間の短い認証情報をサービス アカウントに発行します。

一時的に昇格されたアクセス権をユーザーに付与する方法については、一時的な昇格されたアクセス権の概要をご覧ください。

権限のテスト

特定の権限セットがタスクに十分かどうかを確認したい場合があります。たとえば、特定の過剰な権限を削除しても、サービス アカウントが引き続きアプリケーションを実行できることを確認する場合などです。また、ユーザーによるタスクのトラブルシューティングをサポートしたり、現在の IAM ロールで特定のコマンドを実行できることを確認する場合もあります。

サービス アカウントの権限借用を使用すると、特定の権限セットをテストできます。まず、サービス アカウントを作成し、テストする権限を含む 1 つ以上の IAM ロールを付与します。次に、サービス アカウントの権限を借用してタスクを試行します。この方法では、テスト ユーザー アカウントの作成や独自の IAM 権限の変更を行わずに、権限をテストできます。

サービス アカウントの権限借用の方法については、サービス アカウントの権限借用を使用するをご覧ください。

アプリケーションをローカルで開発する

アプリケーションをローカルで開発する場合、通常はユーザー認証情報を使用して認証を行います。ただし、カスタム オーディエンスを含むトークンを必要とするサービスに対して認証を行う場合など、これが不可能な場合もあります(通常、このようなトークンをユーザーが構成することはできません)。この場合は、ユーザー認証情報で認証するのではなく、サービス アカウントとして認証する必要があります。

このような場合は、サービス アカウントの権限借用を使用することをおすすめします。サービス アカウントの権限借用を使用すると、セキュリティ リスクにつながるサービス アカウント キーの使用を回避できます。

アプリケーションを開発するためにサービス アカウントの権限を借用する方法については、サービス アカウントの権限借用をご覧ください。

外部アプリケーションを認証する

Google Cloud の外部で実行されているアプリケーションが Google Cloud リソースにアクセスするには、Google Cloud に対する認証を受ける必要があります。このようなアプリケーションを認証する 1 つの方法は、サービス アカウントの権限借用を使用する方法です。

アプリケーションにサービス アカウントの権限借用を許可するには、まず Workload Identity 連携を設定する必要があります。これにより、アプリケーションの認証済み ID が提供されます。その後、認証情報の構成ファイルを使用して、サービス アカウントの権限を借用するようにアプリケーションを構成できます。

サービス アカウント キーを使用して外部アプリケーションを認証することは可能ですが、使用しないことを強くおすすめします。サービス アカウント キーを使用すると、セキュリティ リスクが増えるため、可能な限り使用しないようにしてください。

次のステップ