サービス アカウントの使用の制限

Resource Manager に備わっている制約を組織ポリシーで使用すると、Identity and Access Management(IAM)サービス アカウントの使用を制限できます。

これらの制約の多くは、サービス アカウントおよび他のリソースを特定の方法で作成または構成できるかどうかを明確にします。これらの制約は遡及的ではなく、以前に作成および構成されたサービス アカウントには影響しません。

始める前に

制約を設定するには、組織のポリシーを変更する権限が必要です。たとえば、orgpolicy.policyAdmin ロールには組織のポリシーの制約を設定する権限があります。組織レベルでポリシーを管理する方法の詳細については、制約の使用ページをご覧ください。

ブール型制約

次の制約はブール型制約のタイプであり、true または false に設定されます。

デフォルトのサービス アカウントへの自動的なロール付与を無効にする

一部の Google Cloud サービスでは、デフォルトのサービス アカウントが自動的に作成されます。デフォルトのサービス アカウントが作成されると、プロジェクト編集者のロール(roles/editor)がそれに自動的に付与されます。

セキュリティを強化するため、自動的なロール付与を無効にすることを強くおすすめします。iam.automaticIamGrantsForDefaultServiceAccounts ブール型制約を使用して、自動的なロール付与を無効にします。

サービス アカウント作成の無効化

iam.disableServiceAccountCreation ブール制約を使用して、新しいサービス アカウントの作成を無効にすることができます。これにより、デベロッパーがプロジェクトに対して持つその他の権限を制限することなく、サービス アカウントの管理を集中化できます。

この制約をプロジェクトに適用すると、一部の Google Cloud サービスが自動的にデフォルトのサービス アカウントを作成できなくなります。そのため、プロジェクトでサービス アカウントになりすます必要があるワークロードを実行すると、ワークロードが使用できるサービス アカウントがプロジェクトに含まれない場合があります。この問題を解決するには、プロジェクト間でサービス アカウントのなりすましを有効にします。この機能を有効にすると、一元化されたプロジェクトでサービス アカウントを作成し、他のプロジェクトのリソースにサービス アカウントをアタッチできます。

サービス アカウントの構成の詳細については、サービス アカウントの場所をご覧ください。

サービス アカウント キーの作成を無効化

iam.disableServiceAccountKeyCreation ブール制約を使用して、新しいサービス アカウント キーの作成を無効にすることができます。これにより、サービス アカウントに関する、管理されない長期認証情報の使用を制御できます。この制約を設定すると、制約の影響を受けるプロジェクト内でサービス アカウント用のユーザー管理認証情報を作成できなくなります。

サービス アカウント キー アップロードの無効化

iam.disableServiceAccountKeyUpload ブール型制約を使用して、サービス アカウントに外部公開鍵をアップロードできます。この制約を設定すると、ユーザーは制約の影響を受けるプロジェクト内のサービス アカウントに公開鍵をアップロードすることはできません。

サービス アカウントの他のプロジェクトのリソースへのアタッチを無効にする

各サービス アカウントはプロジェクト内にあります。iam.disableCrossProjectServiceAccountUsage ブール型制約を使用して、プロジェクト内のサービス アカウントが他のプロジェクトのリソースにアタッチされないようにできます。

プロジェクト間でサービス アカウントを使用できるようにするには、プロジェクト間でのサービス アカウントのなりすましの有効化をご覧ください。

複数プロジェクトにまたがってサービス アカウントが使用されている場合、プロジェクト リーエンの削除を制限する

プロジェクトのサービス アカウントを他のプロジェクトのリソースにアタッチされるようにすると、IAM はプロジェクトの削除を防止するプロジェクト リーエンを追加します。デフォルトでは、プロジェクトに対して resourcemanager.projects.updateLiens 権限を持つユーザーがリーエンを削除できます。

iam.restrictCrossProjectServiceAccountLienRemoval ブール型制約を適用する場合、メンバーは、組織の resourcemanager.projects.updateLiens 権限を持つ場合にのみリーエンを削除できます。

