Salta al contenuto

Come posso risolvere un errore "ResourceInitializationError" quando cerco di estrarre segreti o recuperare l'autenticazione Amazon ECR per attività ECS?

9 minuti di lettura
0

Quando avvio un'attività Amazon Elastic Container Service (Amazon ECS), ricevo un messaggio ResourceInitializationError.

Breve descrizione

Quando avvii un'attività Amazon ECS con il tipo di avvio Fargate, potresti ricevere uno dei seguenti messaggi di errore:

  • "ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed"
  • "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried."
  • "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr..amazonaws.com/": dial tcp …443: i/o timeout. Please check your task network configuration."
  • "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret arn:aws:secretsmanager…"
  • "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 1 time(s): failed to fetch secret arn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> from secrets manager: InvalidParameter: 1 validation error(s) found. – (minimum field size of 32/ maximum field size of 64), GetSecretValueInput.VersionId."
  • "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 1 time(s): failed to fetch secret rn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> from secrets manager: AccessDeniedException: User: arn:aws:sts::<accountID>::assumed-role/<roleName> is not authorized to perform: secretsmanager:GetSecretValue on resource: rn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> because no identity-based policy allows the secretsmanager:GetSecretValue action status code: 400"

AWS Fargate versione 1.4.0 utilizza l'interfaccia di rete elastica dell'attività per estrarre l'immagine e i segreti. Tutto il traffico di rete passa attraverso l'interfaccia di rete elastica all'interno di Amazon Virtual Private Cloud (Amazon VPC). Puoi utilizzare Log di flusso VPC per visualizzare il traffico. Tuttavia, l'attività utilizza la configurazione di rete perché Fargate inserisce le interfacce di rete in Amazon VPC.

L'agente container Amazon ECS utilizza il ruolo AWS Identity and Access Management (AWS IAM) di esecuzione dell'attività per ottenere informazioni da Archivio dei parametri, una funzionalità di AWS Systems Manager e AWS Secrets Manager.

Per i dati crittografati con una chiave del Servizio AWS di gestione delle chiavi (AWS KMS) gestita dal cliente, concedi le seguenti autorizzazioni al ruolo IAM di esecuzione dell'attività:

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

Risoluzione

Nota: se ricevi errori durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Utilizza il runbook TroubleshootECSTaskFailedToStart

Utilizza il runbook AWSSupport-TroubleshootECSTaskFailedToStart per risolvere i problemi delle attività Amazon ECS che non vengono avviate.

Importante: utilizza il runbook nella stessa Regione AWS in cui si trovano le risorse del cluster ECS. Utilizza l'ID dell'attività non riuscita più recente in modo che la pulizia dello stato dell'attività non interrompa l'analisi. Se l'attività non riuscita fa parte del servizio Amazon ECS, utilizza l'ultima attività non riuscita nel servizio. L'attività non riuscita deve essere visibile in ECS:DescribeTasks quando esegui l'automazione. Per impostazione predefinita, le attività ECS interrotte sono visibili per 1 ora dopo il passaggio allo stato Interrotta.

Per eseguire il runbook AWSSupport-TroubleshootECSTaskFailedToStart, completa i seguenti passaggi:

  1. Apri la console AWS Systems Manager.
  2. Nel riquadro di navigazione, in Gestione delle modifiche, scegli Automazione.
  3. Scegli Esegui automazione.
  4. Seleziona la scheda Di proprietà di Amazon.
  5. In Documento di automazione inserisci TroubleshootECSTaskFailedToStart nella barra di ricerca.
  6. Seleziona la scheda AWSSupport-TroubleshootECSTaskFailedToStart.
    Nota: non selezionare il nome dell'automazione con collegamento ipertestuale.
  7. Scegli Avanti.
  8. Per Esegui documento di automazione, seleziona Esecuzione semplice.
  9. Nella sezione Parametri di input, per AutomationAssumeRole, inserisci l'ARN del ruolo che consente all'automazione di eseguire azioni.
    Nota: assicurati che il ruolo di servizio oppure l'utente o il ruolo IAM disponga delle autorizzazioni IAM richieste per eseguire il runbook AWSSupport-TroubleshootECSTaskFailedToStart. Se non specifichi un ruolo IAM, l'automazione utilizza le autorizzazioni dell'utente o del ruolo IAM che esegue il runbook. Per informazioni sulla creazione del ruolo di servizio per l'automazione, consulta Attività 1: creazione di un ruolo di servizio per l'automazione.
  10. In ClusterName inserisci il nome del cluster in cui l'attività non è stata avviata.
  11. In TaskId inserisci l'identificazione dell'ultima attività non riuscita.
  12. Scegli Esegui.
    Nota: dopo l'esecuzione, i risultati dell'analisi vengono inseriti nella sezione Output globale. Tuttavia, attendi che lo stato del documento passi a Operazione riuscita. Inoltre, consulta la sezione Output per eventuali eccezioni.

