Sichere HTTPS Verbindung mit AWS SQS in Python (CDK)

Eine sichere Verbindung ist in Zeiten von gezielten Hackangriffen eine wichtige Komponente zum Schutz der übergebenen Daten. Eine kleiner Teil von einem umfänglichen Schutz ist eine sichere HTTPS-Verbindung. In diesem kleinen Beitrag möchte ich aufzeigen, wie leicht es ist über den Simple Queue Service (SQS) in Amazon Web Services (AWS) sicher Daten zu schicken. Ziele von der SQS können der Lambda Service oder der Simple Notification Service (SNS) sein, um Prozesse in Gang zu setzen.

Ich nutze in diesem Beitrag Python und das von AWS zur Verfügung gestellte Cloud Development Kit, kurz CDK.

TL;DR:

Um eine Amazon Simple Queue Service (SQS)-Warteschlange so zu konfigurieren, dass sie nur über HTTPS mit dem AWS Cloud Development Kit (CDK) in Python zugänglich ist, kannst du die add_condition-Methode der Klasse aws_cdk.aws_sqs.QueuePolicy verwenden, um eine Bedingung mit einem SecureTransport auf False zu erstellen, die das Protokoll der eingehenden Anforderungen überprüft.

Ausführliche Beschreibung

Um einen sicheren Transport der Daten von SQS zu einem spezifischen Zielservice zu ermöglichen musst du die richtigen PolicyStatements setzen. Es ist möglich mehrere PolicyStatements zu setzen und später in das PolicyDocument mit aufzunehmen, deshalb ist es ratsam viele kleinere Statements zu schreiben, um sie dann modular dem PolicyDocument hinzufügen zu können.

Mit unserem PolicyStatement wollen wir bezwecken, dass keine Verbindung, die nicht sicher ist, irgendeine Aktion ausführen darf. Andersherum gesagt: Wir wollen alle Aktionen blockieren, die nicht über eine sichere Verbindung kommen.

only_https_statement = iam.PolicyStatement(
            effect=iam.Effect.DENY,
            actions=['sqs:*'],
            resources=[DEINE_QUEUE.queue_arn],
...
)

Mit diesem Codeschnipsel lehnen wir, wie besprochen, erst einmal alle Aktionen, die über SQS passieren (sqs:*) strikt ab (iam.Effect.DENY). Allerdings wollen wir diese nur ablehnen, sofern eine Bedingung erfüllt ist: Die Verbindung ist unsicher. Um das sicherzustellen, erweitern wir unser Statement um eine Bedingung.

only_https_statement = iam.PolicyStatement(
            effect=iam.Effect.DENY,
            actions=['sqs:*'],
            resources=[DEINE_QUEUE.queue_arn],
            conditions={
                'Bool': {'aws:SecureTransport': 'false'}
            }
        )

Und hier liegt auch schon die Magie. Wenn die Bedingung 'aws:SecureTransport' : 'false' erfüllt ist, werden alle passenden Aktionen abgelehnt, inklusive den beiden wichtigen Schnittstellen-Aktionen sqs:SendMessage und sqs:ReceiveMessage. Somit verhindert hier, dass Daten ungesichert durch das Internet verschickt werden.

Danke für’s Lesen

Möchtet ihr mehr erfahren oder einfach mit uns über das Thema reden? Nimm doch Kontakt mit uns auf, um zu besprechen, welche Bereiche du behandeln möchtest.