いずれかのプロジェクトでプロジェクト間でのサービス アカウントのなりすましが許可されている場合は、この制約を適用することをおすすめします。

Workload Identity クラスタ作成の無効化

iam.disableWorkloadIdentityClusterCreation ブール型制約を使用して、新しい Google Kubernetes Engine クラスタの作成時に Workload Identity 機能を無効にすることを要求できます。組織内のサービス アカウントのアクセス権を厳密に制御する場合は、サービス アカウントの作成とサービス アカウント キーの作成に加えて、Workload Identity を無効にできます。

Workload Identity が有効になっている既存の GKE クラスタは影響を受けず、引き続き通常どおり機能します。

ブール型制約の適用

Console

サービス アカウントの使用を制限する制約を適用する組織のポリシーを設定するには:

  1. Google Cloud Console の [組織のポリシー] ページに移動します。

    [組織のポリシー] ページに移動

  2. ページの上部にある「組織」プルダウン リストをクリックして、組織を選択します。
  3. 上記のサービス アカウントの使用に関するブール型制約のいずれかをクリックします。
  4. [編集] ボタンをクリックします。
  5. [対象] で、[カスタマイズ] を選択します。
  6. [適用] で、[オン] を選択します。
  7. [保存] をクリックします。ポリシーが更新されたことを確認する通知が表示されます。

gcloud

ポリシーは、gcloud コマンドライン ツールで設定できます。

サービス アカウントの使用を制限するには、次のコマンドを実行します。

gcloud resource-manager org-policies enable-enforce \
    --organization 'ORGANIZATION_ID' \
    BOOLEAN_CONSTRAINT

ここで、BOOLEAN_CONSTRAINT は適用するブール型制約です。

適用を無効にするには、同じコマンドをこの

disable-enforce
コマンドと一緒に実行します。

組織ポリシーで制約を使用する方法については、制約の使用をご覧ください。

ブール型制約を含むポリシーの例

次のコード スニペットは、iam.disableServiceAccountCreation ブール型制約を適用する組織のポリシーを示しており、これにより、サービス アカウントを作成できなくなります。

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.disableServiceAccountCreation"
  etag: "\a\005L\252\122\321\946\334"
  boolean_policy {
  enforced: true
  }
}

リスト型制約

次の制約はリスト制約の型であり、値のリストに設定されます。

OAuth 2.0 アクセス トークンの存続時間を延長する

サービス アカウントに存続時間の短い認証情報を提供する OAuth 2.0 アクセス トークンを作成できます。 デフォルトでは、アクセス トークンの最大存続時間は 1 時間(3,600 秒)です。ただし、最大存続時間を 12 時間まで延長できます。これを行うには、アクセス トークンの存続時間を延長する必要があるサービス アカウントを指定して、constraints/iam.allowServiceAccountCredentialLifetimeExtension リスト型制約が含まれる組織ポリシーに、これらのサービス アカウントを追加します。

許可された外部 ID プロバイダを指定する

外部 ID が Google Cloud リソースにアクセスできるようにするWorkload Identity 連携を使用する場合は、許可される外部 ID プロバイダを指定できます。デフォルトでは、すべてのプロバイダが許可されます。制限を設定するには、constraints/iam.workloadIdentityPoolProviders リスト制約を使用して、許可されたプロバイダの URI を次の形式で指定します。

  • Amazon Web Services(AWS): https://sts.amazonaws.com

    許可する AWS アカウントを制限するには、このページで説明する constraints/iam.workloadIdentityPoolAwsAccounts リスト制約を使用してください。

  • Microsoft Azure: https://sts.windows.net/azure-tenant-id

  • OpenID Connect(OIDC)をサポートするその他の ID プロバイダ: ID プロバイダの発行者 URI を使用します。

許可された AWS アカウントを指定する

