在受限的 Google Cloud 环境中开发应用

我们的文档通常是为了帮助您推出或运行产品,但如果您的组织应用安全约束,则部分文档可能无法正常运行。例如,您的公司可能实现 Cloud Foundation ToolkitGoogle Cloud 安全蓝图中的部分安全限制,也可以自行创建。

本文可帮助您排查在使用安全约束的组织中可能发生的应用部署错误。

排查安全限制问题

您的 IT 运营或安全团队可以通过组织政策启用安全限制。这些限制条件会限制组织资源的使用方式。

当您发出返回错误的 API 请求时,API 响应会告知您该请求是否违反了政策。响应应说明违反的限制。以下问题排查步骤可帮助您确定并了解是否存在违规行为:

  1. 查看 API 响应错误消息。您能确定部署所违反的安全限制条件吗?

    以下示例说明问题是 sql.restrictPublicIp 限制条件:

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. 如果您知道违反政策的情况,请更新资源部署配置,以便在限制条件内使用。

    在上一个限制外部公共 IP 地址的示例中,将 Cloud SQL 实例配置为使用内部专用 IP 地址。

  3. 如果您不确定该限制条件为何或要做什么,请与安全团队合作,了解在组织的层次结构中应用政策的位置及其建议解决方法。

    检查是否在您的组织中共享了任何部署模板,例如 Terraform 模板。这些模板应详细说明 Google Cloud 基础架构的配置方式,并限制应用的部署。

常见的安全限制问题

在 Google Cloud 中部署应用时,您可能会遇到类似于以下示例的错误:

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

在此示例中,您无法将 Cloud SQL 实例配置为使用外部公共 IP 地址。即将对环境应用政策实施安全限制。

开发应用时,以下 API 错误响应中可能会启用并进行详细描述。

Compute Engine

限制条件名称 实现原因 建议的解决方法
constraints/compute.disableNestedVirtualization 阻止在虚拟机内安装与 KVM 兼容的管理程序。此行为可能会导致安全风险,但未进行充分的修补和管理。 配置虚拟机以停用硬件加速的嵌套虚拟化。

在 Intel Haswell 或更新的 CPU 平台上运行的所有 Compute Engine 虚拟机都会默认启用此项功能。
constraints/compute.requireShieldedVm 要求新的虚拟机实例使用启用了安全启动、vTPM 和完整性监控选项的安全强化型虚拟机映像。这些选项可以防止虚拟机篡改和访问或修改数据。 创建虚拟机时,请勿启用安全强化型虚拟机。

要创建 GKE 集群,您必须启用安全强化型 GKE 节点

Dataflow 目前不支持安全强化型虚拟机工作器。
constraints/compute.disableSerialPortAccess 移除安全向量以与虚拟机交互,或者查看可用于形成攻击的诊断输出。 创建虚拟机时,请勿启用串行端口访问权限。
constraints/compute.disableGuestAttributesAccess 尽量减少可能被恶意应用滥用的基础主机和平台的信息。 请勿使用 Compute Engine API 读取 Compute Engine 虚拟机的客机特性
constraints/compute.vmExternalIpAccess 阻止应用通过外部 IP 地址运行并且可通过互联网访问。 停用虚拟机的外部 IP 访问权限。只能使用内部专用 IP 地址。

GKE 可以使用没有公共 IP 地址的专用集群

Dataprep 和 Dataflow 目前不支持专用 IP 地址。

虚拟网络和 IP 地址

限制条件名称 实现原因 建议的解决方法
constraints/compute.skipDefaultNetworkCreation 确保只可创建公司管理的 Virtual Private Cloud (VPC) 并应用网络流量或过滤规则。 将您的应用连接到组织中的现有 VPC。系统不会为新项目部署默认自动创建的 VPC。
constraints/compute.restrictXpnProjectLienRemoval 其他项目中的资源依赖于其提供的网络服务时,可防止共享 VPC 被意外删除。 请勿尝试删除共享 VPC。确保您删除的资源正确无误。
constraints/sql.restrictPublicIp 阻止 Cloud SQL 实例使用外部 IP 地址运行,并且可以通过互联网访问。 请勿将 Cloud SQL 实例配置为使用外部公共 IP 地址。

将您的 Cloud SQL 实例配置为使用内部专用 IP 地址

身份和身份验证

限制条件名称 实现原因 建议的解决方法
constraints/iam.disableServiceAccountKeyCreation 服务账号密钥可能会泄露安全风险,因此请阻止这些密钥被导出。 使用 服务帐号密钥的更安全的替代方案进行身份验证。
constraints/storage.uniformBucketLevelAccess 请仅允许使用 Identity and Access Management (IAM),从而减少因权限错误或不一致而应用存储分区的风险。 启用统一存储桶级访问权限以保护您的 Cloud Storage 存储桶。
constraints/iam.allowedPolicyMemberDomains 仅允许已批准的网域访问 Google Cloud 资源。 使用某个已批准网域的账号。此限制条件存在其他已知问题

API 响应错误示例

在上一个使用 Cloud SQL 限制外部公共 IP 地址的示例中,违反政策会导致 API 返回错误。以下更详细的示例显示了 API 响应,告诉您哪些限制条件导致请求失败。查看您自己的 API 响应,了解应用部署失败的原因。

Google Cloud CLI 的 Cloud SQL 故障:

$ gcloud alpha sql instances create mysql-node --project my-sql-project

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Terraform 的 Cloud SQL 故障:

$ terraform apply plan.out

[...]
module.mysql-db.google_sql_database_instance.default: Creating...

Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi:
Error 400: Invalid request: Organization Policy check failure: the external IP
of this instance violates the constraints/sql.restrictPublicIp enforced at the
123456789 project., invalid

列出应用于项目的组织政策

您的项目可能会从文件夹或组织级层继承政策。取决于您的访问权限角色,您可能无法查看层次结构中较高级层的政策,以查看违反限制条件的适用位置。

如需查看项目的适用政策或例外情况,请使用 gcloud alpha resource-manager org-policies list 命令,并通过 --project 参数指定项目 ID:

gcloud alpha resource-manager org-policies list --project <project-id>

如需详细了解应用的政策,请使用 gcloud alpha resource-manager org-policies describe 命令。使用 --project 参数描述要描述的政策的名称,以及项目 ID:

gcloud alpha resource-manager org-policies describe <policy-name> --project <project-id>

后续步骤

如果您无法确定政策的应用位置以及如何解决安全限制,请与您的 IT 运营或安全团队联系。每个组织都会应用根据其环境定制的政策和蓝图。

如需详细了解可应用于组织中的所有控件,请参阅组织政策限制条件列表