View a markdown version of this page

Allgemeine Funktionen von Canaries - Amazon CloudWatch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Allgemeine Funktionen von Canaries

Du kannst die folgenden Funktionen mit allen Canary-Laufzeiten verwenden.

Umgebungsvariablen

Sie können Umgebungsvariablen verwenden, wenn Sie Canaries erstellen. Sie können ein einzelnes Canary-Skript schreiben und es mit unterschiedlichen Werten verwenden, um schnell mehrere Canaries für eine ähnliche Aufgabe zu erstellen.

Nehmen wir zum Beispiel an, Ihre Organisation verfügt über Endpunkte wie proddev, und pre-release für verschiedene Softwareentwicklungsphasen. Sie müssen Canaries erstellen, um jeden Endpunkt zu testen. Sie können ein einzelnes Canary-Skript schreiben, das Ihre Software testet. Geben Sie dann unterschiedliche Werte für die Endpunkt-Umgebungsvariablen an, wenn Sie jede der drei Kanarien erstellen. Wenn Sie einen Canary erstellen, geben Sie die Werte für das Skript und die Umgebungsvariablen an.

Die Namen von Umgebungsvariablen können Buchstaben, Zahlen und den Unterstrich enthalten. Sie müssen mit einem Buchstaben beginnen und mindestens zwei Zeichen enthalten. Die Gesamtgröße Ihrer Umgebungsvariablen darf einen Wert von 4 KB nicht überschreiten. Sie können keine reservierten Lambda-Umgebungsvariablen als Namen Ihrer Umgebungsvariablen angeben. Weitere Informationen zu reservierten Umgebungsvariablen finden Sie unter Laufzeitumgebungsvariablen.

Umgebungsvariablen sind clientseitig nicht verschlüsselt

AWS Verschlüsselt standardmäßig Schlüssel und Werte von Umgebungsvariablen im Ruhezustand mithilfe eines AWS eigenen Schlüssels. CloudWatch Synthetics wendet jedoch keine clientseitige Verschlüsselung an. Speichern Sie vertrauliche Informationen erst, nachdem Sie sie während der Übertragung verschlüsselt haben. Weitere Informationen finden Sie unter Verschlüsselung von Umgebungsvariablen bei der Übertragung. Du kannst auch einen vom Kunden verwalteten AWS KMS Schlüssel verwenden, um die Umgebungsvariablen deines Canary im Ruhezustand zu verschlüsseln. Weitere Informationen finden Sie unter Verschlüsselung von Umgebungsvariablen im Ruhezustand mit einem vom Kunden verwalteten Schlüssel.

Das folgende Beispielskript verwendet zwei Umgebungsvariablen. Dieses Skript ist für einen Canary bestimmt, der prüft, ob eine Webseite verfügbar ist. Es verwendet Umgebungsvariablen, um sowohl die URL, die es überprüft, als auch die verwendete CloudWatch Synthetics-Protokollebene zu parametrisieren.

Die folgenden Ausschnitte sind Teil des vollständigen Skripts, das unten gezeigt wird.

Die folgende Funktion setzt LogLevel auf den Wert der Umgebungsvariablen LOG_LEVEL.

synthetics.setLogLevel(process.env.LOG_LEVEL);

Diese Funktion setzt URL auf den Wert der Umgebungsvariablen URL.

const URL = process.env.URL;

Das folgende vollständige Skript demonstriert beide Umgebungsvariablen. Wenn Sie mit diesem Skript einen Canary erstellen, geben Sie Werte für die Umgebungsvariablen LOG_LEVEL und URL an.

