Protegendo recursos de cluster com restrições baseadas em contexto

As restrições baseadas em contexto permitem que os proprietários e administradores de contas definam e apliquem restrições de acesso aos recursos do site IBM Cloud® com base no contexto das solicitações de acesso. O acesso aos recursos do IBM Cloud Kubernetes Service pode ser controlado com restrições baseadas em contexto e políticas de gerenciamento de identidade e acesso.

Essas restrições funcionam com as políticas tradicionais do IAM, que são baseadas na identidade, para fornecer uma camada extra de proteção. Ao contrário das políticas do IAM, as restrições baseadas no contexto não atribuem acesso. As restrições baseadas no contexto verificam se uma solicitação de acesso vem de um contexto permitido que você configura. Uma vez que o acesso do IAM e as restrições baseadas no contexto impõem o acesso, as restrições baseadas no contexto oferecem proteção mesmo em face de credenciais comprometidas ou mal gerenciadas. Para obter mais informações, consulte Quais são as restrições baseadas em contexto.

Um usuário deve ter a função de Administrador no serviço IBM Cloud Kubernetes Service para criar, atualizar ou excluir regras. E um usuário deve ter a função de Editor ou Administrador no serviço de restrições baseado em Contexto para criar, atualizar ou excluir zonas de rede.

Qualquer Activity Tracker ou eventos de log de auditoria gerados provem do serviço de restrições baseado em contexto, e não IBM Cloud Kubernetes Service. Para obter mais informações, consulte Monitorando restrições baseadas em contexto.

As tentativas de acesso ao plano de controle do cluster, que podem ser restringidas pelo uso do tipo de API Cluster, não geram eventos de registro de auditoria ou Activity Tracker.

Como IBM Cloud Kubernetes Service integra-se com restrições baseadas em contexto

É possível criar restrições baseadas em contexto (CBR) para as APIs do plano de controle do cluster ou para as APIs de gerenciamento de cluster do IBM Cloud. Com restrições baseadas em Contexto, é possível proteger os seguintes recursos.

APIs do plano de controle do cluster
Protege o acesso às APIs IBM Cloud Kubernetes Service para seus clusters ou namespaces específicos em seus clusters. Por exemplo, você pode proteger a API para criar um namespace Kubernetes.
APIs de gerenciamento
Protege o acesso às APIs do IBM Cloud Kubernetes Service para clusters específicos. Por exemplo, você pode proteger a API para criar um cluster.

Os aplicativos executados em clusters IBM Cloud Kubernetes Service, por exemplo, servidores da Web expostos por um Kubernetes LoadBalancer não são restritos pelas regras de CBR.

Protegendo recursos de cluster

É possível criar regras de CBR para proteger regiões específicas, e clusters.

Agrupamento
Protege um cluster específico IBM Cloud Kubernetes Service. Se você selecionar um cluster em sua regra do CBR, somente o tráfego de recursos nas zonas de rede que você associar com a regra pode interagir com esse cluster.
Se você usar a CLI, poderá especificar a opção --service-instance CLUSTER-ID para proteger um cluster específico.
Se você usar a API, poderá especificar "name": "serviceInstance","value": "CLUSTER-ID" nos atributos do recurso.
Região
Protege IBM Cloud Kubernetes Service recursos em uma região específica. Se você selecionar uma região em sua regra do CBR, então somente o tráfego de recursos nas zonas de rede que você associar com a regra pode interagir com recursos naquela região.
Se você usar a CLI, poderá especificar a opção --region REGION para proteger os recursos em uma região específica.
Se você usar a API, poderá especificar o campo "name": "region","value": "REGION" nos atributos do recurso.
Grupo de recursos
Protege os recursos do IBM Cloud Kubernetes Service em um grupo de recursos específico.
Se você usar a CLI, poderá especificar a opção --resource-group-id RESOURCE-GROUP-ID para proteger os recursos em um grupo de recursos específico.
Se você usar a API, poderá especificar o campo "name": "resourceGroupId","value": "RESOURCE-GROUP-ID" nos atributos do recurso.