外部 ID を Google Cloud リソースにアクセスさせる Workload Identity 連携を使用する場合は、リソースへのアクセスが許可される AWS アカウントを指定できます。デフォルトでは、AWS アカウントからのワークロードが Google Cloud リソースにアクセスできます。許可される AWS アカウントを制限するには、constraints/iam.workloadIdentityPoolAwsAccounts リスト制約を使用して、許可されるアカウント ID のリストを指定します。

リスト型制約の設定

Console

リスト型制約を含む組織のポリシーを設定するには:

  1. Google Cloud Console の [組織のポリシー] ページに移動します。

    [組織のポリシー] ページに移動

  2. ページの上部にある「組織」プルダウン リストをクリックして、組織を選択します。
  3. 追加する制約をクリックします。
  4. [編集] ボタンをクリックします。
  5. [対象] で、[カスタマイズ] を選択します。
  6. [ポリシーの適用] で、[親と統合する] を選択し、このポリシーを階層内の既存のポリシーと統合します。
  7. [ポリシーの値] で [カスタム] を選択します。
  8. [ポリシーの種類] で、[許可] を選択します。
  9. [カスタム値] で、リスト型制約の最初の値を入力します。
    1. さらに値を追加する場合は、[新しいポリシーの値] をクリックして行を作成し、各行に 1 つの値を追加します。
  10. [保存] をクリックします。通知により、ポリシーの更新が確認されます。

gcloud

ポリシーは、gcloud コマンドライン ツールで設定できます。

gcloud resource-manager org-policies allow \
    CONSTRAINT_NAME \
    VALUE_1 [VALUE_N ...] \
    --organization=ORGANIZATION_ID \

次の値を置き換えます。

  • CONSTRAINT_NAME: リスト制約の名前。例: constraints/iam.allowServiceAccountCredentialLifetimeExtension
  • VALUE_1VALUE_N...: リスト制約の値。

組織ポリシーで制約を使用する方法については、制約の使用をご覧ください。

リスト型制約を含むポリシーの例

次のコード スニペットは、iam.allowServiceAccountCredentialLifetimeExtension リスト型制約を適用する組織のポリシーを示しています。これにより、リストに記載されたサービス アカウントに対する OAuth 2.0 アクセス トークンの最大有効期間が延長されます。

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.allowServiceAccountCredentialLifetimeExtension"
  etag: "\a\005L\252\122\321\946\334"
  listPolicy {
    allowedValues:
      - SERVICE_ACCOUNT_ADDRESS
  }
  updateTime: CURRENT_TIME
}

エラー メッセージ

サービス アカウント作成の無効化

iam.disableServiceAccountCreation が適用されると、サービス アカウントの作成は次のエラーで失敗します。

FAILED_PRECONDITION: Service account creation is not allowed on this project.

サービス アカウント キー作成の無効化

iam.disableServiceAccountKeyCreation が適用されると、サービス アカウントの作成は次のエラーで失敗します。

FAILED_PRECONDITION: Key creation is not allowed on this service account.

Workload Identity クラスタ作成の無効化

iam.disableWorkloadIdentityClusterCreation が適用されている場合は、Workload Identity を有効にして GKE クラスタを作成すると、次のエラーで失敗します。

FAILED_PRECONDITION: Workload Identity is disabled by the organization
policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your
administrator to enable this feature.

既知の問題のトラブルシューティング

デフォルトのサービス アカウント

iam.disableServiceAccountCreation 制約を適用すると、そのプロジェクトでサービス アカウントを作成できなくなります。次のように、この制限が有効になると、プロジェクトでデフォルトのサービス アカウントを自動的に作成する Google Cloud サービスにも影響を及ぼします。

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

iam.disableServiceAccountCreation 制約が適用されている場合、デフォルト サービス アカウントを作成できないため、こうしたサービスを有効にしようとすると失敗します。

この問題を解決するには:

  1. iam.disableServiceAccountCreation 制約を一時的に削除します。
  2. 目的のサービスを有効にします。
  3. その他の目的のサービス アカウントを作成します。
  4. 最後に、制約を再適用します。