var synthetics = require('@aws/synthetics-puppeteer'); const log = require('@aws/synthetics-logger'); const pageLoadEnvironmentVariable = async function () { // Setting the log level (0-3) synthetics.setLogLevel(process.env.LOG_LEVEL); // INSERT URL here const URL = process.env.URL; let page = await synthetics.getPage(); //You can customize the wait condition here. For instance, //using 'networkidle2' may be less restrictive. const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000}); if (!response) { throw "Failed to load page!"; } //Wait for page to render. //Increase or decrease wait time based on endpoint being monitored. await page.waitFor(15000); await synthetics.takeScreenshot('loaded', 'loaded'); let pageTitle = await page.title(); log.info('Page title: ' + pageTitle); log.debug('Environment variable:' + process.env.URL); //If the response status code is not a 2xx success code if (response.status() < 200 || response.status() > 299) { throw "Failed to load page!"; } }; exports.handler = async () => { return await pageLoadEnvironmentVariable(); };

Übergeben von Umgebungsvariablen an Ihr Skript

Um Umgebungsvariablen an Ihr Skript zu übergeben, wenn Sie einen Canary in der Konsole erstellen, geben Sie die Schlüssel und Werte der Umgebungsvariablen im Abschnitt Umgebungsvariablen der Konsole an. Weitere Informationen finden Sie unter Erstellen eines Canarys.

Um Umgebungsvariablen über die API oder zu übergeben AWS CLI, verwenden Sie den EnvironmentVariables Parameter im RunConfig Abschnitt. Im Folgenden finden Sie einen AWS CLI Beispielbefehl, der einen Canary erstellt, der zwei Umgebungsvariablen mit den Schlüsseln Environment und verwendetRegion.

aws synthetics create-canary --cli-input-json '{ "Name":"nameofCanary", "ExecutionRoleArn":"roleArn", "ArtifactS3Location":"s3://amzn-s3-demo-bucket-123456789012-us-west-2", "Schedule":{ "Expression":"rate(0 minute)", "DurationInSeconds":604800 }, "Code":{ "S3Bucket": "canarycreation", "S3Key": "cwsyn-mycanaryheartbeat-12345678-d1bd-1234-abcd-123456789012-12345678-6a1f-47c3-b291-123456789012.zip", "Handler":"pageLoadBlueprint.handler" }, "RunConfig": { "TimeoutInSeconds":60, "EnvironmentVariables": { "Environment":"Production", "Region": "us-west-1" } }, "SuccessRetentionPeriodInDays":13, "FailureRetentionPeriodInDays":13, "RuntimeVersion":"syn-nodejs-2.0" }'

Verschlüsselung von Umgebungsvariablen im Ruhezustand mit einem vom Kunden verwalteten Schlüssel

Standardmäßig verschlüsselt ein AWS eigener Schlüssel kanarische Umgebungsvariablen im Ruhezustand. Sie können einen vom Kunden verwalteten AWS KMS Schlüssel angeben, um die kanarischen Umgebungsvariablen im Ruhezustand zu verschlüsseln. Mit einem vom Kunden verwalteten Schlüssel haben Sie die volle Kontrolle über die Verschlüsselung sensibler Konfigurationsdaten. In den folgenden Abschnitten werden die Anforderungen, Konfigurationsschritte und Berechtigungen für die Verwendung eines vom Kunden verwalteten Schlüssels beschrieben.

Voraussetzungen

Bevor Sie einen vom Kunden verwalteten Schlüssel konfigurieren, stellen Sie sicher, dass Sie die folgenden Anforderungen erfüllen:

  • Der AWS KMS Schlüssel muss ein symmetrischer Verschlüsselungsschlüssel sein.

  • Die Schlüsselrichtlinie muss dem Aufrufer (kms:CreateGrantdem IAM-Prinzipal, der die Synthetics-API aufruft) gewähren.

  • AWS Lambda verwendet den Grant, um die Umgebungsvariablen im Ruhezustand zu verschlüsseln und zu entschlüsseln.

  • Der AWS KMS Schlüssel muss sich in derselben AWS Region wie der Canary befinden.

Konfiguration eines vom Kunden verwalteten Schlüssels

Sie können einen vom Kunden verwalteten Schlüssel konfigurieren, wenn Sie einen Canary erstellen oder aktualisieren. Die folgenden Verfahren zeigen, wie die Verschlüsselung mithilfe der CloudWatch Amazon-Konsole und der Synthetics-API konfiguriert wird.

Konfigurieren Sie die Verschlüsselung in der Konsole

Um einen Canary in der CloudWatch Amazon-Konsole zu erstellen oder zu bearbeiten, erweitern Sie den Abschnitt Umgebungsvariablen. Wählen Sie unter Konfiguration für Verschlüsselung im Ruhezustand die Option Einen vom Kunden verwalteten Schlüssel verwenden aus und wählen Sie dann den ARN Ihres AWS KMS Schlüssels aus oder geben Sie ihn an.

Konfigurieren Sie die Verschlüsselung mithilfe der API

Wenn Sie CreateCanary oder aufrufenUpdateCanary, geben Sie den KmsKeyArn Parameter mit dem ARN Ihres vom Kunden verwalteten Schlüssels an. Um zum AWS verwalteten Schlüssel zurückzukehren, geben Sie KmsKeyArn eine leere Zeichenfolge ein.

Beispiel: CreateCanary Anfrage mit einem vom Kunden verwalteten Schlüssel

{ "Name": "my-canary-EXAMPLE", "KmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/a1b2c3d4-e5f6-7890-abcd-EXAMPLE11111", "RunConfig": { "EnvironmentVariables": { "SECRET_KEY": "my-secret-value-EXAMPLE" } } }

Erforderliche Berechtigungen für die Verschlüsselung im Ruhezustand

Wenn Sie den Canary erstellen oder aktualisieren, benötigen Sie die folgenden Berechtigungen für den AWS KMS Schlüssel:

  • kms:CreateGrant, kms:Encrypt — Erforderlich, um einen vom Kunden verwalteten Schlüssel für den Canary zu konfigurieren.

  • kms:Decrypt— Erforderlich, um Umgebungsvariablen anzuzeigen und zu verwalten, die mit einem vom Kunden verwalteten Schlüssel verschlüsselt sind.

  • kms:DescribeKey— Erforderlich, um den Schlüssel zu validieren.

Für die Canary-Ausführungsrolle sind keine AWS KMS Berechtigungen für die Verschlüsselung im Ruhezustand erforderlich. Lambda verwendet den Zuschuss für die Verschlüsselung und Entschlüsselung.

Multi-location Kanarienvögel

Bei Kanarischen Inseln mit mehreren Standorten kann jeder Replikatstandort seinen eigenen Schlüssel haben. AWS KMS Geben Sie den KmsKeyArn im AddReplicaLocations Parameter an, wenn Sie einen Canary erstellen oder aktualisieren. Der Schlüssel muss sich in derselben Region wie das Replikat befinden.

Verschlüsselung von Umgebungsvariablen bei der Übertragung

Zusätzlich zur Verschlüsselung im Ruhezustand können Sie einzelne Umgebungsvariablenwerte verschlüsseln, bevor CloudWatch Synthetics sie speichert. CloudWatch Synthetics nennt das Verschlüsselung bei der Übertragung. Wenn Sie einen Wert während der Übertragung verschlüsseln, ersetzt die Konsole den Klartext-Wert durch einen Base64-codierten Chiffretext, den nur Ihr Canary zur Laufzeit entschlüsseln kann.

So funktioniert die Verschlüsselung bei der Übertragung

Wenn Sie den Wert einer Umgebungsvariablen bei der Übertragung verschlüsseln möchten, gehen Sie wie folgt vor:

  1. Die Konsole ruft kms:Encrypt mit Ihrem ausgewählten AWS KMS Schlüssel auf, um den Klartextwert zu verschlüsseln.

  2. Der verschlüsselte Chiffretext (Base64-kodiert) ersetzt den Klartextwert in der Umgebungsvariablenkonfiguration.

  3. Zur Laufzeit entschlüsselt Ihr Canary-Skript den Wert durch einen Aufruf. kms:Decrypt

Erforderliche Berechtigungen für die Verschlüsselung bei der Übertragung

Sie benötigen die folgenden Berechtigungen für die Verschlüsselung bei der Übertragung:

  • Konsolenbenutzer oder API-Aufruferkms:Encrypt auf dem AWS KMS Schlüssel. Sie benötigen diese Berechtigung, um den Wert zu verschlüsseln, bevor Sie ihn speichern.

  • Canary-Ausführungsrollekms:Decrypt auf dem AWS KMS Schlüssel. Die Lambda-Funktion des Canary benötigt diese Berechtigung, um den Wert zur Laufzeit zu entschlüsseln.

Im Folgenden finden Sie ein Beispiel für eine IAM-Richtlinie, die an die Canary-Ausführungsrolle angehängt werden kann:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-1:111122223333:key/a1b2c3d4-e5f6-7890-abcd-EXAMPLE11111" } ] }

Werte in Ihrem Canary-Skript entschlüsseln

Um eine verschlüsselte Umgebungsvariable in Ihrem Canary-Skript zu verwenden, entschlüsseln Sie sie zur Laufzeit. Das folgende Node.js Beispiel zeigt, wie eine Umgebungsvariable entschlüsselt wird:

const { KMSClient, DecryptCommand } = require('@aws-sdk/client-kms'); const client = new KMSClient({ region: process.env.AWS_REGION }); async function decryptEnvVar(name) { const encrypted = process.env[name]; const req = { CiphertextBlob: Buffer.from(encrypted, 'base64'), }; const command = new DecryptCommand(req); const response = await client.send(command); return new TextDecoder().decode(response.Plaintext); } // Usage const mySecret = await decryptEnvVar('MY_CONFIG_VAR');

Integriere deinen Canary mit anderen AWS service

Du kannst die AWS SDK-Bibliothek auf deinem Canary verwenden, um sie mit anderen AWS Diensten zu integrieren.

Füge dazu den folgenden Code zu deinem Canary hinzu. In diesen Beispielen integriert sich der Canary in AWS Secrets Manager.

  • Importieren Sie das AWS SDK.

    const AWS = require('aws-sdk');
  • Erstellen Sie einen Client für den AWS Service, in den Sie integrieren.

    const secretsManager = new AWS.SecretsManager();
  • Verwenden Sie den Client, um API-Aufrufe für diesen Service durchzuführen.

    var params = { SecretId: secretName }; return await secretsManager.getSecretValue(params).promise();

Der folgende Canary-Skript-Codeausschnitt zeigt detaillierter, wie Sie Secrets Manager integrieren können.

var synthetics = require('@aws/synthetics-puppeteer'); const log = require('@aws/synthetics-logger'); const AWS = require('aws-sdk'); const secretsManager = new AWS.SecretsManager(); const getSecrets = async (secretName) => { var params = { SecretId: secretName }; return await secretsManager.getSecretValue(params).promise(); } const secretsExample = async function () { let URL = "<URL>"; let page = await synthetics.getPage(); log.info(`Navigating to URL: ${URL}`); const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000}); // Fetch secrets let secrets = await getSecrets("secretname") /** * Use secrets to login. * * Assuming secrets are stored in a JSON format like: * { * "username": "<USERNAME>", * "password": "<PASSWORD>" * } **/ let secretsObj = JSON.parse(secrets.SecretString); await synthetics.executeStep('login', async function () { await page.type(">USERNAME-INPUT-SELECTOR<", secretsObj.username); await page.type(">PASSWORD-INPUT-SELECTOR<", secretsObj.password); await Promise.all([ page.waitForNavigation({ timeout: 30000 }), await page.click(">SUBMIT-BUTTON-SELECTOR<") ]); }); // Verify login was successful await synthetics.executeStep('verify', async function () { await page.waitForXPath(">SELECTOR<", { timeout: 30000 }); }); }; exports.handler = async () => { return await secretsExample(); };

