Use AWS Secrets Manager segredos 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 AWS Secrets Manager segredos no Amazon Elastic Kubernetes Service

Para mostrar segredos do Secrets Manager como arquivos montados em EKS pods da Amazon, você pode usar o AWS Segredos e provedor de configuração (ASCP) para o driver do Kubernetes Secrets Store. CSI ASCPFunciona com o Amazon Elastic Kubernetes Service (EKSAmazon) 1.17+ executando um grupo de nós da Amazon. EC2 AWS Fargate grupos de nós não são suportados. Com oASCP, você pode armazenar e gerenciar seus segredos no Secrets Manager e depois recuperá-los por meio de suas cargas de trabalho em execução na Amazon. EKS Se o seu segredo contiver vários pares de chave/valor no JSON formato, você poderá escolher quais montar na Amazon. EKS A JMESPathsintaxe ASCP usa para consultar os pares de chave/valor em seu segredo. ASCPTambém funciona com parâmetros do Parameter Store.

Se você usa um EKS cluster privado da Amazon, certifique-se de que o cluster em VPC que o cluster está tenha um endpoint do Secrets Manager. O Secrets Store CSI Driver usa o endpoint para fazer chamadas para o Secrets Manager. Para obter informações sobre como criar um endpoint em umVPC, consulteEndpoint da VPC.

Se você usa a rotação automática do Secrets Manager para seus segredos, você também pode usar o recurso de reconciliador de rotação do Secrets Store CSI Driver para garantir que você esteja 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 do EKS pod da Amazon e a troca por uma IAM função. Você define permissões em uma IAM política para essa IAM função. Quando ASCP assume a IAM função, 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 à IAM função.

Se as chamadas do ASCP para pesquisar a região e a IAM função associadas ao pod forem limitadas pelo Kubernetes, você poderá alterar as cotas de limitação usando, conforme mostrado na Etapa 2. helm install

Para conceder ao seu EKS pod da Amazon acesso aos segredos no Secrets Manager
  1. Crie uma política de permissões que secretsmanager:GetSecretValue conceda secretsmanager:DescribeSecret permissões 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 OpenID Connect (OIDC) para o cluster, caso ainda não tenha um. Para obter mais informações, consulte Criar um IAM OIDC provedor para seu cluster no Guia do EKS usuário da Amazon.

  3. Crie uma IAMfunção para a conta de serviço e anexe a política a ela. Para obter mais informações, consulte Criar uma IAM função para uma conta de serviço no Guia EKS do usuário da Amazon.

  4. Se você usa um EKS cluster privado da Amazon, certifique-se de VPC que o cluster em que o cluster está tenha um AWS STS ponto final. Para obter informações sobre a criação de um endpoint, consulte VPCEndpoints de interface no AWS Identity and Access Management Guia do usuário.

Etapa 2: instalar e configurar o ASCP

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

Durante a instalação, você pode configurar o ASCP para usar um FIPS endpoint. 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 CSI drivers da Secrets Store.

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
  3. Instale o chart. Para configurar a limitação, adicione a seguinte sinalização: --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 ASCP gráfico.

    helm repo add aws-secrets-manager https://aws.github.io/secrets-store-csi-driver-provider-aws
  5. Instale o chart. Para usar um FIPS endpoint, adicione a seguinte sinalização: --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 eles ASCP montam na Amazon EKS como arquivos no sistema de arquivos, você cria um arquivo. SecretProviderClass YAML SecretProviderClassLista os segredos a serem montados e o nome do arquivo como montá-los. Eles SecretProviderClass devem estar no mesmo namespace do EKS pod da Amazon ao qual ele faz referência.

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

Exemplo: Monte segredos por nome ou ARN

O exemplo a seguir mostra um SecretProviderClass que monta três arquivos na AmazonEKS:

  1. Um segredo especificado por completoARN.

  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 na AmazonEKS:

  1. Um segredo especificado por completoARN.

  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 fornecer disponibilidade durante interrupções de conectividade ou para configurações de recuperação de desastres, o ASCP suporta 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, ASCP ele tenta recuperar o segredo de ambos us-east-1 e. us-east-2 Se uma das regiões retornar um erro 4xx, por exemplo, devido a um problema de autenticação, ASCP ela não monta nenhum segredo. Se o segredo for recuperado com sucessous-east-1, ele ASCP montará esse valor secreto. Se o segredo não for recuperado com êxitous-east-1, mas for recuperado com êxitous-east-2, ele ASCP monta esse valor secreto.

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, ASCP ele tenta recuperar os dois segredos especificados porobjectName. Se algum deles retornar um erro 4xx, por exemplo, devido a um problema de autenticação, ASCP ele não monta nenhum segredo. Se o segredo for recuperado com sucessous-east-1, ele ASCP montará esse valor secreto. Se o segredo não for recuperado com êxitous-east-1, mas for recuperado com êxitous-east-2, ele ASCP monta esse valor secreto. O arquivo montado na Amazon EKS tem um nomeMyMountedSecret.

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 EKS pod da Amazon

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

Para montar segredos na Amazon EKS
  1. Aplique o SecretProviderClass ao pod com o comandokubectl apply -f ExampleSecretProviderClass.yaml.

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

  3. O ASCP monta os arquivos.

Solução de problemas

Você pode 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 que você encontrou na etapa anterior. Se você não estiver usando o namespace padrão, use -n <NAMESPACE>.

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

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