assured-workloads-basics
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGoogle Cloud Assured Workloads Basics (V1 GA)
Google Cloud Assured Workloads 基础操作(V1 GA)
Validate prerequisites, create Assured Workloads V1 compliant folders, allowlist compliant services, and list, inspect, update, or delete existing workloads using and the Google Cloud Python Client Libraries ( and ).
gcloudgoogle-cloud-assured-workloadsgoogle-api-python-client校验前置条件、创建符合 Assured Workloads V1 要求的文件夹、将合规服务加入允许列表,并使用 和 Google Cloud Python 客户端库( 与 )列出、检查、更新或删除已有工作负载。
gcloudgoogle-cloud-assured-workloadsgoogle-api-python-clientUsage Attribution
使用归属(Usage Attribution)
For all CLI, REST API, and MCP attribution requirements when executing commands with this skill, follow the instructions in Usage Attribution.
gcloud使用本 skill 执行命令时,所有 CLI、REST API 和 MCP 归属要求请遵循 Usage Attribution 中的说明。
gcloudMandatory Guardrails
强制性防护规则(Guardrails)
- No Fabrication: Never invent Organization IDs, Billing Account IDs, Folder IDs, Project IDs, Workload IDs, or Compliance Regime enums. Validate parameters with before running commands.
scripts/validate_params.py - Regional / Multi-Regional Locations & CLI Surface: Assured Workloads V1 does not support ; always use a regional or multi-regional location compatible with the compliance regime (see references/regimes.md). Never use
--location=globalcommands for Assured Workloads V1 workloads.gcloud compliance-manager - Human Confirmation Before Mutation: Read-only operations (,
list, anddescribe) can run immediately after validation, but you must obtain explicit user confirmation before executing any mutating or destructive command (scripts/manage_workload_updates.py --action=list,create,restrict_allowed_resources.py,update,manage_workload_updates.py --action=apply,delete, orfolders delete).projects delete - Telemetry Attribution & Regional Endpoints:
- Prefix every command you execute directly with
gcloud(see Usage Attribution).CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:assured-workloads-basics)" - Configure Python GAPIC and Discovery clients with regional .
ClientOptions(api_endpoint="{location}-assuredworkloads.googleapis.com")
- Prefix every
- 禁止编造: 绝不臆造 Organization ID、Billing Account ID、Folder ID、Project ID、Workload ID 或 Compliance Regime 枚举值。运行命令前必须使用 校验参数。
scripts/validate_params.py - 区域/多区域位置与 CLI 界面: Assured Workloads V1 不支持 ;始终使用与合规制度兼容的区域或多区域位置(参见 references/regimes.md)。切勿对 Assured Workloads V1 工作负载使用
--location=global命令。gcloud compliance-manager - 变更操作前需人工确认: 只读操作(、
list以及describe)在校验通过后可直接执行,但在执行任何变更或破坏性命令(scripts/manage_workload_updates.py --action=list、create、restrict_allowed_resources.py、update、manage_workload_updates.py --action=apply、delete或folders delete)之前,必须获得用户的明确确认。projects delete - 遥测归属与区域端点:
- 你直接执行的每条 命令都必须以
gcloud作为前缀(参见 Usage Attribution)。CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:assured-workloads-basics)" - 配置 Python GAPIC 与 Discovery 客户端时使用区域端点 。
ClientOptions(api_endpoint="{location}-assuredworkloads.googleapis.com")
- 你直接执行的每条
Step 0: Prerequisites & Environment Setup
步骤 0:前置条件与环境准备
Verify these 5 prerequisites before running Assured Workloads operations:
- CLI & Python Libraries: Install the Google Cloud SDK (— see the Google Cloud SDK Installation Guide) and Python client libraries:
gcloudbashpip install "google-cloud-assured-workloads>=1.0,<2" "google-api-python-client>=2.0,<3" "google-auth>=2.0,<3" - Dual Authentication (CLI + ADC): Authenticate both and Application Default Credentials (
gcloud, orgcloud auth login && gcloud auth application-default login+gcloud auth activate-service-account --key-file=/path/to/key.json).export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json" - Quota & Admin Project: and
gcloud config set project {admin_project_id}.gcloud auth application-default set-quota-project {admin_project_id} - API Enablement: Enable the Assured Workloads API ():
assuredworkloads.googleapis.combashgcloud services enable assuredworkloads.googleapis.com --project={admin_project_id} - Organization-Level IAM Roles ():
organizations/{org_id}- Caller: (or
roles/assuredworkloads.admin/roles/assuredworkloads.readerfor read-onlyroles/assuredworkloads.editor/list),describe, androles/resourcemanager.organizationVieweronroles/billing.userwhen creating workloads (plus--billing-account=billingAccounts/{billing_id}onbilling.resourceAssociations.createfor partner workloads).--partner-services-billing-account - Assured Workloads Service Agent ():
service-{org_number}@gcp-sa-assuredworkloads.iam.gserviceaccount.com.roles/assuredworkloads.serviceAgent
- Caller:
在执行 Assured Workloads 操作前,验证以下 5 项前置条件:
- CLI 与 Python 客户端库: 安装 Google Cloud SDK(——参见 Google Cloud SDK 安装指南)以及 Python 客户端库:
gcloudbashpip install "google-cloud-assured-workloads>=1.0,<2" "google-api-python-client>=2.0,<3" "google-auth>=2.0,<3" - 双重认证(CLI + ADC): 同时完成 与 Application Default Credentials 的认证(
gcloud,或gcloud auth login && gcloud auth application-default login+gcloud auth activate-service-account --key-file=/path/to/key.json)。export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json" - 配额与管理项目: 和
gcloud config set project {admin_project_id}。gcloud auth application-default set-quota-project {admin_project_id} - 启用 API: 启用 Assured Workloads API():
assuredworkloads.googleapis.combashgcloud services enable assuredworkloads.googleapis.com --project={admin_project_id} - 组织级 IAM 角色():
organizations/{org_id}- 调用方: (只读
roles/assuredworkloads.admin/list可使用describe/roles/assuredworkloads.reader)、roles/assuredworkloads.editor,以及创建工作负载时在roles/resourcemanager.organizationViewer上授予的--billing-account=billingAccounts/{billing_id}(合作伙伴工作负载还需在roles/billing.user上具备--partner-services-billing-account)。billing.resourceAssociations.create - Assured Workloads Service Agent():
service-{org_number}@gcp-sa-assuredworkloads.iam.gserviceaccount.com。roles/assuredworkloads.serviceAgent
- 调用方:
Workflow 1: Create an Assured Workloads workload (Two-Phase Provisioning)
工作流 1:创建 Assured Workloads 工作负载(两阶段置备)
Phase 1: Validate Parameters & Create Workload (gcloud assured workloads create
)
gcloud assured workloads create阶段 1:校验参数并创建工作负载(gcloud assured workloads create
)
gcloud assured workloads create- Select Regime & Location: Check references/regimes.md for all 45 V1 enums and valid
--compliance-regimevalues.--location- Free-Tier Regional Data Boundaries (): Free-tier regional data boundaries (e.g., US Data Boundary with standard commercial support and without sovereign personnel support uplift, EU Data Boundary, Australia/India/UK/Canada/Israel Data Boundary) map to
REGIONAL_DATA_BOUNDARY(legacy alias:--compliance-regime=REGIONAL_DATA_BOUNDARY) paired withREGIONAL_CONTROLS(except Japan, which uses--location={location}). Do not setJAPAN_DATA_BOUNDARYto paid sovereign support regimes (--compliance-regime,US_REGIONS_AND_US_SUPPORT,US_DATA_BOUNDARY_AND_SUPPORT) when the user requests the free-tier boundary, and never invent non-existent enums likeFEDRAMP_MODERATE.US_DATA_BOUNDARY
- Free-Tier Regional Data Boundaries (
- Billing Account Discovery (If Omitted): Never guess a billing account ID. If omitted, run or ask the user for
gcloud billing accounts list --filter="open=true" --format="table(name,displayName)".billingAccounts/{billing_id} - Validate & Create: Validate with , surface any warnings, obtain explicit user confirmation, and execute
python3 scripts/validate_params.py --operation=create ...:gcloud assured workloads createbashgcloud assured workloads create \ --organization={org_id} --location={location} \ --display-name="{display_name}" --compliance-regime={compliance_regime} \ --billing-account=billingAccounts/{billing_id} \ [--provisioned-resources-parent=folders/{parent_folder_id}] [--enable-sovereign-controls] \ [--next-rotation-time={next_rotation_time} --rotation-period={rotation_seconds}s] \ [--resource-settings=consumer-project-id={consumer_project_id},consumer-project-name={consumer_project_name},encryption-keys-project-id={kms_project_id},encryption-keys-project-name={kms_project_name},keyring-id={keyring_id}] \ [--partner={partner_enum}] [--partner-permissions=data-logs-viewer=true|false] \ [--partner-services-billing-account=billingAccounts/{partner_billing_id}] \ [--labels=key1=val1,key2=val2] [--external-identifier={external_id}] --format=json- CMEK & Resource Settings Rules: (RFC 3339 timestamp) and
--next-rotation-time(seconds, e.g.--rotation-period) must be specified together.172800s,encryption-keys-project-id, andencryption-keys-project-nameinkeyring-idrequire both rotation flags.--resource-settings - Sovereign Controls by Partners ():
--compliance-regime=ASSURED_WORKLOADS_FOR_PARTNERS- Requests for partner-managed sovereign controls (S3NS, T-Systems, SIA Minsait, PSN, CNTXT, Telefónica) map to .
--compliance-regime=ASSURED_WORKLOADS_FOR_PARTNERS - Requires and a supported partner region (see references/regimes.md for valid
--partnervalues, supported regions, and partner billing account requirements).--partner - Configure partner permissions on the CLI with (or
--partner-permissions=data-logs-viewer=true).data-logs-viewer=false
- Requests for partner-managed sovereign controls (S3NS, T-Systems, SIA Minsait, PSN, CNTXT, Telefónica) map to
- CMEK & Resource Settings Rules:
- 选择制度与位置: 查看 references/regimes.md,了解全部 45 个 V1 枚举值以及有效的
--compliance-regime取值。--location- 免费层区域数据边界(): 免费层区域数据边界(例如带标准商业支持且不含主权人员支持加成的 US Data Boundary、EU Data Boundary、Australia/India/UK/Canada/Israel Data Boundary)映射为
REGIONAL_DATA_BOUNDARY(旧别名:--compliance-regime=REGIONAL_DATA_BOUNDARY),并配合REGIONAL_CONTROLS(日本除外,日本使用--location={location})。当用户请求免费层边界时,不要将JAPAN_DATA_BOUNDARY设置为付费主权支持制度(--compliance-regime、US_REGIONS_AND_US_SUPPORT、US_DATA_BOUNDARY_AND_SUPPORT),且绝不可臆造诸如FEDRAMP_MODERATE这类不存在的枚举值。US_DATA_BOUNDARY
- 免费层区域数据边界(
- 发现 Billing Account(若未提供): 绝不猜测 billing account ID。若未提供,运行 或向用户询问
gcloud billing accounts list --filter="open=true" --format="table(name,displayName)"。billingAccounts/{billing_id} - 校验并创建: 使用 进行校验,输出所有警告,获得用户明确确认后执行
python3 scripts/validate_params.py --operation=create ...:gcloud assured workloads createbashgcloud assured workloads create \ --organization={org_id} --location={location} \ --display-name="{display_name}" --compliance-regime={compliance_regime} \ --billing-account=billingAccounts/{billing_id} \ [--provisioned-resources-parent=folders/{parent_folder_id}] [--enable-sovereign-controls] \ [--next-rotation-time={next_rotation_time} --rotation-period={rotation_seconds}s] \ [--resource-settings=consumer-project-id={consumer_project_id},consumer-project-name={consumer_project_name},encryption-keys-project-id={kms_project_id},encryption-keys-project-name={kms_project_name},keyring-id={keyring_id}] \ [--partner={partner_enum}] [--partner-permissions=data-logs-viewer=true|false] \ [--partner-services-billing-account=billingAccounts/{partner_billing_id}] \ [--labels=key1=val1,key2=val2] [--external-identifier={external_id}] --format=json- CMEK 与资源设置规则: (RFC 3339 时间戳)与
--next-rotation-time(秒数,例如--rotation-period)必须同时指定。172800s中的--resource-settings、encryption-keys-project-id和encryption-keys-project-name需要配合这两个轮换标志一起使用。keyring-id - 合作伙伴主权控制():
--compliance-regime=ASSURED_WORKLOADS_FOR_PARTNERS- 对于合作伙伴管理的主权控制请求(S3NS、T-Systems、SIA Minsait、PSN、CNTXT、Telefónica),映射为 。
--compliance-regime=ASSURED_WORKLOADS_FOR_PARTNERS - 需要指定 以及受支持的合作伙伴区域(有效的
--partner取值、支持区域和合作伙伴 billing account 要求见 references/regimes.md)。--partner - 在 CLI 上通过 (或
--partner-permissions=data-logs-viewer=true)配置合作伙伴权限。data-logs-viewer=false
- 对于合作伙伴管理的主权控制请求(S3NS、T-Systems、SIA Minsait、PSN、CNTXT、Telefónica),映射为
- CMEK 与资源设置规则:
Phase 2 (Optional): Allowlist Compliant Services / Enable BigQuery (google-cloud-assured-workloads
)
google-cloud-assured-workloads阶段 2(可选):将合规服务加入允许列表 / 启用 BigQuery(google-cloud-assured-workloads
)
google-cloud-assured-workloads- When Required: For and
FEDRAMP_MODERATE, BigQuery is automatically enabled at creation (skip Phase 2). For all other regimes (such asDATA_BOUNDARY_FOR_FEDRAMP_MODERATE), BigQuery is initially blocked by the folder'sFEDRAMP_HIGHorganization policy while a background configuration process completes (typically 5–10 minutes after creation).constraints/gcp.restrictServiceUsage - Never Bypass Org Policies Manually: Do not manually override or delete on the folder to bypass Assured Workloads compliance controls.
constraints/gcp.restrictServiceUsage - Programmatic Allowlisting (): Once background setup completes and compliant services (like BigQuery) appear in
AssuredWorkloadsServiceClient.restrict_allowed_resources, runcompliantButDisallowedServices(after user confirmation), or call the officialpython3 scripts/restrict_allowed_resources.py --organization={org_id} --location={location} --workload-id={workload_id} --restriction-type=ALLOW_COMPLIANT_RESOURCESPython client library directly:google-cloud-assured-workloads(Supportedpythonfrom google.api_core.client_options import ClientOptions from google.cloud import assuredworkloads_v1 client = assuredworkloads_v1.AssuredWorkloadsServiceClient( client_options=ClientOptions( api_endpoint=f"{location}-assuredworkloads.googleapis.com" ), transport="rest", ) request = assuredworkloads_v1.RestrictAllowedResourcesRequest( name=f"organizations/{org_id}/locations/{location}/workloads/{workload_id}", restriction_type=assuredworkloads_v1.RestrictAllowedResourcesRequest.RestrictionType.ALLOW_COMPLIANT_RESOURCES, ) client.restrict_allowed_resources(request=request)values:RestrictionType,ALLOW_COMPLIANT_RESOURCES, orAPPEND_COMPLIANT_RESOURCES).ALLOW_ALL_GCP_RESOURCES
- 何时需要: 对于 和
FEDRAMP_MODERATE,BigQuery 会在创建时自动启用(跳过阶段 2)。对于其他所有制度(如DATA_BOUNDARY_FOR_FEDRAMP_MODERATE),在后台配置流程完成之前(通常为创建后 5–10 分钟),BigQuery 会被文件夹的FEDRAMP_HIGH组织策略阻止。constraints/gcp.restrictServiceUsage - 切勿手动绕过组织策略: 不要手动覆盖或删除文件夹上的 ,以绕过 Assured Workloads 合规控制。
constraints/gcp.restrictServiceUsage - 以编程方式加入允许列表(): 当后台配置完成且合规服务(如 BigQuery)出现在
AssuredWorkloadsServiceClient.restrict_allowed_resources中时,在获得用户确认后运行compliantButDisallowedServices,或直接调用官方python3 scripts/restrict_allowed_resources.py --organization={org_id} --location={location} --workload-id={workload_id} --restriction-type=ALLOW_COMPLIANT_RESOURCESPython 客户端库:google-cloud-assured-workloads(支持的pythonfrom google.api_core.client_options import ClientOptions from google.cloud import assuredworkloads_v1 client = assuredworkloads_v1.AssuredWorkloadsServiceClient( client_options=ClientOptions( api_endpoint=f"{location}-assuredworkloads.googleapis.com" ), transport="rest", ) request = assuredworkloads_v1.RestrictAllowedResourcesRequest( name=f"organizations/{org_id}/locations/{location}/workloads/{workload_id}", restriction_type=assuredworkloads_v1.RestrictAllowedResourcesRequest.RestrictionType.ALLOW_COMPLIANT_RESOURCES, ) client.restrict_allowed_resources(request=request)取值:RestrictionType、ALLOW_COMPLIANT_RESOURCES或APPEND_COMPLIANT_RESOURCES。)ALLOW_ALL_GCP_RESOURCES
Workflow 2: List & Describe Assured Workloads workloads (gcloud
)
gcloud工作流 2:列出与描述 Assured Workloads 工作负载(gcloud
)
gcloudRead-only and operations do not require user confirmation after validating with .
listdescribescripts/validate_params.py- List Workloads ():
ListWorkloadsbashgcloud assured workloads list --organization={org_id} --location={location} \ [--filter="{filter_expression}"] [--limit={limit}] [--page-size={page_size}] --format=json - Describe a Specific Workload ():
GetWorkload(Or pass the full resource namebashgcloud assured workloads describe {workload_id} --organization={org_id} --location={location} --format=json).organizations/{org_id}/locations/{location}/workloads/{workload_id}- Key Output Fields:
describe,name,displayName,complianceRegime,partner(provisionedresourcesfolder ID,CONSUMER_FOLDER,CONSUMER_PROJECT, andENCRYPTION_KEYS_PROJECT),KEYRING(optimistic concurrency token required foretag/update),delete,compliantButDisallowedServices,kajEnrollmentState,saaEnrollmentResponse, andviolationNotificationsEnabled.labels
- Key
只读的 和 操作在使用 校验通过后无需用户确认即可执行。
listdescribescripts/validate_params.py- 列出工作负载():
ListWorkloadsbashgcloud assured workloads list --organization={org_id} --location={location} \ [--filter="{filter_expression}"] [--limit={limit}] [--page-size={page_size}] --format=json - 描述指定工作负载():
GetWorkload(也可传入完整资源名bashgcloud assured workloads describe {workload_id} --organization={org_id} --location={location} --format=json。)organizations/{org_id}/locations/{location}/workloads/{workload_id}- 关键输出字段:
describe、name、displayName、complianceRegime、partner(已置备的resources文件夹 ID、CONSUMER_FOLDER、CONSUMER_PROJECT和ENCRYPTION_KEYS_PROJECT)、KEYRING(etag/update所需的乐观并发令牌)、delete、compliantButDisallowedServices、kajEnrollmentState、saaEnrollmentResponse以及violationNotificationsEnabled。labels
Workflow 3: Delete an Assured Workloads workload (DeleteWorkload
)
DeleteWorkload工作流 3:删除 Assured Workloads 工作负载(DeleteWorkload
)
DeleteWorkloadAn Assured Workloads workload cannot be deleted while its provisioned Cloud Resource Manager folder () or child projects still exist ( / ). Never run before deleting the provisioned folder and its child projects.
folders/{folder_id}FAILED_PRECONDITION: Workload is not emptyERROR_CODE_WORKLOAD_NOT_EMPTYgcloud assured workloads delete- Inspect & Validate: Run to identify the provisioned folder (
gcloud assured workloads describe) and child projects (folders/{folder_id}), and validate with{project_id}.python3 scripts/validate_params.py --operation=delete --workload-id={workload_id} --organization={org_id} --location={location} - Confirm & Execute Ordered Deletion Sequence: Obtain explicit user confirmation, then run in strict bottom-up order:
bash
# Step 1: Delete child projects inside the workload folder first gcloud projects delete {project_id} --quiet # Step 2: Delete the provisioned Assured Workloads folder gcloud resource-manager folders delete {folder_id} # Step 3: Delete the Assured Workloads workload after folder deletion propagates gcloud assured workloads delete {workload_id} --organization={org_id} --location={location} --quiet- Propagation Delay & Note: Folder deletion state (
--etag) can take a brief propagation delay (15–60s) before Assured Workloads recognizes the folder as deleted. IfDELETE_REQUESTEDtransiently persists after deleting the folder, wait 15–20 seconds and retryERROR_CODE_WORKLOAD_NOT_EMPTYwithout a stalegcloud assured workloads delete(as deleting underlying resources changes the workload's concurrency token).--etag
- Propagation Delay &
当 Assured Workloads 工作负载已置备的 Cloud Resource Manager 文件夹()或子项目仍然存在时,无法删除该工作负载( / )。在删除已置备文件夹及其子项目之前,切勿运行 。
folders/{folder_id}FAILED_PRECONDITION: Workload is not emptyERROR_CODE_WORKLOAD_NOT_EMPTYgcloud assured workloads delete- 检查与校验: 运行 以确定已置备的文件夹(
gcloud assured workloads describe)和子项目(folders/{folder_id}),并使用{project_id}进行校验。python3 scripts/validate_params.py --operation=delete --workload-id={workload_id} --organization={org_id} --location={location} - 确认并按序执行删除流程: 获得用户明确确认后,严格按自底向上的顺序执行:
bash
# Step 1: Delete child projects inside the workload folder first gcloud projects delete {project_id} --quiet # Step 2: Delete the provisioned Assured Workloads folder gcloud resource-manager folders delete {folder_id} # Step 3: Delete the Assured Workloads workload after folder deletion propagates gcloud assured workloads delete {workload_id} --organization={org_id} --location={location} --quiet- 传播延迟与 提示: 文件夹删除状态(
--etag)可能需要短暂传播延迟(15–60 秒)后 Assured Workloads 才会识别为已删除。如果删除文件夹后仍短暂出现DELETE_REQUESTED,请等待 15–20 秒后重试ERROR_CODE_WORKLOAD_NOT_EMPTY,且不要携带过期的gcloud assured workloads delete(因为删除底层资源会改变工作负载的并发令牌)。--etag
- 传播延迟与
Workflow 4: Update an Assured Workloads workload (UpdateWorkload
& Compliance Updates)
UpdateWorkload工作流 4:更新 Assured Workloads 工作负载(UpdateWorkload
与合规更新)
UpdateWorkload4A. Update Workload Metadata & Notifications (gcloud assured workloads update
)
gcloud assured workloads update4A. 更新工作负载元数据与通知(gcloud assured workloads update
)
gcloud assured workloads update- Updatable Fields (at least one required):
- : 4–30 characters (
--display-name="{new_display_name}", no trailing spaces).[a-zA-Z0-9 -] - : Replaces the workload's label map (include existing labels to preserve them).
--labels=key1=val1,key2=val2 - : Enables or disables email notifications for organization policy compliance violations to Essential Contacts (Legal category).
--violation-notifications-enabled=true|false - : Current concurrency token from
--etag={etag}/describe.list
- Immutable Fields (Cannot Be Modified After Creation): ,
complianceRegime,location, andbillingAccountare immutable.partnercannot change a workload'sgcloud assured workloads updateorcomplianceRegimein-place; changing regimes requires creating a new Assured Workloads workload.location - Validate, Confirm, & Execute: Validate with , obtain explicit user confirmation, and run:
python3 scripts/validate_params.py --operation=update ...bashgcloud assured workloads update {workload_id} --organization={org_id} --location={location} \ [--display-name="{new_display_name}"] [--labels=key1=val1,key2=val2] \ [--violation-notifications-enabled=true|false] [--etag={etag}] --format=json
- 可更新字段(至少需提供一个):
- :4–30 个字符(
--display-name="{new_display_name}",不允许以空格结尾)。[a-zA-Z0-9 -] - :替换工作负载的标签映射(请包含已有标签以保留它们)。
--labels=key1=val1,key2=val2 - :启用或禁用在组织策略合规违规时向 Essential Contacts(Legal 类别)发送邮件通知。
--violation-notifications-enabled=true|false - :来自
--etag={etag}/describe的当前并发令牌。list
- 不可变字段(创建后无法修改): 、
complianceRegime、location和billingAccount均不可变。partner无法原地更改工作负载的gcloud assured workloads update或complianceRegime;变更制度需要创建新的 Assured Workloads 工作负载。location - 校验、确认与执行: 使用 校验,获得用户明确确认后运行:
python3 scripts/validate_params.py --operation=update ...bashgcloud assured workloads update {workload_id} --organization={org_id} --location={location} \ [--display-name="{new_display_name}"] [--labels=key1=val1,key2=val2] \ [--violation-notifications-enabled=true|false] [--etag={etag}] --format=json
4B. List & Apply Compliance Posture Updates (updates.list
& updates.apply
)
updates.listupdates.apply4B. 列出并应用合规态势更新(updates.list
与 updates.apply
)
updates.listupdates.applygcloud assured workloadsupdatesgcloud assured workloads updatescripts/manage_workload_updates.py--action=list--action=applygoogleapiclient.discovery.buildhttps://{location}-assuredworkloads.googleapis.com- vs.
AVAILABLEUpdate States:WITHDRAWN- (One Update Per Constraint): Each
AVAILABLEupdate record corresponds to an individual organization policy constraint update (AVAILABLE). If multiple updates aredetails.orgPolicyUpdate.suggestedPolicy.constraint, each corresponds to a different constraint and must be applied individually (or sequentially viaAVAILABLE)—applying the newest update does not apply older--update-id=ALLupdates for other constraints.AVAILABLE - (Superseded): When a newer policy update supersedes an older unapplied update for the same constraint, Assured Workloads marks the older update
WITHDRAWN. Filter for stateWITHDRAWNand never applyAVAILABLEupdates.WITHDRAWN
- Python Discovery API Pattern (,
updates.list, & LRO Polling):updates.applypythonimport time from google.api_core.client_options import ClientOptions from googleapiclient import discovery service = discovery.build( "assuredworkloads", "v1", client_options=ClientOptions( api_endpoint=f"https://{location}-assuredworkloads.googleapis.com" ), ) parent = f"organizations/{org_id}/locations/{location}/workloads/{workload_id}" # 1. List updates and filter for AVAILABLE state resp = ( service.organizations() .locations() .workloads() .updates() .list(parent=parent) .execute() ) available = [u for u in resp.get("updates", []) if u.get("state") == "AVAILABLE"] # 2. Apply each AVAILABLE update and poll the returned Long-Running Operation (LRO) for update in available: op = ( service.organizations() .locations() .workloads() .updates() .apply(name=update["name"], body={}) .execute() ) while not op.get("done", False): time.sleep(3) op = ( service.organizations() .locations() .operations() .get(name=op["name"]) .execute() )
gcloud assured workloadsupdatesgcloud assured workloads updatescripts/manage_workload_updates.py--action=list--action=applyhttps://{location}-assuredworkloads.googleapis.comgoogleapiclient.discovery.build- 与
AVAILABLE更新状态:WITHDRAWN- (每个约束对应一条更新): 每条
AVAILABLE更新记录对应单个组织策略约束更新(AVAILABLE)。若存在多条details.orgPolicyUpdate.suggestedPolicy.constraint更新,则每条对应不同的约束,必须逐条应用(或通过AVAILABLE顺序应用)——应用最新的一条更新不会顺带应用其他约束上较早的--update-id=ALL更新。AVAILABLE - (已被取代): 当同一约束的新策略更新取代了较早的未应用更新时,Assured Workloads 会将较早的更新标记为
WITHDRAWN。请过滤出状态为WITHDRAWN的更新,绝不应用AVAILABLE更新。WITHDRAWN
- Python Discovery API 模式(、
updates.list与 LRO 轮询):updates.applypythonimport time from google.api_core.client_options import ClientOptions from googleapiclient import discovery service = discovery.build( "assuredworkloads", "v1", client_options=ClientOptions( api_endpoint=f"https://{location}-assuredworkloads.googleapis.com" ), ) parent = f"organizations/{org_id}/locations/{location}/workloads/{workload_id}" # 1. List updates and filter for AVAILABLE state resp = ( service.organizations() .locations() .workloads() .updates() .list(parent=parent) .execute() ) available = [u for u in resp.get("updates", []) if u.get("state") == "AVAILABLE"] # 2. Apply each AVAILABLE update and poll the returned Long-Running Operation (LRO) for update in available: op = ( service.organizations() .locations() .workloads() .updates() .apply(name=update["name"], body={}) .execute() ) while not op.get("done", False): time.sleep(3) op = ( service.organizations() .locations() .operations() .get(name=op["name"]) .execute() )
Common Error Handling & Troubleshooting (scripts/diagnose_error.py
)
scripts/diagnose_error.py常见错误处理与故障排查(scripts/diagnose_error.py
)
scripts/diagnose_error.pyNever blindly retry deterministic , , , or errors. Run to match any error against the full Assured Workloads catalog.
400 INVALID_ARGUMENT403 PERMISSION_DENIED404 NOT_FOUNDFAILED_PRECONDITIONpython3 scripts/diagnose_error.py --error-message="{error_output_text}"ErrorInfo.reason对于确定性的 、、 或 错误,切勿盲目重试。运行 ,可将任意错误匹配到完整的 Assured Workloads 目录。
400 INVALID_ARGUMENT403 PERMISSION_DENIED404 NOT_FOUNDFAILED_PRECONDITIONpython3 scripts/diagnose_error.py --error-message="{error_output_text}"ErrorInfo.reasonTroubleshooting Folder creation was unsuccessful. Please try again.
(LRO Inspection)
Folder creation was unsuccessful. Please try again.故障排查 Folder creation was unsuccessful. Please try again.
(LRO 检查)
Folder creation was unsuccessful. Please try again.When fails with the generic message , do not blindly retry. Inspect the failed Long-Running Operation (LRO) in the same organization and location to retrieve the specific :
gcloud assured workloads createFolder creation was unsuccessful. Please try again.ErrorInfo.reasonbash
gcloud assured operations list --organization={org_id} --location={location} --format=json
gcloud assured operations describe {operation_id} --organization={org_id} --location={location} --format=json(Or run ).
python3 scripts/diagnose_error.py --fetch-latest-lro --organization={org_id} --location={location}Common Folder Creation Preconditions to Check in the LRO Error:
- Duplicate sibling folder display name (): A sibling folder with the same
ERROR_CODE_FOLDER_NAME_UNIQUENESSalready exists under the target parent (--display-nameororganizations/{org_id}). Choose a uniquefolders/{parent_folder_id}or a different--display-name.--provisioned-resources-parent - Nesting inside an existing Assured Workloads folder (): Assured Workloads folders cannot be nested inside another Assured Workloads folder. Specify a standard non-workload parent folder or omit
ERROR_CODE_INVALID_PROVISIONED_RESOURCES_PARENT.--provisioned-resources-parent - Folder quota or nesting depth limit (): The target parent reached the Cloud Resource Manager 300 direct child-folder quota or the 10-level folder nesting depth limit.
ERROR_CODE_FOLDER_CREATION_PRECONDITION_FAILED
当 因通用错误信息 失败时,不要盲目重试。请在同一组织与位置下检查失败的 Long-Running Operation(LRO),以获取具体的 :
gcloud assured workloads createFolder creation was unsuccessful. Please try again.ErrorInfo.reasonbash
gcloud assured operations list --organization={org_id} --location={location} --format=json
gcloud assured operations describe {operation_id} --organization={org_id} --location={location} --format=json(或运行 )。
python3 scripts/diagnose_error.py --fetch-latest-lro --organization={org_id} --location={location}LRO 错误中需要检查的常见文件夹创建前置条件:
- 同级文件夹显示名重复(): 目标父级(
ERROR_CODE_FOLDER_NAME_UNIQUENESS或organizations/{org_id})下已存在同名folders/{parent_folder_id}的同级文件夹。请更换唯一的--display-name或改用不同的--display-name。--provisioned-resources-parent - 嵌套在已有 Assured Workloads 文件夹内(): Assured Workloads 文件夹不能嵌套在另一个 Assured Workloads 文件夹内。请指定标准的非工作负载父文件夹,或省略
ERROR_CODE_INVALID_PROVISIONED_RESOURCES_PARENT。--provisioned-resources-parent - 文件夹配额或嵌套深度限制(): 目标父级已达到 Cloud Resource Manager 的 300 个直属子文件夹配额,或达到 10 层文件夹嵌套深度上限。
ERROR_CODE_FOLDER_CREATION_PRECONDITION_FAILED
Reference Documentation
参考文档
- references/regimes.md: Complete table of all 45 Assured Workloads V1 compliance regimes, modern enums, legacy aliases, partner enums, and supported regional/multi-regional locations.
DATA_BOUNDARY_FOR_* - Official Google Cloud Documentation: Assured Workloads Overview, Supported Locations & Data Boundaries, Assured Workloads Pricing, Apply Workload Updates, Sovereign Controls by Partners Overview, Sovereign Controls by Partners Locations.
- references/regimes.md: 包含全部 45 个 Assured Workloads V1 合规制度、现代 枚举值、旧别名、合作伙伴枚举值以及受支持的区域/多区域位置的完整表格。
DATA_BOUNDARY_FOR_* - Google Cloud 官方文档: Assured Workloads 概览、支持的位置与数据边界、Assured Workloads 定价、应用工作负载更新、合作伙伴主权控制概览、合作伙伴主权控制位置。