サービス アカウント

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

始める前に

  • Cloud IAM の基本コンセプトについて理解しておきます。

サービス アカウントとは

サービス アカウントは、ユーザーではなく、アプリケーションや仮想マシン(VM)インスタンスで使用される特別なアカウントです。アプリケーションは、サービス アカウントを使用して、承認された API 呼び出しを行います。

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

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

サービス アカウントとユーザー アカウントの違い

サービス アカウントは、いくつかの重要な点がユーザー アカウントと異なります。

  • サービス アカウントにはパスワードがなく、ブラウザやクッキーでログインできません。
  • サービス アカウントは、Google への認証に使用される秘密 / 公開 RSA 鍵ペアに関連付けられています。
  • Cloud IAM 権限を付与して、他のユーザー(または他のサービス アカウント)がサービス アカウントを使用できるようにできます。
  • ユーザー アカウントとは異なり、サービス アカウントは G Suite ドメインのメンバーではありません。たとえば、G Suite ドメインのすべてのメンバーとアセットを共有しても、サービス アカウントとは共有されません。同様に、サービス アカウントによって作成されたアセットを G Suite 管理者が所有または管理することはできません。

サービス アカウント キー

各サービス アカウントは、Google への認証に使用される 2 組の公開 / 秘密 RSA 鍵ペア(Google が管理するキーとユーザーが管理するキー)に関連付けられています。

Google が管理するキー

Google が管理する鍵ペアでは、公開部分と秘密部分の両方を Google が保存し、定期的にローテーションします(各鍵は最大 2 週間、署名に使用できます)。秘密鍵は常にエスクローに保管され、直接アクセスされることはありません。Cloud IAM では、これらの鍵を使用してサービス アカウントの代わりに署名する API が提供されています。詳しくは、有効期間が短いサービス アカウント認証情報の作成をご覧ください。

ユーザーが管理するキー

beta feature Uploading public keys for service accounts

ユーザーが管理する鍵ペアを作成することは、鍵ペアの公開部分と秘密部分の両方を所有することを意味します。Google Cloud の外部から使用できるユーザー管理の鍵ペア(外部キー)を 1 つまたは複数作成できます。Google では、ユーザーが管理するキーの公開部分のみを格納します。

さらに、適切な形式の公開鍵を作成して Google にアップロードすると、指定されたサービス アカウントに対して恒久的に関連付けられます。サービス アカウント キーの作成時など、そのサービス アカウントに代わって署名操作を行う必要がある場合、アップロードされた公開鍵が使用されます。

ユーザーが管理する鍵ペアの秘密部分は、アプリケーションのデフォルト認証情報で使用されるのが最も一般的です。この秘密鍵は、サーバー間アプリケーションの認証に使用されます。

ユーザーが管理するキーの場合、秘密鍵のセキュリティや、キーのローテーションなどの他の管理オペレーションを行います。ユーザー管理の鍵を管理するには、Cloud IAM API、gcloud コマンドライン ツール、Google Cloud Console のサービス アカウント ページを使用します。サービス アカウントごとに最大 10 個のサービス アカウント キーを作成できるので、キーのローテーションが容易になります。

鍵を安全に管理するため、Cloud Key Management Service(Cloud KMS)の使用を検討してください。

ユーザーが管理するキーを制限する

ユーザーが管理するキーは非常に強力な認証情報であり、正しく管理しなければセキュリティ上のリスクとなります。

constraints/iam.disableServiceAccountKeyCreation 組織ポリシーの制約をプロジェクト、フォルダ、組織全体に適用して、使用を制限できます。制約を適用した後、適切に管理された場所でユーザーが管理するキーを有効にして、キーが管理されていないことによる潜在的なリスクを最小限に抑えることができます。

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

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

Cloud Console を使用して新しい Google 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

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

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

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

Google API サービス アカウント

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

PROJECT_NUMBER@cloudservices.gserviceaccount.com

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

サービス アカウント権限

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

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

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

アプリケーションに Cloud Storage バケットへのアクセスを許可する場合は、そのアプリケーションが使用するサービス アカウントに Cloud Storage バケットの読み取り権限を付与します。この場合、サービス アカウントは、別のリソース(Cloud Storage バケット)に対する権限を付与する対象の ID です。

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

サービス アカウント ユーザー役割(roles/iam.serviceAccountUser)は、プロジェクト内のすべてのサービス アカウントのプロジェクト単位またはサービス アカウント単位で指定できます。

  • プロジェクトでユーザーにサービス アカウント ユーザーの役割を付与すると、将来作成されるサービス アカウントを含む、プロジェクトにおけるすべてのサービス アカウントへのアクセス権がユーザーに付与されます。

  • 特定のサービス アカウントでユーザーにサービス アカウント ユーザーの役割を付与した場合、ユーザーにはそのサービス アカウントのみへのアクセス権が付与されます。

サービス アカウントでサービス アカウント ユーザーの役割を付与されたユーザーは、それを使用して、サービス アカウントがアクセスできるすべてのリソースに間接的にアクセスできます。たとえば、サービス アカウントに Compute Admin の役割(roles/compute.admin)が付与されている場合、そのサービス アカウントでサービス アカウント ユーザーの役割(roles/iam.serviceAccountUser)が付与されているユーザーは、Compute Engine インスタンスを起動するサービス アカウントの役目を果たせます。この場合、ユーザーはサービス アカウントに成り代わり、サービス アカウントに付与された役割と権限を使ってタスクを実行します。

サービス アカウントでユーザーに役割を付与する方法の詳細については、サービス アカウントに対する所有権とアクセス権の構成をご覧ください。

サービス アカウントは、サービスレベルのセキュリティを表します。サービスのセキュリティは、サービス アカウントを管理および使用する Cloud IAM 役割を持っているユーザーと、そのサービス アカウントの秘密外部鍵を保持しているユーザーによって決定されます。セキュリティを確保するためのベスト プラクティスは次のとおりです。

  • Cloud IAM API を使用してサービス アカウント、キー、サービス アカウントのポリシーを監査します。
  • サービス アカウントに外部キーが不要な場合は、削除します。
  • ユーザーがサービス アカウントを管理または使用する権限を必要としない場合は、該当する Cloud IAM ポリシーからそれらを削除します。

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

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

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

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

この役割は非推奨になりました。サービス アカウントとして操作を実行する必要がある場合は、サービス アカウント ユーザー役割を使用します。さらに、実質的にサービス アカウント アクターと同じ権限を付与するには、サービス アカウント トークン作成者も付与する必要があります。

アクセス スコープ

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

有効期間が短いサービス アカウント認証情報

Google Cloud サービス アカウントの ID を使用できる有効期間が短い認証情報を作成できます。これらの認証情報は、Google Cloud API やその他の Google 以外の API への呼び出しを認証するために使用できます。

これらの認証情報の最も一般的な使用例は、異なるプロジェクト、組織、アカウント間で Google Cloud リソースへのアクセスを一時的に委任する場合です。たとえば、外部の呼び出し元に高度な権限のサービス アカウントの恒久的な認証情報を提供する代わりに、一時的な緊急アクセスを許可できます。あるいは、外部の呼び出し元が、より高度な権限のサービス アカウント認証情報を要求されることなく、制限された権限を持つ指定のサービス アカウントを使用できるようになります。

詳細については、有効期間が短いサービス アカウント認証情報の作成をご覧ください。

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

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

次のステップ

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

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