AWS CDK mit SSO Nutzern verwenden
Tags: AWS
Kategorie Software Engineering | Keine Kommentare »
Obwohl AWS die führende Cloud Plattform ist, läuft auch hier nicht alles rund. So unterstützt AWS CDK keinen Zugriff per SSO Nutzer. Glücklicherweise gibt es ein kleines Helferlein…
Was ist AWS CDK?
Das AWS Cloud Development Kit (CDK) ist ein Entwicklungsframework, um Cloud Architekturen zu programmieren und zu deployen. Theoretisch ist es nicht auf AWS limitiert, sonder kann auch andere Cloud Plattformen und Runtimes wie Kubernetes unterstützen.
Habe ich meine Architektur programmiert, muss ich sie über das AWS CDK CLI deployen. CDK generiert aus meinem Programmcode ein AWS CloudFormation Template und schickt es an CloudFormation, damit es deployt wird. Dazu braucht es natürlich Zugriff.
Leider kann AWS CDK, wie viele andere AWS Tools auch, nicht mit Single-Sign On (SSO) Nutzern umgehen. Damit ich es trotzdem verwenden kann, benötige ich das kleine Hilfstool aws-sso-util.
aws-sso-util einrichten
Das Werkzeug aws-sso-util ist eine kleines cleveres Python Skript, das ich folgendermaßen installiere:
sudo pip install aws-sso-util
Das Werkzeug klinkt sich in den Authentifizierungsprozess ein, wenn ein anderes Tool wie AWS CLI oder AWS CDK Zugriffsschlüssel benötigt.
Die Einrichtung klappt weitestgehend automatisiert. Neben Nutzername und Passwort meines SSO Nutzers muss ich noch ein paar Details wissen:
- die SSO Login URL (https://ALIAS.awsapps.com/start)
- meine SSO Login Region
Dann starte ich die Einrichtung folgendermaßen:
export AWS_DEFAULT_SSO_START_URL
="https://ALIAS.awsapps.com/start"
aws-sso-util configure populate --region REGION
Das Werkzeug öffnet meinen Browser und ich logge mich dort mit meinem SSO Nutzer wie gewohnt ein. Nach der Eingabe von Nutzername, Passwort und MFA Code muss ich noch bestätigen, dass ich dem AWS CLI Zugriff gewähren möchte.
Damit ist die Einrichtung abgeschlossen. Ein Blick in meine ~/.aws/config Datei zeigt, dass das Werkzeug nun für jedes Permission Set und für jeden Account, auf den ich Zugriff habe, ein Profil angelegt hat. Diese Profile kann ich natürlich umbennen. Hier ein Beispiel:
[profile devAdmin]
sso_start_url = https://ALIAS.awsapps.com/start
sso_region = eu-central-1
sso_account_id = ACCOUNT-ID
sso_role_name = AWSAdministratorAccess
region = eu-central-1
output = json
credential_process = aws-sso-util credential-process --profile devAdmin
sso_auto_populated = true
Die letzten beiden Zeilen sind entscheidend. Immer, wenn ein anderes Tool Zugriff auf mein devAdmin Profil benötigt, wird über den credential_process das aws-sso-util Werkzeug aufgerufen.
Login und SSO Zugriff
Das Login erfolgt nicht mehr per AWS CLI, sondern direkt per aws-sso-util:
aws-sso-util login
Ab diesem Zeitpunkt habe ich Zugriff auf alle SSO Rollen, die dieser Nutzer annehmen kann. Die gewünschte Rolle gebe ich wie gewohnt als –profile Parameter beim jeweiligen Tool an. Bei einem CDK Deployment würde das so aussehen:
cdk deploy --profile=devAdmin
In meinem vorherigen Post hatte ich beschrieben, wie der GIT Zugriff auf AWS CodeCommit klappt. Auch diese Lösung funktioniert nahtlos mit aws-sso-login, da in der GIT Repo URL das zu verwendende Profil angegeben ist:
codecommit://devAdmin@REPO-NAME
Fazit
Ich kann nicht so richtig nachvollziehen, warum AWS diese Lösung nicht direkt im AWS CLI eingebaut hat? SSO Nutzer gibt es nun schon seit einiger Zeit und sie sind zentraler Bestandteil der von AWS propagierten MultiAccount Strategie. Bei dem führenden Cloud Anbieter erwarte ich, dass ich mich nicht mit solchen grundlegenden Fragen beschäftigen muss!