Puoi anche risolvere il problema manualmente.

Verifica il routing dalle sottoreti verso Internet

Se l'attività Fargate è in una sottorete pubblica, verifica di aver assegnato un indirizzo IP pubblico all'attività. Inoltre, verifica che l'attività abbia un routing predefinito (0.0.0.0/0) verso un gateway Internet. Quando avvii una nuova attività o crei un nuovo servizio, attiva Assegna automaticamente IP pubblico.

Se hai utilizzato uno stack AWS CloudFormation per creare il servizio Amazon ECS, modifica la proprietà NetworkConfiguration in AWS::ECS::Service per aggiornare il servizio. Per aggiornare la configurazione dei servizi esistenti, utilizza CloudFormation per attivare il parametro AssignPublicIp. In alternativa, esegui questo comando AWS CLI update-service:

aws ecs update-service --service serviceName --region regionName "awsvpcConfiguration={subnets=[subnet-123,subnet-456],securityGroups=[sg-123,sg-456],assignPublicIp=ENABLED}"

Nota: sostituisci regionName con la tua Regione.

Se utilizzi le seguenti configurazioni, non utilizzare il gateway Internet nella sottorete pubblica per raggiungere Secrets Manager o Systems Manager:

  • Gli endpoint VPC Secrets Manager o Systems Manager sono in una sottorete pubblica.
  • Hai attivato AmazonProvidedDNS nelle impostazioni DHCP di Amazon VPC.

Utilizza invece un endpoint Amazon VPC.

Nota: non puoi attivare Assegna automaticamente IP pubblico per le attività esistenti. Per riconfigurare i servizi esistenti, utilizza AWS CLI e non la Console di gestione AWS.

Se l'attività Fargate è in una sottorete privata, verifica che l'attività abbia un routing predefinito (0.0.0.0/0) verso la fonte di connettività Internet.

La fonte di connettività Internet può essere un gateway NAT, AWS PrivateLink o un server di dominio con nome personalizzato.

Se utilizzi un gateway NAT, inserisci il gateway NAT in una sottorete pubblica. Per ulteriori informazioni, consulta Architecture with an internet gateway and a NAT gateway using AWS Network Firewall (Architettura con un gateway Internet e un gateway NAT con AWS Network Firewall). Se utilizzi PrivateLink, verifica che i gruppi di sicurezza degli endpoint Amazon VPC consentano il traffico verso le attività Fargate. Se utilizzi un server di dominio con nome personalizzato, conferma le impostazioni della query DNS. La query deve avere accesso in uscita sulla porta 53 e utilizzare i protocolli UDP e TCP. La query deve inoltre avere accesso HTTPS sulla porta 443.

Verifica l'ACL di rete e le impostazioni del gruppo di sicurezza

Verifica che la lista di controllo degli accessi alla rete (ACL) e i gruppi di sicurezza non blocchino l'accesso in uscita alla porta 443 dalla sottorete. Per ulteriori informazioni, consulta la sezione Control traffic to your AWS resources using security groups.

Nota: le attività Fargate devono avere accesso in uscita alla porta 443 per consentire il traffico in uscita e accedere agli endpoint Amazon ECS.

Verifica gli endpoint Amazon VPC

Se utilizzi PrivateLink, devi creare i seguenti endpoint richiesti per la versione 1.4.0 o successiva della piattaforma Fargate:

  • com.amazonaws.region.ecr.dkr
  • com.amazonaws.region.ecr.api
  • endpoint gateway S3
  • com.amazonaws.regione.filedilog

