
Набор инструментов безопасности для Amazon S3
Набор инструментов безопасности для Amazon S3

🍊 Проверено в бою в Instacart
Выполните:
pip install s3tk
Вы можете использовать AWS CLI или AWS Vault для настройки своих учётных данных AWS:
pip install awscli
aws configure
См. политики IAM, необходимые для каждой команды.
Сканируйте свои корзины на предмет:
s3tk scan
Запуск только для определённых корзин
s3tk scan my-bucket my-bucket-2
Также работает с подстановочными знаками
s3tk scan "my-bucket*"
Подтвердите правильную корзину(ы) журнала и префикс
s3tk scan --log-bucket my-s3-logs --log-bucket other-region-logs --log-prefix "{bucket}/"
Проверка ведения журнала на уровне объектов CloudTrail [экспериментально]
s3tk scan --object-level-logging
Пропустить ведение журнала, версионирование или шифрование по умолчанию
s3tk scan --skip-logging --skip-versioning --skip-default-encryption
Получать уведомления по электронной почте о сбоях (через SNS)
s3tk scan --sns-topic arn:aws:sns:...
Вывести политики корзин
s3tk list-policy
Только для определённых корзин
s3tk list-policy my-bucket my-bucket-2
Показать именованные утверждения
s3tk list-policy --named
Примечание: Это заменяет предыдущую политику
Только частные загрузки
s3tk set-policy my-bucket --no-object-acl
Удалить политику
s3tk delete-policy my-bucket
Заблокировать публичный доступ на определённых корзинах
s3tk block-public-access my-bucket my-bucket-2
Используйте флаг --dry-run для проверки
Включить ведение журнала на всех корзинах
s3tk enable-logging --log-bucket my-s3-logs
Только на определённых корзинах
s3tk enable-logging my-bucket my-bucket-2 --log-bucket my-s3-logs
Установить префикс журнала (по умолчанию {bucket}/)
s3tk enable-logging --log-bucket my-s3-logs --log-prefix "logs/{bucket}/"
Используйте флаг --dry-run для проверки
Несколько замечаний о ведении журнала:
Включить версионирование на всех корзинах
s3tk enable-versioning
Только на определённых корзинах
s3tk enable-versioning my-bucket my-bucket-2
Используйте флаг --dry-run для проверки
Включить шифрование по умолчанию на всех корзинах
s3tk enable-default-encryption
Только на определённых корзинах
s3tk enable-default-encryption my-bucket my-bucket-2
Это не шифрует существующие объекты — используйте для этого команду encrypt
Используйте флаг --dry-run для проверки
Сканировать ACL всех объектов в корзине
s3tk scan-object-acl my-bucket
Только определённые объекты
s3tk scan-object-acl my-bucket --only "*.pdf"
Кроме определённых объектов
s3tk scan-object-acl my-bucket --except "*.jpg"
Сбросить ACL всех объектов в корзине
s3tk reset-object-acl my-bucket
Это делает все объекты приватными. См. политики корзин о том, как применять это в дальнейшем.
Используйте флаг --dry-run для проверки
Укажите определённые объекты так же, как в scan-object-acl
Зашифровать все объекты в корзине с помощью серверного шифрования
s3tk encrypt my-bucket
По умолчанию используются ключи, управляемые S3. Для ключей, управляемых KMS, используйте:
s3tk encrypt my-bucket --kms-key-id arn:aws:kms:...
Для ключей, предоставленных клиентом, используйте:
s3tk encrypt my-bucket --customer-key secret-key
Используйте флаг --dry-run для проверки
Укажите определённые объекты так же, как в scan-object-acl
Примечание: Объекты потеряют любой пользовательский ACL
Удалить все незашифрованные версии объектов в корзине
s3tk delete-unencrypted-versions my-bucket
В целях безопасности это не удалит текущие версии объектов
Используйте флаг --dry-run для проверки
Укажите определённые объекты так же, как в scan-object-acl
Сканировать Route 3 на наличие корзин, чтобы убедиться, что вы владеете ими
s3tk scan-dns
В противном случае вы можете быть подвержены захвату поддомена
Учётные данные можно указать в ~/.aws/credentials или с помощью переменных окружения. См. это руководство для объяснения переменных окружения.
Вы можете указать профиль для использования с помощью:
AWS_PROFILE=your-profile s3tk
Ниже приведены необходимые разрешения для каждой команды. Включайте только те утверждения, которые вам нужны.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Scan",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketAcl",
"s3:GetBucketPolicy",
"s3:GetBucketPublicAccessBlock",
"s3:GetBucketLogging",
"s3:GetBucketVersioning",
"s3:GetEncryptionConfiguration"
],
"Resource": "*"
},
{
"Sid": "ScanObjectLevelLogging",
"Effect": "Allow",
"Action": [
"cloudtrail:ListTrails",
"cloudtrail:GetTrail",
"cloudtrail:GetEventSelectors",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Sid": "ScanDNS",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"route53:ListHostedZones",
"route53:ListResourceRecordSets"
],
"Resource": "*"
},
{
"Sid": "ListPolicy",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketPolicy"
],
"Resource": "*"
},
{
"Sid": "SetPolicy",
"Effect": "Allow",
"Action": [
"s3:PutBucketPolicy"
],
"Resource": "*"
},
{
"Sid": "DeletePolicy",
"Effect": "Allow",
"Action": [
"s3:DeleteBucketPolicy"
],
"Resource": "*"
},
{
"Sid": "BlockPublicAccess",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:PutBucketPublicAccessBlock"
],
"Resource": "*"
},
{
"Sid": "EnableLogging",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:PutBucketLogging"
],
"Resource": "*"
},
{
"Sid": "EnableVersioning",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:PutBucketVersioning"
],
"Resource": "*"
},
{
"Sid": "EnableDefaultEncryption",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:PutEncryptionConfiguration"
],
"Resource": "*"
},
{
"Sid": "ResetObjectAcl",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObjectAcl",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
},
{
"Sid": "Encrypt",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
},
{
"Sid": "DeleteUnencryptedVersions",
"Effect": "Allow",
"Action": [
"s3:ListBucketVersions",
"s3:GetObjectVersion",
"s3:DeleteObjectVersion"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
]
}
Amazon Athena отлично подходит для запросов к журналам S3. Создайте таблицу и выполняйте запросы:
SELECT
parse_datetime(requestdatetime, 'dd/MMM/yyyy:HH:mm:ss Z') AS time,
key,
remoteip,
useragent
FROM
s3_access_logs_db.mybucket_logs
WHERE
requester = '-'
AND httpstatus LIKE '2%'
AND key LIKE 'some-keys%'
ORDER BY 1
Amazon Athena также отлично подходит для запросов к журналам CloudTrail. Создайте таблицу и выполняйте запросы:
SELECT
eventtime,
eventname,
useridentity.username,
requestparameters
FROM
cloudtrail_logs
WHERE
eventname LIKE '%Bucket%'
ORDER BY 1
Держите всё просто и следуйте принципу наименьших привилегий, чтобы снизить вероятность ошибок.
GetObject в политике корзины)Только частные загрузки
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObjectAcl",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Для команд, которые перебирают объекты корзины (scan-object-acl, reset-object-acl, encrypt и delete-unencrypted-versions), запускайте s3tk на сервере EC2 для минимальной задержки.
Команды set-policy, block-public-access, enable-logging, enable-versioning и enable-default-encryption предоставлены для удобства. Мы рекомендуем Terraform для управления вашими корзинами.
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-bucket"
acl = "private"
logging {
target_bucket = "my-s3-logs"
target_prefix = "my-bucket/"
}
versioning {
enabled = true
}
}
resource "aws_s3_bucket_public_access_block" "my_bucket" {
bucket = "${aws_s3_bucket.my_bucket.id}"
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
Выполните:
pip install s3tk --upgrade
Чтобы использовать master, выполните:
pip install git+https://github.com/ankane/s3tk.git --upgrade
Запустите:
docker run -it ankane/s3tk aws configure
Зафиксируйте свои учётные данные:
docker commit $(docker ps -l -q) my-s3tk
И запустите:
docker run -it my-s3tk s3tk scan
Посмотреть список изменений
Всех призывают помочь улучшить этот проект. Вот несколько способов, как вы можете помочь:
Чтобы начать разработку:
git clone https://github.com/ankane/s3tk.git
cd s3tk
pip install --group dev