Protegendo APIs específicas

Você pode criar regras de CBR para proteger os seguintes tipos de API para IBM Cloud Kubernetes Service.

APIs de avião de controle de
Proteja o acesso às APIs dentro de seus clusters, como as APIs para a criação de namespaces, pods e muito mais. As regras do CBR que se aplicam ao tipo de API de cluster acessam o acesso ao seu servidor de API de cluster, o qual inclui todos os comandos kubectl para aquele cluster. Se você selecionar as APIs de plano de controle de cluster em sua regra do CBR, então somente o tráfego de recursos nas zonas de rede que se associam a essa regra pode interagir com as APIs do plano de controle de cluster. Todos os outros pedidos estão bloqueados.
Se você usar a CLI, poderá especificar a opção --api-types e o tipo crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster.
Se você usar a API, poderá especificar "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster" na especificação "operations".
APIs de gerenciamento
Proteja o acesso às APIs para o fornecimento e gerenciamento de clusters, conjuntos de trabalhadores e muito mais. As regras da CBR que se aplicam ao controle de tipo API de gerenciamento acessam as APIs IBM Cloud Kubernetes Service, que inclui todas as chamadas de comandos ibmcloud ks, como ibmcloud ks clusters, ibmcloud ks cluster create e mais. Se você selecionar as APIs de gerenciamento em sua regra do CBR, então recursos na zona de rede que se associam à regra podem interagir com as APIs de gerenciamento.
Se você usar a CLI, poderá especificar a opção --api-types e o tipo crn:v1:bluemix:public:containers-kubernetes::::api-type:management.
Se você usar a API, poderá especificar "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:management" na especificação "operations".

Para seguir um cenário de CBR de exemplo, consulte Configurando restrições baseadas em contexto.

Para obter uma lista de alvos de referência de serviço na CLI, execute o comando ibmcloud cbr service-ref-targets.

Garantir que o IBM Cloud Kubernetes Service possa manter o acesso a outros recursos do IBM Cloud quando o CBR estiver ativado para eles

Você deve adicionar o containers-kubernetes às suas zonas de rede para regras criadas contra os serviços a seguir.

Serviço de identidade do IAM
Permitir IBM Cloud Kubernetes Service criar tokens e API Chaves como a Chave API do cluster e o token IBM Cloud Container Registry e API.
IAM Access Management Service
Permitir IBM Cloud Kubernetes Service criar uma função de acesso ao serviço IAM para acesso ao serviço de Reader para IBM Cloud Container Registry.
Serviço de grupos de acesso do IAM
Permitir IBM Cloud Kubernetes Service consultar grupos de acesso ao sincronizarem as políticas de acesso IAM com o RBAC no cluster.
Gerenciamento de usuários
Permitir IBM Cloud Kubernetes Service acessar informações do usuário ao sincronizarem políticas de acesso IAM com RBAC no cluster.
Protegem chave:
Permitir IBM Cloud Kubernetes Service para ativar a criptografia no cluster.
Block Storage for VPC (Server Protect)
Permitir que o IBM Cloud Kubernetes Service acesse e criptografe os volumes do Block Storage for VPC.
VPC
Permitir o acesso de IBM Cloud Kubernetes Service aos recursos na VPC.

Criando zonas de rede

As zonas de rede atuam como permitidas para os recursos de destino que você define ao criar regras de CBR. Depois de criar uma zona de rede, ou permitida, é possível criar regras que definam quais recursos a zona de rede pode acessar.

Certifique-se de adicionar o serviço containers-kubernetes às suas zonas de rede para regras que se aplicam a outros recursos do IBM Cloud, como uma regra que protege o IBM Cloud Object Storage ou algumas operações de cluster podem falhar. Para obter mais informações, consulte Como permitir que o IBM Cloud Kubernetes Service acesse outros recursos do IBM Cloud usando o CBR.

Revise as limitações antes de criar zonas de rede.

Criando zonas de rede a partir da API

