
Поиск аккаунтов S3
Этот инструмент позволяет найти идентификатор аккаунта, которому принадлежит S3-бакет.
Для этого вам нужно иметь хотя бы одно из следующих разрешений:
s3:getObject).s3:ListBucket).Кроме того, вам потребуется роль, которую вы можете принять с (одним из) этих разрешений на исследуемом бакете.
Дополнительную информацию можно найти в блоге Cloudar
Этот пакет доступен на pypi, вы можете использовать, например, одну из этих команд (рекомендуется 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
Существует условие политики IAM s3:ResourceAccount, предназначенное для предоставления доступа к S3 в указанном (наборе) аккаунтов, но оно также поддерживает подстановочные знаки. Создавая правильные шаблоны и проверяя, какие из них приводят к Deny или Allow, мы можем определить идентификатор аккаунта, обнаруживая его по одной цифре за раз.
0. Если наш доступ разрешен, мы знаем, что идентификатор аккаунта должен начинаться с 0. Если запрос отклонен, мы пробуем снова с 1 в качестве первой цифры. Мы продолжаем увеличивать, пока наш запрос не будет разрешен, и находим первую цифру8, мы проверяем идентификаторы аккаунтов, начинающиеся с 80, 81, 82 и т.д.Мы используем poetry для управления этим проектом
poetry installpoetry shell (также можно использовать poetry run $command)poetry publish --builds3:ResourceAccount < 500000000000
"Condition": {
"StringLike": {"s3:ResourceAccount": [
"0*", "1*", "2*", "3*", "4*",
]},
},
На практике этот инструмент должен быть достаточно быстрым в большинстве случаев.