サービス アカウント

このページでは、サービス アカウント、サービス アカウントの種類、サービス アカウントで使用できる IAM の役割について説明します。

始める前に

  • Cloud IAM の基本概念について理解しておきます。

サービス アカウントとは

サービス アカウントは、個々のエンドユーザーではなく、アプリケーションや仮想マシン(VM)に属している特別な Google アカウントです。アプリケーションはサービス アカウントを使用して、ユーザーの関与を必要とせずに Google のサービス API を呼び出すことができます。

たとえば、あるサービス アカウントで Compute Engine VM が実行される場合、必要なリソースへのアクセス権をそのアカウントに付与することができます。こうしてサービス アカウントはサービスの ID となり、サービス アカウントのアクセス許可はサービスがアクセスできるリソースを制御します。

サービス アカウントは、アカウント固有のメールアドレスで識別されます。

サービス アカウント キー

各サービス アカウントは Google Cloud Platform(GCP)が管理するキーペアに関連付けられます。これは、GCP 内のサービス間認証に使用されます。Google はキーを毎日ローテーションします。

オプションで、GCP 外部から使用する(たとえば、アプリケーションのデフォルト認証情報で使用する)ために 1 つ以上の外部キーペアを作成することもできます。新しいキーペアを作成すると、秘密鍵(Google が保持していない)をダウンロードします。外部キーを使用して、秘密鍵のセキュリティや、キーのローテーションなどの他の管理オペレーションを行います。外部キーは、IAM API、gcloud コマンドライン ツール、Google Cloud Platform Console の [サービス アカウント] ページで管理できます。サービス アカウントごとに最大 10 個のサービス アカウント キーを作成できるので、キーのローテーションが容易になります。

サービス アカウントのタイプ

ユーザー管理サービス アカウント

GCP Console を使用して新しい Cloud プロジェクトを作成するとき、Compute Engine API がプロジェクトで有効になっている場合は、デフォルトで Compute Engine サービス アカウントが自動的に作成されます。これはメールアドレスで識別できます。

PROJECT_NUMBER-compute@developer.gserviceaccount.com

プロジェクトに App Engine アプリケーションが含まれている場合、デフォルトでは、デフォルト App Engine サービス アカウントがプロジェクト内に作成されます。これはメールアドレスで識別できます。

PROJECT_ID@appspot.gserviceaccount.com

プロジェクト内でサービス アカウントを自分で作成する場合は、サービス アカウントに名前を付けます。次の形式の電子メールが割り当てられます。

SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

IAM API、GCP コンソール、または gcloud コマンドライン ツールを使用して、プロジェクトごとに最大 100 個のサービス アカウント(デフォルトの Compute Engine サービス アカウントと App Engine サービス アカウントを含む)を作成できます。これらのデフォルト サービス アカウントと明示的に作成するサービス アカウントは、ユーザーが管理するサービス アカウントです。

Google 管理サービス アカウント

ユーザーが管理するサービス アカウントに加えて、プロジェクトの IAM ポリシーまたは GCP Console にいくつかの追加サービス アカウントが表示されることがあります。これらのサービス アカウントは Google が作成し所有しています。これらのアカウントはさまざまな Google サービスを表し、各アカウントには GCP プロジェクトにアクセスするための IAM の役割が自動的に付与されます。

Google API サービス アカウント

Google が管理するサービス アカウントの一例として、メールアドレスで識別できる Google API サービス アカウントがあります。

PROJECT_NUMBER@cloudservices.gserviceaccount.com

このサービス アカウントは、自動的に内部 Google プロセスを実行するように設計されており、GCP Console の [サービス アカウント] セクションには一覧表示されません。デフォルトで、このアカウントにはそのプロジェクトの編集者の役割が自動的に付与され、GCP Console の [IAM] セクションに表示されます。このサービス アカウントは、プロジェクトが削除された場合にのみ削除されます。Google サービスはプロジェクトにアクセスできるアカウントに依存しているため、プロジェクトでサービス アカウントの役割を削除または変更しないでください。

サービス アカウント権限

サービス アカウントは ID であることに加えて、IAM ポリシーが付加されたリソースでもあります。これらのポリシーは、サービス アカウントを使用できるユーザーを決定します。

たとえば、ユーザー Alice にサービス アカウント上で編集者の役割を与え、ユーザー Bob にサービス アカウント上で閲覧者の役割を与えることができます。これは他の GCP リソースに役割を付与するのとまったく同じです。

デフォルトの Compute Engine および App Engine サービス アカウントには、作成時にプロジェクトの編集者の役割が付与されます。これにより、アプリまたは VM インスタンスで実行されるコードは必要な権限を持ちます。この場合、サービス アカウントは ID となり、リソース(プロジェクト)に関する編集者の役割が付与されます。

