サービス アカウント キーのローテーション

サービス アカウント キーは、サービス アカウントとして認証するための秘密鍵です。鍵のローテーションは、既存の鍵を新しい鍵に置き換えてから、置き換えた鍵を無効にするプロセスです。サービス アカウント キーを含む、管理するすべての鍵を定期的にローテーションすることをおすすめします。

サービス アカウント キーをローテーションすると、鍵の漏洩や盗難のリスクを低減できます。鍵が漏えいした場合、不正な行為者が鍵を見つけるのに数日から数週間かかることがあります。サービス アカウント キーを定期的にローテーションすれば、漏えいした鍵は不正な行為者が取得する前に無効化している可能性が高くなります。

サービス アカウント キーのローテーション プロセスを確立しておくと、サービス アカウント キーが不正使用された疑いがある場合にも迅速に対応できます。

鍵をローテーションする頻度

鍵の漏えいリスクを軽減するために、少なくとも 90 日ごとに鍵をローテーションすることをおすすめします。

サービス アカウント キーが侵害されたと思われる場合は、すぐにローテーションすることをおすすめします。

鍵のローテーション プロセス

サービス アカウント キーをローテーションするには、次のようにします。

  1. ローテーションが必要なサービス アカウント キーを特定します。
  2. 同じサービス アカウントに新しい鍵を作成します。
  3. すべてのアプリケーションで既存の鍵を新しい鍵に置き換えます。
  4. 置き換えた古い鍵を無効にします。アプリケーションを監視して、想定どおりに動作することを確認します。
  5. 置き換えた古いサービス アカウント キーを削除します。

これらの手順は、一元化されたシークレット管理サービスまたはカスタム通知システムを使用して行うことができます。

一元化されたシークレット管理サービス

HashiCorp Vault などの多くのシークレット管理シークレット サービスは、シークレットの自動ローテーションを提供しています。これらのサービスを使用して、サービス アカウント キーの保存とローテーションを行うことができます。

サービス アカウント キーの保存とローテーションに Google Cloud の Secret Manager を使用することはおすすめしません。Secret Manager のシークレットにアクセスするには、Google Cloud が認識可能な ID がアプリケーションで必要になるためです。アプリケーションに Google Cloud が認識可能な ID がすでに存在する場合、アプリケーションはサービス アカウント キーではなく、その ID を使用して Google Cloud の認証を行うことができます。

同じことが Azure KeyVault や AWS Secret Manager などの他のクラウドベースのシークレット管理サービスにも当てはまります。これらのクラウド プロバイダが認識可能な ID がアプリケーションにすでに存在する場合、サービス アカウント キーではなく、その ID を使用して Google Cloud の認証を行うことができます。

カスタム通知システム

サービス アカウント キーのローテーションでは、鍵のローテーションが必要な場合に通知を送信するシステムを作成する方法もあります。たとえば、90 日以上前に作成された鍵を検出するとアラートを送信するシステムを作成できます。

まず、ローテーションが必要な鍵を特定する必要があります。これらの鍵を特定するには、Cloud Asset Inventory を使用して、特定の時間より前に作成されたすべてのサービス アカウント キーを検索することをおすすめします。

たとえば、次のコマンドは、ID が 123456789012 の組織で 2023-03-10 00:00:00 UTC より前に作成されたすべてのサービス アカウント キーを一覧表示します。

gcloud asset search-all-resources \
    --scope="organizations/123456789012" \
    --query="createTime < 2023-03-10" \
    --asset-types="iam.googleapis.com/ServiceAccountKey" \
    --order-by="createTime"

Cloud Asset Inventory でリソースを検索する方法については、リソースの検索をご覧ください。ローテーションの必要がある鍵を特定したら、適切なチームに通知を送信できます。

鍵をローテーションするように通知を受けたら、次の操作を行います。

  1. 同じサービス アカウントに新しい鍵を作成します。
  2. すべてのアプリケーションで既存の鍵を新しい鍵に置き換えます。
  3. 置き換えた古い鍵を無効にします。アプリケーションを監視して、期待どおりに動作することを確認します。
  4. アプリケーションが期待どおりに動作していることを確認したら、置き換えた古い鍵を削除します。

有効期限付きのサービス アカウント キー

鍵のサービス ローテーションに有効期限付きのサービス アカウント キーを使用することはおすすめしません。有効期限付きの鍵の場合、適切にローテーションされないと停止する可能性があります。期限付きのサービス アカウント キーのユースケースについては、ユーザーが管理する鍵の有効期限をご覧ください。

次のステップ

* Cloud Asset Inventory で、作成時間を使用してサービス アカウント キーなどのリソースを検索する。 * サービス アカウント キーの作成無効化削除を行う。