Você pode criar zonas de rede usando a API /v1/zones. Para obter mais informações, consulte os Docs da API. Você pode adicionar o serviço containers-kubernetes em suas zonas de rede para permitir que IBM Cloud Kubernetes Service acesse recursos e serviços em sua conta.

Você pode incluir vários tipos de endereço em sua carga útil de zona de rede. Para obter mais informações, consulte a carga de exemplo nos docs da API.

Exemplo de carga útil para adicionar IBM Cloud Kubernetes Service a uma zona de rede. O atributo serviceRef para IBM Cloud Kubernetes Service é containers-kubernetes.

{
  "name": "Example zone 1",
  "description": "",
  "addresses": [
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    }
  ]
}

Exemplo de carga útil para adicionar vários serviços, endereços IP e VPCs a uma zona de rede.

{
  "name": "zone",
  "description": "",
  "addresses": [
    {
      "type": "ipAddress",
      "value": "192.168.0.0"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-east:a/CRN"
    },
    {
      "type": "vpc",
      "value": "crn:v1:bluemix:public:is:us-south:a/CRN"
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "cloud-object-storage",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "codeengine",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "containers-kubernetes",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_type": "platform_service",
        "account_id": "ACCOUNT-ID"
      }
    },
    {
      "type": "serviceRef",
      "ref": {
        "service_name": "iam-groups",
        "account_id": "ACCOUNT-ID"
      }
    }
  ],
  "excluded": []
}

Criando zonas de rede a partir da CLI

  1. Para criar zonas de rede a partir da CLI, instale o plug-in da CLI do CBR.

  2. Você pode usar o comando cbr-zone-create para adicionar recursos em zonas de rede. Para obter mais informações, consulte a referência CLI do CBR . Note que o service_name para IBM Cloud Kubernetes Service é containers-kubernetes.

    Para encontrar uma lista de refs de serviço disponíveis, execute o comando ibmcloud cbr service-ref-targets .

    Exemplo comando para adicionar o serviço containers-kubernetes a uma zona de rede.

    ibmcloud cbr zone-create --name example-zone-1 --description "Example zone 1" --service-ref service_name=containers-kubernetes
    

    O exemplo a seguir cria uma zona de rede para permitir que um único endereço IP público acesse. Você também pode usar este exemplo em conjunto com a uma regra de exemplo de IP. Para obter mais informações sobre este cenário, consulte Configurando restrições baseadas em contexto.

    ibmcloud cbr zone-create --addresses 129.41.86.7 --description "Allow only client IP" --name allow-client-ip
    

Criando zonas de rede a partir do console

  1. Determine os recursos que você deseja adicionar ao seu allowlist.
  2. Siga as etapas para criar restrições baseadas em contexto no console. Inclua o serviço Kubernetes em suas zonas de rede para permitir IBM Cloud Kubernetes Service para acessar serviços e recursos em sua conta.

Criando regras

Defina regras para proteger o acesso a recursos em sua conta. Os contextos que você define em suas regras determinam como os recursos em suas zonas de rede (allowlists) podem interagir com os recursos definidos na regra.

Revise as limitações antes de criar regras.

Criando regras usando a API

Revise os seguintes pedidos de exemplo para criar regras. Para obter mais informações sobre a API v1/rules, consulte os docs da API.

Depois de criar uma regra, ela pode levar até 10 minutes minutos para antes de atualizar essa regra devido ao caching de resposta IAM TTL.

A payload de exemplo a seguir cria uma regra que protege o cluster CLUSTER-ID. Apenas recursos na zona NETWORK-ZONE-ID podem acessar o cluster. Como nenhum operations é especificado, os recursos na zona NETWORK-ZONE-ID podem acessar as APIs cluster e management.

