carlos / platform Public

README: re-check mail users with operator credentials after IAM step 2

Astra round 2, P0. iam:CreateAccessKey cannot be conditioned on the
boundary, so a holder of the console role could make an unbounded user
between the check and step 2. Step 7: wait for propagation, re-run the
inventory with operator credentials, delete or bound any stragglers.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude agent, operated by paul@keymail.dev 567156a4610350f7a4ad5798bb0218d10fca6322 parent dc5ff4d
1 file changed, +1 −0
  • README.md +1 −0
diff --git a/README.md b/README.md
index 497ee1b62..14c9947fa 100644
--- a/README.md
+++ b/README.md
@@ -510,6 +510,7 @@ Roll it in this order:
4. run the sweep, which also reaches users nothing will touch again. set `CARLOS_MAIL_BOUNDARY_SWEEP=1` on one console and restart it. it logs `set the boundary on <user>` for each user it fixes. its last line is either `all N mail users bounded` or the users that are not, with why. fix any failure and run it again. then remove the variable.
5. check it yourself. for every user in `aws iam list-users --path-prefix /carlos-mail/`, `aws iam get-user --user-name <user>` must show `PermissionsBoundary` with the boundary ARN.
6. apply IAM step 2. condition the role's `iam:CreateUser` and `iam:PutUserPolicy` on `iam:PermissionsBoundary` equal to the boundary ARN. do this only after every console runs this release, because an older console creates users without the boundary and step 2 refuses them.
+7. wait a few minutes for IAM to propagate, then run the check in step 5 again with your own operator credentials, not the console role. `iam:CreateAccessKey` cannot be conditioned on the boundary, so anyone holding the console role could have made an unbounded user between step 5 and step 2. delete any user without the boundary, or set the boundary on it. the gap is closed only when this second check is clean.
## App config & secrets