ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

使用 Go SDK 打造安全的 Cloud Storage 存储桶:从 Draft Bucket Creation Plan 到可运行代码

使用 Go SDK 打造安全的 Cloud Storage 存储桶:从 Draft Bucket Creation Plan 到可运行代码 使用 Go SDK 打造安全的 Cloud Storage 存储桶从 Draft Bucket Creation Plan 到可运行代码【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills导读本文基于google-cloud-storage-bucket-architectSkill 的 Go SDK 实战指南系统讲解如何把 Phase 2 产出的Draft Bucket Creation Plan存储桶创建草案计划逐字段翻译为cloud.google.com/go/storage客户端库的可运行 Go 代码。你将掌握标准安全桶、敏感数据合规桶、静态网站托管桶、AI/ML 检查点 Zonal 桶、WORM 归档桶五个典型场景的完整建桶代码理解BucketAttrs中 UBLA、PAP、Soft Delete、CSEK 限制、CMEK、Object Lock 等安全特性的底层映射以及 Go v1 客户端未暴露特性如 IP Filtering的三种工程化绕行方案。背景Draft Plan 与 Go SDK 的翻译关系在google-cloud-storage-bucket-architectSkill 的编排中存储桶创建遵循严格的三阶段工作流见 SKILL.mdPhase 1 – Preflight/Project Checks校验项目级安全设置详见 phase_project_checks.md。Phase 2 – Draft Bucket Create Plan分析用户工作负载套用 secure-by-default 基线产出一份结构化的草案计划详见 phase_draft_plan.md。Phase 3 – Output Based on User Intent把草案计划翻译成用户指定格式gcloud / REST / Terraform / SDKSDK 片段展示给用户集成详见 phase_output.md。本文聚焦的 sdk_go.md 就是 Phase 3 在 Go 语言侧的翻译规则与代码模板。它要求把草案计划中的每一项设置Bucket Name、Location、Storage Class、UBLA、PAP、Soft Delete、Encryption Enforcement、生命周期规则等一一映射到storage.BucketAttrs结构体的对应字段最终通过bucket.Create(ctx, projectID, attrs)一次性完成建桶。[!IMPORTANT] Skill 明确规定SDK 片段只展示给用户自行集成绝不自动执行创建操作。任何变更加载命令gcloud、REST在获得用户明确确认前均不得执行。环境准备与版本要求依赖引入Go 客户端库的依赖声明为cloud.google.com/go/storageimport ( context cloud.google.com/go/storage )版本硬性门槛Encryption Enforcement Config 需要 v1.61.0草案计划的 secure-by-default 基线中包含Encryption Enforcement加密类型强制即限制 Customer-Supplied Encryption KeysCSEK。在 Go SDK 中该能力由BucketAttrs.CustomerSuppliedEncryptionEnforcementConfig暴露CustomerSuppliedEncryptionEnforcementConfig: storage.EncryptionEnforcementConfig{ RestrictionMode: storage.FullyRestricted, },[!IMPORTANT]Encryption Enforcement Config 要求 Go Cloud Storage SDK 版本 ≥ 1.61.0。若你当前使用的版本低于 1.61.0必须改用 REST API、gcloud 或 Terraform 来配置该加密限制项存储桶创建成功后仍可通过 SDK 继续管理其他属性。在 sdk.md 的特性支持矩阵中可以看到各语言 SDK 的版本门槛对比Python 为 v3.10.0C 为 v2.46.0Java 为 v2.55.0Go 为 v1.61.0——Go 是其中对版本要求最敏感的一门语言升级依赖前务必核对。客户端初始化ctx : context.Background() client, err : storage.NewClient(ctx)storage.NewClient会使用 Application Default CredentialsADC完成认证因此运行环境需要先通过gcloud auth application-default login或为服务账号注入凭据。若需要显式指定项目或自定义 HTTP 选项可使用storage.NewClient(ctx, option.WithCredentialsFile(...))等option扩展。示例 1标准安全桶Baseline——最小安全基线的完整映射这是最基础的场景对应phase_draft_plan.md中无论何种用例都必须启用的安全默认值。输入草案计划配置项取值Bucket Namemy-company-secure-bucketProjectmy-security-projectLocationus-east1Storage ClassSTANDARDUBLAEnabledPublic Access Prevention (PAP)EnforcedSoft DeleteEnabled7 天Encryption EnforcementCSEK RestrictedGo SDK 实现import ( context time cloud.google.com/go/storage ) func CreateSecureBucket(ctx context.Context, client *storage.Client, projectID, bucketName string) (*storage.BucketAttrs, error) { bucket : client.Bucket(bucketName) attrs : storage.BucketAttrs{ Location: us-east1, StorageClass: STANDARD, UniformBucketLevelAccess: storage.UniformBucketLevelAccess{ Enabled: true, }, PublicAccessPrevention: storage.PublicAccessPreventionEnforced, CustomerSuppliedEncryptionEnforcementConfig: storage.EncryptionEnforcementConfig{ RestrictionMode: storage.FullyRestricted, }, SoftDeletePolicy: storage.SoftDeletePolicy{ RetentionDuration: 7 * 24 * time.Hour, }, } if err : bucket.Create(ctx, projectID, attrs); err ! nil { return nil, err } return bucket.Attrs(ctx) }字段语义逐个拆解Location: us-east1指定区域位置。多区域可写US/EU双区域需配合CustomPlacementConfig见示例 4。StorageClass: STANDARD热数据标准存储类。枚举还包括NEARLINE、COLDLINE、ARCHIVE以及 Zonal 桶专用的RAPID。UniformBucketLevelAccess.Enabled: true启用 UBLA停用对象级 ACL使权限统一收敛到 IAM避免遗留 ACL 覆盖桶级 IAM 策略。这是所有安全用例的Required项。PublicAccessPrevention: storage.PublicAccessPreventionEnforced强制执行公共访问防护禁止出现allUsers/allAuthenticatedUsers的公开授权。取值还包含storage.PublicAccessPreventionInherited继承组织策略见示例 3。CustomerSuppliedEncryptionEnforcementConfig限制客户自带加密密钥CSEK。storage.FullyRestricted表示完全限制只允许 Google 管理密钥与 CMEK。这是 Phase 2 的 secure-by-default 强制项需要 SDK ≥ 1.61.0。SoftDeletePolicy.RetentionDuration: 7 * 24 * time.Hour启用 7 天软删除防止脚本或管理员误删后数据无法找回。注意 Zonal 桶不支持软删除必须显式置 0见示例 4。创建成功后调用bucket.Attrs(ctx)回读元数据可用于验证配置是否与预期一致。示例 2敏感数据 / 合规桶PII、HIPAA、金融数据该场景对应 sensitive_data.md 的设计建议CMEK 加密、强制 PAP、生命周期清理未完成的分片上传、标签治理。输入草案计划配置项取值Bucket Namemy-compliance-pii-bucketProjectmy-compliance-projectLocationus-central1Storage ClassSTANDARDAutoclass 自动处理分层UBLAEnabledPAPEnforcedEncryption EnforcementRestrict CSEKEncryptionCMEKSoft DeleteEnabled7 天Bucket LockRetention PolicyEnabled90 天UnlockedAutoclassEnabledCMEK 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不含跨组织 VPCGo SDK 实现import ( context time cloud.google.com/go/storage ) func CreateComplianceBucket(ctx context.Context, client *storage.Client, projectID, bucketName, kmsKeyID string) (*storage.BucketAttrs, error) { bucket : client.Bucket(bucketName) attrs : storage.BucketAttrs{ Location: us-central1, StorageClass: STANDARD, UniformBucketLevelAccess: storage.UniformBucketLevelAccess{ Enabled: true, }, PublicAccessPrevention: storage.PublicAccessPreventionEnforced, Encryption: storage.BucketEncryption{ DefaultKMSKeyName: kmsKeyID, }, CustomerSuppliedEncryptionEnforcementConfig: storage.EncryptionEnforcementConfig{ RestrictionMode: storage.FullyRestricted, }, // NOTE: IP Filtering is not supported via attributes in this Go client // library version. This must be configured using the REST API or gcloud. RetentionPolicy: storage.RetentionPolicy{ RetentionPeriod: 90 * 24 * time.Hour, }, Autoclass: storage.Autoclass{ Enabled: true, }, Labels: map[string]string{ data-class: pii, owner: security-team, }, Lifecycle: storage.Lifecycle{ Rules: []storage.LifecycleRule{ { Action: storage.LifecycleAction{ Type: AbortIncompleteMultipartUpload, }, Condition: storage.LifecycleCondition{ AgeInDays: 7, }, }, }, }, SoftDeletePolicy: storage.SoftDeletePolicy{ RetentionDuration: 7 * 24 * time.Hour, }, } if err : bucket.Create(ctx, projectID, attrs); err ! nil { return nil, err } return bucket.Attrs(ctx) }要点解析CMEKEncryption.DefaultKMSKeyName指定 Cloud KMS 密钥全路径。敏感数据场景强烈建议使用 CMEK或 KMS Autokey 动态生成密钥而不是 CSEK。Bucket Lock桶级保留策略RetentionPolicy.RetentionPeriod设 90 天对应草案中的 Bucket Lock (90 days, Unlocked)。注意Unlocked 状态意味着策略可调整一旦通过LockRetentionPolicy锁定期限只能延长不能缩短锁定调用方式见后文特性矩阵。桶级保留策略作用于桶内所有对象。AutoclassAutoclass.Enabled让存储类随访问频率自动迁移热数据留在 STANDARD冷数据下沉到低成本档位无需人工干预。生命周期规则LifecycleAction.Type: AbortIncompleteMultipartUpload配合AgeInDays: 7自动中止超过 7 天的未完成分片上传避免残留分片产生隐藏成本。该规则正是 sensitive_data.md 中Highly Recommended的成本治理项。标签治理Labels中的data-classpii与ownersecurity-team支撑数据分级与成本中心追踪。IP Filtering 的重要坑Go v1 客户端库未暴露IP Filtering 属性代码注释已明确说明草案中的网段限制必须改用 REST API 或 gcloud 完成。这也是 SDK 指南中未暴露特性处理的典型场景具体绕行方案见后文。示例 3静态网站托管桶公开访问 网站配置 CORS对应 static_website.mdPAP 必须设为 Inherited 以放行公开流量同时通过 IAM 将roles/storage.objectViewer授予allUsers。输入草案计划配置项取值Bucket Namewww.my-company-site.comProjectmy-frontend-projectLocationUS多区域Storage ClassSTANDARDUBLAEnabledPAPInherited禁用强制防护以允许公开访问Soft DeleteEnabled7 天Website Config主页index.html、404 页404.htmlPublic Access必须allUsers→roles/storage.objectViewerCORS允许任意域名的 GET/HEAD/OPTIONSVersioningEnabledGo SDK 实现import ( context time cloud.google.com/go/iam cloud.google.com/go/storage ) func CreateStaticWebsiteBucket(ctx context.Context, client *storage.Client, projectID, bucketName string) (*storage.BucketAttrs, error) { bucket : client.Bucket(bucketName) attrs : storage.BucketAttrs{ Location: US, StorageClass: STANDARD, UniformBucketLevelAccess: storage.UniformBucketLevelAccess{ Enabled: true, }, PublicAccessPrevention: storage.PublicAccessPreventionInherited, VersioningEnabled: true, SoftDeletePolicy: storage.SoftDeletePolicy{ RetentionDuration: 7 * 24 * time.Hour, }, Website: storage.BucketWebsite{ MainPageSuffix: index.html, NotFoundPage: 404.html, }, CORS: []storage.CORS{{ MaxAge: 3600 * time.Second, Methods: []string{GET, HEAD, OPTIONS}, Origins: []string{*}, ResponseHeaders: []string{Content-Type}, }}, } if err : bucket.Create(ctx, projectID, attrs); err ! nil { return nil, err } // Grant public access iamHandle : bucket.IAM() policy, err : iamHandle.Policy(ctx) if err ! nil { return nil, err } policy.Add(iam.AllUsers, roles/storage.objectViewer) if err : iamHandle.SetPolicy(ctx, policy); err ! nil { return nil, err } return bucket.Attrs(ctx) }要点解析PAP 的例外处理这是唯一允许放开 PAP 的场景公开网站需要匿名读取。storage.PublicAccessPreventionInherited表示不强制覆盖交由组织级策略决定。网站配置Website.MainPageSuffix/NotFoundPage对应草案的index.html/404.html。注意仅当 Location 为多区域US时才支持这种经典的 Storage 静态网站 端点访问方式。CORSstorage.CORS切片中的Methods限定为GET/HEAD/OPTIONSOrigins: [*]允许任意来源MaxAge: 3600秒缓存预检结果。公开授权的 IAM 流程建桶后通过bucket.IAM()读取策略 →policy.Add(iam.AllUsers, roles/storage.objectViewer)→SetPolicy写回。iam.AllUsers即匿名主体。Versioning Soft Delete 双重保险开启版本管理可回滚错误发布软删除兜底误删二者配合为网站文件提供强恢复能力。示例 4AI/ML 检查点Zonal BucketRAPID 存储类对应 storage_for_ai.md 中 Zonal BucketsRapid Bucket的产品约束存储类必须是RAPID、软删除必须禁用、分层命名空间HNS必须启用、UBLA 必须启用。输入草案计划配置项取值Bucket Namemy-training-checkpoints-us-east1-bProjectmy-ai-projectLocationus-east1RegionPlacementus-east1-b与计算节点同 Zone 共置Storage ClassRAPIDZonal 桶必须显式指定UBLAEnabledHNS 必需PAPEnforcedEncryptionGoogle 托管密钥Soft DeleteDisabledZonal 桶不支持Hierarchical NamespaceEnabledZonal 桶必需Lifecycle删除超过 14 天的检查点文件Go SDK 实现import ( context time cloud.google.com/go/storage ) func CreateCheckpointBucket(ctx context.Context, client *storage.Client, projectID, bucketName string) (*storage.BucketAttrs, error) { bucket : client.Bucket(bucketName) attrs : storage.BucketAttrs{ Location: us-east1, StorageClass: RAPID, UniformBucketLevelAccess: storage.UniformBucketLevelAccess{ Enabled: true, }, PublicAccessPrevention: storage.PublicAccessPreventionEnforced, CustomPlacementConfig: storage.CustomPlacementConfig{ DataLocations: []string{us-east1-b}, }, HierarchicalNamespace: storage.HierarchicalNamespace{ Enabled: true, }, Lifecycle: storage.Lifecycle{ Rules: []storage.LifecycleRule{ { Action: storage.LifecycleAction{ Type: Delete, }, Condition: storage.LifecycleCondition{ AgeInDays: 14, }, }, }, }, SoftDeletePolicy: storage.SoftDeletePolicy{ RetentionDuration: 0, }, } if err : bucket.Create(ctx, projectID, attrs); err ! nil { return nil, err } return bucket.Attrs(ctx) }要点解析CustomPlacementConfig.DataLocations: [us-east1-b]这是 Zonal 桶的落点声明指定数据只放在us-east1-b这一个 Zone实现与 GPU/TPU 集群的物理共置消除网络瓶颈。StorageClass: RAPIDZonal 桶的专用存储类草案计划明确要求Must be explicitly specified不能沿用默认 STANDARD。HierarchicalNamespace.Enabled: true分层命名空间是 Zonal 桶的强制前置条件Always enabled同时支持后续的 BiDi 流式追加最高 5TiB 追加写入。SoftDeletePolicy.RetentionDuration: 0Zonal 桶不支持软删除必须显式置 0 关闭——这与示例 1/2/3 的 7 天软删除形成鲜明对照体现了 Phase 2 规则中Zonal/Rapid 桶例外的落地方式。生命周期清理检查点文件 14 天后自动删除Type: DeleteAgeInDays: 14防止 Zonal 高性能磁盘上的陈旧检查点持续产生高额账单这正是 AI/ML 场景 Highly Recommended 的成本治理手段。加密说明本场景使用 Google 托管密钥因此BucketAttrs中不设置Encryption字段AI 场景若启用 CMEK 则在Encryption.DefaultKMSKeyName中指定 KMS 密钥路径即可。示例 5WORM 归档桶Object Lock 逐对象保留期对应 archiving_compliance.md以ARCHIVE存储类承载 7 年以上法规保留数据通过 Object Lock对象级保留实现 Write Once, Read ManyWORM不可变性。输入草案计划配置项取值Bucket Namemy-legal-archive-bucketProjectmy-legal-projectLocationus-east1UBLAEnabledPAPEnforcedSoft DeleteEnabled7 天EncryptionCMEK强烈推荐Storage ClassARCHIVEObject Lock逐对象保留EnabledCMEK Key IDprojects/my-kms-project/locations/us-east1/keyRings/my-keyring/cryptoKeys/my-keyLabelscompliance-typeregulatory、retention-period7yLifecycle删除超过 7 年2555 天的对象[!CAUTION]逐对象保留模式一旦设为 Locked 便不可逆模式无法再改回保留日期只能延长、不能缩短。合规团队务必在锁定前确认需求。Go SDK 实现import ( context time cloud.google.com/go/storage ) func CreateRegulatoryWormBucket(ctx context.Context, client *storage.Client, projectID, bucketName, kmsKeyID string) (*storage.BucketAttrs, error) { // 1. Enable Object Retention on the BucketHandle before creating bucket : client.Bucket(bucketName).SetObjectRetention(true) // 2. Configure bucket attributes attrs : storage.BucketAttrs{ Location: us-east1, StorageClass: ARCHIVE, UniformBucketLevelAccess: storage.UniformBucketLevelAccess{ Enabled: true, }, PublicAccessPrevention: storage.PublicAccessPreventionEnforced, Encryption: storage.BucketEncryption{ DefaultKMSKeyName: kmsKeyID, }, Labels: map[string]string{ compliance-type: regulatory, retention-period: 7y, }, SoftDeletePolicy: storage.SoftDeletePolicy{ RetentionDuration: 7 * 24 * time.Hour, }, Lifecycle: storage.Lifecycle{ Rules: []storage.LifecycleRule{ { Action: storage.LifecycleAction{ Type: Delete, }, Condition: storage.LifecycleCondition{ AgeInDays: 2555, }, }, }, }, } if err : bucket.Create(ctx, projectID, attrs); err ! nil { return nil, err } return bucket.Attrs(ctx) }对象级保留的写入侧配合func UploadObjectWithRetention(ctx context.Context, client *storage.Client, bucketName, objectName string) error { bucket : client.Bucket(bucketName) obj : bucket.Object(objectName) wc : obj.NewWriter(ctx) wc.ObjectAttrs.Retention storage.ObjectRetention{ Mode: Locked, RetainUntil: time.Date(2030, 12, 31, 23, 59, 59, 0, time.UTC), } // Write object content if _, err : wc.Write([]byte(compliance data)); err ! nil { wc.Close() return err } return wc.Close() }要点解析先启用对象保留再建桶client.Bucket(bucketName).SetObjectRetention(true)必须在bucket.Create之前调用。对象保留能力必须在创建时开启Console 之外的手段无法事后补齐这与 sdk.md 特性矩阵中 Object Retention (Object Lock) 行的SetObjectRetention(true)映射完全一致。上传时逐对象指定保留通过Writer.ObjectAttrs.Retention设置Mode: Locked与RetainUntil时间戳。不同对象可有不同的保留期这正是 Object Lock 相对 Bucket Lock 的粒度优势。生命周期兜底清理AgeInDays: 25557 年后自动删除到期归档记录避免合规数据无限累积带来的存储与合规双重负担。ARCHIVE CMEK 标签ARCHIVE提供最低的每 GB 成本CMEK 密钥路径通过参数kmsKeyID注入compliance-type/retention-period标签为法规审计与成本中心提供治理元数据。特性支持矩阵Go 字段映射速查下表提炼自 sdk.md 的特性支持矩阵聚焦 Go SDK 侧是编写上述代码时的字段对照依据Draft Plan 设置Go SDK 字段 / APIBucket Nameclient.Bucket(name)LocationBucketAttrs.LocationPlacement双区域 / ZonalBucketAttrs.CustomPlacementConfigReplication SpeedRPOBucketAttrs.RPOStorage ClassBucketAttrs.StorageClassUBLABucketAttrs.UniformBucketLevelAccessPublic Access PreventionBucketAttrs.PublicAccessPreventionSoft DeleteBucketAttrs.SoftDeletePolicyObject VersioningBucketAttrs.VersioningEnabledEncryptionCMEKBucketAttrs.EncryptionDefaultKMSKeyNameRestrict EncryptionCSEKBucketAttrs.CustomerSuppliedEncryptionEnforcementConfigv1.61.0AutoclassBucketAttrs.AutoclassHierarchical NamespaceBucketAttrs.HierarchicalNamespaceLabelsBucketAttrs.LabelsIP FilteringNot exposed in Go v1 client libraryAllow Cross-Org VPCsNot exposed in Go v1 client libraryLifecycleOLMBucketAttrs.LifecycleCORSBucketAttrs.CORSWebsite ConfigurationBucketAttrs.WebsitePublic IAM Policybucket.IAM().SetPolicy(ctx, policy)Pub/Sub NotificationsBucketHandle.AddNotification(ctx, Notification{...})Bucket Retention PeriodBucketAttrs.RetentionPolicyLock Bucket Retention Policybucket.If(storage.BucketConditions{MetagenerationMatch: attrs.MetaGeneration}).LockRetentionPolicy(ctx)Object RetentionObject Lockclient.Bucket(name).SetObjectRetention(true)Set Object RetentionWriter.ObjectAttrs.Retention创建时或ObjectHandle.Update(...)缩短/移除 Unlocked 保留用ObjectHandle.OverrideUnlockedRetention(true)Rapid CacheStorageControlClient.CreateAnywhereCache其中两点值得单独强调Bucket Lock 的锁定调用RetentionPolicy建桶后锁定必须携带MetagenerationMatch条件防止并发修改期间元数据漂移这是从 sdk.md 特性矩阵中直接引用的 Go 写法。Object Retention 的更新除上传时设置外也可用ObjectHandle.Update(ctx, storage.ObjectAttrsToUpdate{Retention: ...})修改当保留模式为 Unlocked 且需要缩短或移除保留日期时必须配合ObjectHandle.OverrideUnlockedRetention(true)。未暴露特性的三种工程化绕行方案当草案计划中出现 Go v1 客户端库未暴露的字段典型如 IP Filtering、Allow Cross-Org VPCs时sdk.md 提供了三种整合模式模式一基础设施与应用逻辑分离推荐基础设施管理完全交给 Terraform 或 gcloud负责包含 IP Filtering 在内的全部高级配置应用代码里的 SDK 只做数据面操作读写对象无需处理这些设置。这是职责最清晰、最符合 IaC 最佳实践的做法。模式二SDK 直接 REST API 调用若应用必须在运行时动态配置未暴露特性用 SDK 的凭据助手获取 OAuth2 access token向 Cloud Storage REST API 发送PATCH请求如https://storage.googleapis.com/storage/v1/b/BUCKET_NAME请求体携带未暴露特性的 JSON payload字段定义见 rest.md在Authorization: Bearer token头中携带 token。模式三SDK 自动生成客户端仅 GoGo 应用可直接使用原生自动生成的 API 客户端google.golang.org/api/storage/v1处理未暴露配置其余操作继续走标准cloud.google.com/go/storage。两个客户端可以共享同一个已认证的 HTTP client无需重复鉴权。落地最佳实践与注意事项综合 SKILL.md 的工作流约束与各 reference 文件使用 Go SDK 建桶时有几点需要始终遵守安全默认值不可删减UBLA 开启、CSEK 限制、软删除 7 天、PAP 强制是草案计划的基线四件套除非用户显式要求并确认风险否则不得关闭唯一例外是 Zonal 桶禁用软删除、公开网站放行 PAP。版本先行涉及 Encryption Enforcement 的配置先把cloud.google.com/go/storage升级到 v1.61.0否则该字段会被忽略并导致草案计划与落地配置不一致。锁定语义要提前确认Bucket Lock 与 Object Lock 一旦锁定均不可逆编码前必须与用户确认 Locked / Unlocked 状态与保留时长。名称全局唯一Cloud Storage 桶名全局唯一创建前先按 phase_draft_plan.md 的只读检查确认可用性创建若返回 409/already exists需换名重试。SDK 片段只展示不执行Skill 明确要求 Terraform 与 SDK 输出仅展示给用户自行集成创建动作是否执行完全取决于用户。参考文档Go SDK Examples本文主体文档SDK Client Libraries 总览与特性支持矩阵gcloud CLI 参考REST API 参考Terraform 参考Phase 2Draft Bucket Create PlanSensitive Data Compliance 用例设计Static Website Hosting 用例设计AI Machine Learning 用例设计Long-Term Archive Compliance 用例设计Skill 总览与三阶段工作流【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表