View a markdown version of this page

AWSSupport-SetupK8sApiProxyForEKS - AWS Systems Manager Runbook-Referenz für Automation

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.

AWSSupport-SetupK8sApiProxyForEKS

Beschreibung

Das AWSSupport-SetupK8sApiProxyForEKS Automatisierungs-Runbook bietet die Möglichkeit, eine AWS Lambda Funktion zu erstellen, die als Proxy für API-Aufrufe der Steuerungsebene an den Amazon Elastic Kubernetes Service-Cluster-Endpunkt dient. Es dient als Baustein für Runbooks, die API-Aufrufe auf Steuerungsebene erfordern, um Aufgaben zu automatisieren und Probleme mit einem Amazon EKS-Cluster zu beheben.

Wichtig

Alle durch diese Automatisierung erstellten Ressourcen sind mit Tags versehen, sodass sie leicht gefunden werden können. Die verwendeten Tags sind:

  • AWSSupport-SetupK8sApiProxyForEKS: true

Anmerkung
  • Die Automatisierung ist ein Hilfs-Runbook und kann nicht als eigenständiges Runbook ausgeführt werden. Sie wird als untergeordnete Automatisierung für Runbooks aufgerufen, die API-Aufrufe der Steuerungsebene an den Amazon EKS-Cluster erfordern.

  • Bitte stellen Sie sicher, dass der Cleanup Betrieb nach der Verwendung ausgeführt wird, um unerwünschte Kosten zu vermeiden.

Art des Dokuments

Automatisierung

Eigentümer

Amazon

Plattformen

Linux

Parameter

  • AutomationAssumeRole

    Typ: Zeichenfolge

    Beschreibung: (Optional) Der Amazon-Ressourcenname (ARN) der AWS Identity and Access Management (IAM) -Rolle, die es Systems Manager Automation ermöglicht, die Aktionen in Ihrem Namen auszuführen. Wenn keine Rolle angegeben ist, verwendet Systems Manager Automation die Berechtigungen des Benutzers, der dieses Runbook startet.

  • ClusterName

    Typ: Zeichenfolge

    Beschreibung: (Erforderlich) Der Name des Amazon Elastic Kubernetes Service-Clusters.

  • Operation

    Typ: Zeichenfolge

    Beschreibung: (Erforderlich) Durchzuführender Vorgang: Setup Stellt die Lambda-Funktion im Konto bereit und deaktiviert die Bereitstellung von Ressourcen, Cleanup die im Rahmen der Einrichtungsphase erstellt wurden.

    Zulässige Werte: | Setup Cleanup

    Standard: Setup

  • LambdaRoleArn

    Typ: Zeichenfolge

    Beschreibung: (Optional) Der ARN der IAM-Rolle, der der AWS Lambda Funktion den Zugriff auf die erforderlichen AWS Dienste und Ressourcen ermöglicht. Wenn keine Rolle angegeben ist, erstellt diese Systems Manager Automation eine IAM-Rolle für Lambda in Ihrem Konto mit dem NamenAutomation-K8sProxy-Role-<ExecutionId>, der die verwalteten Richtlinien enthält: und. AWSLambdaBasicExecutionRole AWSLambdaVPCAccessExecutionRole

Wie funktioniert das?

Das Runbook führt die folgenden Schritte aus:

  • Überprüft, ob die Automatisierung als untergeordnete Ausführung ausgeführt wird. Das Runbook funktioniert nicht, wenn es als eigenständiges Runbook aufgerufen wird, da es alleine keine sinnvolle Arbeit ausführt.

  • Prüft, ob der CloudFormation Stack für die Proxy-Lambda-Funktion für den angegebenen Cluster vorhanden ist.

    • Wenn der Stack existiert, wird die vorhandene Infrastruktur wiederverwendet, anstatt sie neu zu erstellen.

    • Ein Referenzzähler wird mithilfe von Tags verwaltet, um sicherzustellen, dass ein Runbook die Infrastruktur nicht löscht, wenn sie von einem anderen Runbook für denselben Cluster wiederverwendet wird.

  • Führen Sie den für den Aufruf angegebenen Operationstyp (Setup/Cleanup) aus:

    • Setup: Erstellt oder beschreibt vorhandene Ressourcen.

      Bereinigung: Entfernt bereitgestellte Ressourcen, wenn die Infrastruktur nicht von einem anderen Runbook verwendet wird.

Erforderliche IAM-Berechtigungen

