使用基于上下文的限制,将入站流量限制在应用程序和功能上

您可以使用 IBM Cloud® 基于上下文的限制 (CBR) 来控制 IBM Cloud® Code Engine 应用程序和功能的入站网络流量。 利用 CBR,您可以通过专用端点、公共端点或两者限制访问,为工作负载提供灵活的网络级安全保护。 基于上下文的限制不是根据身份分配访问权限,而是验证访问请求是否来自你配置的允许上下文。 您可以限制 Code Engine 项目中应用程序和功能的入站流量,以 保护项目免受不必要的入站流量影响。 这些基于上下文的限制适用于账户、项目、资源组或位置(区域)级别,并适用于限制范围内的所有应用程序和功能。

Code Engine 应用程序和功能的基于上下文的限制支持以下用例:

  • 完全阻止公共入站:限制应用程序和功能只能通过 CBR 的专用端点访问。 这种方法无需配置 应用程序端点可见性 设置,因为公共访问会在网络层面被阻止。 您的工作负载仍可从专用网络(如 VPC)和同一项目中的其他 Code Engine 组件访问。

  • 通过 IP 阻止公开和限制私有:通过阻止所有公共互联网访问并将私人终端访问限制在特定 IP 地址或网络区域,实现对入站流量的最大控制。 这样,既能对专用端点实施基于 IP 的限制,又能在网络层面完全阻止公共端点。

  • 完全隔离工作负载:阻止私有和公共端点,在网络层面完全隔离应用程序和功能。 这种用例非常适合以下场景:只需进行出站连接的批处理工作负载、完全通过消息队列或事件订阅进行通信的内部微服务,或者正在进行维护的工作负载(您希望在保持应用部署的同时暂时阻止所有入站流量)。

基于上下文的限制仅适用于应用程序和功能,因为这些工作负载会暴露网络端点。 基于上下文的限制不适用于作业和车队,因为它们没有暴露任何网络端点。

利用基于上下文的限制来保护 Code Engine 资源时,除了利用基于上下文的规则限制连接到应用程序或功能的入站流量外,还可以对 限制 Code Engine 资源的上下文(网络路径) 进行管理,如部署或更新应用程序和机密。

Code Engine 基于上下文的限制可针对单个项目、整个资源组或某个位置(区域)。 有关 IBM Cloud 基于上下文的限制的更多信息,请参阅 《 基于上下文的限制的分层安全机制 》。

当基于上下文的限制规则涵盖一个资源组或一个位置(区域)时,该限制适用于现有项目。 如果在同一位置或资源组中创建新项目,限制会自动应用到新项目。 新项目与限制关联可能需要几分钟时间。 要观察 CBR 规则的应用情况,请查看用户界面、CLI 或 API 中的项目状态连接部分。

为 Code Engine 资源创建基于上下文的限制

您可以使用 IBM Cloud 控制台、CLI、API、SDK 或 Terraform 为 Code Engine 资源创建基于上下文的限制。 有关创建基于上下文的限制的更多信息,请参阅 创建基于上下文的限制。 以下各节提供了为 Code Engine 应用程序和功能创建限制的具体指导。

IPv6 Code Engine 不支持限制。

使用控制台添加基于上下文的限制

