Cenários de restrições baseadas em contexto

Com as restrições baseadas em contexto, os proprietários e administradores de contas podem definir e aplicar 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. Para obter mais informações, consulte Proteção dos recursos do IBM Cloud Kubernetes Service com restrições baseadas em contexto.

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.

Entendendo o cenário

Neste cenário de exemplo, você usa restrições baseadas em contexto para restringir o tráfego ao seu cluster permitindo apenas um endereço IP individual para conectar-se às APIs cluster sobre a rede pública enquanto ainda permite todo o tráfego privado.

Nas etapas a seguir, você começa por criar uma zona de rede, ou permitida, que inclui um único endereço IP. Em seguida, você cria uma regra de restrições baseadas em contexto para o seu cluster que permite que todos os acessos de rede privada e permitida lista a zona de rede que contém o endereço IP individual. Ao criar a regra, você associa-a à zona de rede que contém o endereço IP individual.

Pré-requisitos

Antes de iniciar este tutorial, certifique-se de que você criou ou instalou os seguintes recursos e ferramentas.

Criando sua zona de rede

Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  1. Execute o comando de exemplo a seguir para criar uma rede que inclua apenas um IP cliente que você deseja usar.

    ibmcloud cbr zone-create --addresses 129.XX.XX.XX --description "Allow only client IP" --name allow-client-ip
    
  2. Verificar a zona de rede foi criada.

    ibmcloud cbr zones
    

Criando sua regra CBR

  1. Depois de criar sua zona de rede (allowlist), crie uma regra do CBR e inclua a zona de rede que criou na etapa anterior. O exemplo a seguir cria uma regra que usa o tipo API cluster. Substitua NETWORK-ZONE-ID pelo ID da zona de rede allow-client-ip que você criou na etapa 1.

    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=NETWORK-ZONE-ID
    

    Entendendo as opções de comando.

    --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster
    Configure a API crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster para permitir apenas recursos na zona de rede que você criou anteriormente para acessar apenas as APIs cluster, que incluem as APIs para vários comandos kubectl.
    --service-instance CLUSTER-ID
    Escoar a regra para um único cluster para que apenas recursos na zona de rede que você criou anteriormente possam acessar apenas o CLUSTER-ID.
    --context-attributes endpointType=private
    Configurar o atributo de contexto endpointType=private sem associar uma zona de rede permite todo o tráfego privado para o cluster.
    --context-attributes endpointType=public,networkZoneId=all-client-ip
    Configure o atributo de contexto endpointType=public e associe o networkZoneId=allow-client-ip que você criou anteriormente para permitir apenas os recursos na zona allow-client-ip para acessar o cluster sobre a rede pública.
  2. Verifique se a regra foi criada.

    ibmcloud cbr rules
    

Testando suas restrições baseadas em contexto

Para testar sua configuração de restrições baseadas em contexto, você pode tentar chamar as APIs de cluster para o seu cluster, por exemplo, listando pods, sobre a rede pública a partir de um endereço IP diferente do endereço IP individual que você permite listar em sua zona de rede. Com essa configuração, toda a conectividade privada é permitida, enquanto apenas o endereço IP individual em sua zona de rede pode se conectar às APIs do cluster sobre a rede pública.

Cenários adicionais

Agora que você criou uma simples zona de rede CBR e regra, revise os seguintes exemplos mais avançados para controlar ainda mais o acesso aos seus recursos IBM Cloud Kubernetes Service.

Permitindo que diferentes IPs acessem os terminais de atendimento público e privado