Für den AutomationAssumeRole Parameter sind die folgenden erteilten Berechtigungen erforderlich, er wurde nicht weitergegeben LambdaRoleArn:

  • cloudformation:CreateStack

  • cloudformation:DescribeStacks

  • cloudformation:DeleteStack

  • cloudformation:UpdateStack

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

  • ec2:DeleteNetworkInterface

  • eks:DescribeCluster

  • lambda:CreateFunction

  • lambda:DeleteFunction

  • lambda:ListTags

  • lambda:GetFunction

  • lambda:ListTags

  • lambda:TagResource

  • lambda:UntagResource

  • lambda:UpdateFunctionCode

  • logs:CreateLogGroup

  • logs:PutRetentionPolicy

  • logs:TagResource

  • logs:UntagResource

  • logs:DescribeLogGroups

  • logs:DescribeLogStreams

  • logs:ListTagsForResource

  • iam:CreateRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

  • iam:PassRole

  • iam:GetRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • tag:GetResources

  • tag:TagResources

Wenn LambdaRoleArn angegeben, muss die Rolle nicht von der Automatisierung erstellt werden, und die folgenden Berechtigungen können ausgeschlossen werden:

  • iam:CreateRole

  • iam:DeleteRole

  • iam:TagRole

  • iam:UntagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