自動機能で Cloud Storage バケットにアクセスできるようにするには、Cloud Storage バケットを読み取る権限を(自動機能が使用する)サービス アカウントに付与します。この場合、サービス アカウントは、別のリソース(Cloud Storage バケット)に対する権限を付与する対象となる ID です。

サービス アカウントのユーザー役割

iam.serviceAccountUser の役割を、プロジェクト レベル(プロジェクト内のすべてのサービス アカウント)またはサービス アカウント レベルで付与できます。

  • プロジェクトの 1 ユーザーに iam.serviceAccountUser の役割を付与すると、今後作成されるサービス アカウントを含め、プロジェクト内のすべてのサービス アカウントにユーザーがアクセスできます。

  • 特定のサービス アカウントでユーザーに iam.serviceAccountUser 役割を付与すると、ユーザーはそのサービス アカウントにアクセスできます。

ユーザーに対して compute.instanceAdmin 役割を iam.serviceAccountUser 役割と一緒に付与すると、そのユーザーはサービス アカウントを使用する Compute Engine インスタンスを作成および管理できるようになります。

サービス アカウントに IAM 役割を付与した後、1 つ以上の新しい仮想マシン インスタンスにサービス アカウントを割り当てることができます。これを行う方法については、サービス アカウントとして実行されるように新しいインスタンスを設定するをご覧ください。

serviceAccountUsers であるユーザーは、サービス アカウントを使用して、そのサービス アカウントからアクセスできるすべてのリソースに間接的にアクセスできます。たとえば、serviceAccountUser であるユーザーはサービス アカウントを使用してインスタンスを開始できます。次に、そのインスタンスを使用して、サービス アカウント ID からアクセスできるすべてのものにアクセスできます。ただし serviceAccountUser の役割では、ユーザーがサービス アカウントの役割を直接使用することはできません。したがって、iam.serviceAccountUser の役割をユーザーに付与する際には注意が必要です。

サービス アカウントは、サービスレベルのセキュリティを表します。サービスのセキュリティは、サービス アカウントを管理/使用できる IAM 役割を持つユーザーと、これらのサービス アカウントの非公開外部鍵を保持するユーザーによって決まります。セキュリティを確保するためのベスト プラクティスは次のとおりです。

  • IAM API を使用してサービス アカウント、鍵、およびサービス アカウントのポリシーを監査します。
  • サービス アカウントに外部鍵が不要な場合は、削除します。
  • サービス アカウントを管理、使用する権限が不要なユーザーは、IAM ポリシーからサービス アカウントを削除します。

ベスト プラクティスの詳細については、サービス アカウントについてをご覧ください。

サービス アカウント トークン作成者の役割

この役割はサービス アカウントの代理として機能することができ、OAath2 アクセス トークンの作成、blob の署名、JWT の署名を行うことができます。

サービス アカウント アクターの役割

この役割は廃止されました。サービス アカウントとしてオペレーションを実行する必要がある場合は、サービス アカウント ユーザーの役割を使用してください。さらに、実質的にサービス アカウント アクターと同じ権限を付与するには、サービス アカウント トークン作成者も付与する必要があります。

アクセス スコープ

アクセス スコープは、インスタンスの権限を指定するレガシーな方法です。IAM の役割が使用できるようになる前は、これがサービス アカウントに権限を付与する唯一のメカニズムでした。それらは現在では権限付与の主要な方法ではなくなりましたが、インスタンスをサービス アカウントとして実行するように構成する場合には、アクセス スコープを設定する必要があります。アクセス スコープについて詳しくは、Google Compute Engine のドキュメントを参照してください。

アプリケーションのデフォルト認証情報

アプリケーション デフォルト認証情報は、GCP の内部および外部で、また複数の GCP プロジェクト間で操作を実行する際に、サービス アカウントを簡単に使用できるようにするためのメカニズムです。最も一般的な使用例としては、ローカルマシン上でコードをテストしてから GCP の開発プロジェクトに移動し、その後、GCP の本番環境プロジェクトに移動する場合が考えられます。アプリケーションのデフォルト認証情報を使用することにより、サービス アカウントがシームレスに機能することが保証されます。つまり、ローカルマシンでテストする際にはローカルに保存されたサービス アカウント キーを使用しますが、Compute Engine で実行する際にはプロジェクトのデフォルト Compute Engine サービス アカウントを使用します。詳しくは、アプリケーションのデフォルト認証情報を参照してください。

次のステップ

サービス アカウントの使用に関するベスト プラクティスについては、サービス アカウントについてを参照してください。

以下のガイドを参照して、それぞれの手順を理解します。

フィードバックを送信...

Cloud Identity and Access Management のドキュメント