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

サービスアカウント

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

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

例:Cloud Analytics(クラウド分析)レポートの夜間エクスポート

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

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

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

  2. Permissions scope では、管理者は Cloud Analytics User のみを割り当てます。Reports API にはこの権限が必要だからです。権限はトークンごとではなく、サービスアカウントに対して設定されます。

  3. レポートの所有者は、組織全体に対して Viewer として レポートを共有 するか、組織で利用可能な プリセットレポート をジョブの対象にします。サービスアカウントのトークンにはユーザーのメールアドレスがないため、組織全体に共有されていないプライベートレポートには 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 個まで保持できます(アクティブ・無効・期限切れのトークンはすべてこのリミットに含まれます)。詳細は サービスアカウントの API トークンを管理する を参照してください。

必要な権限

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

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

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

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

権限アクセスできる内容
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 も持っていない限り、その後サービスアカウントを編集したり、トークンを無効化または削除したりすることはできません。

これらの権限はパーソナル API トークンには適用されません。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 日以内に有効期限切れとなるトークンの数

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

説明
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 トークンを表示する

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

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

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

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

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

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

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

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

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

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

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

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

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

Service Account Manager 権限が必要です。

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

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

  2. Disable token を選択します。

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

トークンを削除する

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

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

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

  2. Delete token を選択します。

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

レガシー API トークン

レガシー API トークン(ユーザープロファイルに紐づけられた個人用 API トークン)を引き続き使用でき、そのユーザーのロールによって付与されたフルセットの権限にアクセスできます。レガシートークンは、失効されるまで機能します。次の場合、レガシートークンは自動的に失効されます。

  • ロールまたは権限が変更された場合: API 認証パスは、実際のシステムアクセスを動的に反映します。ロールが引き下げられた場合、トークンの権限も即座に減少します。

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

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

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

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

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

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

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

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

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

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

参照