
S3 Account Search
Esta herramienta te permite encontrar el ID de cuenta al que pertenece un bucket de S3.
Para que funcione, necesitas tener al menos uno de estos permisos:
s3:getObject).s3:ListBucket).Adicionalmente, necesitarás un rol que puedas asumir con (uno de) estos permisos en el bucket que estás examinando.
Puedes encontrar más información en el Blog de Cloudar
Este paquete está disponible en pypi; puedes usar, por ejemplo, uno de estos comandos (se recomienda pipx)
pipx install s3-account-search
pip install s3-account-search
# with a bucket
s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket
# with an object
s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext
# You can also leave out the s3://
s3-account-search arn:aws:iam::123456789012:role/s3_read my-bucket
# Or start from a specified source profile
s3-account-search --profile source_profile arn:aws:iam::123456789012:role/s3_read s3://my-bucket
Existe una condición de política IAM s3:ResourceAccount que está diseñada para otorgar acceso a S3 en cuentas específicas (o conjuntos de cuentas), pero también admite comodines. Construyendo los patrones correctos y viendo cuáles resultan en una denegación (Deny) o una concesión (Allow), podemos determinar el ID de cuenta descubriéndolo un dígito a la vez.
0. Si nuestro acceso está permitido, sabemos que el ID de cuenta debe comenzar con 0. Si la solicitud es denegada, probamos con 1 como primer dígito. Seguimos incrementando hasta que nuestra solicitud sea permitida, y encontramos el primer dígito8, probamos IDs de cuenta que comiencen con 80, 81, 82, etc.Usamos poetry para gestionar este proyecto
poetry installpoetry shell (también puedes usar poetry run $command)poetry publish --builds3:ResourceAccount < 500000000000
"Condition": {
"StringLike": {"s3:ResourceAccount": [
"0*", "1*", "2*", "3*", "4*",
]},
},
En la práctica, esta herramienta debería ser lo suficientemente rápida en la mayoría de los casos.