Zugriff auf AWS mit OIDC
3 Minuten Lesezeit
Einführung
Dieses Tutorial beschreibt, wie Sie Ihren Shoot Kubernetes Cluster für den sicheren Zugriff auf AWS-Ressourcen einrichten, indem Sie Ihren API-Server so konfigurieren, dass er als OIDC-Provider für AWS fungiert. Danach können Sie einen ServiceAccount mit automatisch rotierenden Token erstellen, um auf AWS-Ressourcen zuzugreifen. Am Ende des Tutorials wird exemplarisch der Zugriff auf den AWS Parameter Store demonstriert.
Konfiguration
In den folgenden Schritten werden der Kubernetes API-Server und die AWS Account ID häufig referenziert. Es wird empfohlen, sie als Variablen zu setzen.
Shoot Konfiguration
Der API-Server Ihres Shoots dient bereits als OIDC-Provider. Allerdings nur für interne Ressourcen. Jeder Shoot ist mit einer eigenen privaten Root-CA ausgestattet, die nur dem Cluster selbst bekannt ist. Die folgenden Schritte erlauben den Zugriff auf OpenID Connect spezifische URLs, so dass diese von AWS genutzt werden können.
In der Spezifikation Ihres Shoot muss anonyme Authentifizierung aktiviert werden:
Danach brauchen wir noch eine Clusterrolle und eine Clusterrollenbindung, um den Zugriff zu ermöglichen:
Jetzt spielen wir das Manifest ein. Danach sollten über Curl die folgenden Links erreichbar sein:
- https://$API_SERVER/.well-known/openid-configuration
- https://$API_SERVER/openid/v1/jwks
Note
Das Feature Anonymous Requests ist bereits deprecated, wird aber noch eine Weile funktionieren. Ab Kubernetes 1.32 wird das Feature Anonymous Authenticator Configuration zur Verfügung stehen, welches künftig benutzt werden sollte.AWS Konfiguration
Zunächst müssen wir den Daumenabdruck des API-Server-Zertifikats vom Shoot abrufen, da es von einer Gardener-internen Zertifizierungsstelle signiert ist. Damit AWS diesem Zertifikat vertraut, müssen wir den Daumenabdruck des Zertifikats angeben.
Dann müssen wir eine OIDC Provider Ressource in AWS erstellen, die auf unseren Shoot verweist:
Nun brauchen wir noch eine Policy:
Und eine AWS Rolle:
Jetzt verbinden wir die Rolle mit der Policy:
Das war’s für die AWS Seite.
Beispiel: Zugriff auf den AWS Parameter Store
Zunächst brauchen wir einen ServiceAccount, der mit der AWS-Rolle verbunden ist:
Nun erstellen wir einen Pod, der diesen ServiceAccount verwendet. Außerdem verwenden wir die Funktion „Projected Volume“, um diesen ServiceAccount über ein automatisch rotierendes Token zu nutzen:
Nach ein paar Sekunden sollte der Container mit dem Namen aws-test laufen.
Gehen Sie in den Container:
Nun temporäre Zugriffscredentials anfordern:
Wenn alles geklappt hat, dann gibt es eine JSON Antwort mit AccessKeyId, SecretAccessKey und SessionToken.
Damit können wir nun auf den AWS Parameter Store zugreifen: