Restringir o tráfego de entrada para aplicativos e funções usando restrições baseadas em contexto
Você pode usar as restrições baseadas em contexto (CBR) do IBM Cloud® para controlar o tráfego de rede de entrada para seus aplicativos e funções do IBM Cloud® Code Engine. Com o CBR, você pode restringir o acesso por meio de endpoints privados, públicos ou ambos, fornecendo segurança flexível em nível de rede para suas cargas de trabalho. Em vez de atribuir acesso com base na identidade, as restrições baseadas em contexto verificam se uma solicitação de acesso vem de um contexto permitido que você configura. Você pode limitar o tráfego de entrada para seus aplicativos e funções em seus projetos Code Engine para proteger seus projetos contra tráfego de entrada indesejado. Essas restrições baseadas em contexto se aplicam em nível de conta, projeto, grupo de recursos ou local (região) e se aplicam a todos os aplicativos e funções dentro do escopo da restrição.
As restrições baseadas em contexto para aplicativos e funções do Code Engine suportam os seguintes casos de uso:
-
Bloquear totalmente a entrada pública: Restrinja seus aplicativos e funções para que sejam acessíveis somente por meio de seu endpoint privado via CBR. Essa abordagem elimina a necessidade de definir as configurações de visibilidade do endpoint do aplicativo, pois o acesso público é bloqueado no nível da rede. Suas cargas de trabalho permanecem acessíveis a partir de redes privadas (como VPCs) e de outros componentes do Code Engine dentro do mesmo projeto.
-
Bloqueie o público e restrinja o privado por IP: obtenha o máximo de controle sobre o tráfego de entrada bloqueando todo o acesso público à Internet e restringindo o acesso de endpoints privados a endereços IP ou zonas de rede específicos. Isso combina o recurso de restrições baseadas em IP para endpoints privados com a capacidade de bloquear endpoints públicos inteiramente no nível da rede.
-
Isolar totalmente as cargas de trabalho: Bloqueie endpoints privados e públicos para isolar completamente seus aplicativos e funções no nível da rede. Esse caso de uso é ideal para cenários como cargas de trabalho de processamento em lote que só precisam fazer conexões de saída, microsserviços internos que se comunicam exclusivamente por meio de filas de mensagens ou assinaturas de eventos, ou cargas de trabalho em manutenção em que você deseja impedir temporariamente todo o tráfego de entrada enquanto mantém o aplicativo implantado.
As restrições baseadas em contexto se aplicam somente a aplicativos e funções porque essas cargas de trabalho expõem os pontos de extremidade da rede. As restrições baseadas em contexto não se aplicam a trabalhos e frotas, pois eles não estão expondo nenhum ponto de extremidade da rede.
Ao proteger os recursos do Code Engine com restrições baseadas em contexto, além de restringir o tráfego de entrada que se conecta aos seus aplicativos ou funções com regras baseadas em contexto, você pode restringir os contextos(caminhos de rede)a partir dos quais os recursos do Code Engine podem ser gerenciados, como a implantação ou atualização de aplicativos e segredos.
As restrições baseadas em contexto para Code Engine podem ser aplicadas a um único projeto, a todo um grupo de recursos ou a um local (região). Para obter mais informações sobre as restrições baseadas em contexto do IBM Cloud, consulte “Segurança em camadas com restrições baseadas em contexto ”.
Quando uma regra de restrição baseada em contexto abrange um grupo de recursos ou um local (região), as restrições se aplicam aos projetos existentes. Se você criar um novo projeto no mesmo local ou grupo de recursos, as restrições serão automaticamente aplicadas ao novo projeto. Pode levar alguns minutos para que o novo projeto seja associado às restrições. Para observar a aplicação das regras de CBR, verifique a seção de conectividade do status do projeto na interface do usuário, CLI ou API.
Criando uma restrição baseada em contexto para seus recursos do site Code Engine
Você pode criar restrições baseadas em contexto para os seus recursos Code Engine usando o console IBM Cloud, a CLI, a API, os SDKs ou o Terraform. Para obter mais informações sobre a criação de restrições baseadas em contexto, consulte Criação de restrições baseadas em contexto. As seções a seguir fornecem orientações específicas para a criação de restrições para aplicativos e funções do Code Engine.
IPv6 As restrições não são compatíveis com o site Code Engine.
Adição de uma restrição baseada em contexto usando o console
Para criar uma restrição baseada em contexto, consulte Criação de restrições baseadas em contexto. As etapas a seguir são específicas para a criação de um recurso para Code Engine.
-
Vá para a página Regras de restrições baseadas em contexto.
-
Clique em Create (Criar ) para criar uma nova regra para a restrição baseada em contexto, começando pelo serviço.
-
Selecione Code Engine para Services e clique em Next para selecionar as APIs de serviço a serem protegidas.
-
Restrinja o acesso para proteger suas cargas de trabalho de aplicativos ou funções Code Engine selecionando a opção Data plane para APIs de serviço.
Você define as restrições de carga de trabalho no nível do plano de dados, portanto, selecione pelo menos o serviço de plano de dados. Você também pode selecionar outras APIs de serviço ou plataforma.
Clique em Next para definir o escopo da restrição para seus recursos.
-
Aplique a restrição a um único projeto, a todo o grupo de recursos ou a um local (região) onde haja vários projetos. Aplique esse escopo na seção Resources (Recursos) e clique em Review (Revisar ) para continuar.
-
Clique em Continuar para adicionar contexto à sua regra.
-
Configure contextos para definir quais endpoints são restritos. Escolha um dos cenários a seguir com base em seus requisitos de segurança:
-
Caso de uso A: bloquear totalmente a entrada pública
Use esse caso de uso para tornar seus aplicativos e funções acessíveis somente por meio de seu endpoint privado, eliminando o acesso público à Internet no nível da rede.
- Ative a opção “Endpoints ”.
- Selecione Private (permitir tráfego).
- Deixe a opção Public desmarcada (bloquear o tráfego).
- Deixe as zonas de rede vazias. Certifique-se de que nenhuma zona de rede esteja ativada nessa seção para que todos os endpoints privados permaneçam acessíveis.
- Clique em “Adicionar” para criar um novo contexto.
-
Caso de uso B: bloquear o público e restringir o privado por IP
Use esse caso de uso para obter o máximo de controle, bloqueando todo o acesso público à Internet e restringindo o acesso de endpoints privados a endereços IP ou zonas de rede específicos.
- Ative a opção “Endpoints ”.
- Selecione Private (permitir tráfego).
- Deixe a opção Public desmarcada (bloquear o tráfego).
- Selecione as zonas de rede que você deseja permitir para acesso privado (por exemplo, VPCs ou intervalos de IP específicos).
- Clique em “Adicionar” para criar um novo contexto.
-
Caso de uso C: isolar totalmente as cargas de trabalho
Use esse caso de uso para isolar completamente seus aplicativos e funções no nível da rede, bloqueando endpoints públicos e privados. Isso é útil para cargas de trabalho de processamento em lote que só fazem conexões de saída, microsserviços internos que se comunicam exclusivamente por meio de filas de mensagens ou eventos, ou cargas de trabalho em manutenção.
- Ative a opção “Endpoints ”.
- Deixe Private desmarcado (bloquear o tráfego).
- Deixe a opção Public desmarcada (bloquear o tráfego).
- Deixe as zonas de rede vazias. Um contexto público vazio, sem zonas de rede, bloqueia todo o acesso público.
- Clique em “Adicionar” para criar um novo contexto.
-
-
Clique em Continuar para fornecer detalhes da regra.
-
Insira uma descrição para sua regra.
-
Selecione Ativado para aplicação.
-
Verifique o resumo e clique em “Criar ”.
Adição de uma restrição baseada em contexto usando a CLI
Você pode usar a CLI do IBM Cloud para criar restrições baseadas em contexto para seus recursos do Code Engine. Antes de começar, verifique se a CLI do IBM Cloud está instalada e se o
plug-in de restrições baseadas em contexto está instalado, executando ibmcloud plugin install cbr.
-
Caso de uso A: bloquear totalmente a entrada pública
Use esse caso de uso para tornar seus aplicativos e funções acessíveis somente por meio de seu endpoint privado, eliminando o acesso público à Internet no nível da rede.
Crie uma regra que permita o acesso privado e bloqueie o acesso público:
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 -
Caso de uso B: bloquear o público e restringir o privado por IP
Use esse caso de uso para obter o máximo de controle, bloqueando todo o acesso público à Internet e restringindo o acesso de endpoints privados a endereços IP ou zonas de rede específicos. Para encontrar IDs de zona disponíveis, execute ibmcloud cbr zones.
Crie uma regra que restrinja o acesso privado a zonas específicas e bloqueie o acesso público:
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> -
Caso de uso C: isolar totalmente as cargas de trabalho
Use esse caso de uso para isolar completamente seus aplicativos e funções no nível da rede, bloqueando endpoints públicos e privados. Isso é útil para cargas de trabalho de processamento em lote que só fazem conexões de saída, microsserviços internos que se comunicam exclusivamente por meio de filas de mensagens ou eventos, ou cargas de trabalho em manutenção.
Para bloquear todo o tráfego de entrada, crie uma regra sem contextos (uma regra vazia bloqueia todo o acesso):
ibmcloud cbr rule-create --description "Isolate workloads entirely" \ --service-name codeengine \ --api-types crn:v1:bluemix:public:context-based-restrictions::::api-type:data-plane
As regras de restrição baseadas no contexto abrangem toda a conta, o projeto, o grupo de recursos ou o local (região). Use --resource-attributes para especificar o nível em que a regra se aplica, por exemplo, --resource-attributes "projectId=<your-project-id>" para aplicar no nível do projeto.
Teste de sua regra de restrição baseada em contexto para conectividade de entrada
Depois de criar a regra de restrição baseada em contexto, você pode testá-la usando seu aplicativo ou função:
-
Se você bloqueou os pontos de extremidade públicos: As tentativas de acessar seu aplicativo ou função por meio do site público URL resultam em uma mensagem de erro
RBAC Access Denied. Sua carga de trabalho permanece acessível por meio de endpoints privados (de VPCs ou outros componentes do Code Engine no mesmo projeto). -
Se você restringiu os pontos de extremidade privados por IP: o acesso por meio de pontos de extremidade privados só é concedido a zonas de rede ou endereços IP listados como permitidos. Se uma solicitação vier de uma fonte que não esteja na lista de permissões, você verá uma mensagem de erro
RBAC Access Denied. Por exemplo, se você permitiu apenas9.9.9.9/32, então seu aplicativo ou função é acessível apenas a partir desse intervalo de IPs por meio do endpoint privado. Qualquer coisa fora desse intervalo gera uma mensagem de erro.
Se você selecionou uma zona de rede que aponta para uma VPC (nuvem privada virtual), também deve criar um gateway VPE (ponto de extremidade privado virtual) para permitir que a VPC acesse cargas de trabalho privadas. Depois de criar o gateway,
você poderá ter um atraso temporário devido à resolução do PDNS. Inicialmente, você poderá ver as mensagens de erro do RBAC Access Denied, mas o acesso será concedido após algum tempo.