Como soluciono o erro “não é possível extrair segredos ou autenticação do registro” no Amazon ECS?

9 minuto de leitura
0

Recebi um dos seguintes erros ao iniciar uma tarefa do Amazon Elastic Container Service (Amazon ECS): “ResourceInitializationError: não é possível extrair segredos ou autenticação do registro: falha no comando pull: : signal: killed” ou “ResourceInitializationError: não é possível extrair segredos ou autenticação do registro: falha na recuperação do recurso de execução: não é possível recuperar o segredo do asm: a chamada de serviço foi repetida.”

Breve descrição

A plataforma AWS Fargate versão 1.4.0 usa a interface de rede elástica de tarefas para extrair a imagem e os segredos. Todo o tráfego de rede flui pela interface de rede elástica em sua Amazon Virtual Private Cloud (Amazon VPC). Você pode visualizar esse tráfego por meio de seus logs de fluxo do Amazon VPC. No entanto, a tarefa usa sua configuração de rede em vez de usar as interfaces de rede elásticas do Fargate. Isso ocorre porque as interfaces de rede elásticas são colocadas em seu Amazon VPC.

O agente de contêiner do Amazon ECS usa o perfil de execução de tarefas do AWS Identity and Access Management (IAM) para informações dos seguintes serviços:

  • AWS Systems Manager Parameter Store
  • AWS Secrets Manager

Se você criptografar dados usando uma chave do AWS Key Management Service (AWS KMS) gerenciada pelo cliente, conceda as seguintes permissões para o perfil do IAM de execução da tarefa: 

  • ssm:GetParameters
  • secretsmanager:GetSecretValue
  • kms:Decrypt.

Use o runbook AWSSupport-TroublesotecstTaskFailedToStart para solucionar as tarefas do Amazon ECS que falham ao iniciar. Essa automação analisa as seguintes configurações:

  • Conectividade de rede com o registro de contêiner configurado
  • Permissões do IAM ausentes exigidas pelo perfil de execução da tarefa
  • Conectividade de endpoint de nuvem privada virtual (VPC)
  • Configuração de regras do grupo de segurança
  • Referências de segredos do AWS Secrets Manager
  • Configuração de registro

Se o resultado do runbook não fornecer recomendações, use as abordagens manuais de solução de problemas na seção a seguir. 

Resolução

Importante:

  • Use o runbook na mesma região da AWS em que seus recursos de cluster do ECS estão localizados.
  • Ao usar o runbook, você deve usar o ID de tarefa que falhou mais recentemente. Se a tarefa com falha fizer parte do serviço Amazon ECS, use a tarefa que falhou mais recentemente no serviço. A tarefa com falha deve estar visível em ECS:DescribeTasks durante a execução da automação. Por padrão, as tarefas interrompidas do ECS ficam visíveis por 1 hora após entrarem no estado Interrompido. O uso da ID de tarefa que falhou mais recentemente impede que a limpeza do estado da tarefa interrompa a análise durante a automação.

Para executar o runbook AWSSupport-TroubleshootECSTaskFailedToStart conclua as seguintes etapas:

  1. Abra o console do AWS Systems Manager.
  2. No painel de navegação, em Change Management (Gerenciamento de Alterações), escolha Automation (Automação).
  3. Escolha Execute automation (Executar automação).
  4.  Escolha a guia Owned by Amazo (Propriedade da Amazon).
  5. Em Automation document (Documento de automação), pesquise por TroubleshootECSTaskFailedToStart.
  6. Selecione o cartão AWSSupport-TroubleshootECSTaskFailedToStart.
    Observação: certifique-se de selecionar o botão de opção no cartão e não o nome da automação com hiperlink.
  7. Escolha Next (Avançar).
    Observação: após a execução, os resultados da análise são preenchidos na seção Saída global. No entanto, aguarde até que o status do documento passe para Sucesso. Além disso, observe todas as exceções na seção Saída.
  8. Para Execute automation document (Executar documento de automação), escolha Simple execution (Execução simples).
  9. Na seção Input parameters (Parâmetros de entrada), em AutomationAssumeRole, insira o ARN do perfil que permite ao Systems Manager Automation executar ações.
    Observação: certifique-se de que o AutomationAssumeRole ou o perfil ou usuário do IAM tenham as permissões de IAM necessárias para executar o runbook AWSSupport-TroubleshootECSTaskFailedToStart. Se você não especificar um perfil do IAM, o Systems Manager Automation usará as permissões do usuário ou do perfil do IAM que executa o runbook. Para mais informações sobre como criar o perfil de obtenção para o Systems Manager Automation, consulte Tarefa 1: Criar um perfil de serviço para automação.
  10. Em ClusterName, insira o nome do cluster em que a tarefa falhou ao iniciar.
  11. Em TaskId, insira a identificação da tarefa que falhou mais recentemente.
  12. Escolha Execute (Executar)

Com base na saída da automação, use uma das seguintes etapas manuais de solução de problemas.

Verifique as rotas de suas sub-redes para a Internet

Se você tiver uma tarefa do Fargate em uma sub-rede pública, verifique se sua tarefa tem um endereço IP público atribuído. Além disso, confirme se a tarefa tem uma rota padrão (0.0.0.0/0) para um gateway da Internet. Ao iniciar uma nova tarefa ou criar um novo serviço, ative a Auto-assign public (Atribuição automática de público).

