メインコンテンツへスキップ

サービスアカウント

サービスアカウントは、マシン同士の API アクセス向けに設計されたアイデンティティです。通常のユーザーアカウントと異なり、サービスアカウントは個々のユーザーではなく組織に所有されます。これは、CI・CD パイプライン、モニタリングエージェント、DoiT Cloud Intelligence へのプログラムによるアクセスを必要とする請求データエクスポーターなど、自動化されたワークフローに有用です。

各サービスアカウントには固有の名前、説明、およびそのアカウントがアクセスできる内容を決定する権限セットがあります。サービスアカウントは、独立したライフサイクル状態 (有効、無効、期限切れ) を持つ複数の API トークンを保持できます。トークン自体には専用の権限スコープはありません。有効なトークンはサービスアカウントとして認証され、各リクエストはサービスアカウントに現在割り当てられている権限に基づいて認可されます。

例: Cloud Analytics レポートの毎晩のエクスポート

FinOps チームは毎晩、スケジュールされたジョブを実行し、Cloud Analytics レポートDoiT Reports API から取得して、結果を社内のデータベースまたはデータウェアハウスにロードしています。ジョブは共通のインフラストラクチャ (GitHub Actions、Apache Airflow、サーバー上の cron ジョブなど) 上で実行され、セットアップした担当者がロール変更や退職をしても動作し続ける必要があります。

このようなケースでは、Personal API token よりもサービスアカウントの方が適しています。

  1. Service Account Creator 権限を持ち、かつすでに Cloud Analytics User 権限を持っているユーザーが、finops-report-export という名前のサービスアカウントを作成し、(例: Nightly export of allocation report to internal warehouse) のような短い説明を追加します。

  2. Permissions scope では、Reports API にその権限が必要であるため、管理者は Cloud Analytics User のみをサービスアカウントに割り当てます。権限はトークン単位ではなく、サービスアカウント単位で設定されます。

  3. レポートの所有者が、レポートを組織全体に対して Viewer として共有するか、ジョブが組織で利用可能な preset report を対象とします。サービスアカウントのトークンにはユーザーのメールアドレスがないため、組織全体に共有されていないプライベートレポートには API 経由でアクセスできません。

  4. サービスアカウントの API tokens タブで、管理者がトークン (例: github-actions-prod) を作成し、セキュリティポリシーでローテーションが必要な場合は有効期限を設定し、トークン値をシークレットマネージャーまたは CI・CD のシークレットストアに保存します。トークンがソースコード管理にコミットされることはありません。

  5. スケジュールされたワークフローは、そのシークレットストアからトークンを読み取り、Authorization ヘッダーに Bearer <token> として渡して Reports API を呼び出します。認証の詳細は DoiT Developer Hub: Get started と、Get report results エンドポイントのリファレンスを参照してください。

  6. トークンの有効期限が近づいたら、Service Account Manager 権限を持つユーザーが代替トークンを作成し、シークレットストアを更新し、ジョブが成功することを確認してから、古いトークンを無効化または削除します。

このように、認証情報は組織に属し、API アクセスはサービスアカウントに割り当てられた権限に限定されます。また、自動化を特定のユーザーのプロファイルに紐付けることなく認証情報をローテーションできます。

制限事項

組織は必要な数だけサービスアカウントを作成できます。サービスアカウントの数に制限はありません。

各サービスアカウントには、削除されていない API トークンを最大 10 個まで保持できます (有効、無効、期限切れのトークンはすべてこのリミットに含まれます)。詳細は Manage service account API tokens を参照してください。

必要な権限

サービスアカウントには 2 つの権限レイヤーが関係します。詳しくは Service account and API token permissions を参照してください。

コンソールでサービスアカウントを管理する

次の権限によって、サービスアカウントおよびそのトークンを閲覧または変更できるユーザーが決まります。

サービスアカウントへアクセスし管理するには、Users Manager 権限が必要です。

PermissionGrants access to
Service Account Viewerサービスアカウント一覧およびサービスアカウントの詳細ページを表示できます。
Service Account CreatorViewer のすべてに加え、新しいサービスアカウントと API トークンを作成できます。
Service Account ManagerViewer のすべてに加え、サービスアカウントおよびその API トークンの編集、無効化、削除ができます。

Service Account CreatorService Account Manager には、それぞれ Service Account Viewer のアクセス権が含まれます。サービスアカウントを作成または管理できるユーザーに対して Viewer 権限を別途付与する必要はありません。

Creator 権限と Manager 権限は、それ以外は互いに独立しています。Service Account Creator のみを持つユーザーは、新しいサービスアカウントとトークンを作成できますが、Service Account Manager も併せて持っていない限り、その後サービスアカウントを編集したり、トークンを無効化または削除したりすることはできません。

これらの権限は Personal API tokens には適用されません。API へのアクセス権を持つユーザーは誰でも、自身の API トークンを独立して作成および管理できます。

サービスアカウントに割り当てられる権限

