
Google Cloud Storage 存储桶架构化 Terraform 配置指南从 Draft Plan 到 google_storage_bucket 完整映射实践【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills本文是 Google Cloud Storage Bucket Architect 技能SKILL.md中 Terraform 输出格式的权威参考核心解决如何将 Phase 2 产出的 Draft Bucket Creation Plan 逐字段翻译为可维护、可审计的 Terraform 配置这一问题。读者读完本文后将掌握google_storage_bucket全量字段的映射规则、CSEK/CMEK 加密强制、IP 过滤、生命周期、CORS、Bucket Lock 与 Object LockWORM等高级配置模板并能够对照五个真实用例安全基线、合规敏感数据、静态网站、AI/ML 训练检查点、法律归档直接生成可复制的 Terraform 片段。[!IMPORTANT]切勿自动应用apply本文中的配置。本文的定位是定义从 Draft Plan 到 Terraform 片段的映射与翻译规则生成出的配置片段必须先呈现给用户确认再交由用户决定是否集成到其工程中。这与该技能在 phase_output.md 中定义的执行纪律一致Terraform/SDK 类输出只展示片段、不代用户执行。一、Terraform 在整个 Bucket 架构流程中的位置该技能采用三阶段工作流详见 SKILL.md 中的 Phase Summary Table阶段输入输出参考文件1. Preflight / Project ChecksProject ID项目级安全基线TLS、HTTPS、HMAC、Lienphase_project_checks.md2. Draft Bucket Create Plan用户用例与需求推荐配置草案 桶名可用性状态phase_draft_plan.md3. Output Based on User IntentPlan 用户偏好格式创建命令 / 配置片段phase_output.mdTerraform 正是 Phase 3 的四种输出格式之一另外三种为 gcloud、REST JSON、SDK。当用户在提示词中明确要求 Terraform例如give me Terraform时直接进入 Terraform 映射流程当格式未指定时需要询问用户从四种格式中选择其一。选定 Terraform 后依据本文的映射表与模板将已确认的Draft Bucket Create Plan 翻译为 Terraform 配置并在最终输出中附上Other Recommendations如 Cloud Monitoring、Storage Insights、必要的 IAM 绑定同时提示版本支持限制例如 Encryption Enforcement 配置在部分 SDK 中不支持时应改用 REST、gcloud 或 Terraform。二、Draft Plan 字段到 Terraform 属性的完整映射表下表是该技能定义的核心翻译规则任何 Plan 字段都必须按下表落到对应的google_storage_bucket属性或独立资源上Draft Plan 字段 / 设置Terraform 资源与属性说明 / 动作Bucket Namegoogle_storage_bucket.name必填字符串必须全局唯一。Projectgoogle_storage_bucket.project可选缺省时使用 provider 的项目。Locationgoogle_storage_bucket.location必填例如us-central1、us。Zonal 桶Rapid 存储类必须设置为区域如us-east1。Placementgoogle_storage_bucket.custom_placement_config.data_locations字符串列表例如[us-east1, us-west1]自定义双区域或[us-east1-b]zonal 桶。Replication Speed (RPO)google_storage_bucket.rpo字符串例如ASYNC_TURBO用于双区域桶的异步涡轮复制。Storage Classgoogle_storage_bucket.storage_class字符串例如STANDARD、NEARLINE、COLDLINE、ARCHIVE、RAPID。Zonal 位置必须使用RAPID。注意启用 Autoclass 时storage_class 只能保持STANDARD不得设为其他值。UBLAgoogle_storage_bucket.uniform_bucket_level_access布尔值始终设为true安全默认。Public Access Preventiongoogle_storage_bucket.public_access_prevention字符串enforced或inherited。Soft Deletegoogle_storage_bucket.soft_delete_policy.retention_duration_seconds秒数例如6048007 天设为0表示禁用。Zonal 桶不支持 Soft Delete该字段可省略或显式设为 0。注意省略该块时Cloud Storage 默认启用 7 天。最小值6048007 天最大值777600090 天。Object Versioninggoogle_storage_bucket.versioning.enabled布尔值启用/禁用版本管理。Encryption (CMEK)google_storage_bucket.encryption.default_kms_key_name字符串完整密钥 IDprojects/.../cryptoKeys/...。注意需要 Cloud Storage Service Agentservice-PROJECT_NUMgs-project-accounts.iam.gserviceaccount.com对密钥拥有roles/cloudkms.cryptoKeyEncrypterDecrypter角色。Restrict Encryption (CSEK)google_storage_bucket的 encryption 强制块配置加密限制详见下文模板。Autoclassgoogle_storage_bucket.autoclass.enabled布尔值设为true启用。注意与 zonal 桶不兼容。Hierarchical Namespacegoogle_storage_bucket.hierarchical_namespace.enabled布尔值设为true启用。注意与 Bucket Lockretention policy、对象版本管理、Object Retention 互斥且必须在桶创建时启用不可逆。Labelsgoogle_storage_bucket.labels字符串映射Map。IP Filteringgoogle_storage_bucket.ip_filterBlock定义 IP 限制规则详见下文模板。Lifecycle Policies (OLM)google_storage_bucket.lifecycle_rule一个或多个块模板见下文。CORSgoogle_storage_bucket.cors一个或多个块。Website Configurationgoogle_storage_bucket.website包含main_page_suffix与not_found_page的块。Public IAM Policygoogle_storage_bucket_iam_member独立资源向allUsers授予roles/storage.objectViewer。Pub/Sub Notificationsgoogle_storage_notification独立资源将桶与 Pub/Sub topic 关联。注意Cloud Storage service agent通过google_storage_project_service_account数据源获取必须对 topic 拥有roles/pubsub.publisher通常经google_pubsub_topic_iam_binding授予且 notification 资源应通过depends_on指向该 IAM binding。Bucket Retention Periodgoogle_storage_bucket.retention_policy.retention_period秒数例如777600090 天。Lock Bucket Retention Policygoogle_storage_bucket.retention_policy.is_locked布尔值设为true永久锁定策略。不可逆。Object Retention (Object Lock)google_storage_bucket.enable_object_retention布尔值启用对象级保留。Set Object Retentiongoogle_storage_bucket_object.retention位于 bucket object 资源内部的块包含mode与retain_until_time。Rapid Cachegoogle_storage_anywhere_cache独立资源将桶与 Rapid Cache zone 关联。三、辅助配置模板Helper Configuration Templates以下模板由该技能定义用于处理映射表中标记为See below的高级块可独立复用。3.1 加密强制CSEK 限制控制允许哪些加密类型FullyRestricted表示完全禁止该类型的加密密钥使用NotRestricted表示不限制。安全默认要求对 CSEK客户提供密钥设置为FullyRestricted除非业务明确需要resource google_storage_bucket secure_bucket { name my-secure-bucket location us-central1 uniform_bucket_level_access true encryption { customer_supplied_encryption_enforcement_config { restriction_mode FullyRestricted } customer_managed_encryption_enforcement_config { restriction_mode NotRestricted } google_managed_encryption_enforcement_config { restriction_mode NotRestricted } } }该模板对应 phase_draft_plan.md 中的安全默认项Enforced Restrict Encryption Types: Restrict Customer-Supplied Encryption Keys (CSEK)——除非用户显式要求否则默认限制 CSEK。注意Terraform 中该encryption块属于较新能力若所用 provider 版本不支持请改用 REST 或 gcloud 方式配置phase_output.md 要求最终输出中必须包含此类版本警告。3.2 IP FilteringIP 过滤将桶访问限制在指定公网 CIDR 或 VPC 网络resource google_storage_bucket ip_filtered_bucket { name my-ip-filtered-bucket location us-central1 uniform_bucket_level_access true ip_filter { mode Enabled allow_all_service_agent_access true allow_cross_org_vpcs false public_network_source { allowed_ip_cidr_ranges [ 192.0.2.0/24 ] } vpc_network_sources { network projects/PROJECT_ID/global/networks/NETWORK_NAME allowed_ip_cidr_ranges [ 10.0.0.0/16 ] } } }IP 过滤的限制条件来自 phase_draft_plan.md 的 IP Filtering Decisions Limitations每个桶最多指定200 个 IP CIDR 块公网 VPC每个桶最多指定25 个 VPC 网络区域端点regional endpoints仅在使用 Private Service ConnectPSC时才与 IP 过滤兼容gRPC direct path 不支持在纯 IPv4 VM 上使用 IP 过滤——若使用 gRPC direct pathVPC 网络必须启用 IPv6不要对需要被以下服务访问的桶启用 IP 过滤BigQuery数据加载、表数据导出、查询结果导出、外部表查询、App Engine 标准环境应用除非经 VPC 访问、Cloud Shell。3.3 生命周期策略OLMresource google_storage_bucket lifecycle_bucket { name my-lifecycle-bucket location us-central1 lifecycle_rule { action { type Delete } condition { age 365 } } }action.type常用取值包括Delete删除对象与AbortIncompleteMultipartUpload中止未完成的分片上传condition.age表示对象创建后经过的天数。结合各用例参考文件OLM 的典型用法有敏感数据场景下自动中止未完成分片上传避免隐藏存储成本age 7、归档场景下到期自动清理如age 2555即 7 年、AI/ML 场景下删除过期检查点如age 14。3.4 CORS 配置resource google_storage_bucket cors_bucket { name my-cors-bucket location us-central1 cors { origin [http://example.com] method [GET, PUT, POST, DELETE] response_header [Content-Type, Authorization] max_age_seconds 3600 } }origin允许的源域名列表、method允许的 HTTP 方法、response_header允许暴露给浏览器的响应头、max_age_seconds预检请求缓存时长。注意安全默认原则对敏感数据用例CORS 应当禁用或限制到可信内部域避免跨源 Web 数据外泄见 sensitive_data.md。四、完整用例从 Draft Plan 到 Terraform 的端到端翻译以下五个示例完整覆盖该技能定义的常见用例每个示例都从Input Draft PlanPhase 2 产物出发展示如何逐字段翻译为Output Terraform Configuration。示例 1标准安全桶安全基线Input Draft PlanBucket Namemy-company-secure-bucketProjectmy-security-projectLocationus-east1Storage ClassSTANDARDUBLAEnabledPublic Access Prevention (PAP)EnforcedSoft DeleteEnabled7 天Encryption EnforcementCSEK RestrictedOutput Terraform Configurationresource google_storage_bucket secure_bucket { name my-company-secure-bucket location us-east1 storage_class STANDARD uniform_bucket_level_access true public_access_prevention enforced encryption { customer_supplied_encryption_enforcement_config { restriction_mode FullyRestricted } } soft_delete_policy { retention_duration_seconds 604800 # 7 days } }这是该技能全部用例的安全基线模板UBLA 启用、PAP 强制、CSEK 限制、Soft Delete 默认 7 天。四个设置均为 phase_draft_plan.md Step 1 规定的无条件默认配置——即使是最简单的桶也必须带上。唯一例外是用户用例显式要求公网访问静态网站、公共媒体托管时PAP 可以放宽为inherited见示例 3。示例 2敏感数据 / 合规PII、HIPAA、金融Input Draft PlanBucket Namemy-compliance-pii-bucketProjectmy-compliance-projectLocationus-central1Storage ClassSTANDARDAutoclass 负责后续自动转换UBLAEnabledPublic Access Prevention (PAP)EnforcedEncryption EnforcementRestrict CSEKEncryptionCustomer-Managed Key (CMEK)Soft DeleteEnabled7 天Bucket Lock (Retention Policy)Enabled90 天UnlockedUse-case specific settingsAutoclass: EnabledCMEK Key IDprojects/my-kms-project/locations/us-central1/keyRings/my-keyring/cryptoKeys/my-keyLabelsdata-classpii、ownersecurity-teamLifecycle7 天后中止未完成的分片上传IP Filtering限制为192.0.2.0/24企业网段与 VPC 网络10.0.0.0/16禁止跨组织 VPC。Output Terraform Configurationresource google_storage_bucket compliance_bucket { name my-compliance-pii-bucket location us-central1 storage_class STANDARD uniform_bucket_level_access true public_access_prevention enforced encryption { default_kms_key_name projects/my-kms-project/locations/us-central1/keyRings/my-keyring/cryptoKeys/my-key customer_supplied_encryption_enforcement_config { restriction_mode FullyRestricted } customer_managed_encryption_enforcement_config { restriction_mode NotRestricted } google_managed_encryption_enforcement_config { restriction_mode NotRestricted } } retention_policy { retention_period 7776000 # 90 days in seconds is_locked false # Unlocked by default } autoclass { enabled true } labels { >resource google_storage_bucket static_website { name www.my-company-site.com location US storage_class STANDARD uniform_bucket_level_access true public_access_prevention inherited website { main_page_suffix index.html not_found_page 404.html } cors { origin [*] method [GET, HEAD] response_header [Content-Type] max_age_seconds 3600 } versioning { enabled true } soft_delete_policy { retention_duration_seconds 604800 # 7 days } } resource google_storage_bucket_iam_member public_viewer { bucket google_storage_bucket.static_website.name role roles/storage.objectViewer member allUsers }这是唯一允许放宽 PAP 的用例仅当用例显式要求公网访问静态网站托管、公共媒体托管且用户明确表示需要时PAP 才可以设为inheritedphase_draft_plan.md 中 PAP 的例外条款。注意公网读取通过独立的google_storage_bucket_iam_member资源授予——这是映射表中Public IAM Policy一行的标准实现与google_storage_bucket_iam_policy/google_storage_bucket_iam_binding相比粒度更精细、不会覆盖桶上其他既有 IAM 绑定。示例 4AI/ML 检查点Zonal 桶 / Rapid BucketInput Draft PlanBucket Namemy-training-checkpoints-us-east1-bProjectmy-ai-projectLocationus-east1区域Placementus-east1-bZone 级同址追求高性能Storage ClassRAPIDZonal 桶必须显式指定UBLAEnabledHierarchical Namespace 的前置要求Public Access Prevention (PAP)EnforcedEncryptionGoogle-managed keySoft DeleteDisabled0 天Zonal 桶不支持 Soft DeleteUse-case specific settingsHierarchical NamespaceEnabledZonal 桶必需Lifecycle删除超过 14 天的检查点文件Output Terraform Configurationresource google_storage_bucket checkpoint_bucket { name my-training-checkpoints-us-east1-b location us-east1 storage_class RAPID uniform_bucket_level_access true public_access_prevention enforced custom_placement_config { data_locations [us-east1-b] } hierarchical_namespace { enabled true } soft_delete_policy { retention_duration_seconds 0 } lifecycle_rule { action { type Delete } condition { age 14 } } }Zonal 桶Rapid Bucket 产品的约束在 phase_draft_plan.md 中有专门章节必须严格遵守Storage Class 必须显式设为RAPID不能默认STANDARDSoft Delete 必须显式禁用retention_duration_seconds 0因为 zonal 桶不支持该特性Hierarchical Namespace 必须启用zonal 桶的硬性要求UBLA 必须启用zonal 桶的硬性要求Location/Zone 以用户提示词为准如us-east4/us-east4-a不要浪费时间查询验证错误留待命令/片段执行失败时处理。从 storage_for_ai.md 看Zonal 桶面向模型检查点写入与高 QPS 写密集训练任务支持 BiDi 协议流式追加、单对象最高 5TiB而面向训练/推理阶段的读密集场景则推荐为已有桶挂载 Rapid Cache独立资源google_storage_anywhere_cache只读、默认 TTL 24 小时、可开启 ingest-on-write 规避冷启动。两种方案都要求与计算集群GPU/TPU精确同 zone 共置以消除网络瓶颈。OLM 规则本示例为 14 天删除过期检查点对控制 zonal 高性能存储的成本至关重要——Zonal 桶是永久存储、数据直到删除为止存活若不做生命周期清理会带来高昂账单。示例 5WORM 法律归档Object Lock 对象级保留Input Draft PlanBucket Namemy-legal-archive-bucketProjectmy-legal-projectLocationus-east1UBLAEnabledPublic Access Prevention (PAP)EnforcedSoft DeleteEnabled7 天EncryptionCustomer-Managed Key (CMEK)强烈推荐Use-case specific settingsStorage ClassARCHIVEObject LockPer-Object RetentionEnabledCMEK Key IDprojects/my-kms-project/locations/us-east1/keyRings/my-keyring/cryptoKeys/my-keyLabelscompliance-typeregulatory、retention-period7y强烈推荐的治理标签Lifecycle删除超过 7 年2555 天的对象强烈推荐的 OLMOutput Terraform Configurationresource google_storage_bucket legal_archive { name my-legal-archive-bucket location us-east1 storage_class ARCHIVE uniform_bucket_level_access true public_access_prevention enforced enable_object_retention true encryption { default_kms_key_name projects/my-kms-project/locations/us-east1/keyRings/my-keyring/cryptoKeys/my-key } labels { compliance-type regulatory retention-period 7y } lifecycle_rule { action { type Delete } condition { age 2555 } } soft_delete_policy { retention_duration_seconds 604800 # 7 days } }要点解析ARCHIVE存储类归档成本最低但需警惕高额取回费与最短保留期例如 Archive 最少 365 天详见 archiving_compliance.mdenable_object_retention true仅开启对象级保留能力具体保留策略仍需在对象级配置见下一节存储桶类型建议合规场景强烈建议 Regional 或 Dual-Regional若国家法律强制数据物理驻留边界应避免 Multi-Regional治理标签compliance-type与retention-period这类元数据标签被列为强烈推荐用于成本中心与策略追踪生命周期清理age 25557 年自动清除过期归档记录既缓解合规责任又控制存储成本。五、对象级保留Object Retention配置开启enable_object_retention后需要在具体对象上应用保留策略WORM 的对象级实现Write Once Read Many[!CAUTION] 在 Terraform 中设置mode Locked将永久锁定对象的保留策略。一旦锁定该策略无法移除保留期只能延长、不能缩短。resource google_storage_bucket_object case_file { name case_file_abc.pdf bucket google_storage_bucket.legal_archive.name source path/to/local/file.pdf retention { mode Locked retain_until_time 2030-12-31T23:59:59Z } }Bucket Lock桶级保留策略与 Object Lock对象级保留的选择来自 phase_draft_plan.md 的 Retention Policy Decisions维度Bucket Lock桶级Object Lock对象级粒度桶级作用于桶内所有对象对象级桶上开启、逐对象配置执行保留期内对象不可删除/覆盖不同对象可有不同保留日期也可无保留限制锁定后保留期不可缩短/移除、策略不可解锁除 Google Cloud Console 外必须在桶创建时启用最佳场景所有数据统一合规要求如交易日志统一保留 7 年WORM 合规中不同文件生命周期不同如法律文档按结案日期各异六、生成 Terraform 前的必备前置动作Terraform 片段不是凭空产生的它必须严格承接上文三个阶段的纪律安全基线先行phase_draft_plan.md Step 1无论用例如何UBLA 启用、CSEK 限制、Soft Delete 默认 7 天是强制默认项Rapid/Zonal 桶例外——Soft Delete 必须显式禁用为 0。桶名可用性检查Step 3Cloud Storage 桶名全局唯一生成任何创建输出前必须先运行只读检查。其命令与状态判读200 → ❌ 已占用、404 → ✅ 可用、403 → ❌ 他项目占用、其他失败 → ⚠️ 未验证详见 phase_draft_plan.md只有 ✅ 可用或 ⚠️ 未验证的名称才能呈现 Plan❌ 名称必须先更换再重跑检查。若创建时仍返回 409说明名称在检查后被抢占应建议换名并重新生成输出见 SKILL.md 的 Error Handling 表。Plan 确认与不可逆警告Step 4Plan 必须先呈现给用户确认。若包含 Bucket Lock / Object Lock必须显式警告锁定不可逆——锁定后保留期不能缩短或移除任何人在保留期内包括项目管理员与 Google Cloud Support都无法删除或覆盖数据——并确认 Locked / Unlocked 与时长。输出与交付纪律phase_output.mdTerraform 配置直接展示给用户集成不主动代用户 apply最终输出必须附带 Other Recommendations如 Cloud Monitoring、Storage Insights、前置 IAM 绑定并说明用途与配置指引。前置 IAM 绑定涉及 CMEK 需预置 Service Agent 的roles/cloudkms.cryptoKeyEncrypterDecrypter涉及 Pub/Sub 通知需预置roles/pubsub.publisher并让 notification 资源depends_on该绑定——这两类前置条件不会出现在桶资源本体中是实际落地时最容易踩坑的部分。七、与其他输出格式及用例文档的关系本文是 SKILL.md 中 Provisioning Output Formats 族的一支与该族其他格式并列gcloud CLIgcloud.md、REST JSON APIrest.md、SDK 客户端库sdk.md 及 C/Go/Java/Python 分册。同一份 Draft Plan 可以翻译为任一种格式字段语义完全一致——本文定义的映射表即为各格式间的语义锚点。针对具体业务场景的推荐配置矩阵即 Phase 2 Step 2 的用例映射分散在九个用例参考文件中敏感数据sensitive_data.md、静态网站static_website.md、长期归档合规archiving_compliance.md、备份与容灾backup_dr.md、AI/MLstorage_for_ai.md等。用 Terraform 落地时务必先按用例参考文件确定各特性的 Required / Highly Recommended 评级再对照本文映射表生成配置——例如备份场景推荐 Regional Storage Transfer Service 而非双区域桶、OLM 反而不推荐用于备份转换这类用例级差异是配置质量的最终裁决者。【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考