Im Folgenden finden Sie ein Beispiel für eine Richtlinie, die zeigt, welche Berechtigungen erforderlich sind AutomationAssumeRole, wenn sie LambdaRoleArn nicht weitergegeben werden:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Action": [ "tag:GetResources", "tag:TagResources", "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "eks:DescribeCluster", "iam:GetRole", "cloudformation:DescribeStacks", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "lambda:GetFunction", "lambda:ListTags", "logs:ListTagsForResource" ], "Resource": "*", "Effect": "Allow", "Sid": "AllowActionsWithoutConditions" }, { "Condition": { "StringEquals": { "aws:RequestTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": "iam:CreateRole", "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AllowCreateRoleWithRequiredTag" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "iam:DeleteRole", "iam:TagRole", "iam:UntagRole" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "IAMActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" }, "StringLike": { "iam:PolicyARN": [ "arn:aws:iam::111122223333:policy/service-role/AWSLambdaBasicExecutionRole", "arn:aws:iam::111122223333:policy/service-role/AWSLambdaVPCAccessExecutionRole" ] } }, "Action": [ "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AttachRolePolicy" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode" ], "Resource": "arn:aws:lambda:us-east-1:111122223333:function:Automation-K8sProxy*", "Effect": "Allow", "Sid": "LambdaActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:us-east-1:111122223333:stack/AWSSupport-SetupK8sApiProxyForEKS*", "Effect": "Allow", "Sid": "CloudFormationActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*", "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*:*" ], "Effect": "Allow", "Sid": "LogsActions" }, { "Condition": { "StringLikeIfExists": { "iam:PassedToService": "lambda.amazonaws.com" } }, "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::111122223333:role/Automation-K8sProxy-Role*" ], "Effect": "Allow", "Sid": "PassRoleToLambda" } ] }

Falls sie bestanden LambdaRoleArn wird, stellen Sie bitte sicher, dass ihr eine AWSLambdaBasicExecutionRole Richtlinie für öffentliche Cluster und zusätzlich AWSLambdaVPCAccessExecutionRole für private Cluster beigefügt ist.

Ressourcen wurden erstellt

Die folgenden Ressourcen werden während des Setup Betriebs erstellt:

  1. AWS Lambda Funktion

  2. IAM-Rolle: Lambda-Ausführungsrolle, falls nicht angegeben.

  3. CloudWatch Protokollgruppe (Lambda-Protokolle)

Die Lambda-Funktion und die Ausführungsrolle bleiben erhalten, bis der Cleanup Vorgang ausgeführt wird. Die Lambda-Protokollgruppe wird 30 Tage lang aufbewahrt oder bis sie manuell gelöscht wird.

Anweisungen

Das Runbook ist ein Hilfsprogramm, das so konzipiert ist, dass es als untergeordnete Automatisierung in anderen Runbooks ausgeführt werden kann. Es erleichtert die Erstellung einer Infrastruktur, die es dem übergeordneten Runbook ermöglicht, API-Aufrufe der Steuerungsebene von Amazon EKS K8 durchzuführen. Um das Runbook zu verwenden, können Sie die folgenden Schritte im Kontext der übergeordneten Automatisierung ausführen.

  1. Einrichtungsphase: Rufen Sie die Automatisierung mithilfe einer aws:executeAutomation Aktionsoperation aus dem Runbook auf, das Amazon EKS K8s Control-Plane-API-Aufrufe mit der Einstellung Operation auf ausführen möchte. Setup

    Beispiel für Eingabeparameter:

    { "AutomationAssumeRole": "<role-arn>", "ClusterName": "<eks-cluster-name>", "Operation": "Setup" }

    Die Ausgabe des aws:executeAutomation Schritts wird den ARN der Proxy-Lambda-Funktion enthalten.

  2. Den Lambda-Proxy verwenden: Rufen Sie die Lambda-Funktion innerhalb der aws:executeScript Aktion Lambda.Client.invoke(...) mithilfe boto3 einer Liste von API-Aufrufpfaden und einem Bearer-Token auf. Die Lambda-Funktion führt GET HTTP-Aufrufe an den angegebenen Pfad durch, indem sie das Bearer-Token als Teil des Autorisierungs-Headers übergibt.

    Beispiel für ein Lambda-Aufrufereignis:

    { "ApiCalls": ["/api/v1/pods/", ...], "BearerToken": "..." }
    Anmerkung

    Das Bearer-Token muss als Teil des übergeordneten Automatisierungsskripts generiert werden. Sie müssen sicherstellen, dass der Principal, der das übergeordnete Runbook ausführt, nur Leseberechtigungen für den angegebenen Amazon EKS-Cluster hat.

  3. Bereinigungsphase: Rufen Sie die Automatisierung mithilfe einer aws:executeAutomation Aktionsoperation aus dem Runbook auf, das Amazon EKS K8s Control-Plane-API-Aufrufe mit der Einstellung Operation auf ausführen möchte. Cleanup

    Beispiel für Eingabeparameter:

    { "AutomationAssumeRole": "<role-arn>", "ClusterName": "<eks-cluster-name>", "Operation": "Cleanup" }

Schritte zur Automatisierung

  1. ValidateExecution

    • Stellt sicher, dass die Automatisierung nicht als eigenständige Ausführung ausgeführt wird.

  2. CheckForExistingStack

    • Prüft, ob bereits ein CloudFormation Stack für den angegebenen Clusternamen bereitgestellt wurde.

    • Gibt den Status der Stack-Existenz zurück und gibt an, ob das Löschen sicher ist.

  3. BranchOnIsStackExists

    • Entscheidungsschritt, bei dem anhand der Existenz des Stacks eine Verzweigung stattfindet.

    • Routen, um entweder den vorhandenen Stacknamen zu aktualisieren oder mit der Verzweigungsoperation fortzufahren.

  4. UpdateStackName

    • Aktualisiert die StackName Variable mit dem Namen des vorhandenen Stacks.

    • Wird nur ausgeführt, wenn der Stack bereits existiert.

  5. BranchOnOperation

    • Leitet die Automatisierung basierend auf dem Operation Parameter (Setup/Cleanup) weiter.

    • FürSetup: Routen, um entweder einen neuen Stack zu erstellen oder vorhandene Ressourcen zu beschreiben.

    • FürCleanup: Fährt mit dem Löschen des Stapels fort, sofern das Löschen sicher ist.

  6. GetClusterNetworkConfig

    • Beschreibt den Amazon EKS-Cluster zum Abrufen der VPC-Konfiguration.

    • Ruft Endpunkt-, VPC-ID, Subnetz-IDs, Sicherheitsgruppen-ID und CA-Daten ab.

  7. ProvisionResources

    • Erstellt einen CloudFormation Stack mit den erforderlichen Ressourcen.

    • Stellt die Lambda-Funktion mit der erforderlichen Netzwerkkonfiguration bereit.

    • Kennzeichnet alle Ressourcen für die Nachverfolgung und Verwaltung.

  8. DescribeStackResources

    • Ruft Informationen über den created/existing Stapel ab.

    • Ruft den ARN der bereitgestellten Lambda-Funktion ab.

  9. BranchOnIsLambdaDeploymentRequired

    • Ermittelt, ob die Bereitstellung von Lambda-Code erforderlich ist.

    • Geht nur für neu erstellte Stacks zur Bereitstellung über.

  10. DeployLambdaFunctionCode

    • Stellt den Lambda-Funktionscode mithilfe des Bereitstellungspakets bereit.

    • Aktualisiert die Funktion mit der Proxyimplementierung.

  11. AssertLambdaAvailable

    • Überprüft, ob die Aktualisierung des Lambda-Funktionscodes erfolgreich war.

    • Wartet darauf, dass die Funktion ihren Status hat. Successful

  12. PerformStackCleanup

    • Löscht den CloudFormation Stack und die zugehörigen Ressourcen.

    • Wird während des Cleanup Betriebs oder bei Setup Betriebsausfall ausgeführt.

Ausgaben

LambdaFunctionArn: ARN der Proxy-Lambda-Funktion

Referenzen

Systems Manager Automation