IBM Cloud Docs
基于上下文的限制

本文档概述了使用基于上下文的限制来保护Cloud Databases资源的过程。 请使用本文档为基于上下文的限制准备资源。在当前实施阶段,Cloud Databases不为控制平面提供范围界定规则。

基于上下文的限制

基于上下文的限制使账户所有者和管理员能够根据访问请求的上下文定义和执行对IBM Cloud®资源的访问限制。 对Cloud Databases资源的访问可通过基于上下文的限制和Identity and Access Management(IAM)策略进行控制。

这些限制与基于身份的传统 IAM 策略配合使用,可提供额外的保护层。 与 IAM 策略不同,基于上下文的限制不会分配访问权限。 基于上下文的限制会检查访问请求是否来自您配置的允许上下文。 由于 IAM 访问和基于上下文的限制都会强制执行访问,因此即使凭证被泄露或管理不善,基于上下文的限制也能提供保护。 更多信息,请参阅 什么是基于上下文的限制

用户必须在Cloud Databases服务中具有管理员角色,才能创建、更新或删除规则。 用户还必须在基于上下文的限制服务上具有编辑器或管理员角色,才能创建、更新或删除网络区域。 在基于上下文的限制服务中具有查看器角色的用户可以将网络区域添加到规则中。

生成的任何IBM Cloud Activity Tracker或审计日志事件均来自基于上下文的限制服务,而非Cloud Databases。Cloud Databases仅支持客户与受基于上下文限制保护的平台端点调用交互的审计事件。为实例的控制平面 API 启用基于上下文的限制规则时,Cloud Databases不支持审计事件。 有关详细信息,请参阅 监控基于上下文的限制

要开始使用基于上下文的限制来保护您的Cloud Databases资源,请参阅 利用基于上下文的限制来确保资源安全 的教程。

Cloud Databases如何与基于上下文的限制相结合

您可以为Cloud Databases服务、特定资源和特定 API 创建基于上下文的限制。

保护Cloud Databases资源

您可以创建基于上下文的限制规则,以保护特定区域资源组和 实例

区域
保护特定区域内的Cloud Databases资源。 如果在基于上下文的限制规则中包含一个区域,则与该规则关联的网络区域中的资源只能与该区域中的资源交互。 如果使用 CLI,可以指定 --region 选项来保护特定区域的资源。 如果使用用户界面,可以在资源属性中指定“区域”。
资源组
保护特定资源组。 如果在基于上下文的限制规则中包含资源组,则与该规则关联的网络区域中的资源只能与该资源组中的资源交互。 只有保护群集 API 类型的规则才可将规则范围设为特定资源组。 如果使用 CLI,可以指定 --resource-group-id 选项来保护特定资源组中的资源。 如果使用用户界面,可以在资源属性中指定资源组
实例
保护特定实例。 如果在基于上下文的限制规则中包含实例,则与该规则关联的网络区域中的资源只能与该实例中的资源交互。 只有保护群集 API 类型的规则才可将规则范围设为特定实例。 如果使用 CLI,可以指定 --service-instance 选项来保护特定资源组中的实例。 如果使用用户界面,可以在资源属性中指定服务实例

使用命令行界面 (CLI)

You can create and manage context-based restrictions with the IBM Cloud CLI by 安装基于上下文的限制 CLI 插件.

创建网络区域

网络区域代表一个允许创建访问请求的 IP 地址列表。 它定义了一组由以下属性指定的一个或多个网络位置:

  • IP 地址,包括单个地址、地址范围或子网。
  • 虚拟PC。

