排查政策和访问权限问题
本文档简要介绍 Google Cloud 访问权限政策强制执行控制措施以及可用于排查访问权限问题的工具。本文档适用于希望帮助组织中的客户解决与访问其 Google Cloud 资源相关的问题的支持团队。
Google Cloud 访问政策强制执行控制
本部分介绍了您或您的组织管理员可以实施的政策,从而影响对 Google Cloud 资源的访问权限。您可以使用以下部分或全部产品和工具来实施访问政策。
标签、标记和网络标记
Google Cloud 提供了多种为资源添加标签和分组的方法。您可以利用标签、标记和网络标记来强制实施政策。
标签是有助于您整理 Google Cloud 资源的键值对。许多 Google Cloud 服务都支持标签。您还可以使用标签对其他使用场景中的资源进行过滤和分组,例如,标识测试环境中的所有资源(而不是生产环境中的资源)。在强制执行政策的上下文中,标签可以标识资源的位置。例如,应用于标记为测试的资源的访问政策与应用于标记为生产的资源的访问政策不同。
标记是键值对,提供了一种用于识别资源和适用政策的机制。您可以将标记附加到组织、文件夹或项目。标记适用于该标记所应用于的层次结构级层的所有资源。您可以使用标记,根据资源是否有特定标记,有条件地允许或拒绝访问权限政策。您还可以将标记与防火墙政策搭配使用来控制虚拟私有云 (VPC) 网络中的流量。在排查问题时,了解如何继承标记以及如何将标记与访问权限和防火墙政策搭配使用非常重要。
网络标记与前面的资源管理器标记不同。网络标记适用于虚拟机实例,可用于控制进出虚拟机的网络流量。在 Google Cloud 网络上,网络标记标识哪些虚拟机受防火墙规则和网络路由的约束。您可以在防火墙规则中使用网络标记作为来源值和目标值。您还可以使用网络标记来标识特定路由适用于哪些虚拟机。了解网络标记有助于排查访问权限问题,因为标记可用于定义网络和路由规则。
VPC 防火墙规则
您可以配置 VPC 防火墙规则,以允许或拒绝流量进出虚拟机 (VM) 实例以及基于虚拟机构建的产品。每个 VPC 网络均发挥分布式防火墙的作用。虽然 VPC 防火墙规则是在网络级层上定义的,但允许或拒绝连接是按具体实例执行。您可以将 VPC 防火墙规则应用于 VPC 网络、按标记分组的虚拟机和按服务账号分组的虚拟机。
VPC Service Controls
VPC Service Controls 提供边界安全解决方案,有助于降低 Google Cloud 服务(如 Cloud Storage 和 BigQuery)中发生数据渗漏的风险。您可以创建环绕 Google Cloud 资源的服务边界,这将形成一个安全边界,您可以允许或拒绝流量进入和离开边界。VPC Service Controls 还可以根据 IP 地址和身份等情境特性实施政策,从而提供情境感知访问权限控制。
Resource Manager
您可以使用 Resource Manager 设置组织资源。借助 Resource Manager 提供的工具,您可以将组织以及开发应用的方式映射到资源层次结构。除了帮助您对资源进行逻辑分组,Resource Manager 还为访问权限控制和组织政策提供了连接点和继承关系。
Identity and Access Management
借助 Identity and Access Management (IAM),您可以定义谁(身份)对什么资源具有哪种访问权限(角色)。IAM 政策是一组语句,定义了谁拥有何种访问权限(例如读取或写入权限)。IAM 政策与资源关联,该政策会在每次用户尝试访问资源时强制执行访问权限控制。
IAM Conditions 是 IAM 的一项功能。在政策定义中实现 IAM Conditions 时,您可以选择仅在满足配置条件时向身份(主账号)授予资源访问权限。例如,您可以使用 IAM Conditions 仅对从公司办公室发出请求的员工限制对资源的访问权限。
组织政策服务
借助组织政策服务,您可以对组织层次结构中受支持的资源强制执行限制条件。组织政策支持的每项资源都有一组限制条件,用于说明资源的限制方式。您可以定义一个政策来定义限制资源配置的特定规则。
通过组织政策服务,您可以作为已获授权的管理员,根据需要替换文件夹或项目级层的默认组织政策。组织政策侧重于如何配置资源,而 IAM 政策侧重于已为您的身份授予哪些针对资源的权限。
配额
Google Cloud 对资源强制设有配额,从而对项目可以使用的特定 Google Cloud 资源数量设置了限制。您拥有的项目数量也受配额的约束。以下类型的资源用量受配额限制:
- 速率配额,例如每日 API 请求数。此配额会在指定时间(例如一分钟或一天)后重置。
- 分配配额,,例如项目使用的虚拟机或负载均衡器数量。此配额不会在一段时间后重置。如果您不再需要使用相应资源,则必须明确释放分配配额,例如通过删除 Google Kubernetes Engine (GKE) 集群。
如果达到了分配配额限制,则无法启动新资源。如果达到了速率配额,则无法完成 API 请求。这两个问题都可能看起来与访问权限相关。
Chrome Enterprise Premium
Chrome Enterprise 进阶版使用各种 Google Cloud 产品,根据用户身份和请求的情境强制执行精细的访问权限控制。您可以对 Chrome Enterprise 进阶版进行配置,以限制对 Google Cloud 控制台和 Google Cloud API 的访问权限。
Chrome Enterprise 进阶版访问保护的工作原理是使用以下 Google Cloud 服务:
- Identity-Aware Proxy (IAP):此服务用于验证用户身份并使用上下文确定是否应授予对资源的访问权限。
- IAM:Google Cloud 的身份管理和授权服务。
- Access Context Manager:用于实现精细访问权限控制的规则引擎。
- 端点验证:用于收集用户设备详细信息的 Google Chrome 扩展程序。
IAM Recommender
IAM 包括 Policy Intelligence 工具,为您提供了一系列全面的前瞻性指导,可帮助您在使用 Google Cloud 时提高效率和安全性。该工具会通过控制台中的通知为您提供推荐的操作,您可以直接应用或通过使用发送到 Pub/Sub 主题的事件。
IAM Recommender 是 Policy Intelligence 套件的一部分,可有助于应用最小权限原则。Recommender 可比较项目级层的角色授予与每个主账号在过去 90 天内使用的权限。如果您向主账号授予了项目级层角色,而该主账号没有使用该角色的所有权限,则 Recommender 可能会建议您撤消该角色。如有必要,Recommender 还会建议改为授予权限较少的角色。
如果您自动应用建议,则可能会无意中导致用户或服务账号被拒绝访问资源。如果您决定使用自动化,请采用 IAM Recommender 最佳实践,帮助您确定可以接受的自动化程度。
Kubernetes 命名空间和 RBAC
Kubernetes 在 Google Cloud 上作为托管服务运行,名称为 Google Kubernetes Engine (GKE)。无论您的 GKE 集群在何处运行,GKE 都可以强制执行一致的政策。影响资源访问权限的政策由内置 Kubernetes 控件和 Google Cloud 专用控件构成。
除了 VPC 防火墙和 VPC Service Controls 之外,GKE 还可以使用命名空间、基于角色的访问权限控制 (RBAC) 和工作负载身份来管理影响资源访问的政策。
命名空间
命名空间是由同一物理集群支持的虚拟集群,并提供名称的范围。资源名称在命名空间中必须是唯一的,但您可以在不同命名空间中使用同一名称。借助命名空间,您可以使用资源配额在多个用户之间划分集群资源。
RBAC
RBAC 提供以下功能:
- 可精细地控制用户如何访问集群上运行的 API 资源。
- 您可以创建详细的政策,以定义您允许用户和服务账号访问的操作和资源。
- 可以控制对 Google 账号、Google Cloud 服务账号和 Kubernetes 服务账号的访问权限。
- 允许您创建适用于整个集群或集群中的特定命名空间的 RBAC 权限。
- 集群级权限可用于限制特定用户对特定 API 资源的访问权限。这些 API 资源包含安全政策和密文。
- 例如,如果您的多组用户分别在各自的命名空间内执行操作,那么特定于命名空间的权限会很有用。RBAC 可以帮助您确保用户只能访问其自己命名空间内的集群资源。
- 只能用于授予单个命名空间内的资源的访问权限的角色。
- 包含代表一组权限的规则的角色。权限只是附加权限,不包含拒绝规则。
IAM 和 Kubernetes RBAC 集成在一起,这样一来,只要按照任一工具授予足够的权限,用户就有权执行操作。
图 1 展示了如何将 IAM 与 RBAC 和命名空间搭配使用以实现政策。
图 1 展示了以下政策实现:
- 在项目级层,IAM 为集群管理员定义角色,以管理集群并允许容器开发者访问集群内的 API。
- 在集群级层,RBAC 定义针对各个集群的权限。
- 在命名空间级层,RBAC 定义针对命名空间的权限。
Workload Identity
除了 RBAC 和 IAM 之外,您还需要了解工作负载身份的影响。借助 Workload Identity,您可以将 Kubernetes 服务账号配置为充当 Google 服务账号。任何以 Kubernetes 服务账号运行的应用在访问 Google Cloud API 时,都会自动以 Google 服务账号身份进行身份验证。通过此身份验证,您可以为集群中的应用分配精细的身份和授权。
Workload Identity 依赖于 IAM 权限来控制 GKE 应用可以访问的 Google Cloud API。例如,如果 IAM 权限更改,则 GKE 应用可能无法对 Cloud Storage 执行写入操作。
问题排查工具
本部分介绍了可帮助排查政策问题的工具。您可以使用不同的产品和功能来应用各个政策。例如,您可以使用防火墙和子网来管理您的环境中的资源与您定义的任何安全区域中的资源之间的通信。您还可以使用 IAM 来限制谁可以访问安全区域以及您已定义的任何 VPC Service Controls 可用区中的哪些资源。
日志
出现问题时,通常开始问题排查的第一步是查看日志。可深入了解访问权限相关问题的 Google Cloud 日志包括 Cloud Audit Logs、防火墙规则日志记录和 VPC 流日志。
Cloud Audit Logs
Cloud Audit Logs 包含每个项目、文件夹和组织的以下审核日志流:管理员活动、数据访问和系统事件。Google Cloud 服务会将审核日志条目写入这些日志,以帮助您识别哪个用户在您的 Google Cloud 项目中执行相关操作,以及执行该操作的位置和时间。
- 管理员活动日志包含 API 调用或其他用于修改资源配置或元数据的管理操作对应的日志条目。管理员活动日志始终处于启用状态。如需了解管理员活动日志价格和配额,请参阅 Cloud Audit Logs 概览。
- 数据访问日志可记录创建、修改或读取用户提供的数据的 API 调用。数据访问审核日志默认处于停用状态,BigQuery 除外。数据访问日志可能会增加,并且可能会产生费用。如需了解数据访问日志用量限制,请参阅配额和限制。如需了解可能产生的费用,请参阅价格。
- 系统事件日志包含 Compute Engine 执行系统事件时的日志条目。例如,每次实时迁移都会记录为系统事件。如需了解系统事件日志价格和配额,请参阅 Cloud Audit Logs 概览。
在 Cloud Logging 中,protoPayload
字段包含一个用于存储审核日志记录数据的 AuditLog
对象。如需查看审核日志条目示例,请参阅审核日志条目示例。
如需查看管理员活动审核日志,您必须具有 Logs Viewer 角色 (roles/logging.viewer
) 或基本 Viewer 角色 (roles/viewer
)。尽可能选择完成任务所需的具有最小权限的角色。
各个审核日志条目会被存储指定的时长。如需延长保留时间,您可以将日志条目导出到 Cloud Storage、BigQuery 或 Pub/Sub。如需从组织的所有项目、文件夹和结算账号导出日志条目,您可以使用汇总导出。汇总导出为您提供了查看整个组织的日志的集中方式。
如需使用审核日志帮助您进行问题排查,请执行以下操作:
- 确保您拥有查看日志所需的 IAM 角色。如果您导出日志,则还需要在接收器中查看导出的日志的权限。
- 遵循使用审核日志的最佳实践,以符合您的审核策略。
- 选择团队策略来查看日志。Cloud Audit Logs 中有几种查看日志的方法,问题排查团队中的所有人应使用同一种方法。
- 使用 Google Cloud 控制台的“活动”页面大致了解您的活动日志。
- 在日志导出到的接收器中查看导出的日志。超出保留期限的日志仅在接收器中显示。此外,您还可以使用导出的日志执行比较调查,例如一切按预期工作时。
防火墙规则日志记录
通过防火墙规则日志记录,您可以审核、验证和分析防火墙规则所带来的影响。例如,您可以确定用于拒绝流量的防火墙规则是否如期发挥作用。
对于您需要记录其连接的每一条防火墙规则,您都要单独启用防火墙规则日志记录。防火墙规则日志记录选项适用于所有防火墙规则,与规则的操作(允许或拒绝)或方向(入站或出站)无关。防火墙规则日志记录可生成大量数据。防火墙规则日志记录会产生关联的费用,因此您需要谨慎规划要记录的连接。
确定您要存储防火墙日志的位置。如果您想要在组织级查看日志,请将防火墙日志导出到与审核日志相同的接收器。使用过滤条件可搜索特定防火墙事件。
防火墙数据分析
防火墙数据分析提供的报告包含有关防火墙使用情况以及各种防火墙规则对 VPC 网络的影响的信息。您可以使用防火墙数据分析来验证防火墙规则是允许还是禁止其预期连接。
您还可以使用防火墙数据分析来检测被其他规则覆盖的防火墙规则。被覆盖的规则是这样一种防火墙规则,它的所有相关特性(例如 IP 地址范围和端口)都与具有较高或相等优先级的一个或多个其他防火墙规则的特性重叠。启用防火墙规则日志记录后,系统会在 24 小时内计算出被覆盖的规则。
启用防火墙规则日志记录后,防火墙数据分析会分析日志,以建议指定观察期(默认为过去 24 小时)内使用的任何拒绝规则的数据分析。拒绝规则数据分析为您提供了防火墙数据包丢弃信号。您可以使用数据包丢弃信号来验证丢弃的数据包是由于安全保护而预期丢弃的,还是由于网络配置错误等问题而意外丢弃的。
VPC 流日志
VPC 流日志记录了虚拟机实例发送和接收的网络流样本。VPC 流日志涵盖影响虚拟机的流量。所有出站(传出)流量都会被记录,即使流量被出站流量拒绝防火墙规则阻止也是如此。如果入站(传入)流量被入站流量允许防火墙规则允许,则会记录该流量。如果入站流量被入站流量拒绝防火墙规则阻止,则不会记录该流量。
按特定时间间隔为每个虚拟机连接收集流日志。在给定的一段时间间隔内针对给定连接收集的所有采样数据包(汇总时间间隔)会汇总到单个流日志条目。然后,日志流条目会发送到 Cloud Logging。
可以为每个 VPC 子网启用或停用 VPC 流日志。启用 VPC 流日志后,它会生成大量数据。建议您谨慎管理为其启用 VPC 流日志的子网。例如,我们建议您不要在一段时间内持续为开发项目使用的子网启用流日志。您可以使用 Cloud Logging 或导出的接收器直接查询 VPC 流日志。排查检测到的与流量相关的问题时,您可以使用 VPC 流日志来查看流量是否通过预期端口离开或进入虚拟机。
提醒
通过提醒,您可以及时收到任何可能会影响 Google Cloud 资源的政策事件的通知。
实时通知
Cloud Asset Inventory 会保留五周的 Google Cloud 资产元数据历史记录。资产是受支持的 Google Cloud 资源。受支持的资源包括 IAM、具有关联网络功能(如防火墙规则和 GKE 命名空间)的 Compute Engine,以及角色和集群角色绑定。上述所有资源都会影响对 Google Cloud 资源的访问权限。
如需监控与资源配置(如防火墙规则和转发规则)之间的差异,您可以订阅实时通知。如果您的资源配置更改,则实时通知会立即通过 Pub/Sub 发送通知。通知可以提前提醒您出现的任何问题,从而抢占支持电话。
Cloud Audit Logs 和 Cloud Functions
如需对实时通知的使用进行补充,您可以监控 Cloud Logging,并针对对敏感操作的调用发出提醒。例如,您可以创建一个 Cloud Logging 接收器,以针对在组织级层对 SetIamPolicy
的调用进行过滤。该接收器会将日志发送到 Pub/Sub 主题,供您用来触发 Cloud Functions 函数。
Connectivity Tests
如需确定某个访问问题与网络或权限相关,请使用 Network Intelligence Center Connectivity Tests 工具。Connectivity Tests 是一种静态配置分析器和诊断工具,可用于检查源端点和目标端点之间的连接。Connectivity Tests 可帮助您找出与您的 Google Cloud 网络配置相关的网络相关访问问题的根本原因。
Connectivity Tests 会执行测试,这些测试包括您的 VPC 网络、VPC 网络对等互连,以及通往您的本地网络的 VPN 隧道。例如,Connectivity Tests 可发现某防火墙规则阻止了连接。如需了解详情,请参阅常见使用场景。
Policy Troubleshooter
Google Cloud 中的许多任务都需要 IAM 角色和相关权限。我们建议您检查角色中包含哪些权限,并检查完成某项任务需要的所有权限。例如,如需使用 Compute Engine 映像创建实例,用户需要 compute.imageUser
角色,该角色可提供九项权限。因此,用户必须拥有涵盖所有九个权限的角色和权限组合。
Policy Troubleshooter 是一种 Google Cloud 控制台工具,可帮助您调试用户或服务账号无权访问资源的原因。如需排查访问权限问题,请使用 Policy Troubleshooter 的 IAM 部分。
例如,您可能想检查为什么特定用户可以在项目的存储桶中创建对象,而另一个用户却不能。Policy Troubleshooter 可以帮助您查看第一个用户具备的权限,而第二个用户不具备的相应权限。
Policy Troubleshooter 需要以下输入:
- 主账号(个人用户、服务账号或群组)
- 权限(请注意,这些是底层权限,而不是 IAM 角色)
- 资源
IAM Recommender
如上文 Recommender 部分中所述,虽然 IAM Recommender 是政策强制执行控制功能,但您也可以将其用作问题排查工具。Recommender 会运行每日作业,以分析 IAM 访问日志数据以及过去 60 天内授予的权限。您可以使用 Recommender 来检查某项建议最近是否获得了批准并应用,这可能影响用户对之前允许的资源的访问权限。在这种情况下,您可以授予已移除的权限。
上报给 Customer Care
在排查与访问权限相关的问题时,良好的内部支持流程和明确定义的流程可上报给 Cloud Customer Care 非常重要。本部分介绍支持设置的示例,以及如何联系 Customer Care,帮助他们快速解决您的问题。
如果您无法使用本文档中介绍的工具解决问题,则明确定义的支持过程有助于 Customer Care 排查您的问题。我们建议您按照 Google 的《站点可靠性工程 (SRE)》一书的有效问题排查一章中的说明,使用系统方法排查问题。
我们建议内部支持流程执行以下操作:
- 详细说明出现问题时要遵循的步骤。
- 明确定义上报路径。
- 设置值班过程。
- 制定突发事件响应方案。
- 设置 Bug 跟踪或帮助台系统。
- 确保您的支持人员已获得授权,能够与客户沟通,并且是指定联系人。
- 向内部员工传达支持流程,包括如何与 Google Cloud 指定联系人联系。
- 定期分析支持问题,并根据所学内容反复改进。
- 包含标准化的回顾规范。
如果您需要上报给 Customer Care,请在排查访问权限问题时,向 Customer Care 提供以下信息:
- 请求访问权限的身份(用户或服务账号电子邮件)。
- 问题影响所有身份还是仅影响部分身份。
- 如果只有部分身份受到影响,请提供有效的示例身份和失效的示例身份。
- 最近是否重新创建身份。
- 用户尝试访问的资源(包括项目 ID)。
- 被调用的请求或方法。
- 提供请求和响应的副本。
- 被授予给身份以进行此访问的权限。
- 提供 IAM 政策的副本。
- 身份尝试访问资源的来源(位置)。例如,是尝试从 Google Cloud 资源(例如 Compute Engine 实例)、Google Cloud 控制台、Google Cloud CLI、Cloud Shell 还是外部来源(如本地或互联网)进行访问。
- 如果来源来自其他项目,请提供源项目 ID。
- 首次出现错误的时间(时间戳)以及是否仍是问题。
- 身份上一次成功访问资源的已知时间(包含时间戳)。
- 问题发生之前所做的任何更改(包括时间戳)。
- Cloud Logging 中记录的所有错误。在向 Customer Care 提供信息之前,请务必隐去敏感数据,例如访问令牌、凭据、信用卡号。
后续步骤
如需查看更多参考架构、图表和最佳实践,请浏览云架构中心。