Neste cenário, você permite que diferentes endereços IP ou CIDRs acessem os terminais de serviço público e privado de seus clusters IBM Cloud Kubernetes Service criando zonas de rede separadas para cada endereço IP. Em seguida, você cria uma regra que permite que cada zona de rede acesse os terminais de atendimento público ou privado.

  1. Crie uma zona de rede para um endereço IP público ou CIDR e outra para um endereço IP privado ou CIDR que você deseja permitir acessar seus clusters IBM Cloud Kubernetes Service.

    Exemplo comandos para criar zonas de rede separadas chamadas public-IP-zone e private-IP-zone. Neste exemplo, cada zona contém vários endereços IP ou CIDRs, separados por uma vírgula, que você deseja permitir acessar seus clusters.

    ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses Zone" --name "public-ip-zone"
    
    ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses Zone" --name "private-ip-zone"
    
  2. Obtenha os IDs das zonas private-ip-zone e public-ip-zone que criou na etapa anterior.

    ibmcloud cbr zones
    
  3. Crie uma regra que permita que o private-ip-zone se conecte ao terminal de serviço privado do seu cluster e que também permita que o public-ip-zone se conecte ao terminal de serviço público do seu cluster apenas. Esta regra se aplica ao cluster especificado com a opção --service-instance. Se você deseja aplicar a regra em todos os clusters em sua conta, não especifique um cluster.

    ibmcloud cbr rule-create --context-attributes "endpointType=public,networkZoneId=PUBLIC-IP-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-IP-ZONE-ID" --description "Separate private and public IPs for cluster and management rule" --service-name containers-kubernetes --service-instance CLUSTER-ID
    

Permitindo que diferentes IPs acessem tipos de API diferentes sobre os terminais de atendimento público e privado

Semelhante ao cenário anterior, neste cenário você permite que diferentes endereços IP acessem o endpoint de serviço público ou privado para clusters IBM Cloud Kubernetes Service. No entanto, neste cenário, o acesso é restringido ainda mais por tipos de API específicos para as APIs cluster e management. Para obter mais informações sobre os tipos de API, consulte Protegendo APIs específicas.

  1. Crie quatro zonas de rede, uma para cada um dos endereços IP que você deseja permitir para acessar as APIs públicas ou privadas do cluster ou as APIs públicas ou privadas do management Note que você pode incluir vários endereços IP ou CIDRs, separados por uma vírgula, que você deseja permitir acessar seus clusters.

    ibmcloud cbr zone-create --addresses 1.2.3.4,12.12.12.0/24 --description "Allowed Public IP Addresses for IKS and ROKS APIs" --name "public-mgmt-zone"
    
    ibmcloud cbr zone-create --addresses 10.20.20.20,10.10.10.0/24 --description "Allowed Private IP Addresses IKS and ROKS APIs" --name "private-mgmt-zone"
    
    ibmcloud cbr zone-create --addresses 11.11.11.0/24 --description "Allowed Public IP Addresses for cluster apiserver" --name "public-cluster-zone"
    
    ibmcloud cbr zone-create --addresses 10.30.30.30 --description "Allowed Private IP Addresses for cluster apiserver" --name "private-cluster-zone"
    
  2. Obtenha os IDs das zonas que você criou na etapa anterior.

    ibmcloud cbr zones
    

    Saída de exemplo

    OK
    id                                 name                   address_count   
    c14c0839c13d8aa0afa8383e2be2e124   public-mgmt-zone       2   
    f9676ca6ef37685315fa254b89d73159   public-cluster-zone    1   
    c14c0839c13d8aa0afa8383e2be2e843   private-cluster-zone   1   
    b53353de929de39ac2381f9b4cde8507   private-mgmt-zone      2
    
  3. Crie uma regra que proteja o acesso às APIs públicas e privadas cluster e management usando as zonas que você criou anteriormente.

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:management --context-attributes "endpointType=public,networkZoneId=PUBLIC-MGMT-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-MGMT-ZONE-ID" --description "Separate private and public IPs for the management APIs" --service-name containers-kubernetes
    
    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --context-attributes "endpointType=public,networkZoneId=PUBLIC-CLUSTER-ZONE-ID" --context-attributes "endpointType=private,networkZoneId=PRIVATE-CLUSTER-ZONE-ID" --description "Separate private and public IPs for cluster APIs" --service-name containers-kubernetes