組織のポリシー サービスには、 組織のポリシーで使用して Identity and Access Management(IAM)サービス アカウントの使用を制限できる制約が用意されています。
これらの制約の多くは、サービス アカウントおよび他のリソースを特定の方法で作成または構成できるかどうかを明確にします。これらの制約は遡及的ではなく、以前に作成および構成されたサービス アカウントには影響しません。
始める前に
制約を設定するには、組織のポリシーを変更する権限が必要です。たとえば、
orgpolicy.policyAdmin
ロールには組織のポリシーの制約を設定する権限があります。組織レベルでポリシーを管理する方法の詳細については、
組織のポリシーを作成する
をご覧ください。
ブール型ルールを使用したマネージド制約(レガシー)
次の制約は、ブール型ルールを使用したレガシー マネージド制約のタイプであり、true または false に設定されます。
デフォルトのサービス アカウントへの自動的なロール付与を無効にする
一部の Cloud de Confiance サービスでは、デフォルトのサービス アカウントが自動的に作成されます
。デフォルトのサービス アカウントが作成されると、プロジェクト編集者のロール(roles/editor)がそれに自動的に付与されます。
セキュリティを強化するため、自動的なロール付与を無効にすることを強くおすすめします。iam.automaticIamGrantsForDefaultServiceAccounts レガシー マネージド制約を使用して、自動的なロール付与を無効にします。
サービス アカウント作成の無効化
iam.disableServiceAccountCreation レガシー マネージド制約を使用して、新しいサービス アカウントの作成を無効にできます。これにより、デベロッパーがプロジェクトに対して持つその他の権限を制限することなく、サービス アカウントの管理を集中化できます。
この制約をプロジェクトに適用すると、一部の Cloud de Confiance サービスが自動的に デフォルトのサービス アカウントを作成できなくなります。そのため、プロジェクトで サービス アカウントになりすます必要がある ワークロードを実行すると、 ワークロードが使用できるサービス アカウントがプロジェクトに含まれない場合があります。この問題を解決するには、 プロジェクト間でサービス アカウントのなりすましを有効にします。 この機能を有効にすると、一元化されたプロジェクトでサービス アカウントを作成し、他のプロジェクトのリソースにサービス アカウントを接続できます。
サービス アカウントの整理の詳細については、サービス アカウントの作成場所をご覧ください。
サービス アカウント キー作成を無効にする
iam.disableServiceAccountKeyCreation レガシー マネージド制約
を使用して、新しい外部サービス アカウント キーと
Cloud Storage HMAC キー の作成を無効にできます。これにより、サービス アカウントに関する、管理されない長期認証情報の使用を制御できます。この制約を設定すると、制約の影響を受けるプロジェクト内でサービス アカウント用のユーザー管理認証情報を作成できなくなります。
サービス アカウント キーのアップロードを無効にする
iam.disableServiceAccountKeyUpload レガシー マネージド制約を使用して、サービス アカウントに外部公開鍵をアップロードできないようにします。この制約を設定すると、ユーザーは制約の影響を受けるプロジェクト内のサービス アカウントに公開鍵をアップロードすることはできません。
サービス アカウントの他のプロジェクトのリソースへのアタッチを無効にする
各サービス アカウントはプロジェクト内にあります。iam.disableCrossProjectServiceAccountUsage レガシー マネージド制約を使用して、プロジェクト内のサービス アカウントが他のプロジェクトのリソースにアタッチされないようにできます。
プロジェクト間でサービス アカウントを使用できるようにするには、 プロジェクト間でのサービス アカウントの権限借用の有効化をご覧ください。
複数プロジェクトにまたがってサービス アカウントが使用されている場合、プロジェクト リーエンの削除を制限する
プロジェクトのサービス アカウントを他のプロジェクトのリソースにアタッチされるようにすると、IAM はプロジェクトの削除を防止するプロジェクト リーエンを追加します。デフォルトでは、プロジェクトに対して resourcemanager.projects.updateLiens 権限を持つユーザーがリーエンを削除できます。
iam.restrictCrossProjectServiceAccountLienRemoval レガシー マネージド制約を適用すると、プリンシパルは組織に対する resourcemanager.projects.updateLiens 権限を持っている場合にのみ、リーエンを削除できます。
プロジェクトでプロジェクト間のサービス アカウントの権限借用が許可されている場合は、この制約を適用することをおすすめします。
Workload Identity クラスタ作成の無効化
`iam.disableWorkloadIdentityClusterCreation` レガシー マネージド
制約を使用すると、新しい Google Kubernetes Engine クラスタで
Workload Identity 機能を
作成時に無効にできます。iam.disableWorkloadIdentityClusterCreation組織内のサービス アカウントのアクセス権を厳密に制御する場合は、サービス アカウントの作成とサービス アカウント キーの作成に加えて、Workload Identity を無効にできます。
Workload Identity Federation for GKE が有効になっている既存の GKE クラスタは影響を受けず、引き続き通常どおり機能します。
ブール型ルールを使用したマネージド制約(レガシー)の設定
コンソール
サービス アカウントの使用を制限する制約を適用する組織のポリシーを設定するには:
コンソールで、[**組織のポリシー**] ページに移動します。 Cloud de Confiance
プロジェクト選択ツールで、サービス アカウントの使用を制限する組織を選択します。
このページに表示されているサービス アカウントの使用に関する制約のいずれかをクリックします。
[ポリシーを管理] をクリックします。
[適用対象] で、[親のポリシーをオーバーライドする] を選択します。
[ルールの追加] をクリックします。
[適用] で [オン] を選択します。
ポリシーを適用するには、[ポリシーを設定] をクリックします。
gcloud
ポリシーは Google Cloud CLI を使用して設定できます。
サービス アカウントの使用を制限するには、次のコマンドを実行します。
gcloud resource-manager org-policies enable-enforce \
--organization 'ORGANIZATION_ID' \
CONSTRAINT_NAME
CONSTRAINT_NAME は、適用する制約です。
適用を無効にするには、同じコマンドをこの
disable-enforce
組織のポリシーで制約を使用する方法については、 組織のポリシーを作成するをご覧ください。
ブール型ルールを使用したマネージド制約(レガシー)の例
次のコード スニペットは、iam.disableServiceAccountCreation レガシー マネージド制約を適用する組織のポリシーを示しており、これにより、サービス アカウントを作成できなくなります。
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
リストルールを使用したマネージド制約(レガシー)
次の制約は、 リストルールを使用したレガシー マネージド制約のタイプであり、 値のリストに設定されます。
OAuth 2.0 アクセス トークンの存続時間を延長する
サービス アカウントの有効期間の短い認証情報を提供する OAuth 2.0 アクセス トークンを作成できます。デフォルトでは、アクセス トークンの最大存続時間は 1 時間(3,600 秒)です。 ただし、最大有効期間を 12 時間(43,200 秒)まで延長できます。
これを行うには、トークンの有効時間を延長する必要があるサービス アカウントを指定して、
指定したサービス アカウントを組織のポリシーに
追加します。これには
constraints/iam.allowServiceAccountCredentialLifetimeExtension 制約が含まれます。
そうすると、それらのサービス アカウント用に REST API を使用してトークンを作成するときに最大 43,200 秒(12 時間)の有効期間を指定できます。Google Cloud CLI では、トークンの有効期間の設定はサポートされていません。
サービス アカウント キーの有効期間を制限する
サービス アカウント キーを使用すると、 リクエストをサービス アカウントとして認証できます。デフォルトでは、サービス アカウント キーに有効期限はありません。このデフォルトを変更するには、プロジェクト、フォルダまたは組織で新たに作成したすべての鍵に有効期限を設定します。
有効期限を設定するには、constraints/iam.serviceAccountKeyExpiryHours レガシー マネージド制約を使用して、新しく作成された鍵が有効な時間数を指定します。この時間が経過すると、サービス アカウント キーは期限切れになり、使用できなくなります。
このレガシー マネージド制約は、次の ALLOW 値を受け入れますが、DENY 値は受け入れません。ベスト プラクティスとして、ニーズを満たす最短の有効期限を使用してください。
1h: 1 時間8h: 8 時間24h: 24 時間(1 日)168h: 168 時間(7 日)336h: 336 時間(14 日)720h: 720 時間(30 日)1440h: 1,440 時間(60 日)2160h: 2,160 時間(90 日)
constraints/iam.serviceAccountKeyExpiryHours 制約を親ポリシーと統合することはできません。この制約を適用するには、親ポリシーを置き換えるか、継承する必要があります。
許可された外部 ID プロバイダを指定する
外部 ID が リソースにアクセスできる
Workload Identity 連携を使用する場合は、許可する外部 ID プロバイダを指定できます。 Cloud de Confiance デフォルトでは、すべてのプロバイダが許可されます。制限を設定するには、constraints/iam.workloadIdentityPoolProviders レガシー マネージド制約を使用して、許可されたプロバイダの URI を次の形式で指定します。
Amazon Web Services(AWS):
https://sts.amazonaws.com許可する AWS アカウントを制限するには、このページで説明されているように、
constraints/iam.workloadIdentityPoolAwsAccountsレガシー マネージド制約 を使用します。Microsoft Azure:
https://sts.windows.net/azure-tenant-idOpenID Connect(OIDC)をサポートするその他の ID プロバイダ: ID プロバイダの発行者 URI を使用します。
許可された AWS アカウントを指定する
外部 ID が リソースにアクセスできる
Workload Identity 連携を使用する場合は、リソースへのアクセスが許可される AWS アカウントを指定できます。 Cloud de Confiance デフォルトでは、AWS アカウントからのワークロードが
リソースにアクセスできます。 Cloud de Confiance 許可する AWS アカウントを制限するには、constraints/iam.workloadIdentityPoolAwsAccounts レガシー マネージド制約を使用して、許可するアカウント ID のリストを指定します。
公開されたサービス アカウント キーを自動的に無効にする
Cloud de Confiance by S3NS は、特定のサービス アカウント キーが公開されていることを検出することがあります。たとえば、公開リポジトリ内のキーを検出する場合があります。
がこれらのキーに対して行う処理を指定するには、
iam.serviceAccountKeyExposureResponse レガシー マネージド制約を使用します。 Cloud de Confiance モニタリング対象のキーには、有効期間の長いサービス アカウント キーと、サービス アカウントにバインドされている API キーが含まれます。
このレガシー マネージド制約は、次の ALLOW 値を受け入れますが、DENY 値は受け入れません。
DISABLE_KEY: が公開されたキーを検出すると、そのキーは 自動的に無効になります。 Cloud de Confiance また、Cloud Audit Logs イベントを作成し、 公開されたキーに関する通知をプロジェクト オーナーとセキュリティ 担当者に送信します。WAIT_FOR_ABUSE: Cloud de Confiance は、公開されたキーを積極的に無効にしません。 ただし、 Cloud de Confiance プラットフォームに悪影響を与える方法で使用されている場合、 は公開されたキーを無効にする可能性があります。公開された キーが無効になっているかどうかにかかわらず、 Cloud de Confiance は Cloud Audit Logs イベントを作成し、 公開されたキーに関する通知をプロジェクト オーナーと セキュリティ 担当者に送信します。
が公開されたキーを検出または無効にすると、次の処理も行われます。 Cloud de Confiance
Cloud Audit Logs イベントを生成します。
がキーが漏洩したことを検出すると、不正行為に対する措置ログに不正行為に対する措置が作成されます。 Cloud de Confiance
がキーを無効にすると、監査ログには無効化 アクションがプリンシパル
gcp-compromised-key-response@s3ns-system.system.gserviceaccount.comによって含まれます。 Cloud de Confiance
公開されたキーまたは無効なキーの
extendedStatus.valueフィールドを設定します。拡張ステータス フィールドには、漏洩が検出された場所が含まれます。
この制約を DISABLE_KEY に設定することを強くおすすめします。この制約を WAIT_FOR_ABUSE に設定すると、公開されたキーが不正に使用されるリスクが高くなります。
制約を WAIT_FOR_ABUSE に設定する場合は、Cloud Audit Logs イベントに登録し、重要な連絡先でセキュリティの連絡先情報を確認して、セキュリティ担当者が通知にタイムリーに応答するかを確認することをおすすめします。
iam.serviceAccountKeyExposureResponse 制約を親ポリシーと統合することはできません。この制約を適用するには、親ポリシーを置き換える必要があります。
リストルールを使用したマネージド制約(レガシー)の設定
コンソール
レガシー マネージド制約を含む組織のポリシーを設定するには:
コンソールで、[**組織のポリシー**] ページに移動します。 Cloud de Confiance
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[組織のポリシー] ページで、リストから制約を選択します。その制約の [ポリシーの詳細] ページが表示されます。
このリソースの組織のポリシーを更新するには、[ポリシーを管理] をクリックします。
[ポリシーの適用] で、適用オプションを選択します。
- 組織のポリシーを結合してまとめて評価するには、[親と結合する] を選択します。継承と リソース階層の詳細については、 階層評価をご覧ください。
- 親リソースから継承されたポリシーをオーバーライドするには、[置き換える] を選択します。
[ルールの追加] をクリックします。
[ポリシーの値] で [カスタム] を選択します。
[ポリシーの種類] で [許可] を選択します。
[**カスタム値**] に、レガシー マネージド 制約の最初の値を入力します。
- さらに値を追加する場合は、[値の追加] をクリックして行を作成し、各行に 1 つの値を追加します。
値の追加が完了したら、[完了] をクリックします。
ポリシーを適用するには、[ポリシーを設定] をクリックします。
gcloud
ポリシーは Google Cloud CLI を使用して設定できます。
gcloud resource-manager org-policies allow \ CONSTRAINT_NAME \ VALUE_1 [VALUE_N ...] \ --organization=ORGANIZATION_ID \
次の値を置き換えます。
CONSTRAINT_NAME: レガシー マネージド制約の名前。例:constraints/iam.allowServiceAccountCredentialLifetimeExtensionVALUE_1、VALUE_N...:レガシー マネージド制約の値。
組織のポリシーで制約を使用する方法については、 組織のポリシーを作成するをご覧ください。
リストルールを使用したマネージド制約(レガシー)の例
次のコード スニペットは、iam.allowServiceAccountCredentialLifetimeExtension レガシー マネージド制約を適用する組織のポリシーを示しています。これにより、リストに記載されたサービス アカウントに対する OAuth 2.0 アクセス トークンの最大有効期間が延長されます。
name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
rules:
- values:
allowedValues:
- SERVICE_ACCOUNT_ADDRESS
タグを使用して制約を条件付きで適用する
タグを使用して、タグ付きリソースを組織のポリシーの適用に含めるか 除外できます。タグを作成してサービス アカウントにアタッチしたら、ポリシーに条件を追加して、タグ付きサービス アカウントを条件付きで適用に含めるか除外できます。
組織のポリシーでタグを使用する方法の詳細については、 タグを使用して組織のポリシーのスコープを設定するをご覧ください。
エラー メッセージ
サービス アカウント作成の無効化
iam.disableServiceAccountCreation が適用されると、サービス アカウントの作成は次のエラーで失敗します。
FAILED_PRECONDITION: Service account creation is not allowed on this project.
サービス アカウントにバインドされた API キーの作成を無効にする
iam.managed.disableServiceAccountApiKeyCreation が適用されると、サービス アカウントにバインドされた API キーの作成は次のエラーで失敗します。
FAILED_PRECONDITION: Operation denied by org policy: ["constraints/iam.managed.disableServiceAccountApiKeyCreation": "When enforced, disables creation of API Keys bound to service accounts."]
サービス アカウント キー作成を無効にする
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 制約を適用すると、そのプロジェクトでサービス アカウントを作成できなくなります。この制限が有効になると、次のように、プロジェクトでデフォルトのサービス アカウントを自動的に作成するサービスにも影響を及ぼします。Cloud de Confiance
- Compute Engine
- GKE
- App Engine
- Dataflow
iam.disableServiceAccountCreation 制約が適用されている場合、デフォルト サービス アカウントを作成できないため、こうしたサービスを有効にしようとすると失敗します。
この問題を解決するには:
iam.disableServiceAccountCreation制約を一時的に削除します。- 目的のサービスを有効にします。
- その他の目的のサービス アカウントを作成します。
- 最後に、制約を再適用します。