CloudFormation peut déployer une stack en utilisant un rôle de service plutôt que vos propres autorisations. Avec iam:PassRole et cloudformation:CreateStack, vous passez un rôle privilégié et soumettez un modèle qui provisionne tout ce que ce rôle peut créer, y compris de nouveaux principaux ou politiques IAM.
Déployer avec un rôle passé#
# template.yaml creates, for example, an admin user or attaches a policy
aws cloudformation create-stack --stack-name x \
--template-body file://template.yaml \
--role-arn arn:aws:iam::<acct>:role/<privileged-stack-role> \
--capabilities CAPABILITY_NAMED_IAM
Comme c'est le rôle de stack qui réalise la création de ressources, un modèle qui crée un AWS::IAM::User avec une clé d'accès, ou attache AdministratorAccess, réussit même si votre propre principal ne le peut pas.
Notes d'exploitation#
CAPABILITY_NAMED_IAMest requis lorsque le modèle touche à IAM ; c'est le rôle, et non vous, qui doit détenir les autorisations IAM.- Mettre à jour une stack existante qui porte déjà un rôle privilégié est la variante ressources existantes et ne nécessite aucun
PassRole. - Les sorties de la stack peuvent renvoyer directement la clé d'accès créée, de sorte qu'aucune étape de récupération séparée n'est nécessaire.
Outils#
- AWS CLI (
cloudformation create-stack). - Pacu : modules privesc et données de CloudFormation.