什么是基于上下文的限制?
基于上下文的限制使帐户所有者和管理员能够根据规则的条件来定义和实施 IBM Cloud® 资源的访问限制。 这些标准包括访问请求的网络位置、发送请求的端点类型、身份的多因素验证级别,有时还包括请求试图访问的应用程序接口。 这些限制适用于基于身份的传统 IAM 策略,以提供另一层保护。 由于 IAM 策略和基于上下文的限制都强制实施访问权,因此基于上下文的限制提供了保护,即使在凭证受损或管理不当的情况下也是如此。
有关创建基于上下文的限制的示例方案,请遵循 利用基于上下文的限制来保护资源 教程。
有关在安全策略中实施基于上下文的限制的更多信息,请参阅解决方案教程 通过应用基于上下文的限制增强云安全性。
规则
规则将 IBM Cloud 资源与一组上下文相关联:
- 云资源由类似于 IAM 访问策略的资源属性指定。
- 上下文是网络区域和端点类型的组合。
您配置的上下文定义了关联资源的边界。
基于上下文的限制规则中必需的资源属性为 accountId
和 serviceName
。 必须将规则作用域限定为帐户和特定服务。
基于上下文的限制规则由以下逻辑应用:
- 仅当规则的至少一个上下文允许访问时,才由规则授予访问权。
- 如果多个规则适用于特定资源,那么仅当所有适用的规则都允许访问时,才会授予访问权。
- 如果没有适用于特定资源的规则,那么访问权仅由 IAM 策略确定。
与 IAM 策略不同,基于上下文的限制不会分配访问权。 基于上下文的限制检查访问请求是否来自您配置的允许上下文。
用于访问资源 (例如控制台,CLI 或 API) 的接口不会影响规则应用于该资源的方式。 此规则在所有接口中应用的方式相同,并且基于客户机 IP 地址。
规则实施
您可以在创建规则时决定要如何强制实施规则,并随时更新规则强制实施。
- 已启用
- 强制实施规则。 根据您选择的服务,监视通过 Activity Tracker 拒绝的访问尝试可能可用。 查看每个服务的文档,以了解它们如何与基于上下文的限制集成。
- 已禁用
- 您的账户资源不受任何限制。 如果您尚未准备好启用此规则,请选择此选项。
- 仅报告
- 根据您选择的服务,您可以监视规则如何影响访问而不强制实施。 通过仅报告方式,所有访问帐户中资源的尝试都将记录在 Activity Tracker中。 如果有条件,建议监测 30 天后再执行规则。
仅报告方式并非可用于所有服务,因此请查看每个服务的文档以了解它们如何与基于上下文的限制进行集成。
您可以监视已启用的规则和仅报告的规则的影响。 有关更多信息,请参阅 监视基于上下文的限制。
定义规则的作用域
定义要保护的 API 以缩小规则限制的范围。 通过这种方式,您可以为具有不同访问需求的不同 API 指定细粒度保护。
例如,您可以创建以数据平面 API 为目标的规则,以便仅可从 Kubernetes 集群或计算基础结构存在的任何位置访问该 API。 然后,您可以创建以控制平面 API 和所有平台 API 为目标的规则,以保护与云控制台的交互,从而使其仅可从组织的 VPN 后访问。
只有某些服务支持通过 API 对规则进行作用域限定。
通过某些服务,您可以在缺省情况下限制资源上所有服务 API 的操作,这包括服务可能支持的所有当前和未来 API。 或者,选择特定 API。 例如,Kubernetes 具有定制服务 API,您可以根据请求的上下文来限制对这些 API 的访问。 查看每个服务的文档,以了解有关它们如何与基于上下文的限制集成的更多信息。
选择服务支持限定规则范围以保护所有平台 API 的能力,其中包括服务可能支持的所有当前和将来的平台 API。 将平台 API 添加到规则作用域可确保仅可从您定义的位置访问诸如资源供应,服务凭证管理和附加标记之类的平台操作。
基于上下文的限制缺省用于保护目标服务支持的所有服务和平台 API。
上下文
上下文定义了可以访问资源的位置。 上下文由您配置的允许端点类型和网络区域组成。
- 如果上下文包含网络区域,那么仅当从其中一个区域中创建请求时,才会授予访问权。
- 如果上下文包含服务端点类型,那么仅当通过与其中一种类型匹配的连接接收到请求时,才会授予访问权。
- 如果上下文包含多因素身份验证(MFA),那么只有当请求身份的 MFA 级别等于或超过所需的 MFA 级别时,才会允许访问。
- 如果上下文包含多个限制 (例如,区域和端点类型),那么必须满足所有限制才能授予访问权。
网络区域
网络区域表示在其中创建访问请求的 IP 地址的允许列表。 它定义一组由以下属性指定的一个或多个网络位置:
- IP 地址,包括单个地址,范围或子网。
- VPC
- 服务引用,允许从其他 IBM Cloud® 服务进行访问。
IP 地址
客户可以指定他们知道希望能够从中发送流量的 IP 地址。 将拒绝指定 IP 地址之外的任何内容。
VPC
如果在 VPC 中部署了需要访问基于上下文的受限资源的应用程序,那么可以在网络区域中包含 VPC IP 地址。 要执行此操作,请选择网络区域中的目标 VPC,并将该网络区域添加到规则中。 这样,您就不必查找VPC使用的IP地址。 联系的资源会看到请求来自一组允许的 IP 地址。
服务引用
服务引用表示服务或服务实例的网络位置。 在网络区域中包含服务引用会将与该服务关联的 IP 地址添加到允许列表中,而无需您知道该服务的底层 IP 地址。 服务引用很有用,因为云服务的网络位置对于基于上下文的限制管理员而言是未知的,并且可能会随时间变化。
以下是可以作为服务引用添加到网络区域的服务列表:
服务 | 服务类型 | service_name |
---|---|---|
所有帐户管理服务 | 帐户管理 | iam-access-management |
IAM 访问组服务 | 帐户管理 | iam-groups |
IAM 用户管理 | 帐户管理 | user-management |
Activity Tracker | 已启用 IAM | logdnaat |
App Configuration | IAM-enabled | apprapp |
目录管理服务 | 启用 IAM | globalcatalog-collection |
云 Block Storage for VPC | 已启用 IAM | |
云 Object Storage | 已启用 IAM | cloud-object-storage |
Code Engine | 已启用 IAM | codeengine |
Databases for DataStax | 已启用 IAM | databases-for-cassandra |
Databases for EnterpriseDB | 已启用 IAM | databases-for-enterprisedb |
Databases for Elasticsearch | 已启用 IAM | databases-for-elasticsearch |
Databases for etcd | 已启用 IAM | databases-for-etcd |
Databases for MongoDB | 已启用 IAM | databases-for-mongodb |
Databases for MySQL | 已启用 IAM | databases-for-mysql |
Databases for PostgreSQL | IAM-enabled | databases-for-postgresql |
Databases for Redis | IAM-enabled | databases-for-redis |
Direct Link | 已启用 IAM | directlink |
Event Notifications | IAM-enabled | event-notifications |
Event Streams | IAM-enabled | messagehub |
Kubernetes Service / Red Hat OpenShift | IAM-enabled | containers-kubernetes |
Messages for RabbitMQ | IAM-enabled | messages-for-rabbitmq |
Secrets Manager | 已启用 IAM | secrets-manager |
VPC 基础设施服务 | 支持 IAM | |
Schematics | IAM-enabled | schematics |
工具链 | 已启用 IAM | toolchain |
在表 1 中,所有帐户管理服务 是指表中列出的帐户管理类型服务的分组。 例如,如果表1中列出了两项账户管理服务,则 “所有账户管理服务” 包括这两项服务。 随着更多帐户管理服务可用作服务引用,将 所有帐户管理服务 指定为服务引用的网络区域将自动包含新添加的帐户管理服务。
请参阅每个服务产品的文档,以获取有关要将哪些服务添加为规则中目标服务产品的服务引用的更多信息。
端点类型
端点类型代表接收访问请求的连接。 它对应于接收连接的端点。 您可以允许从服务或特定服务端点类型支持的所有端点类型进行访问。
三种常见端点类型如下所示:
- 公共端点可以接受来自任何位置的请求。
- 对于来自 IBM Cloud® 内部的大多数请求,可使用私有终端。
- 直接终端用于自带IP场景,通常用于处理来自VPC内资源的请求。
所选服务可能不支持某些端点类型。
要访问虚拟专用终端,CLI 用户必须使用命令 ibmcloud login -a private.cloud.ibm.com --vpc
登录。更多信息,请参阅 创建专用终端网关(VPC 使用所需 )。
多重验证
多因素身份验证(MFA)要求身份验证使用 ID 和密码之外的另一种身份验证因素。 通过设置较低的 MFA 级别要求,允许符合或超过该要求的用户进行身份验证。 例如,如果您的规则要求用户使用多重验证 LEVEL1 进行身份验证,那么拥有多重验证 LEVEL2 的用户仍然符合要求,因为 LEVEL2 超过了 LEVEL1 的安全标准。 以下MFA级别列出了每个级别的最低MFA因子。 欲了解更多信息,请访问 IBM Cloud 多因素认证。
- LEVEL1: 基于电子邮件的多因素认证
- LEVEL2: TOTP MFA
- LEVEL3: U2F MFA
除了 LEVEL1、LEVEL2 和 LEVEL3 MFA 之外,基于上下文的限制规则还支持 IAM_ACCOUNT_SETTING
值,这意味着规则的 MFA 值与您为账户定义的 MFA 要求相匹配。 这样,您账户多重验证设置的任何更改都会自动应用到规则中。 更多信息,请参阅 MFA选项。
如果在 IAM 身份验证设置中为具有 IBMid 部分的用户的 MFA 选择了某个选项,那么来自 IAM 的 MFA 值将映射到基于上下文的限制中的 LEVEL2 MFA。 即使选择了非联合用户,MFA也会同时应用于联合用户和非联合用户。
只有某些服务支持在规则中指定 MFA 的功能。
访问需求
要完成规则操作,必须在目标服务上为您分配 IAM 策略。 要完成网络区域操作,必须在基于上下文的限制服务上为您分配 IAM 策略。
要为服务创建基于上下文的限制,必须为您分配具有管理员角色的 IAM 策略,您将针对该服务创建规则。 例如,如果要创建一条规则来保护一个 Key Protect 实例,您必须在该服务上分配管理员角色,并在基于上下文的限制服务上分配查看器角色或更高角色。Key Protect 服务上的管理员角色和基于上下文的限制服务上的查看器角色或更高。
基于上下文的限制服务上的查看器角色授权您在规则中添加网络区域。
基于上下文的限制角色和操作
要管理网络区域,必须为您分配具有基于上下文的限制帐户管理服务的特定角色的 IAM 策略。 下表显示了帐户管理的可能访问角色和操作。
角色 | 操作 |
---|---|
查看者 | 查看网络区域 |
编辑者 | 查看网络区域
创建网络区域 更新网络区域 除去网络区域 |
管理员 | 查看网络区域
创建网络区域 更新网络区域 除去网络区域 |
有关更多信息,请参阅 帐户管理服务的操作和角色。
您还可以使用网络区域来限制帐户级别的访问权。 要使用网络区域设置帐户级别限制,请转至 IBM Cloud 控制台中的 管理 > IAM > 设置,并输入网络区域的名称。
目标服务角色和操作
要管理规则,必须为您分配具有针对其创建规则的服务的管理员角色的 IAM 策略。 下表显示了服务的可能访问角色和操作。
角色 | 操作 |
---|---|
查看者 | 查看规则 |
编辑者 | 查看规则 |
管理员 | 查看规则
创建规则 更新规则 除去规则 |
与基于上下文的限制集成的服务
特定 IBM Cloud 服务与基于上下文的限制集成在一起,只有这些服务才能将规则应用于其资源。 规则应用于个别服务的方式由服务确定,因此请确保查看每个服务的文档以了解如何应用基于上下文的限制。
如果授予您对以下服务的正确访问权,那么可以为这些服务创建基于上下文的限制:
服务 | 服务类型 | 作用域到 API | service_name |
---|---|---|---|
目录管理服务 | 支持 IAM | 是 | globalcatalog-collection |
基于上下文的限制服务 | 帐户管理 | 否 | context-based-restrictions |
IAM 访问组服务 | 帐户管理 | 否 | iam-groups |
IAM 访问管理服务 | 帐户管理 | 否 | iam-access-management |
IAM Identity Service | 帐户管理 | 否 | iam-identity |
IAM 用户管理 | 帐户管理 | 否 | user-management |
Activity Tracker | 支持 IAM | 是 | logdnaat |
App Configuration | 支持 IAM | 否 | apprapp |
云 Object Storage | 支持 IAM | 否 | cloud-object-storage |
Code Engine | 支持 IAM | 否 | codeengine |
Container Registry | 支持 IAM | 否 | container-registry |
Databases for DataStax | 支持 IAM | 是 | databases-for-cassandra |
Databases for EnterpriseDB | 支持 IAM | 是 | databases-for-enterprisedb |
Databases for Elasticsearch | 支持 IAM | 是 | databases-for-elasticsearch |
Databases for etcd | 支持 IAM | 是 | databases-for-etcd |
Databases for MongoDB | 支持 IAM | 是 | databases-for-mongodb |
Databases for MySQL | 支持 IAM | 是 | databases-for-mysql |
Databases for PostgreSQL | 支持 IAM | 是 | databases-for-postgresql |
Databases for Redis | 支持 IAM | 是 | databases-for-redis |
Direct Link | 支持 IAM | 否 | directlink |
DNS Services | 支持 IAM | 否 | dns-svcs |
Event Notifications | 支持 IAM | 否 | event-notifications |
Event Streams | 支持 IAM | 否 | messagehub |
Key Protect | 支持 IAM | 否 | kms |
Kubernetes Service / Red Hat OpenShift | 支持 IAM | 是 | containers-kubernetes |
Messages for RabbitMQ | 支持 IAM | 是 | messages-for-rabbitmq |
Secrets Manager | 支持 IAM | 否 | secrets-manager |
Security and Compliance Center | 支持 IAM | 否 | compliance |
Transit Gateway | 支持 IAM | 否 | transit |
IBM Cloud® Virtual Private Cloud | 支持 IAM | 否 | is |
Schematics | 支持 IAM | 否 | schematics |
针对启用 IAM 的服务定义的基于上下文的限制不适用于诸如创建或删除之类的平台操作。 有关更多信息,请参阅 IAM 角色和操作。
定期检查以查看随着更多服务与基于上下文的限制集成而添加的服务。
基于上下文的限制
下表列出了基于上下文的限制的最大限制。 这些限制适用于可以创建基于上下文的限制规则或网络区域的任何用户。 有关更多信息,请参阅 什么是基于上下文的限制?。
如果您有需要扩展限制的特定用例,那么可以请求增加。 有关更多信息,请参阅 增加帐户限制。
资源 | 最大值 |
---|---|
每个帐户的基于上下文的限制规则 [1] | 4020 |
每个帐户的网络区域 | 500 |
每个网络区域的 IP 地址 | 1000 |
每个规则的 IP 地址 | 1000 |
包含多个网络区域的基于上下文的限制规则最多可以有 1000 个与之间接关联的 IP 地址。 例如,在包含两个网络区域的规则中,其中一个区域可能具有 800 个 IP 地址,另一个区域可能最多具有 200 个 IP 地址。
如果要检查帐户中的规则数,请参阅 查看每个帐户的规则总数。 要请求增加帐户限制,请参阅 请求策略和规则共享限制增加。
最终一致性
基于上下文的限制遵循许多云本机服务通用的 最终一致 模式。 因此,基于上下文的限制可在全球多个地区保持高度可用性和性能。 对基于上下文的限制规则和网络区域所做的更改会被记录下来,并在全球范围内传播。 在传播过程完成之前 (通常在几分钟内),访问更改可能不会生效。
-
IAM 策略和基于上下文的限制规则共享 4020 的组合限制。 ↩︎