Se você usar as configurações a seguir, não use o gateway da Internet na sub-rede pública para acessar o Secrets Manager ou o Systems Manager. Em vez disso, use um endpoint Amazon VPC:

  • Os endpoints da VPC do Secrets Manager ou do Systems Manager estão em uma sub-rede pública.
  • Você ativou o AmazonProvidedDNS nas configurações DHCP do Amazon VPC.

Observação: você não pode ativar a Atribuição automática de público para tarefas existentes. Para serviços existentes, você pode usar somente a AWS Command Line Interface (AWS CLI) para reconfigurar os serviços. Você não pode usar o Console de Gerenciamento da AWS. Se você usou uma pilha do AWS CloudFormation para criar seu serviço Amazon ECS, modifique a propriedade NetworkConfiguration AWS::ECS::Service para atualizar o serviço.

Se você tiver uma tarefa do Fargate em uma sub-rede privada, verifique se sua tarefa tem uma rota padrão (0.0.0.0/0) para a fonte de conectividade com a Internet. A fonte de conectividade com a Internet pode ser um gateway NAT, o AWS PrivateLink ou outra fonte.

Verifique suas configurações de ACL de rede e grupo de segurança

Verifique se a lista de controle de acesso à rede (ACL da rede) e os grupos de segurança não bloqueiam o acesso de saída à porta 443 a partir da sub-rede. Para mais informações, consulte Control traffic to resources using security groups (Controle de tráfego para recursos usando grupos de segurança).

Observação: as tarefas do Fargate devem ter acesso de saída à porta 443 para permitir o tráfego de saída e acessar os endpoints do Amazon ECS.

Verifique seus endpoints do Amazon VPC

Se você usar o PrivateLink, deverá criar os endpoints necessários.

Os seguintes endpoints são necessários para as versões 1.4.0 ou posteriores da plataforma Fargate:

  • com.amazonaws.region.ecr.dkr
  • com.amazonaws.region.ecr.api
  • endpoint de gateway S3
  • com.amazonaws.region.logs

Para mais informações, consulte Considerations for Amazon ECR VPC endpoints (Considerações sobre endpoints VPC do Amazon ECR).

Observação: se sua definição de tarefa usa o Secrets Manager, parâmetros do Systems Manager ou o Amazon CloudWatch Logs, talvez seja necessário definir endpoints. Para mais informações, consulte a documentação a seguir:

Se você usa o PrivateLink, verifique se o grupo de segurança do Amazon VPC permite o tráfego correto. O grupo deve permitir o tráfego do grupo de segurança de tarefas do Fargate ou do intervalo CIDR de VPC de tarefas do Fargate na porta TCP 443.

Para confirmar que a infraestrutura do Fargate tem acesso ao serviço, verifique as políticas de endpoint da VPC e as políticas de endpoint para Amazon Simple Storage Solution (Amazon S3).

Verifique seus perfis e permissões do IAM

O perfil de execução de tarefas concede as permissões necessárias ao contêiner do Amazon ECS e aos agentes do Fargate para fazer chamadas de API para a tarefa. O Fargate exige esse perfil quando você executa as seguintes ações:

  • Extrair uma imagem de contêiner do Amazon Elastic Container Registry (Amazon ECR).
  • Usar o driver de log awslogs.
  • Usar autenticação de registro privado.
  • Usar segredos do Secrets Manager ou parâmetros do Systems Manager Parameter Store para referenciar dados confidenciais.

Se seu caso de uso envolver qualquer um dos cenários anteriores, defina as permissões necessárias em seu perfil de execução de tarefas. Para uma lista completa das permissões necessárias, consulte o perfil do IAM de execução de tarefas do Amazon ECS.

Verifique as informações confidenciais referenciadas na definição de tarefas do Amazon ECS

Verifique se os nomes de segredos e de parâmetros correspondem aos nomes referenciados em sua definição de tarefas do Amazon ECS. Em seguida, verifique se os valores na definição do contêiner em sua definição de tarefa correspondem aos valores em sua definição de tarefa do Amazon ECS. Para mais informações, consulte How can I pass secrets or sensitive information securely to containers in an Amazon ECS task? (Como posso passar segredos ou informações confidenciais com segurança para contêineres em uma tarefa do Amazon ECS?)

Se o parâmetro e a tarefa do Systems Manager Parameter Store estiverem na mesma região, use o ARN completo ou o nome do segredo. Se o parâmetro existir em uma região diferente, você deverá especificar o ARN completo.

Para verificar o nome do parâmetro e o ARN do Systems Manager, conclua as seguintes etapas:

Observação: se você receber erros ao executar os comandos da AWS CLI, utilize a versão mais recente da AWS CLI.

  1. Abra o console do AWS Systems Manager.
  2. No painel de navegação, escolha Armazenamento de parâmetros e confirme o Nome do armazenamento de parâmetros.
  3. Para obter o ARN do parâmetro, use a AWS CLI para executar o comando a seguir. Substitua name_of_parameter_store_secret pelo nome do segredo do Armazenamento de parâmetros.
$ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption

Observação: os parâmetros que fazem referência aos segredos do Secrets Manager não podem usar os recursos de controle de versão ou histórico do Armazenamento de parâmetros. Para mais informações, consulte Restrições.

Informações relacionadas

Como verificar se há erros nas tarefas interrompidas

AWS OFICIAL
AWS OFICIALAtualizada há um ano