New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie behebe ich den Fehler „Unable to validate the following destination configurations“ in AWS CloudFormation?
Ich habe einen AWS-Service abonniert und in AWS CloudFormation die Fehlermeldung „Die folgenden Zielkonfigurationen konnten nicht überprüft werden“ erhalten.
Lösung
Um den Fehler Unable to validate zu beheben, ergreife die Maßnahmen zur Problembehandlung für deine Konfiguration.
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.
Probleme mit der Lambda-Benachrichtigungskonfiguration
ARN der Lambda-Funktion existiert nicht oder ist nicht gültig
Wenn dein Amazon Simple Storage Service (Amazon S3)-Bucket die AWS-Lambda-Eigenschaft LambdaConfigurations verwendet, erhältst du möglicherweise die Fehlermeldung lambda function does not exist. Dieser Fehler tritt auf, wenn der für die Lambda-Funktion in der CloudFormation-Vorlage konfigurierte ARN nicht existiert oder nicht gültig ist.
Um zu überprüfen, ob die Lambda-Funktion existiert, führe den Befehl get-function aus:
aws lambda get-function --function-name YOUR-FUNCTION-ARN-VALUE
Hinweis: Ersetze YOUR-FUNCTION-ARN-VALUE durch den ARN der Lambda-Funktion.
Wenn du in der Befehlsausgabe einen Fehler erhältst, ist der ARN der Lambda-Funktion nicht gültig oder existiert nicht. Aktualisiere die Vorlage, sodass sie den richtigen ARN enthält. Erstelle dann einen neuen Stack mit der aktualisierten Vorlage oder aktualisiere den vorhandenen Stack.
Die Lambda-Funktion ist nicht berechtigt, Amazon S3 aufzurufen
Wenn du die Fehlermeldung resource you requested does not exist erhältst, fehlt deiner Lambda-Funktion eine erforderliche Berechtigung. Gehe wie folgt vor, um dieses Problem zu beheben:
- Führe den Befehl get-policy aus, um die Lambda-Funktionsberechtigungen zu überprüfen:
Hinweis: Ersetze FUNCTION-ARN-VALUE durch den ARN der Funktion und YOUR-REGION durch deine AWS-Region.aws lambda get-policy --function-name YOUR-FUNCTION-ARN-VALUE --region YOUR-REGION
- Aktualisiere die CloudFormation-Vorlage, um die folgenden Berechtigungen anzuhängen, damit die Lambda-Funktion Amazon S3 aufrufen kann:
Hinweis: Ersetze FUNCTION-ARN-VALUE durch den ARN der Funktion und AccountID durch das AWS-Konto, dem die Funktion gehört. Du kannst den Pseudoparameter AWS::AccountId verwenden, um automatisch die Konto-ID zu ersetzen, in der CloudFormation den Stack erstellt.S3Permission: Type: AWS::Lambda::Permission Properties: FunctionName: YOUR-FUNCTION-ARN-VALUE Action: lambda:InvokeFunction Principal: s3.amazonaws.com SourceAccount: !Ref 'AWS::AccountId'
- Um sicherzustellen, dass CloudFormation den S3-Bucket erst erstellt, nachdem die Lambda-Funktion über die erforderlichen Berechtigungen verfügt, füge das Attribut DependsOn hinzu:
Hinweis: Ersetze FUNCTION-ARN-VALUE durch den ARN der Funktion.S3Bucket: Type: AWS::S3::Bucket DependsOn: "S3Permission" Properties: NotificationConfiguration: LambdaConfigurations: - Function: YOUR-FUNCTION-ARN-VALUE Event: "s3:ObjectCreated:Put"
Probleme mit der Amazon-SNS-Benachrichtigungskonfiguration
Amazon SNS-ARN existiert nicht oder ist nicht gültig
Wenn dein S3-Bucket die Eigenschaft TopicConfigurations verwendet, erhältst du möglicherweise die Fehlermeldung Unable to validate the following destination configurations. Dieser Fehler tritt auf, wenn das Amazon Simple Notification Service (Amazon SNS)-Thema nicht existiert oder nicht gültig ist. Das ARN-Format und der ARN-Wert müssen mit dem ARN des SNS-Themas übereinstimmen.
Um zu überprüfen, ob der ARN des SNS-Themas in deinem Konto vorhanden ist, führe den Befehl list-topics aus:
aws sns list-topics \ --region YOUR-REGION \ --query "Topics[?TopicArn=='YOUR-TOPIC-ARN-VALUE']"
Hinweis: Ersetze YOUR-REGION durch deine Region und YOUR-TOPIC-ARN-VALUE durch den ARN des Themas.
Wenn du in der Befehlsausgabe keine Datensätze erhalten hast, ist das SNS-Thema entweder nicht vorhanden oder nicht gültig. Erstelle das SNS-Thema, um dieses Problem zu beheben. Stelle sicher, dass du in der Eigenschaft TopicConfigurations einen gültigen Themen-ARN angibst.
Für ein SNS-Thema ist keine Zugriffsrichtlinie erforderlich
Gehe wie folgt vor, um zu überprüfen, ob das SNS-Thema über die erforderliche Zugriffsrichtlinie verfügt:
- Führe den Befehl get-topic-attributes aus, um die Zugriffsrichtlinie zu überprüfen, die an das SNS-Thema angehängt ist:
Hinweis: Ersetze YOUR-TOPIC-ARN-VALUE durch deinen Themen-ARN und YOUR-REGION durch deine Region.aws sns get-topic-attributes \ --topic-arn YOUR-TOPIC-ARN-VALUE \ --region YOUR-REGION \ --query 'Attributes.Policy'
- Die Zugriffsrichtlinie muss es dem Amazon S3-Service erlauben, zum Thema zu veröffentlichen. Wenn die Richtlinie nicht über diese Berechtigungen verfügt, bearbeite die Zugriffsrichtlinie des Themas so, dass sie die folgenden Berechtigungen enthält:
Hinweis: Ersetze YOUR-TOPIC-ARN-VALUE durch deinen Themen-ARN.{ "Sid": "S3AccessForNotification", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "YOUR-TOPIC-ARN-VALUE" }
- Stelle sicher, dass du jetzt einen neuen Stack erstellen oder den vorhandenen Stack aktualisieren kannst.
Problem mit der AWS-KMS-Schlüsselrichtlinie, die dem SNS-Thema zugeordnet ist
Die AWS Key Management Service (AWS KMS)-Richtlinie muss Amazon S3 den Zugriff auf den AWS-KMS-Schlüssel erlauben. Gehe wie folgt vor, um die Verschlüsselungskonfiguration und die erforderliche Mindestrichtlinie anzuzeigen:
Führe den Befehl get-topic-attributes aus, um zu überprüfen, ob das SNS-Thema mit einem AWS-KMS-Schlüssel verschlüsselt ist:
aws sns get-topic-attributes \ --topic-arn YOUR-TOPIC-ARN-VALUE \ --region YOUR-REGION \ --query "Attributes.KmsMasterKeyId"
Hinweis: Ersetze YOUR-TOPIC-ARN-VALUE durch deinen Themen-ARN und YOUR-REGION durch deine Region. Wenn das SNS-Thema verschlüsselt ist, zeigt die Ausgabe des Befehls den ARN des AWS-KMS-Schlüssels an.
Führe den Befehl get-key-policy aus, um die AWS-KMS-Schlüsselrichtlinie zu überprüfen:
aws kms get-key-policy \ --key-id YOUR-KMS-KEY-ARN \ --policy-name default \ --region YOUR-REGION | jq -r '.Policy' | jq .
Hinweis: Ersetze YOUR-KMS-KEY-ARN durch den ARN deines AWS-KMS-Schlüssels und YOUR-REGION durch deine Region. Zur besseren Lesbarkeit empfiehlt es sich, den Befehl jq zu verwenden, um den Inhalt der Richtlinie in einem JSON-Format anzuzeigen. Weitere Informationen findest du unter./jq auf der jq-Website.
Die folgende Beispielrichtlinie zeigt die mindestens erforderliche AWS-KMS-Schlüsselrichtlinie:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": ["kms:GenerateDataKey*", "kms:Decrypt"], "Resource": "YOUR-KMS-KEY-ARN" } ] }
Hinweis: Ersetze YOUR-KMS-KEY-ARN durch den ARN deines AWS-KMS-Schlüssels.
Wenn deine Richtlinie nicht über die erforderlichen Berechtigungen verfügt, aktualisiere die AWS-KMS-Schlüsselrichtlinie.
Probleme mit der Amazon-SQS-Benachrichtigungskonfiguration
Der Amazon SQS-ARN existiert nicht oder ist nicht gültig
Wenn dein S3-Bucket die Eigenschaft QueueConfigurations verwendet, erhältst du möglicherweise die Fehlermeldung SQS queue does not exist. Dieser Fehler tritt auf, wenn der ARN von Amazon Simple Queue Service (Amazon SQS) nicht existiert oder nicht gültig ist.
Führe den Befehl list-queues aus, um zu überprüfen, ob die Amazon SQS-Warteschlange im Konto vorhanden ist:
aws sqs list-queues --queue-name-prefix YOUR-SQS-QUEUE-NAME --region YOUR-REGION
Hinweis: Ersetze YOUR-SQS-QUEUE-NAME durch den Namen deiner Amazon-SQS-Warteschlange und YOUR-REGION durch deine AWS-Region.
Wenn die SQS-Warteschlange nicht existiert, erstelle entweder eine neue Warteschlange oder aktualisiere die Vorlage mit einer vorhandenen Warteschlange:
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
Die SQS-Warteschlange hat nicht die erforderliche Zugriffsrichtlinie
Du kannst die AWS CLI oder die CloudFormation-Konsole verwenden, um zu überprüfen, ob die SQS-Warteschlange über die erforderliche Zugriffsrichtlinie verfügt.
Gehe wie folgt vor, um die Zugriffsrichtlinie deiner Warteschlange mit der AWS CLI zu überprüfen:
- Führe den Befehl get-queue-attributes aus, um die Richtlinie für die SQS-Warteschlange zu überprüfen:
Hinweis: Ersetze YOUR-SQS-QUEUE-NAME durch den Namen deiner SQS-Warteschlange, YOUR-REGION durch deine Region und YOUR-SQS-QUEUE-URL durch deine Warteschlangen-URL. Zur besseren Lesbarkeit empfiehlt es sich, den Befehl jq zu verwenden, um den Inhalt der Richtlinie in einem JSON-Format anzuzeigen. Weitere Informationen findest du unter./jq auf der jq-Website.aws sqs get-queue-attributes \ --queue-url YOUR-SQS-QUEUE-URL \ --region YOUR-REGION \ --attribute-names Policy | jq .
- Wenn deine Richtlinie keinen Zugriff auf Amazon S3 hat, erstelle eine neue Zugriffsrichtlinie in einer JSON-Datei:
Hinweis: Ersetze YOUR-SQS-QUEUE-ARN durch den Warteschlangen-ARN.{"Policy": "{\"Version\":\"2012-10-17\",\"Statement\": [{\"Sid\":\"S3AccessForNotification\",\"Effect\":\"Allow\",\"Principal\": {\"Service\":\"s3.amazonaws.com\"},\"Action\":\"SQS:SendMessage\",\"Resource\":\"YOUR-SQS-QUEUE-ARN\"}]}"}
- Führe den Befehl set-queue-attributes aus, um die Richtlinie zu aktualisieren:
Hinweis: Ersetze YOUR-SQS-QUEUE-URL durch deine Warteschlangen-URL und sqs-policy.json durch deine Richtlinien-JSON-Datei.aws sqs set-queue-attributes --queue-url YOUR-SQS-QUEUE-URL --attributes file://sqs-policy.json
Um die Zugriffsrichtlinie deiner Warteschlange mithilfe der CloudFormation-Konsole zu überprüfen, aktualisiere die CloudFormation-Vorlage so, dass sie die folgende Ressource enthält:
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"
Hinweis: Ersetze YOUR-SQS-QUEUE-URL durch deine Warteschlangen-URL und YOUR-SQS-QUEUE-ARN durch deinen Warteschlangen-ARN.
Nachdem du die Richtlinie erstellt oder aktualisiert hast, stelle sicher, dass du jetzt einen neuen Stack erstellen oder den vorhandenen Stack aktualisieren kannst.
Weitere Informationen findest du unter Welche Berechtigungen benötige ich für den Zugriff auf eine Amazon SQS-Warteschlange? Wenn du immer noch Probleme hast, findest du weitere Informationen unter Wie behebe ich den Amazon SQS-Fehler „Invalid value for the parameter policy“?
Problem mit der AWS-KMS-Schlüsselrichtlinie, die der SQS-Warteschlange zugeordnet ist
Gehe wie folgt vor, um Probleme mit der AWS-KMS-Schlüsselrichtlinie zu lösen:
- Führe den Befehl list-queues aus, um die URL der SQS-Warteschlange abzurufen:
Hinweis: Ersetze YOUR-SQS-QUEUE-NAME durch den Namen deiner Amazon-SQS-Warteschlange und YOUR-REGION durch deine AWS-Region.aws sqs list-queues --queue-name-prefix YOUR-SQS-QUEUE-NAME --region YOUR-REGION
- Führe den Befehl get-queue-attributes aus, um die AWS-KMS-Schlüssel-ID abzurufen:
Hinweis: Ersetze YOUR-SQS-QUEUE-URL durch deine Warteschlangen-URL und YOUR-REGION durch deine AWS-Region.aws sqs get-queue-attributes \ --queue-url YOUR-SQS-QUEUE-URL \ --region YOUR-REGION \ --attribute-names KmsMasterKeyId
- Führe den Befehl describe-key aus, um den AWSK-KMS-Schlüssel-ARN abzurufen:
Hinweis: Ersetze YOUR-KMS-KEY-ID durch die Schlüssel-ID.aws kms describe-key --key-id YOUR-KMS-KEY-ID
- Führe den Befehl get-key-policy aus, um die vollständige Schlüsselrichtlinie anzuzeigen:
Hinweis: Ersetze YOUR-KMS-KEY-ARN durch den ARN deines AWS-KMS-Schlüssels und YOUR-REGION durch deine Region.aws kms get-key-policy \ --key-id YOUR-KMS-KEY-ARN \ --policy-name default \ --region YOUR-REGION
- Stelle in der Ausgabe sicher, dass die Richtlinie Amazon S3 die Verwendung des AWS-KMS-Schlüssels ermöglicht. Beispiele für Berechtigungen:
Hinweis: Ersetze YOUR-KMS-KEY-ARN durch den ARN des AWS-KMS-Schlüssels.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": ["kms:GenerateDataKey*", "kms:Decrypt"], "Resource": "YOUR-KMS-KEY-ARN" } ] }
Wenn deine Richtlinie nicht über die erforderlichen Berechtigungen verfügt, aktualisiere die Schlüsselrichtlinie.
Zyklische Abhängigkeit zwischen Ressourcen
Wichtig: Bevor du ein SNS-Thema für S3-Ereignisbenachrichtigungen abonnierst, musst du die AWS::SNS::TopicPolicy mit den erforderlichen Berechtigungen erstellen. Die Themen-Richtlinie muss vorhanden sein, bevor du das Abonnement erstellst.
Um zuerst die Themen-Richtlinie zu erstellen, musst du ein DependsOn-Attribut für die Ressource AWS::S3::Bucket verwenden. Dieses Attribut erstellt die Themen-Richtlinie vor dem Bucket. Du kannst auch zwei Stack-Operationen verwenden, um zuerst alle Ressourcen zu erstellen und dann die S3Bucket-Ressource so zu aktualisieren, dass sie die Eigenschaft NotificationConfiguration enthält. Ergreife eine der folgenden Maßnahmen.
Angabe eines Werts für BucketName in deiner CloudFormation-Vorlage
Verwende einen statischen Namen für deinen S3-Bucket in der Eigenschaft BucketName in der Ressource S3Bucket deiner CloudFormation-Vorlage. Ein statischer S3-Bucket-Name entfernt die intrinsische Abhängigkeit zwischen der SNS-Themenrichtlinie und Amazon S3.
Wichtig: S3-Bucket-Namen müssen global eindeutig sein.
Das folgende Beispiel einer CloudFormation-Vorlage gibt einen hartcodierten -Bucket-Name--Wert für die Eigenschaft BucketName an:
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
Hinweis: Ersetze -Bucket-Name- durch deinen Bucket-Namen. Die Ressource S3Bucket hat einen expliziten DependsOn-Wert, der auf SNSTopicPolicy gesetzt ist. Dieses Attribut gibt an, dass die Vorlage die Ressource SNSTopicPolicy vor der Ressource S3Bucket erstellt.
Verwende einen Parameter für BucketName
Mit Parametern kannst du dieselbe CloudFormation-Vorlage für S3-Buckets mit unterschiedlichen Namen verwenden. Während der Stack-Erstellung kannst du einen Wert für den Parameter paramBucketName festlegen. Beispiel für eine Richtlinie:
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
**Hinweis:**Im vorherigen Beispiel hat die Ressource S3Bucket ein explizites DependsOn-Attribut, das auf SNSTopicPolicy gesetzt ist.
Stack erstellen und den Stack dann aktualisieren
Hinweis: Bei dieser Methode enthält die Ressource S3Bucket nicht die Eigenschaft BucketName. Daher erstellt CloudFormation einen eindeutigen Bucket-Namen für dich. Verwende kein DependsOn-Attribut, um die zyklische Abhängigkeit zu vermeiden.
Erstelle zunächst den Stack ohne die Eigenschaft NotificationConfiguration in der Ressource S3Bucket. Beispiel:
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
Füge die Eigenschaft NotificationConfiguration in der Ressource S3Bucket hinzu und aktualisiere dann den Stack. Beispiel:
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
Ähnliche Informationen
Erteilen von Berechtigungen zum Veröffentlichen von Ereignisbenachrichtigungen an ein Ziel
Verwaltung von AWS-Ressourcen als eine einzelne Einheit mit AWS CloudFormation-Stacks
Ähnliche Videos


Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor einem Monat