Un fournisseur d'identité SAML IAM fait confiance aux assertions signées par le certificat d'un IdP externe. sts:AssumeRoleWithSAML échange une assertion valide contre des identifiants de rôle. Si vous pouvez signer des assertions (en compromettant la clé de signature de l'IdP) ou rejouer une assertion capturée, vous générez des identifiants pour tout rôle dont vous satisfaites la relation de confiance et les attributs d'assertion.
Endosser avec une assertion#
aws sts assume-role-with-saml \
--role-arn arn:aws:iam::<acct>:role/<role> \
--principal-arn arn:aws:iam::<acct>:saml-provider/<provider> \
--saml-assertion "$(base64 -w0 assertion.xml)"
Notes d'exploitation#
- L'attribut
Rolede l'assertion liste des paires d'ARN rôle/fournisseur ; la relation de confiance du rôle doit nommer le fournisseur SAML commePrincipal.Federated. - Le contrôle de la clé de signature de l'IdP est en or : il permet de forger des assertions pour tout rôle associé, l'équivalent SAML d'un golden ticket.
- Les assertions capturées sont rejouables jusqu'à leur expiration : intercepter une assertion en transit suffit donc pour une courte fenêtre.
Outils#
- AWS CLI (
sts assume-role-with-saml). - python3-saml / outillage sur mesure pour créer ou re-signer des assertions.