Use segredos do AWS Secrets Manager no Amazon Elastic Kubernetes Service - AWS Secrets Manager

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Use segredos do AWS Secrets Manager no Amazon Elastic Kubernetes Service

Para mostrar segredos do Secrets Manager, como arquivos montados em pods do Amazon EKS, você pode usar o AWSSecrets and Configuration Provider (ASCP) para o Driver da CSI do armazenamento de segredos do Kubernetes. O ASCP funciona com o Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+ executando um grupo de nós do Amazon EC2. Grupos de nós do AWS Fargate não são compatíveis. Com o ASCP, você pode armazenar e gerenciar segredos no Secrets Manager e, em seguida, recuperá-los por meio de workloads executadas no Amazon EKS. Se seu segredo contiver vários pares de chave-valor no formato JSON, você poderá escolher quais montará no Amazon EKS. O ASCP usa Sintaxe JMESPath para consultar os pares de chave-valor no seu segredo. O ASCP também funciona com parâmetros do Parameter Store.

Se você usar um cluster privado do Amazon EKS, garanta que a VPC na qual o cluster está tenha um endpoint do Secrets Manager. O driver CSI do Secrets Store usa o endpoint para fazer chamadas para o Secrets Manager. Para obter mais informações sobre como criar um endpoint, consulte Endpoint da VPC.

Se você usar a alternância automática do Secrets Manager para seus segredos, também poderá usar o recurso de reconciliador de alternância do driver da CSI do armazenamento de segredos para garantir que está recuperando o segredo mais recente do Secrets Manager. Para obter mais informações, consulte Alternância automática de conteúdos montados e segredos do Kubernetes sincronizados.

Etapa 1: configurar o controle de acesso

O ASCP recupera a identidade de pods do Amazon EKS e a substitui por um perfil do IAM. Você define permissões em uma política do IAM para esse perfil do IAM. Quando o ASCP assume o perfil do IAM, ele obtém acesso aos segredos que você autorizou. Outros contêineres não podem acessar os segredos, a menos que você também os associe ao perfil do IAM.

Se as chamadas do ASCP para pesquisar a região e o perfil do IAM associadas ao pod forem limitadas pelo Kubernetes, será possível alterar as cotas de controle de utilização usando helm install, conforme mostrado na Etapa 2.

Para conceder ao seu pod do Amazon EKS acesso aos segredos no Secrets Manager
  1. Crie uma política de permissões que conceda as permissões secretsmanager:GetSecretValue e secretsmanager:DescribeSecret aos segredos que o pod precisa acessar. Para visualizar um exemplo de política, consulte Exemplo: permissão para ler e descrever segredos individuais.

  2. Crie um provedor IAM OIDC Connect (OIDC) para o cluster, se você ainda não tiver um. Para obter mais informações, consulte Criação de um provedor IAM OIDC para o seu cluster no Guia do Usuário do Amazon EKS.

  3. Crie um perfil do IAM para conta de serviço e anexe a política a ele. Para obter mais informações, consulte Criação de um perfil do IAM para uma conta de serviço no Guia do usuário do Amazon EKS.

  4. Se você usar um cluster privado do Amazon EKS, garanta que a VPC na qual o cluster se encontra tenha um endpoint do AWS STS. Para obter informações sobre a criação de um endpoint, consulte Endpoints da VPC da interface no Guia do usuário do AWS Identity and Access Management.

Etapa 2: instalar e configurar o ASCP

O ASCP está disponível no GitHub no repositório secrets-store-csi-driver-provider-aws. O repositório também contém arquivos YAML de exemplo para criar e montar um segredo.

Durante a instalação, é possível configurar o ASCP para usar um endpoint do FIPS. Para uma lista de endpoints , consulte AWS Secrets Manager endpoints.

Para instalar o ASCP usando o Helm
  1. Para garantir que o repositório esteja apontando para os gráficos mais recentes, use helm repo update.

  2. Adicione o gráfico de driver CSI do armazenamento de segredos.

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
  3. Instale o chart. Para configurar o controle de utilização, adicione o sinalizador a seguir: --set-json 'k8sThrottlingParams={"qps": "<number of queries per second>", "burst": "<number of queries per second>"}'

    helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  4. Adicione o gráfico ASCP.

    helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
  5. Instale o chart. Para usar um endpoint do FIPS, adicione o sinalizador a seguir: --set useFipsEndpoint=true

    helm install -n kube-system secrets-provider-aws aws-secrets-manager/secrets-store-csi-driver-provider-aws
Para instalar usando o YAML no repositório
  • Use os seguintes comandos.

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml

Etapa 3: identificar quais segredos montar

