

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`
<a name="automation-awssupport-setupk8sapiproxyforeks"></a>

 **Beschreibung** 

Das **AWSSupport-SetupKsApiProxy8-ForeKs-Automatisierungsrunbook** bietet eine Möglichkeit, eine AWS Lambda Funktion zu erstellen, die als Proxy für API-Aufrufe der Steuerungsebene an den Cluster-Endpunkt von Amazon Elastic Kubernetes Service fungiert. Es dient als Baustein für Runbooks, die API-Aufrufe der Steuerungsebene zur Automatisierung von Aufgaben und zur Behebung von Problemen mit einem Amazon EKS-Cluster erfordern.

**Wichtig**  
Alle durch diese Automatisierung erstellten Ressourcen sind markiert, 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. Es 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 Nutzung weiterläuft, 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, mit der Systems Manager Automation die Aktionen in Ihrem Namen ausführen kann. 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 Service-Clusters.
+ Operation

  Typ: Zeichenfolge

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

  Zulässige Werte: \$1 `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 Manager-Automatisierung eine IAM-Rolle für Lambda in Ihrem Konto mit dem Namen`Automation-K8sProxy-Role-<ExecutionId>`, der die verwalteten Richtlinien enthält: `AWSLambdaBasicExecutionRole` und. `AWSLambdaVPCAccessExecutionRole`

 **Wie funktioniert es?** 

 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 selbst keine sinnvollen Aufgaben ausführt.
+ Überprüft, ob für die Proxy-Lambda-Funktion für den angegebenen Cluster ein CloudFormation Stack vorhanden ist.
  + Wenn der Stack vorhanden ist, wird die bestehende 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.

    **Säuberung:** Entfernt bereitgestellte Ressourcen, wenn die Infrastruktur nicht von einem anderen Runbook verwendet wird.

 **Erforderliche IAM-Berechtigungen** 

Für den `AutomationAssumeRole` Parameter sind die folgenden Berechtigungen erforderlich, er wurde nicht übergeben` 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 Automatisierung die Rolle nicht erstellen 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 bestanden 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 die erfüllt `LambdaRoleArn` ist, stellen Sie bitte sicher, dass ihr [ AWSLambdaBasicExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaBasicExecutionRole)Richtlinien für öffentliche Cluster und zusätzlich [ AWSLambdaVPCAccessExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaVPCAccessExecutionRole)für private Cluster beigefügt sind. 

 **Ressourcen erstellt** 

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

1. AWS Lambda Funktion

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

1. CloudWatch Protokollgruppe (Lambda-Protokolle)

 *Die Lambda-Funktion und die Ausführungsrolle werden beibehalten, 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 als untergeordnete Automatisierung innerhalb anderer Runbooks ausgeführt werden kann. Es erleichtert die Erstellung einer Infrastruktur, die es dem übergeordneten Runbook ermöglicht, API-Aufrufe der Amazon EKS K8-Steuerebene 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 eines ` aws:executeAutomation` Aktionsvorgangs aus dem Runbook auf, das API-Aufrufe der Amazon EKS K8-Steuerungsebene durchführen möchte, wobei der Vorgang auf eingestellt ist. `Setup`

   Beispiel für Eingabeparameter:

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

   Die Ausgabe des `aws:executeAutomation` Schritts enthält den ARN der Proxy-Lambda-Funktion.

1. **Verwenden des Lambda-Proxys**: Rufen Sie die Lambda-Funktion innerhalb der `aws:executeScript` Aktion mithilfe von `boto3` s ` Lambda.Client.invoke(...)` mit einer Liste von API-Aufrufpfaden und Bearer-Token auf. Die Lambda-Funktion führt `GET` HTTP-Aufrufe an den angegebenen Pfad durch, indem sie das Bearer-Token als Teil des Autorisierungsheaders ü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.

1. **Bereinigungsphase**: Rufen Sie die Automatisierung mithilfe eines ` aws:executeAutomation` Aktionsvorgangs aus dem Runbook auf, das API-Aufrufe der Amazon EKS K8-Steuerungsebene durchführen möchte, wobei der Vorgang auf eingestellt ist. `Cleanup`

   Beispiel für Eingabeparameter:

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

 **Schritte zur Automatisierung** 

1.  **ValidateExecution** 
   + Überprüft, ob die Automatisierung nicht als eigenständige Ausführung ausgeführt wird.

1.  **CheckForExistingStack** 
   + Prüft, ob bereits ein CloudFormation Stack für den angegebenen Clusternamen bereitgestellt wurde.
   + Gibt den Status des Stacks zurück und gibt an, ob er sicher gelöscht werden kann.

1.  **BranchOnIsStackExists** 
   + Entscheidungsschritt, der auf der Grundlage der Stack-Existenz verzweigt.
   + Routen, um entweder den vorhandenen Stacknamen zu aktualisieren oder mit der Operationsverzweigung fortzufahren.

1.  **UpdateStackName** 
   + Aktualisiert die `StackName` Variable mit dem Namen des vorhandenen Stacks.
   + Wird nur ausgeführt, wenn der Stapel bereits existiert.

1.  **BranchOnOperation** 
   + Leitet die Automatisierung auf der Grundlage des `Operation` Parameters (`Setup`/`Cleanup`) weiter.
   + Für`Setup`: Routen, um entweder einen neuen Stack zu erstellen oder bestehende Ressourcen zu beschreiben.
   + Für`Cleanup`: Wird mit dem Löschen des Stapels fortgefahren, sofern das Löschen sicher ist.

1.  **GetClusterNetworkConfig** 
   + Beschreibt den Amazon EKS-Cluster zum Abrufen der VPC-Konfiguration.
   + Ruft Endpunkt-, VPC-ID-, Subnetz- IDs, Sicherheitsgruppen-ID- und CA-Daten ab.

1.  **ProvisionResources** 
   + Erstellt einen CloudFormation Stack mit den erforderlichen Ressourcen.
   + Stellt die Lambda-Funktion mit der erforderlichen Netzwerkkonfiguration bereit.
   + Markiert alle Ressourcen zur Nachverfolgung und Verwaltung.

1.  **DescribeStackResources** 
   + Ruft Informationen über den created/existing Stack ab.
   + Ruft den ARN der bereitgestellten Lambda-Funktion ab.

1.  **BranchOnIsLambdaDeploymentRequired** 
   + Ermittelt, ob die Bereitstellung von Lambda-Code erforderlich ist.
   + Geht nur bei neu erstellten Stacks zur Bereitstellung über.

1.  **DeployLambdaFunctionCode** 
   + Stellt den Lambda-Funktionscode mithilfe des Bereitstellungspakets bereit.
   + Aktualisiert die Funktion mit der Proxyimplementierung.

1.  **AssertLambdaAvailable** 
   + Überprüft, ob das Update des Lambda-Funktionscodes erfolgreich war.
   + Wartet darauf, dass sich die Funktion im Status befindet. `Successful`

1.  **PerformStackCleanup** 
   + Löscht den CloudFormation Stapel und die zugehörigen Ressourcen.
   + Wird während des `Cleanup` Betriebs oder bei Ausfall des ` Setup` Vorgangs ausgeführt.

 **Ausgaben** 

*LambdaFunctionArn*: ARN der Proxy-Lambda-Funktion

**Referenzen**

Systems Manager Automation
+ [Führen Sie eine Automatisierung aus](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [Eine Automatisierung einrichten](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Support Sie Automatisierungs-Workflows](https://aws.amazon.com/premiumsupport/technology/saw/)