Per ulteriori informazioni, consulta Considerations for Amazon Elastic Container Registry (Amazon ECR) VPC endpoints.

Nota: se la definizione dell'attività utilizza Secrets Manager, Archivio dei parametri o Amazon CloudWatch Logs, assicurati di definire gli endpoint. Per ulteriori informazioni, consulta Utilizzo di un endpoint VPC di AWS Secrets Manager e Creazione di endpoint VPC per Amazon ECS.

Per PrivateLink, verifica che il gruppo di sicurezza Amazon VPC consenta il traffico proveniente dal gruppo di sicurezza dell'attività Fargate o dall'intervallo CIDR VPC sulla porta TCP 443.

Per verificare che l'infrastruttura Fargate abbia accesso al servizio, controlla le policy degli endpoint VPC e le policy degli endpoint gateway Amazon Simple Storage Service (Amazon S3).

Verifica i ruoli IAM e le relative autorizzazioni

Il ruolo di esecuzione dell'attività concede le autorizzazioni necessarie al container Amazon ECS e agli agenti Fargate per effettuare chiamate API per l'attività.

Fargate richiede il ruolo di esecuzione dell'attività quando esegui le seguenti azioni:

  • Estrai un'immagine del container da Amazon ECR.
  • Usi il driver di log awslogs.
  • Utilizzi l'autenticazione del registro privato.
  • Utilizzi i segreti di Secrets Manager o i parametri dell'Archivio dei parametri per fare riferimento a dati sensibili.

Negli scenari precedenti, definisci le autorizzazioni richieste nel ruolo di esecuzione dell'attività. Quando accedi a segreti di Secrets Manager o a parametri dell'Archivio dei parametri per recuperare i dati sensibili, verifica di disporre delle autorizzazioni secretsmanager:GetSecretValue o ssm:GetParameters richieste. Per un elenco delle autorizzazioni richieste, consulta Autorizzazioni Secrets Manager o Systems Manager.

Verifica i dati sensibili nella definizione dell'attività Amazon ECS

Verifica se i nomi del segreto e del parametro corrispondono ai nomi citati nella definizione dell'attività Amazon ECS. Quindi controlla se i valori nella definizione del container corrispondono ai valori nella definizione dell'attività Amazon ECS. Per ulteriori informazioni, consulta Come posso trasmettere informazioni segrete o sensibili in modo sicuro ai container in un'attività Amazon ECS?

Assicurati di configurare il segreto o il parametro con lo stesso ARN o nome specificato in Definizione dell'attività. Se la risorsa esiste in una Regione diversa, devi fornire l'ARN completo.

Utilizza il parametro VersionId in GetSecretValueInput per specificare la versione del valore del segreto recuperato. Se non hai bisogno di una versione specifica, elimina il campo VersionId. Per impostazione predefinita, Secrets Manager recupera l'ultima versione.

Se il parametro e l'attività dell'Archivio dei parametri si trovano nella stessa Regione, utilizza l'ARN completo o il nome del segreto. Se il parametro esiste in una Regione diversa, devi specificare l'ARN completo.

Per controllare il nome del parametro e l'ARN, effettua le seguenti operazioni:

  1. Apri la console AWS Systems Manager.
  2. Nel pannello di navigazione, seleziona Archivio dei parametri, quindi conferma il nome dell'Archivio dei parametri.
  3. Per ottenere l'ARN del parametro, esegui questo comando AWS CLI get-parameter:
    aws ssm get-parameter --name name_of_parameter_store_secret --with-decryption
    Nota: sostituisci name_of_parameter_store_secret con il nome del tuo segreto nell'Archivio dei parametri. I parametri che fanno riferimento a segreti di Secrets Manager non possono utilizzare le funzionalità di controllo delle versioni o cronologia dell'Archivio dei parametri. Per ulteriori informazioni, consulta Restrizioni.

Informazioni correlate

Visualizzazione degli errori delle attività interrotte da Amazon ECS

Opzioni di rete di attività Amazon ECS per il tipo di avvio Fargate

Endpoint VPC di interfaccia Amazon ECR (AWS PrivateLink)

Utilizzo di CloudWatch Logs con endpoint VPC di interfaccia