Come faccio a correggere l'errore "Unable to validate the following destination configurations" (Impossibile convalidare le configurazioni di destinazione seguenti) in CloudFormation?
Mi sono abbonato a un servizio AWS e ho ricevuto l'errore “Unable to validate the following destination configurations” in AWS CloudFormation.
Risoluzione
Per risolvere l'errore Unable to validate (Impossibile convalidare), esegui le operazioni di risoluzione dei problemi relativi alla configurazione.
Nota: se si verificano errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Problemi di configurazione delle notifiche Lambda
L'ARN della funzione Lambda non esiste o non è valido
Se il bucket Amazon Simple Storage Service (Amazon S3) utilizza la proprietà AWS Lambda LambdaConfigurations, potresti ricevere l'errore lambda function does not exist (Funzione Lambda inesistente). Questo errore si verifica se l'ARN configurato per la funzione Lambda nel modello CloudFormation non esiste o non è valido.
Per verificare se la funzione Lambda esiste, esegui il comando get-function:
aws lambda get-function --function-name YOUR-FUNCTION-ARN-VALUE
Nota: sostituisci YOUR-FUNCTION-ARN-VALUE con l'ARN della funzione.
Se ricevi un errore nell'output del comando, l'ARN della funzione non è valido o non esiste. Aggiorna il modello includendo l'ARN corretto. Quindi crea un nuovo stack con il modello aggiornato o aggiorna lo stack esistente.
La funzione Lambda non ha l'autorizzazione per invocare Amazon S3
Se ricevi l'errore the resource you requested does not exist (Risorsa richiesta inesistente), significa che la funzione Lambda non dispone di un'autorizzazione necessaria. Per risolvere questo problema, completa i passaggi seguenti:
- Per verificare le autorizzazioni della funzione Lambda, esegui il comando get-policy:
Nota: sostituisci FUNCTION-ARN-VALUE con l'ARN della funzione e YOUR-REGION con la tua regione AWS.aws lambda get-policy --function-name YOUR-FUNCTION-ARN-VALUE --region YOUR-REGION
- Per consentire alla funzione Lambda di invocare Amazon S3, aggiorna il modello CloudFormation collegando l'autorizzazione seguente:
Nota: sostituisci FUNCTION-ARN-VALUE con l'ARN della funzione e AccountID con l'account AWS proprietario della funzione. Puoi utilizzare lo pseudoparametro AWS::AccountId per sostituire automaticamente l'ID dell'account dove CloudFormation crea lo stack.S3Permission: Type: AWS::Lambda::Permission Properties: FunctionName: YOUR-FUNCTION-ARN-VALUE Action: lambda:InvokeFunction Principal: s3.amazonaws.com SourceAccount: !Ref 'AWS::AccountId'
- Per assicurarti che CloudFormation crei il bucket S3 solo quando la funzione Lambda avrà le autorizzazioni richieste, aggiungi l'attributo dependsOn:
Nota: sostituisci FUNCTION-ARN-VALUE con l'ARN della funzione.S3Bucket: Type: AWS::S3::Bucket DependsOn: "S3Permission" Properties: NotificationConfiguration: LambdaConfigurations: - Function: YOUR-FUNCTION-ARN-VALUE Event: "s3:ObjectCreated:Put"
Problemi di configurazione delle notifiche Amazon SNS
L'ARN di Amazon SNS non esiste o non è valido
Se il bucket S3 utilizza la proprietà TopicConfigurations, potresti ricevere l'errore Unable to validate the following destination configurations (Impossibile convalidare le configurazioni di destinazione seguenti). Questo errore si verifica quando il topic Amazon Simple Notification Service (Amazon SNS) non esiste o non è valido. Il formato e il valore dell'ARN devono corrispondere all'ARN del topic SNS.
Per verificare se l'ARN del topic SNS esiste nel tuo account, esegui il comando list-topics:
aws sns list-topics \ --region YOUR-REGION \ --query "Topics[?TopicArn=='YOUR-TOPIC-ARN-VALUE']"
Nota: sostituisci YOUR-REGION con la tua regione e YOUR-TOPIC-ARN-VALUE con l'ARN del topic.
Se il comando non restituisce alcun record, il topic SNS non esiste o non è valido. Per risolvere il problema, crea il topic SNS. Assicurati di fornire un ARN valido del topic nella proprietà TopicConfigurations.
Il topic SNS non ha la policy di accesso necessaria
Per verificare che il topic SNS abbia la policy di accesso necessaria, completa i passaggi seguenti:
- Per verificare la policy di accesso collegata al topic SNS, esegui il comando get-topic-attributes:
Nota: sostituisci YOUR-TOPIC-ARN-VALUE con l'ARN del tuo topic e YOUR-REGION con la tua regione.aws sns get-topic-attributes \ --topic-arn YOUR-TOPIC-ARN-VALUE \ --region YOUR-REGION \ --query 'Attributes.Policy'
- La policy di accesso deve consentire al servizio Amazon S3 di pubblicare sul topic. Se la policy non ha queste autorizzazioni, modifica la policy di accesso del topic includendo le autorizzazioni seguenti:
Nota: sostituisci YOUR-TOPIC-ARN-VALUE con l'ARN del tuo topic.{ "Sid": "S3AccessForNotification", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "YOUR-TOPIC-ARN-VALUE" }
- Verifica di poter ora creare un nuovo stack o aggiornare lo stack esistente.
Problema nella policy della chiave AWS KMS associata al topic SNS
La policy del Servizio AWS di gestione delle chiavi (AWS KMS) deve consentire ad Amazon S3 di accedere alla chiave AWS KMS. Per visualizzare la configurazione della crittografia e la policy minima richiesta, completa i passaggi seguenti:
Per verificare se il topic SNS è crittografato con una chiave AWS KMS, esegui il comando get-topic-attributes:
aws sns get-topic-attributes \ --topic-arn YOUR-TOPIC-ARN-VALUE \ --region YOUR-REGION \ --query "Attributes.KmsMasterKeyId"
Nota: sostituisci YOUR-TOPIC-ARN-VALUE con l'ARN del tuo topic e YOUR-REGION con la tua regione. Se il topic SNS è crittografato, l'output del comando mostrerà l'ARN della chiave AWS KMS.
Per verificare la policy della chiave AWS KMS, esegui il comando get-key-policy:
aws kms get-key-policy \ --key-id YOUR-KMS-KEY-ARN \ --policy-name default \ --region YOUR-REGION | jq -r '.Policy' | jq .
Nota: sostituisci YOUR-KMS-KEY-ARN con l'ARN della chiave AWS KMS e YOUR-REGION con la tua regione. Per una migliore leggibilità, è consigliabile utilizzare il comando jq per visualizzare il contenuto della policy in formato JSON. Per ulteriori informazioni, vedi ./jq sul sito web jq.
Nell'esempio seguente è mostrata la policy della chiave AWS KMS minima richiesta:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": ["kms:GenerateDataKey*", "kms:Decrypt"], "Resource": "YOUR-KMS-KEY-ARN" } ] }
Nota: sostituisci YOUR-KMS-KEY-ARN con l'ARN della chiave AWS KMS.
Se la tua policy non dispone delle autorizzazioni richieste, aggiorna la policy della chiave AWS KMS.
Problemi di configurazione delle notifiche Amazon SQS
L'ARN di Amazon SQS non esiste o non è valido
Se il bucket S3 utilizza la proprietà QueueConfigurations, potresti ricevere l'errore SQS queue does not exist (Coda SQS inesistente). Questo errore si verifica quando l'ARN di Amazon Simple Queue Service (Amazon SQS) non esiste o non è valido.
Per verificare se la coda Amazon SQS esiste nell'account, esegui il comando list-queues:
aws sqs list-queues --queue-name-prefix YOUR-SQS-QUEUE-NAME --region YOUR-REGION
Nota: sostituisci YOUR-SQS-QUEUE-NAME con il nome della tua coda SQS e YOUR-REGION con la tua Regione.
Se la coda SQS non esiste, crea una nuova coda o aggiorna il modello con una coda esistente:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref S3Bucket Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: BucketOwnerFullControl
La coda SQS non ha la policy di accesso richiesta
Per verificare che la coda SQS abbia la policy di accesso richiesta, puoi utilizzare AWS CLI o la console CloudFormation.
Per utilizzare AWS CLI per verificare la policy di accesso della coda, completa i passaggi seguenti:
- Per verificare la policy della coda SQS, esegui il comando get-queue-attributes:
Nota: sostituisci YOUR-SQS-QUEUE-NAME con il nome della coda SQS, YOUR-REGION con la tua regione e YOUR-SQS-QUEUE-URL con l'URL della coda. Per una migliore leggibilità, è consigliabile utilizzare il comando jq per visualizzare il contenuto della policy in formato JSON. Per ulteriori informazioni, vedi ./jq sul sito web jq.aws sqs get-queue-attributes \ --queue-url YOUR-SQS-QUEUE-URL \ --region YOUR-REGION \ --attribute-names Policy | jq .
- Se la tua policy non ha accesso ad Amazon S3, crea una nuova policy di accesso in un file JSON:
Nota: sostituisci YOUR-SQS-QUEUE-ARN con l'ARN della coda.{"Policy": "{\"Version\":\"2012-10-17\",\"Statement\": [{\"Sid\":\"S3AccessForNotification\",\"Effect\":\"Allow\",\"Principal\": {\"Service\":\"s3.amazonaws.com\"},\"Action\":\"SQS:SendMessage\",\"Resource\":\"YOUR-SQS-QUEUE-ARN\"}]}"}
- Per aggiornare la policy, esegui il comando set-queue-attributes:
Nota: sostituisci YOUR-SQS-QUEUE-URL con l'URL della coda e sqs-policy.json con il file JSON della policy.aws sqs set-queue-attributes --queue-url YOUR-SQS-QUEUE-URL --attributes file://sqs-policy.json
Per utilizzare la console CloudFormation per verificare la policy di accesso della coda, aggiorna il modello CloudFormation includendo la risorsa seguente:
SampleSQSPolicy: Type: AWS::SQS::QueuePolicy Properties: Queues: - YOUR-SQS-QUEUE-URL PolicyDocument: Statement: - Action: - "SQS:SendMessage" Effect: "Allow" Resource: YOUR-SQS-QUEUE-ARN Principal: Service: - "s3.amazonaws.com"
Nota: sostituisci YOUR-SQS-QUEUE-URL con l'URL della coda e YOUR-SQS-QUEUE-ARN con l'ARN della coda.
Dopo aver creato o aggiornato la policy, verifica di poter ora creare un nuovo stack o aggiornare lo stack esistente.
Per ulteriori informazioni, consulta Quali autorizzazioni occorrono per accedere alla coda Amazon SQS? Se i problemi persistono, consulta How do I troubleshoot the Amazon SQS error "Invalid value for the parameter policy"?
Problema nella policy della chiave AWS KMS associata alla coda SQS
Per risolvere problemi relativi alla policy della chiave AWS KMS, completa i passaggi seguenti:
- Per ottenere l'URL della coda SQS, esegui il comando list-queues:
Nota: sostituisci YOUR-SQS-QUEUE-NAME con il nome della tua coda SQS e YOUR-REGION con la tua regione.aws sqs list-queues --queue-name-prefix YOUR-SQS-QUEUE-NAME --region YOUR-REGION
- Per ottenere l'ID della chiave AWS KMS, esegui il comando get-queue-attributes:
Nota: sostituisci YOUR-SQS-QUEUE-URL con l'URL della coda e YOUR-REGION con la tua regione.aws sqs get-queue-attributes \ --queue-url YOUR-SQS-QUEUE-URL \ --region YOUR-REGION \ --attribute-names KmsMasterKeyId
- Per ottenere l'ARN della chiave AWS KMS, esegui il comando describe-key:
Nota: sostituisci YOUR-KMS-KEY-ID con l'ID della chiave.aws kms describe-key --key-id YOUR-KMS-KEY-ID
- Per visualizzare la policy completa della chiave, esegui il comando get-key-policy:
Nota: sostituisci YOUR-KMS-KEY-ARN con l'ARN della chiave AWS KMS e YOUR-REGION con la tua regione.aws kms get-key-policy \ --key-id YOUR-KMS-KEY-ARN \ --policy-name default \ --region YOUR-REGION
- Nell'output, verifica che la policy consenta ad Amazon S3 di utilizzare la chiave AWS KMS. Autorizzazioni di esempio:
Nota: sostituisci YOUR-KMS-KEY-ARN con l'ARN della chiave AWS KMS.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": ["kms:GenerateDataKey*", "kms:Decrypt"], "Resource": "YOUR-KMS-KEY-ARN" } ] }
Se la tua policy non dispone delle autorizzazioni richieste, aggiorna la policy della chiave.
Dipendenza circolare tra risorse
Importante: prima di sottoscrivere un topic SNS alle notifiche degli eventi S3, devi creare AWS::SNS::TopicPolicy con le autorizzazioni necessarie. La policy del topic deve esistere prima della creazione della sottoscrizione.
Per creare prima la policy del topic, usa un attributo DependsOn sulla risorsa AWS::S3::Bucket. Questo attributo crea la policy del topic prima del bucket. In alternativa, puoi usare due operazioni dello stack per creare prima tutte le risorse e quindi aggiornare la risorsa S3Bucket includendo la proprietà NotificationConfiguration. Esegui una delle operazioni seguenti.
Specifica un valore per BucketName nel modello CloudFormation
Usa un nome statico per il bucket S3 nella proprietà BucketName nella risorsa S3Bucket del modello CloudFormation. Un nome di bucket S3 statico rimuove la dipendenza intrinseca tra la policy del topic SNS e Amazon S3.
Importante: i nomi dei bucket S3 devono essere univoci a livello globale.
L'esempio seguente di modello CloudFormation specifica il valore -Bucket-Name- codificato per la proprietà BucketName:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - '-Bucket-Name-' Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket DependsOn: - SNSTopicPolicy Properties: AccessControl: BucketOwnerFullControl BucketName: "-Bucket-Name-" NotificationConfiguration: TopicConfigurations: - Topic: !Ref SNSTopic Event: s3:ObjectCreated:Put
Nota: sostituisci -Bucket-Name- con il nome del tuo bucket. La risorsa S3Bucket ha un attributo DependsOn esplicito impostato su SNSTopicPolicy. L'attributo specifica che il modello crea la risorsa SNSTopicPolicy prima della risorsa S3Bucket.
Usa un parametro per BucketName
I parametri consentono di utilizzare lo stesso modello CloudFormation per bucket S3 con nomi diversi. Durante la creazione dello stack, puoi impostare un valore per il parametro paramBucketName. Policy di esempio:
Parameters: paramBucketName: Type: String Description: Bucket Name Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref paramBucketName Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket DependsOn: - SNSTopicPolicy Properties: AccessControl: BucketOwnerFullControl BucketName: !Ref paramBucketName NotificationConfiguration: TopicConfigurations: - Topic: !Ref SNSTopic Event: s3:ObjectCreated:Put
Nota: nell'esempio precedente, la risorsa S3Bucket ha un attributo DependsOn esplicito impostato su SNSTopicPolicy.
Crea uno stack e poi aggiornalo
Nota: con questo metodo, la risorsa S3Bucket non include la proprietà BucketName. Di conseguenza, CloudFormation crea automaticamente un nome di bucket univoco. Per evitare la dipendenza circolare, non usare l'attributo DependsOn.
Crea prima lo stack senza la proprietà NotificationConfiguration nella risorsa S3Bucket. Esempio:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref S3Bucket Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: BucketOwnerFullControl
Aggiungi la proprietà NotificationConfiguration nella risorsa S3Bucket, quindi aggiorna lo stack. Esempio:
Resources: SNSTopic: Type: AWS::SNS::Topic SNSTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: PolicyDocument: Id: MyTopicPolicy Version: '2012-10-17' Statement: - Sid: Statement-id Effect: Allow Principal: Service: s3.amazonaws.com Action: "SNS:Publish" Resource: !Ref SNSTopic Condition: ArnLike: aws:SourceArn: !Join - '' - - 'arn:aws:s3:::' - !Ref S3Bucket Topics: - !Ref SNSTopic S3Bucket: Type: AWS::S3::Bucket Properties: AccessControl: BucketOwnerFullControl NotificationConfiguration: TopicConfigurations: - Topic: !Ref SNSTopic Event: s3:ObjectCreated:Put
Informazioni correlate
Granting permissions to publish event notification messages to a destination
Managing AWS resources as a single unit with AWS CloudFormation stacks
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa