サービス アカウント

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

始める前に

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

サービス アカウントとは

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

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

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

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

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

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

サービス アカウント キー

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

Google が管理するキー

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

ユーザーが管理するキー

ユーザーが管理する鍵ペアを作成することは、鍵ペアの公開部分と秘密部分の両方を所有することを意味します。GCP の外部から使用できるユーザーが管理する鍵ペア(「外部」キーとも呼ばれます)を 1 つ以上作成できます。Google は、ユーザーが管理するキーの公開部分のみを保存します。

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

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

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

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

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

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

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

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

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

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 Console、または 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 です。

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

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

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

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

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

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

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

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

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

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

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

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

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

アクセス スコープ

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

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

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

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

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

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

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

次のステップ

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

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

このページは役立ちましたか?評価をお願いいたします。

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

Cloud IAM のドキュメント