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

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

こうした制約を設定すると、将来のサービス アカウントの作成および変更に適用されます。こうした制約は遡って適用されることはなく、以前に作成されて構成されたサービス アカウントには影響しません。

始める前に

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

ブール型制約

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

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

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

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

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

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

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

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

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

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

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
  }
}

リスト型制約

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

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

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

リスト型制約の設定

Console

サービス アカウントの OAuth 2.0 アクセス トークンの最大存続時間を延長する組織のポリシーを設定するには、次のようにします。

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

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

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

gcloud

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

サービス アカウントの OAuth 2.0 アクセス トークンの最大存続時間を延長する組織のポリシーを設定するには、次のコマンドを実行します。

gcloud resource-manager org-policies allow \
    constraints/iam.allowServiceAccountCredentialLifetimeExtension \
    SERVICE_ACCOUNT_ADDRESS [SERVICE_ACCOUNT_ADDRESS ...] \
    --organization 'ORGANIZATION_ID' \

ここで、SERVICE_ACCOUNT_ADDRESS は拡張アクセス トークンを提供するサービス アカウントのメールアドレスのリストです。

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

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

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

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

エラー メッセージ

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

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. 最後に、制約を再適用します。