要创建基于上下文的限制,请参阅 创建基于上下文的限制。 以下是为 Code Engine 资源创建资源的具体步骤。

  1. 转到 "基于上下文的限制 规则 "页面

  2. 单击创建为基于上下文的限制创建新规则,从服务开始。

  3. 选择 Code Engine****服务,然后单击“下一步”选择要保护的服务 API。

  4. 通过选择服务 API数据平面选项来限制访问以保护您的 Code Engine 应用程序或功能工作负载。

    您可以在数据平面级别定义工作负载限制,因此至少要选择数据平面服务。 您还可以选择其他服务或平台 API。

    单击“下一步”设置资源限制范围。

  5. 将限制应用于单个项目、整个资源组或有多个项目的位置(区域)。 在“资源”部分应用此范围,然后单击“审核”继续。

  6. 单击“继续”为规则添加上下文。

  7. 配置上下文以定义哪些端点受到限制。 根据您的安全要求从以下方案中选择一种:

    • 用例 A:完全阻止公众入站

      使用这种用例,可以使您的应用程序和功能只能通过其专用端点访问,从而消除网络层面的公共互联网访问。

      1. 端点设置为开启。
      2. 选择专用 (允许流量)。
      3. 不选择“公共”(阻止流量)。
      4. 网络区留空。 确保本部分未启用任何网络区域,以便所有专用端点仍可访问。
      5. 点击 “添加” 以创建一个新上下文。
    • 用例 B:通过 IP 阻止公开并限制私有

      使用此用例可通过阻止所有公共互联网访问并将私人终端访问限制在特定 IP 地址或网络区域内,从而实现最大程度的控制。

      1. 端点设置为开启。
      2. 选择专用 (允许流量)。
      3. 不选择“公共”(阻止流量)。
      4. 选择要允许私人访问的网络区域(例如,特定 VPC 或 IP 范围)。
      5. 点击 “添加” 以创建一个新上下文。
    • 用例 C:完全隔离工作负载

      使用此用例,可通过阻止私人和公共端点,在网络层面完全隔离应用程序和功能。 这对于只进行出站连接的批处理工作负载、只通过消息队列或事件进行通信的内部微服务或正在进行维护的工作负载非常有用。

      1. 端点设置为开启。
      2. 取消选择“私人”(阻止流量)。
      3. 不选择“公共”(阻止流量)。
      4. 网络区留空。 没有网络区域的空公共上下文会阻止所有公共访问。
      5. 点击 “添加” 以创建一个新上下文。
  8. 单击“继续”提供规则详细信息。

  9. 请为您的规则提供描述。

  10. 选择已启用 执行

  11. 查看摘要,然后点击 “创建”

使用 CLI 添加基于上下文的限制

您可以使用 IBM Cloud CLI 为 Code Engine 资源创建基于上下文的限制。 开始之前,请运行 ibmcloud plugin install cbr,确保已 安装 IBM Cloud CLI 和基于上下文的限制插件。

  • 用例 A:完全阻止公众入站

    使用这种用例,可以使您的应用程序和功能只能通过其专用端点访问,从而消除网络层面的公共互联网访问。

    创建一条允许私人访问并阻止公共访问的规则:

    ibmcloud cbr rule-create --description "Block public inbound entirely" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane \
    --context-attributes endpointType=private
    
  • 用例 B:通过 IP 阻止公开并限制私有

    使用此用例可通过阻止所有公共互联网访问并将私人终端访问限制在特定 IP 地址或网络区域内,从而实现最大程度的控制。 要查找可用的区域 ID,请运行 ibmcloud cbr zones。

    创建一条规则,限制私人访问特定区域,阻止公众访问:

    ibmcloud cbr rule-create --description "Block public and restrict private by IP" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane \
    --context-attributes endpointType=private \
    --zone-id <zone-id>
    
  • 用例 C:完全隔离工作负载

    使用此用例,可通过阻止私人和公共端点,在网络层面完全隔离应用程序和功能。 这对于只进行出站连接的批处理工作负载、只通过消息队列或事件进行通信的内部微服务或正在进行维护的工作负载非常有用。

    要阻止所有入站流量,请创建一条没有上下文的规则(空规则会阻止所有访问):

    ibmcloud cbr rule-create --description "Isolate workloads entirely" \
    --service-name codeengine \
    --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane
    

基于上下文的限制规则涵盖整个账户、项目、资源组或位置(区域)。 使用 --resource-attributes 指定规则的适用级别,如 --resource-attributes "projectId=<your-project-id>" 适用于项目级别。

测试基于上下文的入站连接限制规则

创建基于上下文的限制规则后,可以使用应用程序或函数对其进行测试:

  • 如果您阻止了公共端点:尝试通过公共 URL 访问应用程序或函数时,会出现 RBAC Access Denied 错误信息。 您的工作负载仍可通过专用端点(来自 VPC 或同一项目中的其他 Code Engine 组件)进行访问。

  • 如果您通过 IP 限制了专用端点:通过专用端点的访问只能授予允许列表中的网络区域或 IP 地址。 如果请求来自未列入允许列表的来源,则会显示 RBAC Access Denied 错误信息。 例如,如果您只允许 9.9.9.9/32,那么您的应用程序或功能只能通过专用端点从该 IP 范围访问。 任何超出该范围的内容都会出现错误信息。

如果选择了指向 VPC(虚拟私有云)的网络区域,还必须创建一个 VPE(虚拟私有端点)网关,以允许 VPC 访问私有工作负载。 创建网关后,由于 PDNS 解析的原因,可能会出现暂时的延迟。 一开始,您可能会看到 RBAC Access Denied 错误信息,但过一段时间后,您就会获得访问权限。