Aplicar segurança de ponta a ponta a um aplicativo em nuvem
Este tutorial pode incorrer em custos. Use o Estimador de custos para gerar uma estimativa do custo baseada em seu uso projetado.
Este tutorial conduz você pelos serviços de segurança de chave disponíveis no catálogo do IBM Cloud® e como usá-los juntos. Um aplicativo que fornece compartilhamento de arquivo colocará os conceitos de segurança em prática.
Nenhuma arquitetura do aplicativo está completa sem um entendimento claro de possíveis riscos de segurança e como proteger contra tais ameaças. Os dados do aplicativo são um recurso crítico que não pode ser perdido, comprometido ou roubado. Além disso, os dados devem ser protegidos em repouso e em trânsito por meio de técnicas de criptografia. A criptografia de dados em repouso protege as informações da divulgação mesmo quando elas são perdidas ou roubadas. Criptografar dados em trânsito (por exemplo, na Internet) por meio de métodos como HTTPS, SSL e TLS evita a espionagem do tráfego de rede e os ataques man-in-the-middle.
Autenticar e autorizar o acesso dos usuários a recursos específicos é outro requisito comum para muitos aplicativos. Diferentes esquemas de autenticação podem precisar ser suportados: clientes e fornecedores usando identidades sociais, parceiros de diretórios hospedados na nuvem e funcionários do provedor de identidade de uma organização.
Objetivos
- Criptografe o conteúdo em buckets de armazenamento com suas próprias chaves de criptografia.
- Exigir que os usuários se autentiquem antes de acessar um aplicativo.
- Monitore e audite as chamadas de API relacionadas à segurança e outras ações nos serviços de nuvem.
O tutorial apresenta um aplicativo de amostra que permite que grupos de usuários façam upload de arquivos para um conjunto de armazenamentos comum e forneçam acesso a esses arquivos por meio de links compartilháveis. O aplicativo é escrito em Node.js e implantado como um contêiner em IBM Cloud Kubernetes Service ou Red Hat OpenShift on IBM Cloud. Ele alavanca vários serviços e recursos relacionados à segurança para melhorar a postura de segurança do aplicativo.
Este tutorial funcionará com um cluster em execução na Infraestrutura clássica ou na Infraestrutura VPC.
- O usuário se conecta ao aplicativo.
- Se estiver usando um domínio personalizado e um certificado TLS, o certificado será gerenciado e implantado em Secrets Manager.
- O App ID protege o aplicativo e redireciona o usuário para a página de autenticação. Os usuários também podem se inscrever.
- O aplicativo é executado em um cluster Kubernetes por meio de uma imagem armazenada no Container Registry. Essa imagem é varrida automaticamente para vulnerabilidades.
- Os arquivos transferidos por upload são armazenados no Object Storage com metadados associados armazenados no IBM Cloudant.
- Depósitos de armazenamento de objeto, App ID, e serviços Secrets Manager alavancam uma chave fornecida pelo usuário para criptografar dados.
- As atividades de gerenciamento de aplicativos são registradas por IBM Cloud Activity Tracker Event Routing e encaminhadas para IBM Cloud Logs para análise.
Antes de Iniciar
Este tutorial requer:
- CLI do IBM Cloud,
- Plug-in do IBM Cloud Kubernetes Service (
kubernetes-service), - Plug-in do Container Registry (
container-registry),
- Plug-in do IBM Cloud Kubernetes Service (
kubectlpara interagir com clusters Kubernetes,gitpara clonar o repositório de código-fonte.
Você encontrará instruções para baixar e instalar essas ferramentas para o seu ambiente operacional no guia Getting started with solution tutorials.
Para evitar a instalação dessas ferramentas, você pode usar a opção Cloud Shell no console IBM Cloud.
Criar serviços
Na próxima seção, você criará os serviços usados pelo aplicativo.
Decidir onde implementar o aplicativo
O local e o grupo de recursos de todos os recursos criados devem corresponder ao local e ao grupo de recursos do cluster Kubernetes.
Capturar atividades do usuário e do aplicativo
O IBM Cloud Activity Tracker Event Routing deve ser configurado para rotear eventos de auditoria para uma instância de destino IBM Cloud Logs. Encaminhe os eventos de auditoria conforme descrito na configuração de um destino IBM Logs, se não estiver configurado atualmente em sua conta.
No final deste tutorial, você revisará os eventos que foram gerados concluindo as etapas do tutorial.
Criar um cluster para o aplicativo
IBM Cloud Kubernetes Service e Red Hat OpenShift on IBM Cloud fornecem ambientes para implementar apps altamente disponíveis em contêineres que são executados em clusters Kubernetes.
Pule esta seção se tiver um cluster Kubernetes existente que queira reutilizar com este tutorial. No restante deste tutorial, o nome do cluster é referenciado como secure-file-storage-cluster, basta substituí-lo pelo nome do seu cluster.
Um cluster mínimo com uma (1) zona, um (1) nó do trabalhador e o menor tamanho disponível (Tipo) é suficiente para este tutorial. Para criar seu IBM Cloud Kubernetes Service cluster, siga as etapas para Criar clusters VPC ou Criar clusters clássicos. Para criar seu Red Hat OpenShift on IBM Cloud cluster, siga as etapas para Criação de clusters VPC ou Criação de clusters clássicos.
Usar suas próprias chaves de criptografia
O Key Protect ajuda você a fornecer chaves criptografadas para aplicativos entre os serviços IBM Cloud. Key Protect e IBM Cloud Object Storage trabalham juntos para proteger os seus dados em repouso. Nesta seção, você criará uma chave raiz para o depósito de armazenamento.
- Crie uma instância do Key Protect
- Selecione um local.
- Defina o nome como
secure-file-storage-kp. - Selecione o grupo de recursos onde criar a instância de serviço e clique em Criar.
- Em Chaves, clique no botão Incluir para criar uma nova chave raiz. Ele será usado para criptografar o depósito de armazenamento e os dados do App ID.
- Configure o tipo de chave como Chave raiz.
- Defina o nome como
secure-file-storage-root-enckey. - Em seguida, Incluir chave.
Use Bring your own key (BYOK) importando uma chave raiz existente.
Configurar o armazenamento para arquivos de usuário
O aplicativo de compartilhamento de arquivos salva os arquivos no bucket Object Storage. A relação entre arquivos e usuários é armazenada como metadados no banco de dados IBM Cloudant. Nesta seção, você criará e configurará esses serviços.
Um depósito para o conteúdo
- Crie uma instância do Object Storage.
- Selecione um plano Standard e defina o nome como
secure-file-storage-cos. - Use o mesmo grupo de recursos dos serviços anteriores e clique em Criar.
- Selecione um plano Standard e defina o nome como
- Em Credenciais de serviço, crie uma Nova credencial.
- Defina o nome como
secure-file-storage-cos-acckey. - Para Função, selecione Gravador.
- Em Opções avançadas, verifique Incluir credencial do HMAC. Isso é necessário para gerar URLs pré-assinadas.
- Clique em Incluir.
- Tome nota das credentials. Você precisará deles em uma etapa posterior.
- Defina o nome como
- Clique em Terminais na barra lateral de navegação:
- Configure Resiliência como Regional e configure o Local como o local de destino:
- Para Infraestrutura clássica: copie o terminal em serviço Privado. Ele será usado posteriormente na configuração do aplicativo.
- Para Infraestrutura de VPC: copie o terminal em serviço Direto. Ele será usado posteriormente na configuração do aplicativo.
Antes de criar o depósito, você concederá à instância de serviço do Object Storage acesso à chave raiz armazenada na instância de serviço do Key Protect.
- Vá para Gerenciar > Acesso(IAM)> Autorizações no console IBM Cloud.
- Clique no botão Criar.
- No menu Serviço de origem, selecione Cloud Object Storage.
- Mude para Recursos baseados em atributos selecionados, marque Instância de serviço de origem e selecione a instância de serviço do Object Storage criada anteriormente.
- No menu Serviço de destino, selecione Key Protect.
- Alterne para Recursos baseados em atributos selecionados, verifique o ID da Instância e selecione a instância de serviço do Key Protect criada anteriormente.
- Ative a função Leitor.
- Clique no botão Autorizar.
Por fim, crie o depósito
- Acesse a instância do serviço Object Storage na Lista de recursos em Armazenamento.
- Clique em Create bucket e depois em Customize your bucket.
- Use um valor exclusivo para name, como
<your-initials>-secure-file-upload. - Configure Resiliência como Regional.
- Configure Local para o mesmo local no qual você criou a instância de serviço do Key Protect.
- Configure Classe de armazenamento como Padrão
- Use um valor exclusivo para name, como
- Em integrações de serviço (opcional)/Criptografia, ative Gerenciamento de chave
- Selecione a instância de serviço do Key Protect criada anteriormente clicando em Usar instância existente
- Selecione secure-file-storage-root-enckey como a chave e clique em Associar chave.
- Em Service integrations (optional) / Monitoring & Activity tracking, ative o Activity tracking para que os eventos de auditoria sejam mantidos para análise.
- Depois de clicar no visto, as informações de serviço para a instância do Activity Tracker na região devem ser mostradas.
- Agora, ative Rastrear eventos de dados e selecione leitura & gravação como Eventos de dados.
- Clique em Criar depósito.
Relacionamentos do mapa de banco de dados entre usuários e seus arquivos
O banco de dados IBM Cloudant conterá metadados para todos os arquivos transferidos por upload do aplicativo.
- Crie uma instância do serviço do IBM Cloudant
- Selecione Cloudant como a oferta.
- Selecione um ambiente Multilocatário e uma região como a dos serviços anteriores.
- Defina o nome como
secure-file-storage-cloudant. - Use o mesmo grupo de recursos dos serviços anteriores.
- Configure Método de autenticação para IAM.
- Clique em Criar.
- De volta para a Lista de recursos, localize o serviço recém-criado e clique nele. Nota: você precisará esperar até que o status mude para Ativo.
- Em Credenciais de serviço, crie Nova credencial.
- Defina o nome como
secure-file-storage-cloudant-acckey. - Para Função selecione Gerenciador.
- Mantenha os valores padrão para os campos restantes.
- Clique em Incluir.
- Expanda as credenciais recém criadas e tome nota dos valores. Você precisará deles em uma etapa posterior.
- Em Gerenciar, clique em Ativar Painel.
- Clique em Create Database (Criar banco de dados) para criar um banco de dados não particionado chamado
secure-file-storage-metadata.
Autenticar usuários
Com o App ID, é possível proteger recursos e incluir a autenticação em seus aplicativos. Como uma alternativa não usada neste tutorial, App ID pode integrar com Kubernetes Service para autenticar usuários acessando aplicativos implementados no cluster.
Antes de criar o serviço App ID, conceda o acesso de serviço ao serviço Key Protect. Deve-se ser o proprietário da conta ou um administrador para a instância do Key Protect com a qual você está trabalhando. Deve-se também ter pelo menos o acesso de Visualizador para o serviço do App ID.
- Vá para Gerenciar > Acessar IAM > Autorizações e clique em Criar.
- Selecione o serviço App ID como seu serviço de origem.
- Selecione Key Protect como o seu serviço de destino.
- Alterne para Recursos baseados em atributos selecionados, verifique o ID da Instância e selecione a instância de serviço do Key Protect criada anteriormente.
- Atribua a função de Leitor em Acesso a serviço.
- Clique em Autorizar para confirmar a autorização delegada.
Agora, crie uma instância do serviço App ID.
-
Navegue até a App ID página de criação de serviços.
- Use o mesmo local usado para os serviços anteriores.
- Selecione a Camada graduada como plano.
- Defina o nome do serviço como
secure-file-storage-appid. - Selecione um grupo de recursos igual aos serviços anteriores.
- Selecione o nome do serviço Key Protect autorizado e a chave raiz nos respectivos menus suspensos.
- Clique em Criar.
-
Em Gerenciar autenticação, na guia Configurações de autenticação, inclua uma URL de redirecionamento da web apontando para o domínio que você usará para o aplicativo. O formato de URL é
https://secure-file-storage.<Ingress subdomain>/redirect_uri. Por exemplo:- com o subdomínio do ingresso:
mycluster-1234-d123456789.us-south.containers.appdomain.cloud - o redirecionamento URL é
https://secure-file-storage.mycluster-1234-d123456789.us-south.containers.appdomain.cloud/redirect_uri.
App ID exige que o URL de redirecionamento da Web seja https ou http. Você pode visualizar o subdomínio do Ingress no painel do cluster ou em
ibmcloud ks cluster get --cluster <cluster-name>. - com o subdomínio do ingresso:
-
Na mesma guia em Configurações de autenticação em Atividade de tempo de execução, ative os eventos de captura no IBM Cloud Activity Tracker Event Routing.
-
Criar credenciais de serviço:
- Em Credenciais de serviço, crie Nova credencial.
- Defina o nome como
secure-file-storage-appid-acckey. - Para Função selecione Gerenciador.
- Mantenha os valores padrão para os campos restantes.
- Clique em Incluir.
É necessário customizar os provedores de identidade usados, assim como o login e a experiência de gerenciamento de usuários no painel do App ID. Este tutorial usa os padrões para simplicidade. Para um ambiente de produção, considere usar as regras de Autenticação de Diversos Fatores (MFA) e de senha avançada.
Implementar o app
Todos os serviços foram configurados. Nesta seção, você implementará o aplicativo tutorial para o cluster. Tudo isso pode ser realizado em um ambiente de shell (terminal).
Obtenha o código
- Obtenha o código do aplicativo:
git clone https://github.com/IBM-Cloud/secure-file-storage - Acesse o diretório secure-file-storage/app:
cd secure-file-storage/app
Preencha as definições e credenciais de configuração
-
Se você não estiver conectado, use
ibmcloud loginouibmcloud login --ssopara fazer login interativamente. Destine sua região e grupo de recursos do IBM Cloud.ibmcloud target -r <region> -g <resource_group>É possível localizar mais comandos CLI no tópico Geral IBM Cloud Comandos CLI (ibmcloud) na documentação.
-
Configure as variáveis de ambiente necessárias à geração de arquivos de configuração na próxima etapa
- Inicie configurando o nome do cluster substituindo
<YOUR_CLUSTER_NAME>:export MYCLUSTER=<YOUR_CLUSTER_NAME> - Configure o subdomínio de ingresso usando comandos
ibmcloud ks:export INGRESS_SUBDOMAIN=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressHostname) // .ingress.hostname') - Configure o segredo do ingresso usando comandos
ibmcloud ks:export INGRESS_SECRET=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressSecretName) // .ingress.secretName') - Configure o nome do repositório de imagens para a imagem pré-construída
icr.io/solution-tutorials/tutorial-cloud-e2e-security:export IMAGE_REPOSITORY=icr.io/solution-tutorials/tutorial-cloud-e2e-security - Configure variáveis de ambiente adicionais, substituindo os valores padrão:
export BASENAME=secure-file-storage - Configure o namespace para usar:
export TARGET_NAMESPACE=default - Opcionalmente, defina a variável de ambiente
$IMAGE_PULL_SECRETsomente se estiver usando outro espaço de nome Kubernetes que não seja o espaço de nomedefaulte o IBM Cloud Container Registry para a imagem. Isso requer a configuração adicional do Kubernetes (por ex., criando um segredo de registro de contêiner no novo namespace).
- Inicie configurando o nome do cluster substituindo
-
Execute o comando abaixo para gerar
secure-file-storage.yamlesecure-file-storage-ingress.yaml. Ele usará as variáveis de ambiente que você acabou de configurar junto com os arquivos de modelosecure-file-storage.template.yamlesecure-file-storage-ingress.template.yaml../generate_yaml.shComo exemplo, supondo que o aplicativo seja implementado no espaço de nomes Kubernetes padrão:
Variáveis de ambiente usadas pelo script Variável Valor Descrição $IMAGE_PULL_SECRETNão definir ao usar a imagem fornecida Um segredo para acessar o registro. $IMAGE_REPOSITORYicr.io/solution-tutorials/tutorial-cloud-e2e-security ou icr.io/namespace/image-name O identificador do tipo URL para a imagem construída com base na URL de registro, no namespace e nome da imagem da seção anterior. $TARGET_NAMESPACEpadrão o namespace do Kubernetes no qual o app será enviado por push. $INGRESS_SUBDOMAINsecure-file-stora-123456.us-south.containers.appdomain.cloud Recupere por meio da página de visão geral do cluster ou com ibmcloud ks cluster get --cluster <your-cluster-name>.$INGRESS_SECRETsecure-file-stora-123456 Recuperar com ibmcloud ks cluster get --cluster <your-cluster-name>.$BASENAMEsecure-file-storage O prefixo usado para identificar recursos. -
Copie
credentials.template.envparacredentials.env:cp credentials.template.env credentials.env -
Edite
credentials.enve preencha os espaços em branco com estes valores:- o terminal regional de serviço do Object Storage, o nome do depósito, as credenciais criadas para o serviço do Object Storage,
- as credenciais para o armazenamento seguro de arquivos na nuvem,
- e as credenciais para App ID. A variável
appid_redirect_urisé uma lista separada por vírgula de URIs de redirecionamento, conforme discutido acima.
Ao usar o Cloud Shell, é possível usar
nano credentials.envpara editar o arquivo.
Implementar no cluster
- Obtenha acesso ao seu cluster conforme descrito nas instruções Conectar via CLI, acessível no menu Ações... na página de visão geral do console.
ibmcloud ks cluster config --cluster $MYCLUSTER --admin - Verifique se um segredo do Ingress está disponível em seu namespace de destino Se não, você precisa criá-lo (a). "
Se o segredo do Ingress tiver um CRN, use seu nome e CRN para criar um segredo em seu namespace de destino:ibmcloud ks ingress secret ls -c $MYCLUSTERSe o segredo do Ingress não tiver um CRN, use o comando a seguir para recriá-lo no namespace de destino:ibmcloud ks ingress secret create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply --namespace=$TARGET_NAMESPACE -f - - Crie o segredo usado pelo aplicativo para obter credenciais de serviço:
kubectl create secret generic secure-file-storage-credentials --from-env-file=credentials.env - Implemente o app.
kubectl apply -f secure-file-storage.yaml - Implemente o roteamento de rede (um serviço ClusterIP e Ingress) para seu app para torná-lo acessível por meio da internet pública.
kubectl apply -f secure-file-storage-ingress.yaml
Testar o aplicativo
É possível acessar o aplicativo em https://secure-file-storage.<your-cluster-ingress-subdomain>/.
- Acesse a página inicial do aplicativo. Você será redirecionado para a página de login padrão do App ID.
- Inscreva-se para uma nova conta com um endereço de e-mail válido.
- Aguarde o e-mail em sua caixa de entrada para verificar a conta.
- Login.
- Escolha um arquivo para fazer upload. Clique em ** Upload **.
- Use a ação Compartilhar em um arquivo para gerar uma URL pré-assinada que pode ser compartilhada com outras pessoas para acessar o arquivo. O link está configurado para expirar após 5 minutos.
Os usuários autenticados têm seus próprios espaços para armazenar arquivos. Embora eles não possam ver cada um dos outros arquivos, eles podem gerar URLs pré-assinadas para conceder acesso provisório a um arquivo específico.
Você pode encontrar mais detalhes sobre o aplicativo no repositório de código-fonte.
Revisar eventos de segurança
Agora que o aplicativo e seus serviços foram implementados com êxito, é possível revisar os eventos de segurança gerados por esse processo. Todos os eventos estão centralmente disponíveis na instância do IBM Cloud Logs.
- No painel do Observability, selecione a guia Cloud Logs e localize a instância IBM Cloud Logs que está recebendo os eventos de auditoria e clique em Open dashboard (Abrir painel).
- Revise todos os logs enviados para o serviço enquanto você estava provisionando e interagindo com recursos.
Opcional: usar um domínio customizado e criptografar o tráfego de rede
Por padrão, o aplicativo pode ser acessado em um subdomínio genérico de containers.appdomain.cloud. No entanto, também é possível usar um domínio customizado com o app implementado. Para obter suporte continuado de https,
o acesso com tráfego de rede criptografado, um certificado para o nome do host desejado ou um certificado curinga precisa ser fornecido. Há várias combinações de serviços que podem ser usadas para gerenciar nomes de DNS e certificados TLS
para integração em um aplicativo Kubernetes Este tutorial utilizará os seguintes serviços:
- Subdomínio DNS, secure-file-storage, de seu próprio domínio DNS customizado, que é gerenciado pelo serviço IBM Cloud Internet Services (CIS). Para o propósito de simplificar as etapas neste tutorial, usaremos example.com para o nome do domínio DNS customizado, certifique-se de substituir seu domínio DNS customizado em todas as etapas.
- Let's Encrypt para gerar os certificados TLS.
- IBM Cloud Secrets Manager para integrar com o Let' s Encrypt para gerar o certificado TLS para secure-file-storage.example.com e armazená-lo com segurança.
- Kubernetes Operador de Segredos Externos para puxar o certificado TLS secreto diretamente de Secrets Manager
Em vez das etapas a seguir, também é possível criar um CNAME apontando para o URI do app em seu provedor DNS, gerar um certificado TLS e importar seus componentes no Secrets Manager.
Provisão de instâncias de CIS e Secrets Manager
- Uma instância do IBM Cloud Internet Services é necessária. Use uma instância existente ou crie uma a partir desta entrada de catálogo. Vários planos de precificação estão disponíveis, incluindo um julgamento gratuito. O processo de fornecimento de um novo CIS explicará como configurar seu registro de DNS existente
(talvez não em IBM Cloud) para usar os servidores de nomes de domínio fornecidos pelo CIS. Exporte o domínio customizado na janela shell:
export MYDOMAIN=example.com - É necessária uma instância de Secrets Manager. Use uma instância existente ou crie uma nova descrita em Criando uma instância de serviço Secrets Manager. Se criar uma nova instância, nomeia-o secure-file-storage-sm. Você pode aumentar a segurança de seus segredos em repouso integrando-se à instância Key Protect criada anteriormente.
Crie uma entrada de DNS na instância do CIS usando seu cluster Kubernetes subdomínio do Ingress como o alias.
- Abra a instância de serviço CIS, você pode encontrá-lo na Lista de Recursos.
- Clique na guia Confiabilidade à esquerda.
- Clique na guia DNS na parte superior.
- Role até a seção de Registros DNS e clique em Adicionar para criar um novo registro:
- Tipo: CNAME
- Nome: secure-file-storage
- Alias: o subdomínio do Ingress de seu cluster É possível obter o valor correto no shell executando o comando a seguir:
echo $INGRESS_SUBDOMAIN - Clique em Incluir para incluir o novo registro
Conectar Secrets Manager instância para o Let's Encrypt.
-
Uma conta do Let's Encrypt ACME e o arquivo .pem associado é necessário. Use um existente ou crie um:
- Instale o acme-account-creation-tool. Criando uma conta ACME do Let's Encrypt ACME contém instruções e um link para a ferramenta de criação.
- Execute acme-account-create-tool para criar uma conta especificamente para este exemplo de armazenamento de arquivo seguro Abaixo está um exemplo:
$ ./acme-account-creation-tool-darwin-amd64 -e YOUREMAIL -o secure-file-storage.example.com -d letsencrypt-prod INFO[2022-12-28T13:30:00-08:00] Registering a new account with the CA INFO[2022-12-28T13:30:00-08:00] Account information written to file : secure-file-storage.example.com-account-info.json INFO[2022-12-28T13:30:00-08:00] Private key written to file : secure-file-storage.example.com-private-key.pem Account Info { "email": "YOUREMAIL", "registration_uri": "https://acme-v02.api.letsencrypt.org/acme/acct/891897087", "registration_body": { "status": "valid", "contact": [ "mailto:YOUREMAIL" ] } }% $ ls secure-file-storage.example.com-account-info.json secure-file-storage.example.com-private-key.pem
-
Conecte a conta do ACME do Let's Encrypt para a instância Secrets Manager. Veja Adicionando uma configuração de autoridade de certificação na UI para obter mais detalhes:
- Abra a instância de serviço Secrets Manager, é possível localizá-la na Lista de recursos.
- Abra Motores de segredos à esquerda e clique em Certificados públicos.
- Em Autoridades de Certificado clique em Adicionar.
- Nome: LetsEncrypt e Autoridade do Certificado: Vamos Encrypt.
- Em Selecionar arquivo, clique em Incluir arquivo e escolha o secure-file-storage.example.com-private-key.pem ou seu arquivo .pem existente no seletor.
- Clique em Incluir.
-
Conecte o CIS como um provedor DNS:
- Sob provedores DNS clique em Adicionar.
- Name cis e escolha Cloud Internet Services na lista suspensa.
- Clique em Avançar.
- Na aba Autorização escolha a instância CIS.
- Clique em Incluir.
-
Solicite um certificado em Secrets Manager
- Abra o serviço Secrets Manager e selecione Segredos à esquerda.
- Clique em Incluir.
- Clique em Certificado público e, em seguida, em Avançar.
- Preencha o formulário:
- Nome - digite um nome que você pode lembrar.
- Descrição - digite uma descrição de sua escolha.
- Clique em Avançar.
- Em Autoridade de certificação, selecione o seu mecanismo de autoridade de certificação Let's Encrypt configurado.
- Em Algoritmo de chave, escolha o seu algoritmo preferencial,
- Certificados de pacote configurável -deixe desativado
- Rotação automática de certificado - deixe desativado
- Em Provedor DNS selecione sua instância de provedor DNS configurada
- Clique em Selecionar domínios, marque Selecionar com curinga e deixe o próprio domínio desmarcado e clique em Pronto.
- Clique em Avançar.
- Revise suas seleções e clique em Incluir.
- Clique no menu de três pontos verticais para o segredo ativo e escolha Detalhes e copie o CRN do diálogo. Exporte o valor na casca. Ele se parecerá com o seguinte:
export PUBLIC_CERT_CRN=crn:v1:bluemix:public:secrets-manager:eu-de:a/abc123abc123abc123abc123:99999999-9999-9999-9999-999999999999:secret:aaaaaaaa-9999-9999-aaaa-123456781234
-
Este tutorial alavanca o serviço para a autorização de serviço para fornecer ao cluster acesso à instância de serviço Secrets Manager e seus segredos gerenciados.
- Acesse a página Autorizações do IAM e depois clique em Criar para incluir uma nova autorização.
- Em Origem, selecione Kubernetes Service, em seguida, clique para selecionar Recursos específicos. Em seguida, para Instância de serviço de origem, escolha seu cluster..
- Em Destino, selecione Secrets Manager, em seguida, indo com Recursos específicos e ID da instância, selecione sua instância de serviço do Secrets Manager.
- Finalmente, em Funções, selecione Gerenciador e conceda a autorização clicando em Autorizar.
-
Verifique se os valores para MYDOMAIN e PUBLIC_CERT_CRN foram exportados para o ambiente:
echo MYDOMAIN $(printenv MYDOMAIN) echo PUBLIC_CERT_CRN $(printenv PUBLIC_CERT_CRN) -
Crie um segredo do Ingress por meio do novo certificado TLS
ibmcloud ks ingress secret create --name secure-file-storage-certificate --cluster $MYCLUSTER --cert-crn $PUBLIC_CERT_CRN --namespace $TARGET_NAMESPACE -
Execute o comando abaixo para gerar novas cópias dos arquivos de configuração.. Ele usará todas as variáveis de ambiente configuradas juntamente com os arquivos de modelo
secure-file-storage.template.yamlesecure-file-storage.template-ingress.yaml. Você pode querer primeiro salvar a versão atual:cp secure-file-storage.yaml /tmp cp secure-file-storage-ingress.yaml /tmp./generate_yaml.sh -
Aplique as alterações de configuração em seu cluster:
kubectl apply -f secure-file-storage-ingress.yaml -
Alterne de volta para o navegador. Na Lista de recursos do IBM Cloud, localize o serviço App ID criado e configurado anteriormente e ative seu painel de gerenciamento.
- Clique em Gerenciar autenticação na esquerda e na aba Configurações de autenticação na parte superior.
- No formulário Incluir URLs de redirecionamento da web inclua
https://secure-file-storage.example.com/redirect_uricomo outra URL.
- Tudo deve estar em seu lugar agora. Teste o aplicativo acessando-o em seu domínio customizado configurado
https://secure-file-storage.<your custom domain>.
Segurança: gire credenciais de serviço
Para manter a segurança, as credenciais de serviço, as senhas e outras chaves devem ser substituídas (giradas) em uma base regular. Muitas políticas de segurança têm um requisito para mudar senhas e credenciais a cada 90 dias ou com frequência semelhante. Além disso, no caso de um funcionário sair da equipe ou em incidentes de segurança (suspeitos), os privilégios de acesso devem ser mudados imediatamente.
Neste tutorial, os serviços são utilizados para diferentes propósitos, desde armazenamento de arquivos e metadados sobre como proteger o acesso do aplicativo até o gerenciamento de imagens de contêiner. A rotação das credenciais de serviço geralmente envolve
- renomear as chaves de serviço existentes,
- criar um novo conjunto de credenciais com o nome usado anteriormente,
- substituir os dados de acesso em segredos do Kubernetes existentes e aplicar as mudanças,
- e, após a verificação, desativar as credenciais antigas excluindo as chaves de serviço antigas.
Expandir o tutorial
A segurança nunca está concluída. Tente as sugestões a seguir para aprimorar a segurança de seu aplicativo.
- Substitua IBM Key Protect por Hyper Protect Crypto Services para segurança ainda maior e controle sobre chaves de criptografia.
Compartilhar recursos
Se você deseja trabalhar com outros pessoas nos recursos deste tutorial de solução, poderá compartilhar todos ou apenas alguns dos componentes. O IBM Cloud Gerenciamento de acesso e de identidade (IAM) permite a autenticação de usuários e IDs de serviço, além do controle de acesso a recursos em nuvem. Para conceder acesso a um recurso, é possível designar funções de acesso predefinidas a um usuário, a um ID de serviço ou a um grupo de acesso. É possível criar um grupo de acesso para organizar um conjunto de usuários e IDs de serviço em uma única entidade. Ele facilita a designação de acesso. É possível designar uma política única ao grupo em vezde designar o mesmo acesso diversas vezes por usuário ou ID de serviço individual. Desse modo, é possível organizar grupos para funções em seu projeto de desenvolvimento e alinhar o gerenciamento de segurança e de projeto.
É possível localizar informações sobre os serviços individuais e suas funções de acesso disponíveis do IAM aqui:
- Kubernetes Service ou o mesmo para Red Hat OpenShift on IBM Cloud.
- Container Registry
- App ID
- IBM Cloudant
- Object Storage
- IBM Cloud Activity Tracker Event Routing
- Key Protect
- Secrets Manager
Para iniciar, confira as melhores práticas para gerenciamento de acesso e como definir grupos de acesso.
Remover recursos
Para remover o recurso, exclua o contêiner implementado e, em seguida, os serviços provisionados.
Se você compartilhar uma conta com outros usuários, certifique-se sempre de excluir somente seus próprios recursos.
-
Exclua a configuração de rede implementada e o contêiner:
kubectl delete -f secure-file-storage-ingress.yamlDepois disso, execute o seguinte comando:
kubectl delete -f secure-file-storage.yaml -
Exclua os segredos para a implementação:
kubectl delete secret secure-file-storage-credentials -
Se você utilizou Secrets Manager, remova o serviço relacionado à autorização de serviço.
-
Na Lista de recursos do IBM Cloud, localize os recursos que foram criados para este tutorial. Use a caixa de procura e secure-file-storage como padrão. Exclua cada um dos serviços clicando no menu de contexto ao lado de cada serviço e escolhendo Excluir serviço. Observe que o serviço Key Protect poderá ser removido somente após a chave ter sido excluída. Clique na instância de serviço para chegar ao painel relacionado e para excluir a chave.
Dependendo do recurso, ele não é excluído imediatamente, mas retido (por padrão por 7 dias). É possível recuperar o recurso excluindo-o permanentemente ou restaurando-o dentro do período de retenção. Consulte este documento sobre como usar a recuperação de recurso.