サービスアカウントを作成または編集する際、そのアカウント (およびそのトークン) に付与する API 権限を選択します (例: Cloud Analytics User)。自分のユーザーアカウントがすでに持っている権限のみを割り当てることができます。保持していない権限は Permissions scope に表示されず、サービスアカウントに付与することもできません。

各サービスアカウントには、そのワークロードに必要な最小限の権限のみを付与してください。

サービスアカウントへのアクセス

サービスアカウントを表示するには、Service Account Viewer 権限 (またはそれ以上) が必要です。

自分のサービスアカウントを表示するには:

  1. DoiT コンソール にサインインし、上部のナビゲーションバーからギアアイコン () を選択してから、Users and access を選択します。

  2. 左側のメニューから Service accounts を選択します。

    Service account list page

サービスアカウントを表示する

1 つ以上のサービスアカウントがある場合、次の情報が表示されます。

注意

サービスアカウントが存在しない場合は、サービスアカウントの作成を促す空の状態が表示されます。

  • Service accounts: 組織内のサービスアカウントの合計数。
  • Tokens: すべてのサービスアカウントにおける、有効期限切れではないトークンの合計数 (有効期限切れのトークンは除外)。
  • Tokens expiring in next 30 days: 今後 30 日以内に期限切れとなるトークンの数。

一覧には、すべてのサービスアカウントが次の列とともに表示されます。

ColumnDescription
Nameサービスアカウント名。名前を選択すると詳細ページが表示されます。60 文字を超える説明は、その上にカーソルを載せると全文が表示されます。
Permissionsサービスアカウントに割り当てられている権限の数。
Tokensサービスアカウントのトークンの概要 (例: 2 active · 1 disabled)。
Createdサービスアカウントの作成日と、作成したユーザーの名前。

サービスアカウントの詳細を表示する

サービスアカウント名を選択すると、その詳細を表示できます。サービスアカウントは、名前または権限数でフィルタできます。

サービスアカウントの詳細ページには、OverviewAPI tokens の 2 つのタブがあります。

Overview タブには、サービスアカウントの作成日時、作成者、およびそのサービスアカウントに割り当てられている権限が表示されます。権限はカテゴリごとにグループ化され、各グループの件数が表示されます。

サービスアカウント上のすべての API トークンは同じ権限セットを使用します。異なるスコープを付与する必要がある場合は、別のサービスアカウントを作成してください。

サービスアカウントを作成する

サービスアカウントを作成するには、Service Account Creator 権限が必要です。

新しいサービスアカウントを作成するには:

  1. Service accounts ページで、Create service account を選択します。

  2. サービスアカウントの一意の名前を入力します。名前は組織内で一意である必要があります。

  3. 任意で説明を追加します (最大 280 文字)。

  4. Permissions scope で、サービスアカウントに割り当てる 1 つ以上の権限を選択します。自分のユーザーアカウントがすでに持っている権限のみが利用可能です。

  5. Create service account を選択します。

    Create service account form

注意

自分のユーザーアカウントがまだ持っていない権限をサービスアカウントに割り当てることはできません。自動化に必要な範囲の中で、最も狭い権限セットを選択してください。

サービスアカウントを編集する

サービスアカウントを編集するには、Service Account Manager 権限が必要です。

サービスアカウントの名前、説明、権限はいつでも更新できます。

  1. Service accounts 一覧から、編集したいサービスアカウントを選択します。

  2. Edit service account を選択します。

  3. 必要に応じて、NameDescription、または権限を更新します。

    • 名前は組織内のすべてのサービスアカウントで一意である必要があります。

    • Permissions scope では、ご自身のユーザーアカウントに既に付与されている権限のみを追加または削除できます。

    • 変更を行った後にのみ、Save ボタンが有効になります。

  4. Save を選択します。

権限を変更した場合、更新が適用される前に確認ダイアログが表示されます。ダイアログには、追加される権限と削除される権限が表示されるため、確定前に変更内容を確認できます。

注意

サービスアカウントから権限を削除すると、即時に反映されます。サービスアカウントに関連付けられている API トークンは、削除された権限を必要とするリクエストに対して 403 エラーを返すようになります。

Edit service account pgae

Edit permissions confirmation dialog showing added permissions

サービスアカウントを削除する

サービスアカウントを削除するには、Service Account Manager 権限が必要です。

サービスアカウントを削除すると、そのアカウントおよび関連するすべての API トークンが完全に削除されます。

  1. サービスアカウントの詳細ページで、サービスアカウントを削除するオプションを選択します。

  2. 警告を確認します。ダイアログには削除される API トークンの数が表示されます。

  3. 確認のためにサービスアカウント名を入力し、Delete service account を選択します。

警告

この操作は元に戻せません。サービスアカウントに属するすべてのトークンは直ちに無効化されます。これらのトークンを使用しているサービスは、新しい認証情報で再設定する必要があります。

サービスアカウントの API トークンを管理する

サービスアカウントには、削除されていない API トークンを最大 10 個まで持たせることができます。トークンごとに権限の範囲を設定することはできません。各有効なトークンは、サービスアカウントに現在設定されている権限を使用します。

