可接受的资源配置的预防性控制措施

Last reviewed 2023-12-20 UTC

我们建议您定义政策限制条件,以实施可接受的资源配置和防止有风险的配置。此蓝图在流水线中结合使用了组织政策限制条件和基础设施即代码 (IaC) 验证。这些控制可防止创建不符合政策指南的资源。在设计和构建工作负载时尽早实施这些控制有助于避免日后需要执行补救工作。

组织政策限制条件

组织政策服务会强制执行限制条件,以确保在您的 Google Cloud 组织中无法创建某些资源配置,即使拥有足够权限的 IAM 角色的人员也无法创建这些配置。

此蓝图在组织节点强制执行政策,以便组织中的所有文件夹和项目都会继承这些控制。这套政策旨在防止某些高风险的配置(例如将虚拟机公开给公共互联网或授予对存储桶的公共访问权限),除非您有意允许此政策的例外情况。

下表介绍了此蓝图中实施的组织政策限制条件

组织政策限制条件 说明

compute.disableNestedVirtualization

如果配置不当,Compute Engine 虚拟机上的嵌套虚拟化可能会避开虚拟机的监控功能和其他安全工具。此限制条件会阻止创建嵌套虚拟化。

compute.disableSerialPortAccess

compute.instanceAdmin 等 IAM 角色允许使用 SSH 密钥对实例串行端口进行特权访问。如果 SSH 密钥公开,则攻击者可以访问串行端口并绕过网络和防火墙控制。此限制条件会阻止串行端口访问。

compute.disableVpcExternalIpv6

如果配置不当,外部 IPv6 子网可能会受到未经授权的互联网访问的影响。此限制条件会阻止创建外部 IPv6 子网。

compute.requireOsLogin

如果公开密钥,则设置元数据中的 SSH 密钥的默认行为可能允许对虚拟机进行未经授权的访问。此限制条件强制使用 OS Login 而不是基于元数据的 SSH 密钥。

compute.restrictProtocolForwardingCreationForTypes

如果转发配置不当,外部 IP 地址的虚拟机协议转发可能会导致未经授权的互联网出站流量。此限制条件仅允许为内部地址转发虚拟机协议。

compute.restrictXpnProjectLienRemoval

删除共享 VPC 宿主项目可能会中断所有使用网络资源的服务项目。此限制条件可防止这些项目的项目安全锁被移除,从而防止意外或恶意删除共享 VPC 宿主项目。

compute.setNewProjectDefaultToZonalDNSOnly

建议不要使用全局(项目范围)内部 DNS 旧版设置,因为这会降低服务可用性。此限制条件可防止使用旧版设置。

compute.skipDefaultNetworkCreation

系统会在启用 Compute Engine API 的每个新项目中创建默认 VPC 网络和过于宽松的默认 VPC 防火墙规则。此限制条件会跳过默认网络和默认 VPC 防火墙规则的创建。

compute.vmExternalIpAccess

默认情况下,虚拟机是使用外部 IPv4 地址创建的,这可能会导致未经授权的互联网访问。此限制条件配置一个空的外部 IP 地址许可名单,虚拟机可以使用此许可名单,并拒绝所有其他地址。

essentialcontacts.allowedContactDomains

默认情况下,重要联系人可以配置为将有关您的网域的通知发送到任何其他网域。此限制条件强制要求只有已批准网域中的电子邮件地址才能设置为重要联系人的收件人。

iam.allowedPolicyMemberDomains

默认情况下,可以向任何 Google 账号(包括非受管账号及属于外部组织的账号)授予允许政策。此限制条件可确保组织中的允许政策只能授予给您自己网域中的受管理的账号。您也可以选择允许其他网域

iam.automaticIamGrantsForDefaultServiceAccounts

默认情况下,系统会自动向默认服务账号授予过于宽松的角色。此限制条件可防止自动向默认服务账号授予 IAM 角色。

iam.disableServiceAccountKeyCreation

服务账号密钥是高风险的永久性凭据,在大多数情况下,可以使用更安全的服务账号密钥替代方案。此限制条件会阻止创建服务账号密钥。

iam.disableServiceAccountKeyUpload

如果密钥材料暴露,则上传服务账号密钥材料可能会增加风险。此限制条件可阻止上传服务账号密钥。

sql.restrictAuthorizedNetworks

如果将 Cloud SQL 实例配置为不通过 Cloud SQL Auth 代理使用授权网络,则该实例可能向未经身份验证的互联网访问开放。此政策可防止配置授权网络进行数据库访问,并强制该用 Cloud SQL Auth 代理。

sql.restrictPublicIp

如果使用公共 IP 地址创建实例,则 Cloud SQL 实例可能会向未经身份验证的互联网访问开放。此限制条件可防止 Cloud SQL 实例使用 公共 IP 地址

storage.uniformBucketLevelAccess

默认情况下,可以通过旧版访问控制列表 (ACL)(而不是 IAM)访问 Cloud Storage 中的对象,这可能会在配置错误时导致访问权限控制不一致和意外暴露。旧版 ACL 访问权限不受 iam.allowedPolicyMemberDomains 限制条件的影响。此限制条件强制要求只能通过 IAM 统一存储桶级访问权限配置访问权限,而不能通过旧版 ACL 进行配置。

storage.publicAccessPrevention

如果配置错误,Cloud Storage 存储桶可能会向未经身份验证的互联网访问开放。此限制条件可防止向 allUsersallAuthenticatedUsers 授予访问权限的 ACL 和 IAM 权限。

这些政策是我们向大多数客户和对大多数场景推荐的初始政策,您可能需要修改组织政策限制条件,以适应某些工作负载类型。例如,storage.publicAccessPrevention 会阻止使用 Cloud Storage 存储桶作为后端供 Cloud CDN 托管公共资源的工作负载,或者 iam.allowedPolicyMemberDomains 会阻止面向公众且要求身份验证的 Cloud Run 应用。在这些情况下,请在文件夹或项目级层修改组织政策以允许狭义例外。您还可以有条件地向组织政策添加限制条件,方法是:定义一个为政策授予例外或强制执行的标记,然后将该标记应用于项目和文件夹。

如需了解其他限制条件,请参阅可用限制条件自定义限制条件

基础设施即代码部署前验证

此蓝图使用 GitOps 方法管理基础设施,也就是说所有基础设施更改均通过受版本控制的基础设施即代码 (IaC) 实现,并且可以在部署之前进行验证。

在蓝图中强制执行的政策定义了流水线可以部署的可接受资源配置。如果提交到 GitHub 代码库的代码未通过政策检查,则不会部署任何资源。

如需了解如何使用流水线以及如何通过 CI/CD 自动化强制执行控制,请参阅部署方法

后续步骤