Verwenden Sie Ihren Canary dazu, eine statische IP-Adresse zu verwenden

Sie können einen Canary so einrichten, dass er eine statische IP-Adresse verwendet.

So erzwingen Sie einen Canary dazu, eine statische IP-Adresse zu verwenden
  1. Erstellen einer neuen VPC. Weitere Informationen finden Sie unter Verwenden von DNS in Ihrer VPC.

  2. Erstellen eines neuen Internet-Gateways Weitere Informationen finden Sie unter Hinzufügen eines Internet-Gateways zu Ihrer VPC.

  3. Erstellen Sie ein öffentliches Subnetz in Ihrer neuen VPC.

  4. Fügen Sie der VPC eine neue Routing-Tabelle hinzu.

  5. Fügen Sie der neuen Routentabelle eine Route hinzu, die vom 0.0.0.0/0 Internet-Gateway führt.

  6. Verknüpfen Sie die neue Routing-Tabelle dem öffentlichen Subnetz.

  7. Erstellen einer elastischen IP-Adresse Weitere Informationen finden Sie unter Elastic IP-Adressen.

  8. Erstellen Sie ein neues NAT-Gateway und weisen Sie es dem öffentlichen Subnetz und der elastischen IP-Adresse zu.

  9. Erstellen Sie ein privates Subnetz innerhalb der VPC.

  10. Fügen Sie der VPC-Standardroutentabelle eine Route hinzu, die vom NAT-Gateway 0.0.0.0/0 zum NAT-Gateway führt.

  11. Erstellen Sie Ihr Canary.