在用户界面中创建网络区域

  1. 转到IBM Cloud®控制台中的管理>基于上下文的限制

  2. 选择网络区域

  3. 单击创建

  4. 为网络区域命名并提供说明。

  5. 输入允许的 IP 地址。 您可以输入单个 IP 地址、IP 地址范围或单个 CIDR。

    拒绝的 IP 地址字段是可选的,只应包括您在允许的 IP 地址字段中提供的 IP 范围内的例外。

  6. 选择允许的 VPC,数量不限。

  7. 引用服务:您可以选择Cloud Databases作为基于上下文限制的源服务,但不能将其作为目标服务。 例如,您可以使用 BYOK fromIBM® Key Protect for IBM Cloud® 来配置Cloud Databases实例。 在这个例子中,Cloud Databases是源队形,IBM® Key Protect for IBM Cloud®是目标队形。 然后,创建一个带有Cloud Databases服务引用的网络区域,并创建一条与该网络区域相关联的规则,该规则的目标是IBM® Key Protect for IBM Cloud®。 要添加Cloud Databases服务引用,服务类型会自动选择 IAM 服务。 在服务下拉菜单中,选择特定Cloud Databases服务。 如果您创建的区域与针对Cloud Databases 的规则相关联,则不允许服务引用。

服务引用功能只能从Key Protect服务引用到Cloud Databases 服务。

在 CLI 中创建网络区域

要在 CLI 中创建网络区域,请使用 cbr-zone-create 命令将资源添加到网络区域。 有关详细信息,请参阅 基于上下文的限制 CLI 参考

使用以下命令创建区域

ibmcloud cbr zone-create --addresses=1.1.1.1,5.5.5.5 --name=<NAME>

在 Terraform 中创建网络区域

要在 Terraform 中创建区域,请按照 IBM CloudTerraform 提供商文档中的说明进行操作。

创建 CBR 区域的 Terraform 脚本示例:

resource "ibm_cbr_zone" "cbr_zone" {
  account_id = "12ab34cd56ef78ab90cd12ef34ab56cd"
  addresses {
    type = "ipAddress"
    value = "169.23.56.234"
  }
  addresses {
    type = "ipRange"
    value = "169.23.22.0-169.23.22.255"
  }
  excluded {
    type  = "ipAddress"
    value = "169.23.22.10"
  }
  excluded {
    type  = "ipAddress"
    value = "169.23.22.11"
  }
  description = "this is an example of zone"
  excluded {
        type = "ipAddress"
        value = "value"
  }
  name = "an example of zone"
}

在 CLI 中更新网络区域

使用以下命令更新区域

ibmcloud cbr zone-update <ZONE-ID> --addresses=1.2.3.4 --name=<NAME>

更新需要 ZONE-ID,而不是区域名称。 使用以下命令列出区段并检索相关 ZONE-ID

ibmcloud cbr zones

zone-update 命令是覆盖命令。 包含所有必填字段,就像从头开始创建规则一样。 如果省略任何必填字段,规则会将这些缺失的字段覆盖为空,规则可能会失败,因为其中一些字段是必填的,无论它们是否会更改规则。

在 CLI 中删除网络区域

使用类似命令删除区域:

ibmcloud cbr zone-delete <ZONE-ID>

创建规则

规则根据资源属性和上下文限制对特定云资源的访问。 创建的规则最多可接受 2,000 个私有端点的 IP/CIDR 值,最多可接受 2,000 个公共端点的 IP/CIDR 值。 该限制适用于Cloud Databases。 其他IBM Cloud®服务限制可能有所不同。

Cloud Databases不支持IPv6地址。 如果包含IPv6地址,该地址将被忽略。

全面关闭对非允许列表端点的访问:为了提供更强大的安全框架,我们对公共端点和私人端点的访问控制进行了重大调整。 今后,对未明确列入允许列表的公共和私人端点的访问将完全关闭。 这种限制可确保只有经过授权的访问才能访问您的端点,从而最大限度地降低未经授权访问的风险。