サービスアカウントの詳細ページで API tokens タブを選択し、トークンの作成と管理を行います。

サービスアカウントの API トークンを作成する

トークンを無効化または有効化するには、Service Account Manager 権限が必要です。

新しいトークンが作成後に有効になるまでに、最大 1 分程度かかる場合があります。

  1. Create API token を選択します。

  2. Create API token で、次の項目を入力します。

    • Token name:トークンのわかりやすい名前を入力します。

    • (任意)Expiry date:この日付以降、トークンを無効にする日付を選択します。空欄のままにした場合、トークンは期限切れになりません。

  3. Create token を選択します。

  4. トークンをすぐにコピーまたはダウンロードします。トークンの値は一度しか表示されず、後から取得することはできません。

  5. Done を選択してダイアログを閉じます。

注意

API トークンは他のパスワードと同様に厳重に取り扱ってください。トークンを共有したり、ソースコード管理にコミットしたりしないでください。ダイアログを閉じると、トークンの値には再度アクセスできません。

API トークンの使用方法については、DoiT Developer Hub: Get started を参照してください。

API トークンを表示する

トークン一覧には、各トークンについて次の情報が表示されます。

Column説明
Tokenトークン名、権限数、およびマスクされたキー。
Status現在の状態:ActiveDisabled、または Expired
Createdトークンが作成された日付。
Expires作成時に設定された有効期限がある場合、その日付。
Last usedAPI リクエストに最後に使用された日付。

テーブル上部のサマリー行には、そのサービスアカウントが持つトークン数、今後 30 日以内に期限切れになるトークン数、60 日以上非アクティブなトークン数が表示されます。

トークンの権限を表示する

トークン使用時に適用される権限を表示するには、トークン行の権限数リンク(例:「5 permissions」)を選択します。ダイアログには、それぞれの権限名と説明が表示されます。

API トークンをフィルタリングする

フィルターバーを使用して、トークン一覧を検索およびフィルタリングします。期限切れトークンも一覧に含めるには、Show expired tokens を有効にします。

トークンのライフサイクルステータス

各トークンには次のいずれかのライフサイクルステータスがあります。

  • Active:トークンは有効であり、API リクエストに使用できます。

  • Disabled:トークンは一時的に無効化されています。

  • Expired:トークンの有効期限が過ぎており、使用できません。

トークンを無効化または有効化する

Service Account Manager 権限が必要です。

トークンを無効化すると、トークンを削除せずに一時的にアクセスを取り消します。

  1. トークン行の 3 点リーダーメニューを選択します。

  2. Disable token を選択します。

無効化されたトークンを再度有効にするには、同じメニューから Enable token を選択します。再有効化後、そのトークンを使用したリクエストは再び成功するようになります。

トークンを削除する

トークンを削除するには、Service Account Manager 権限が必要です。

トークンを削除すると永久に削除され、元に戻すことはできません。そのトークンを使用しているアプリケーションやスクリプトは認証できなくなります。

  1. トークン行の 3 点リーダーメニューを選択します。

  2. Delete token を選択します。

  3. Delete this token? で、削除を確認するために DELETE と入力します。

レガシー API トークン

引き続きレガシー API トークン(ユーザーのプロファイルに紐づいた個人用 API トークン)を使用することもできます。このトークンには、ユーザーのロールによって付与された権限セット全体へのアクセスがあります。レガシートークンは取り消されるまで動作し続けます。次のいずれかの場合、レガシートークンは自動的に取り消されます。

  • ロールまたは権限が変更された場合:API 認証パスはライブシステム上のアクセスを動的に反映します。ロールがダウングレードされると、トークンの権限も即座に減少します。

  • アカウントが無効化された場合:ユーザープロファイルを無効化すると、関連するすべてのレガシー認証情報が自動的に失効します。

  • トークンを手動で削除した場合。

ただし、新しいレガシートークンの作成は非推奨です。今後は、personal API token または service account API token のいずれかを作成する必要があります。既存の連携は personal API tokens またはサービスアカウントへ移行するよう計画してください。

レガシートークンをサービスアカウントに移行する

  1. その連携に実際に必要な権限を特定します。レガシートークンは作成ユーザーのロール全体を継承しており、必要以上に広いことがよくあります。

  2. その権限のみを持つサービスアカウントを作成します。詳細は Create a service account を参照してください。

  3. サービスアカウントの API tokens タブでトークンを作成し、それをシークレットマネージャーまたは CI/CD ストアにコピーし、連携設定を更新して Authorization: Bearer <token> を送信するようにします。

  4. 元のユーザーの Users pageAPI タブからレガシートークンを取り消します。レガシーキーを削除すると即時に反映され、それを使用し続ける呼び出し元は認証エラーを受け取ります。

レガシートークンを personal API token に移行する

オートメーションを 1 人のユーザーに紐づけたままにする必要がある場合は、サービスアカウントではなく、適切なスコープを持つ 1 つ以上の personal API tokens を作成してください。同じ手順に従います。新しいトークンを作成し、呼び出し元を更新して動作を確認し、その後 API タブからレガシーキーを削除します。

参照