{
  "description": "Example rule 1",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

A payload de exemplo a seguir cria uma regra que protege o cluster CLUSTER-ID. Somente os recursos definidos na zona NETWORK-ZONE-ID podem acessar o cluster. Uma vez que o tipo de API cluster é especificado, os recursos na zona NETWORK-ZONE-ID podem acessar o cluster por meio das APIs do cluster sobre a rede privada.

{
  "description": "Example rule 2",
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT-ID"
        },
        {
          "name": "serviceName",
          "value": "containers-kubernetes"
        },
        {
          "name": "serviceInstance",
          "value": "CLUSTER-ID"
        }
      ]
    }
  ],
  "operations": {
    "api_types": [
      {
        "api_type_id": "crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster"
      }
    ]
  },
  "contexts": [
    {
      "attributes": [
        {
          "name": "networkZoneId",
          "value": "NETWORK-ZONE-ID"
        },
        {
          "name": "endpointType",
          "value": "private"
        }
      ]
    }
  ]
}

Criando regras por meio da CLI

  1. Para criar regras a partir da CLI, instale o plug-in da CLI do CBR.
  2. Você pode usar o ibmcloud cbr rule-create comando para criar regras de CBR. Para obter mais informações, consulte a referência CLI do CBR . Note que o service_name para IBM Cloud Kubernetes Service é containers-kubernetes. Para encontrar uma lista de nomes de serviço, execute o comando ibmcloud cbr service-ref-targets. Para encontrar uma lista de tipos de API para um serviço, execute o comando ibmcloud cbr api-types --service-name SERVICE.

Exemplo comando para criar uma regra que use a chave addresses e o tipo de API cluster e o tipo ipAddress.

ibmcloud cbr rule-create my-rule-1 --service-name containers-kubernetes --api-type crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --zone-id ZONE-ID

O comando a seguir cria uma regra que protege o cluster CLUSTER-ID. Apenas recursos na zona de rede NETWORK-ZONE-ID podem acessar o cluster. Esta regra inclui os tipos de API cluster e management.

ibmcloud cbr rule-create my-rule-2 --service-name containers-kubernetes --service-instance CLUSTER-ID --zone-id NETWORK-ZONE-ID

O comando exemplo a seguir cria uma regra que permite todas as conexões de rede privada, mas permite que apenas recursos na zona de rede allow-client-ip se conectem ao cluster sobre a rede pública. Para obter mais informações sobre esse cenário, consulte Configuração de restrições baseadas em contexto.

ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "privateAccess=allowAll, publicAccess=oneIP" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private --context-attributes endpointType=public,networkZoneId=allow-client-ip

Criação de regras no console

  1. Analise os contextos disponíveis e determine as regras que deseja criar.
  2. Siga as etapas para criar restrições baseadas em contexto no console.

Limitações

  • Depois de criar, forçar ou desativar o cumprimento de uma regra, pode levar até 10 minutos para que a mudança entre em vigor.
  • As seguintes limitações se aplicam às regras de CBR do site IBM Cloud Kubernetes Service que se aplicam a todos os tipos de API ou aos tipos de API do site cluster:
    • Eles não devem fazer referência a zonas de rede que contenham endereços IPv6. As APIs incluídas no tipo cluster não são compatíveis com IPv6.
    • Eles não devem fazer referência a outros serviços, como IBM Cloud Object Storage ou Key Protect, nas zonas de rede aplicadas.
    • Eles não são compatíveis com a aplicação do Report-only para o tipo de API de cluster.
    • Eles estão limitados a não mais de 200 IPs/sub-redes para regras privadas e 500 IPs/sub-redes para regras públicas.
  • Alguns clusters IBM Cloud Kubernetes Service que foram criados antes de 8 de outubro de 2022 não são capazes de impor regras de CBR públicas para o APIserver do cluster. Para verificar se o seu cluster suporta essas regras de CBR do tipo API de cluster público, execute o comando ibmcloud ks cluster get -c <CLUSTER-ID>. Se qualquer uma das URLs do Terminal de Serviço iniciar com o https://cXXX (onde XXX é qualquer número de três dígitos), então o cluster faz suporte a regras de CBR públicas. Se o Service Endpoint URLs for iniciado com https://cX (onde o número após o c é um dígito), então o cluster não é capaz de impor regras de CBR públicas para o APIserver do cluster. Para usar regras de CBR públicas, você deve criar um novo cluster.