在用户界面中创建规则

  1. 转到IBM Cloud®控制台中的管理>基于上下文的限制

  2. 选择规则

  3. 单击创建

  4. 在“服务” 下,选择要使用规则的目标服务。

  5. API 下,选择 Data plane。 目前,任何其他选择都会导致错误。

    数据平面 API 类型的预期操作为 0。

    Cloud Databases目前不支持将控制平面作为选项。

  6. 在“资源”下,将规则范围设为“所有资源”或“特定资源”。 有关更多信息,请参阅 保护Cloud Databases资源

  7. 单击继续

  8. 定义允许的端点类型。

    • 将切换按钮设置为“”,以允许所有端点类型。
    • 将切换设置为是, 以便只允许特定的端点类型,然后从列表中进行选择。
  9. 选择已创建一个或多个网络区域,或单击创建来创建新的网络区域。

    上下文定义了从哪里可以访问资源,从而有效地将网络区域与规则联系起来。

  10. 单击“**添加 **”将您的配置添加到摘要中。

  11. 单击下一步

  12. 说出你的规则。

  13. 选择执行规则的方式。

    Cloud Databases不提供仅报告功能。

在 CLI 中创建规则

要在 CLI 中创建规则,需要相应的Cloud Databases service_name

  • databases-for-postgresql
  • databases-for-mongodb
  • databases-for-redis
  • databases-for-elasticsearch
  • database-for-mysql
  • messages-for-rabbitmq
  • databases-for-enterprisedb
  • databases-for-etcd

CBR 插件参考指南 中解释了后面所有其他参数。

创建 CBR 规则的示例命令:

ibmcloud cbr rule-create --enforcement-mode enabled --context-attributes "networkZoneId=<ZONE-ID>" --resource-group-id <RESOURCE_GROUP_ID> --service-name <SERVICE-NAME> --service-instance <SERVICE-INSTANCE> --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane --description <DESCRIPTION>

目前,Cloud Databases支持的唯一 api-type 选项是数据平面

Cloud Databases不提供仅报告功能。

在 CLI 中更新规则

更新 CBR 规则的示例命令:

ibmcloud cbr rule-update <RULE-ID> --enforcement-mode disabled --context-attributes="networkZoneId=<ZONE-ID>" --resource-group-id   <RESOURCE_GROUP_ID> --service-name <SERVICE_NAME> --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane --description    <DESCRIPTION>

rule-update 命令是覆盖命令。 包含所有必填字段,就像从头开始创建规则一样。 如果省略任何必填字段,规则会将这些缺失的字段覆盖为空,规则可能会失败,因为其中一些字段是必填的,无论它们是否会更改规则。

更新需要 RULE-ID,而不是规则名称。 使用以下命令列出规则并检索相关 RULE-ID

ibmcloud cbr rules

在 CLI 中删除规则

使用类似命令删除规则:

ibmcloud cbr rule-delete <RULE-ID>

使用 ibmcloud cbr <command> — help 获取完整的选项和参数列表。 例如,ibmcloud cbr rule-create — help 输出用于创建规则的参数。

在 Terraform 中创建规则

要在 Terraform 中创建规则,请遵循 IBM CloudTerraform 提供商文档中的说明。

要创建规则,您需要相应的Cloud Databases service_name

  • databases-for-postgresql
  • databases-for-mongodb
  • databases-for-redis
  • databases-for-elasticsearch
  • database-for-mysql
  • messages-for-rabbitmq
  • databases-for-enterprisedb
  • databases-for-etcd

使用类似命令创建规则:

resource "ibm_cbr_rule" "cbr_rule" {
  contexts {
        attributes {
            name = "networkZoneId"
            value = "559052eb8f43302824e7ae490c0281eb"
        }
        attributes {
               name = "endpointType"
               value = "private"
    }
  }
  description = "this is an example of a rule with one context one zone"
  enforcement_mode = "enabled"
  operations {
        api_types {
            api_type_id = "api_type_id"
        }
  }
  resources {
        attributes {
            name = "accountId"
            value = "12ab34cd56ef78ab90cd12ef34ab56cd"
        }
        attributes {
              name = "serviceName"
              value = "network-policy-enabled"
        }
        tags {
              name     = "tag_name"
              value    = "tag_value"
        }
  }
}

验证您的规则

要验证您的规则是否已应用,请访问IBM Cloud®控制面板,并从资源列表中选择相关实例。 在“最近任务”中,您可以看到规则的状态。

创建或修改规则的任务会进入实例的任务队列。 根据工作量,规则执行可能需要一些时间才能完成。