このページでは、組織のポリシー サービスのカスタム制約を使用して、次の Google Cloud リソースに対する特定のオペレーションを制限する方法について説明します。
servicemanagement.googleapis.com/Service
組織のポリシーの詳細については、カスタムの組織のポリシーをご覧ください。
組織のポリシーと制約について
Google Cloud 組織のポリシー サービスを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud リソース階層内のGoogle Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーは、さまざまな Google Cloud サービスに事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをカスタマイズ可能な方法でよりきめ細かく制御する必要がある場合は、カスタム制約を作成して、組織のポリシーでそれらのカスタム制約を使用することもできます。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、 Google Cloud はそのフォルダ内のすべてのプロジェクトにそのポリシーを適用します。この動作の詳細と変更方法については、階層評価ルールをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 組織 ID を確実に把握します。
必要なロール
組織のポリシーを管理するために必要な権限を取得するには、組織のリソースに対する組織のポリシー管理者 (roles/orgpolicy.policyAdmin
)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
カスタム制約を作成する
カスタム制約は、組織のポリシーを適用しているサービスでサポートされるリソース、メソッド、条件、アクションを使用して YAML ファイルで定義されます。カスタム制約の条件は、Common Expression Language(CEL)を使用して定義されます。CEL を使用してカスタム制約で条件を作成する方法については、カスタム制約の作成と管理の CEL セクションをご覧ください。
カスタム制約を作成するには、次の形式で YAML ファイルを作成します。
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
次のように置き換えます。
ORGANIZATION_ID
: 組織 ID(123456789
など)。CONSTRAINT_NAME
: 新しいカスタム制約に付ける名前。カスタム制約はcustom.
で始まる必要があり、大文字、小文字、数字のみを含めることができます。例:custom.authorizationCheck
。このフィールドの最大長は 70 文字です。RESOURCE_NAME
: 制限するオブジェクトとフィールドを含むGoogle Cloud リソースの完全修飾名。例:servicemanagement.googleapis.com/Service
CONDITION
: サポート対象のサービス リソースの表現に対して書き込まれる CEL 条件。このフィールドの最大長は 1000 文字です。条件の書き込み先として使用できるリソースの詳細については、サポート対象のリソースをご覧ください。例:resource.name == \"test-service-name\"
ACTION
:condition
が満たされている場合に実行するアクション。有効な値はALLOW
とDENY
です。DISPLAY_NAME
: 制約の名前。わかりやすい名前を入力してください。このフィールドの最大長は 200 文字です。DESCRIPTION
: ポリシー違反時にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドの最大長は 2,000 文字です。
カスタム制約の作成方法については、カスタム制約の定義をご覧ください。
カスタム制約を設定する
新しいカスタム制約の YAML ファイルを作成したら、組織内の組織のポリシーで使用できるように設定する必要があります。カスタム制約を設定するには、gcloud org-policies set-custom-constraint
コマンドを使用します。gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH
は、カスタム制約ファイルのフルパスに置き換えます。たとえば、/home/user/customconstraint.yaml
です。完了すると、カスタム制約が組織のポリシーとして Google Cloud 組織のポリシーのリストに表示されます。カスタム制約が存在することを確認するには、gcloud org-policies list-custom-constraints
コマンドを使用します。gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID
は、組織リソースの ID に置き換えます。詳細については、組織のポリシーの表示をご覧ください。カスタムの組織のポリシーを適用する
ブール型制約を適用するには、それを参照する組織のポリシーを作成し、その組織のポリシーを Google Cloud リソースに適用します。Console
- Google Cloud コンソールで、[組織のポリシー] ページに移動します。
- プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
- [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
- このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
- [ポリシーの編集] ページで、[Override parent's policy] を選択します。
- [ルールを追加] をクリックします。
- [適用] セクションで、この組織のポリシーの適用を有効にするかどうかを選択します。
- 省略可: タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグ付きの組織のポリシーの設定をご覧ください。
- カスタム制約の場合は、[変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートできます。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
- 組織のポリシーを完成させて適用するには、[ポリシーを設定] をクリックします。ポリシーが有効になるまでに最大 15 分かかります。
gcloud
ブール型制約を適用する組織のポリシーを作成するには、制約を参照するポリシー YAML ファイルを作成します。
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
次のように置き換えます。
-
PROJECT_ID
: 制約を適用するプロジェクト。 -
CONSTRAINT_NAME
: カスタム制約に定義した名前。たとえば、custom.authorizationCheck
のようにします。
制約を含む組織のポリシーを適用するには、次のコマンドを実行します。
gcloud org-policies set-policy POLICY_PATH
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。
カスタム組織のポリシーをテストする
次の例では、Service リソースの属性に基づいてカスタム制約を作成します。これらのルールを使用して、特定の CreateServiceConfig
リクエストを許可または拒否できます。
始める前に、次のことを理解しておく必要があります。
- 組織の ID
- プロジェクト ID
制約を作成する
次のファイルに
constraint-file-name.yaml
という名前を付けて保存します。name: organizations/ORGANIZATION_ID/customConstraints/custom.authorizationCheck resourceTypes: - servicemanagement.googleapis.com/Service methodTypes: - CREATE - UPDATE condition: resource.name == \"test-service-name\" actionType: ALLOW displayName: Check Configuration time policy enforcement description: Organization policies, defined with CEL and enforced via service manager APIs, allow admins to control service configurations through inheritable and granular rules.
これにより、すべての Service Management のサービス名が
test-service-name
に等しいという制約が定義されます。制約を適用します。
gcloud org-policies set-custom-constraint ~/constraint-file-name.yaml
制約が存在することを確認します。
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
出力は次のようになります。
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.configTimeEnforcement ALLOW CREATE,UPDATE servicemanagement.googleapis.com/Service Configuration time policy enforcement
ポリシーを作成する
次のファイルに
policy-file-name.yaml
という名前を付けて保存します。name: projects/PROJECT_ID/policies/custom.configTimeEnforcement spec: rules: - enforce: true
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。ポリシーを適用します。
gcloud org-policies set-policy ~/policy-file-name.yaml
ポリシーが存在することを確認します。
gcloud org-policies list --project=PROJECT_ID
出力は次のようになります。
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.configTimeEnforcement - SET COCsm5QGENiXi2E=
ポリシーを適用したら、 Google Cloud がポリシーの適用を開始するまで 2 分ほど待ちます。
ポリシーのテスト
次のコマンドを実行して、制約を確認するサービス構成を作成します。
gcloud endpoints services deploy policy-file-name.yaml
出力は次のようになります。
Operation denied by custom org policies: ["customConstraints/custom.authorizationCheck": "error Message"]
Service Management でサポートされているリソース
次の表に、カスタム制約で参照できる Service Management リソースを示します。リソース | フィールド |
---|---|
servicemanagement.googleapis.com/Service |
resource.authentication.providers.audiences
|
resource.authentication.providers.authorizationUrl
| |
resource.authentication.providers.issuer
| |
resource.authentication.providers.jwksUri
| |
resource.authentication.providers.jwtLocations.cookie
| |
resource.authentication.providers.jwtLocations.header
| |
resource.authentication.providers.jwtLocations.query
| |
resource.authentication.providers.jwtLocations.valuePrefix
| |
resource.authentication.rules.allowWithoutCredential
| |
resource.authentication.rules.oauth.canonicalScopes
| |
resource.authentication.rules.requirements.audiences
| |
resource.authentication.rules.requirements.providerId
| |
resource.authentication.rules.selector
| |
resource.backend.rules.address
| |
resource.backend.rules.deadline
| |
resource.backend.rules.disableAuth
| |
resource.backend.rules.jwtAudience
| |
resource.backend.rules.operationDeadline
| |
resource.backend.rules.pathTranslation
| |
resource.backend.rules.protocol
| |
resource.backend.rules.selector
| |
resource.billing.consumerDestinations.metrics
| |
resource.billing.consumerDestinations.monitoredResource
| |
resource.context.rules.allowedRequestExtensions
| |
resource.context.rules.allowedResponseExtensions
| |
resource.context.rules.provided
| |
resource.context.rules.requested
| |
resource.context.rules.selector
| |
resource.control.environment
| |
resource.control.methodPolicies.requestPolicies.resourcePermission
| |
resource.control.methodPolicies.requestPolicies.resourceType
| |
resource.control.methodPolicies.requestPolicies.selector
| |
resource.control.methodPolicies.selector
| |
resource.customError.rules.isErrorType
| |
resource.customError.rules.selector
| |
resource.customError.types
| |
resource.endpoints.aliases
| |
resource.endpoints.allowCors
| |
resource.endpoints.name
| |
resource.endpoints.target
| |
resource.logging.consumerDestinations.logs
| |
resource.logging.consumerDestinations.monitoredResource
| |
resource.logging.producerDestinations.logs
| |
resource.logging.producerDestinations.monitoredResource
| |
resource.logs.description
| |
resource.logs.displayName
| |
resource.logs.name
| |
resource.metrics.description
| |
resource.metrics.displayName
| |
resource.metrics.launchStage
| |
resource.metrics.metadata.ingestDelay
| |
resource.metrics.metadata.samplePeriod
| |
resource.metrics.metadata.timeSeriesResourceHierarchyLevel
| |
resource.metrics.metricKind
| |
resource.metrics.monitoredResourceTypes
| |
resource.metrics.name
| |
resource.metrics.type
| |
resource.metrics.unit
| |
resource.metrics.valueType
| |
resource.monitoredResources.description
| |
resource.monitoredResources.displayName
| |
resource.monitoredResources.launchStage
| |
resource.monitoredResources.name
| |
resource.monitoredResources.type
| |
resource.monitoring.consumerDestinations.metrics
| |
resource.monitoring.consumerDestinations.monitoredResource
| |
resource.monitoring.producerDestinations.metrics
| |
resource.monitoring.producerDestinations.monitoredResource
| |
resource.name
| |
resource.producerProjectId
| |
resource.publishing.apiShortName
| |
resource.publishing.codeownerGithubTeams
| |
resource.publishing.docTagPrefix
| |
resource.publishing.documentationUri
| |
resource.publishing.githubLabel
| |
resource.publishing.librarySettings.cppSettings.common.destinations
| |
resource.publishing.librarySettings.cppSettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.dotnetSettings.common.destinations
| |
resource.publishing.librarySettings.dotnetSettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.dotnetSettings.forcedNamespaceAliases
| |
resource.publishing.librarySettings.dotnetSettings.handwrittenSignatures
| |
resource.publishing.librarySettings.dotnetSettings.ignoredResources
| |
resource.publishing.librarySettings.dotnetSettings.renamedResources
| |
resource.publishing.librarySettings.dotnetSettings.renamedServices
| |
resource.publishing.librarySettings.goSettings.common.destinations
| |
resource.publishing.librarySettings.goSettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.javaSettings.common.destinations
| |
resource.publishing.librarySettings.javaSettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.javaSettings.libraryPackage
| |
resource.publishing.librarySettings.javaSettings.serviceClassNames
| |
resource.publishing.librarySettings.launchStage
| |
resource.publishing.librarySettings.nodeSettings.common.destinations
| |
resource.publishing.librarySettings.nodeSettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.phpSettings.common.destinations
| |
resource.publishing.librarySettings.phpSettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.pythonSettings.common.destinations
| |
resource.publishing.librarySettings.pythonSettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.pythonSettings.experimentalFeatures.restAsyncIoEnabled
| |
resource.publishing.librarySettings.restNumericEnums
| |
resource.publishing.librarySettings.rubySettings.common.destinations
| |
resource.publishing.librarySettings.rubySettings.common.selectiveGapicGeneration.methods
| |
resource.publishing.librarySettings.version
| |
resource.publishing.methodSettings.autoPopulatedFields
| |
resource.publishing.methodSettings.longRunning.initialPollDelay
| |
resource.publishing.methodSettings.longRunning.maxPollDelay
| |
resource.publishing.methodSettings.longRunning.pollDelayMultiplier
| |
resource.publishing.methodSettings.longRunning.totalPollTimeout
| |
resource.publishing.methodSettings.selector
| |
resource.publishing.newIssueUri
| |
resource.publishing.organization
| |
resource.publishing.protoReferenceDocumentationUri
| |
resource.publishing.restReferenceDocumentationUri
| |
resource.quota.limits.defaultLimit
| |
resource.quota.limits.description
| |
resource.quota.limits.displayName
| |
resource.quota.limits.duration
| |
resource.quota.limits.freeTier
| |
resource.quota.limits.maxLimit
| |
resource.quota.limits.metric
| |
resource.quota.limits.name
| |
resource.quota.limits.unit
| |
resource.quota.limits.values
| |
resource.quota.metricRules.metricCosts
| |
resource.quota.metricRules.selector
| |
resource.systemParameters.rules.parameters.httpHeader
| |
resource.systemParameters.rules.parameters.name
| |
resource.systemParameters.rules.parameters.urlQueryParameter
| |
resource.systemParameters.rules.selector
| |
resource.title
| |
resource.usage.producerNotificationChannel
| |
resource.usage.requirements
| |
resource.usage.rules.allowUnregisteredCalls
| |
resource.usage.rules.selector
| |
resource.usage.rules.skipServiceControl
|
次のステップ
- Service Management のオプションの詳細については、Service Management の概要をご覧ください。
- Service Management の使用時に発生する可能性のある一般的な問題を解決するには、トラブルシューティングをご覧ください。
- Service Management の事前定義された組織のポリシーの制約を確認する。
- 組織ポリシー サービスの詳細を学習する。
- 組織のポリシーの作成と管理の方法について学習する。
- 事前定義された組織のポリシーの制約の完全なリストを確認する。