Para determinar quais segredos o ASCP monta no Amazon EKS como arquivos no sistema de arquivos, você cria um arquivo YAML SecretProviderClass. O SecretProviderClass lista os segredos a serem montados e o nome do arquivo no qual montá-los. OSecretProviderClassdeve estar no mesmo namespace que o pod Amazon EKS que ele faz referência.

Os exemplos a seguir mostram como usar o SecretProviderClass para descrever os segredos que você deseja montar e como nomear os arquivos montados no pod do Amazon EKS.

Exemplo: montar segredos por nome ou ARN

O exemplo a seguir mostra um SecretProviderClass que monta três arquivos no Amazon EKS:

  1. Um segredo especificado por um ARN completo.

  2. Um segredo especificado pelo nome.

  3. Uma versão específica de um segredo.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret2-d4e5f6" - objectName: "MySecret3" objectType: "secretsmanager" - objectName: "MySecret4" objectType: "secretsmanager" objectVersionLabel: "AWSCURRENT"

Exemplo: montar pares de chave/valor com base em um segredo

O exemplo a seguir mostra um SecretProviderClass que monta três arquivos no Amazon EKS:

  1. Um segredo especificado por um ARN completo.

  2. O par de chave-valor username do mesmo segredo.

  3. O par de chave-valor password do mesmo segredo.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:111122223333:secret:MySecret-a1b2c3" jmesPath: - path: username objectAlias: dbusername - path: password objectAlias: dbpassword

Exemplo: definir uma região de failover para um segredo multirregional

Para proporcionar disponibilidade durante interrupções de conectividade ou para configurações de recuperação de desastres, o ASCP oferece suporte a um recurso de failover automatizado para recuperar segredos de uma região secundária.

O exemplo a seguir mostra um SecretProviderClass que recupera um segredo que é replicado em várias regiões. Neste exemplo, o ASCP tenta recuperar o segredo de us-east-1 e us-east-2. Se qualquer uma das regiões retornar um erro 4xx (p. ex., para um problema de autenticação), o ASCP não montará nenhum segredo. Se o segredo for recuperado com êxito de us-east-1, o ASCP montará o valor desse segredo. Se o segredo não for recuperado com êxito de us-east-1, mas for recuperado com êxito de us-east-2, o ASCP montará o valor desse segredo.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "MySecret"

Exemplo: escolher um segredo de failover para montar

O exemplo a seguir mostra um SecretProviderClass que especifica qual segredo montar em caso de failover. O segredo de failover não é uma réplica. Neste exemplo, o ASCP tenta recuperar os dois segredos especificados por objectName. Se qualquer um deles retornar um erro 4xx (p. ex., para um problema de autenticação), o ASCP não montará nenhum segredo. Se o segredo for recuperado com êxito de us-east-1, o ASCP montará o valor desse segredo. Se o segredo não for recuperado com êxito de us-east-1, mas for recuperado com êxito de us-east-2, o ASCP montará o valor desse segredo. O arquivo montado no Amazon EKS tem o nome MyMountedSecret.

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "arn:aws:secretsmanager:us-east-1:111122223333:secret:MySecret-a1b2c3" objectAlias: "MyMountedSecret" failoverObject: - objectName: "arn:aws:secretsmanager:us-east-2:111122223333:secret:MyFailoverSecret-d4e5f6"

Etapa 4: montar os segredos como arquivos no pod do Amazon EKS

As instruções a seguir mostram como montar segredos como arquivos usando exemplos de arquivos YAML: ExampleSecretProviderClass.yaml e ExampleDeployment.yaml.

Para montar segredos no Amazon EKS
  1. Aplique SecretProviderClass ao pod com o comando kubectl apply -f ExampleSecretProviderClass.yaml.

  2. Implante seu pod com o comando kubectl apply -f ExampleDeployment.yaml.

  3. O ASCP monta os arquivos.

Solução de problemas

É possível visualizar a maioria dos erros ao descrever a implantação do pod.

Para ver mensagens de erro para o contêiner
  1. Obtenha uma lista de nomes de pods com o comando a seguir. Se você não estiver usando o namespace padrão, use -n <NAMESPACE>.

    kubectl get pods
  2. Para descrever o pod, no comando a seguir, para<PODID>use o ID do pod dos pods encontrados na etapa anterior. Se você não estiver usando o namespace padrão, use -n <NAMESPACE>.

    kubectl describe pod/<PODID>
Para ver erros para o ASCP
  • Para encontrar mais informações nos logs do provedor, no comando a seguir, para<PODID>Use a ID do pode csi-secrets-store-provedor-aws.

    kubectl -n kube-system get pods kubectl -n kube-system logs pod/<PODID>