Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
s3tk — 一款针对 Amazon S3 的安全工具包 | Kitploit
工具/GitHubGitHub/ankane/s3tk
云基础设施安全漏洞扫描器加密/解密工具配置审计云安全错误配置
GitHubankane/s3tk

s3tk

一款针对 Amazon S3 的安全工具包

查看仓库
459271个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

s3tk

一个面向Amazon S3的安全工具包

Screenshot

🍊 在 Instacart 经过实战检验

安装

运行:

root@kitploit:~
pip install s3tk

你可以使用 AWS CLI 或 AWS Vault 来设置你的 AWS 凭证:

root@kitploit:~
pip install awscli
aws configure

每个命令所需的 IAM 策略 见下文。

命令

扫描

扫描你的存储桶以检查:

  • ACL 对公网开放
  • 策略对公网开放
  • 公有访问被阻止
  • 日志记录已启用
  • 版本控制已启用
  • 默认加密已启用
root@kitploit:~
s3tk scan

仅对指定存储桶运行

root@kitploit:~
s3tk scan my-bucket my-bucket-2

也支持通配符

root@kitploit:~
s3tk scan "my-bucket*"

确认正确的日志存储桶和前缀

root@kitploit:~
s3tk scan --log-bucket my-s3-logs --log-bucket other-region-logs --log-prefix "{bucket}/"

检查 CloudTrail 对象级日志记录 [实验性]

root@kitploit:~
s3tk scan --object-level-logging

跳过日志记录、版本控制或默认加密

root@kitploit:~
s3tk scan --skip-logging --skip-versioning --skip-default-encryption

通过 SNS 获取失败通知(邮件)

root@kitploit:~
s3tk scan --sns-topic arn:aws:sns:...

列出策略

列出存储桶策略

root@kitploit:~
s3tk list-policy

仅对指定存储桶运行

root@kitploit:~
s3tk list-policy my-bucket my-bucket-2

显示命名的声明

root@kitploit:~
s3tk list-policy --named

设置策略

注意: 这将替换之前的策略

仅允许私有上传

root@kitploit:~
s3tk set-policy my-bucket --no-object-acl

删除策略

删除策略

root@kitploit:~
s3tk delete-policy my-bucket

阻止公有访问

阻止指定存储桶的公有访问

root@kitploit:~
s3tk block-public-access my-bucket my-bucket-2

使用 --dry-run 标志进行测试

启用日志记录

启用所有存储桶的日志记录

root@kitploit:~
s3tk enable-logging --log-bucket my-s3-logs

仅对指定存储桶

root@kitploit:~
s3tk enable-logging my-bucket my-bucket-2 --log-bucket my-s3-logs

设置日志前缀(默认为 {bucket}/)

root@kitploit:~
s3tk enable-logging --log-bucket my-s3-logs --log-prefix "logs/{bucket}/"

使用 --dry-run 标志进行测试

关于日志记录的几点说明:

  • 已启用日志记录的存储桶不会更新
  • 日志存储桶必须与源存储桶位于同一区域 – 针对不同区域多次运行此命令
  • 日志显示可能需要一个多小时

启用版本控制

启用所有存储桶的版本控制

root@kitploit:~
s3tk enable-versioning

仅对指定存储桶

root@kitploit:~
s3tk enable-versioning my-bucket my-bucket-2

使用 --dry-run 标志进行测试

启用默认加密

启用所有存储桶的默认加密

root@kitploit:~
s3tk enable-default-encryption

仅对指定存储桶

root@kitploit:~
s3tk enable-default-encryption my-bucket my-bucket-2

这不会加密现有对象 – 请使用 encrypt 命令进行加密

使用 --dry-run 标志进行测试

扫描对象 ACL

扫描存储桶中所有对象的 ACL

root@kitploit:~
s3tk scan-object-acl my-bucket

仅部分对象

root@kitploit:~
s3tk scan-object-acl my-bucket --only "*.pdf"

排除部分对象

root@kitploit:~
s3tk scan-object-acl my-bucket --except "*.jpg"

重置对象 ACL

重置存储桶中所有对象的 ACL

root@kitploit:~
s3tk reset-object-acl my-bucket

这会使所有对象变为私有。如何强制后续操作,请参见存储桶策略。

使用 --dry-run 标志进行测试

指定部分对象的方式与 scan-object-acl 相同

加密

使用服务器端加密加密存储桶中的所有对象

root@kitploit:~
s3tk encrypt my-bucket

默认使用 S3 管理密钥。要使用 KMS 管理密钥,请使用:

root@kitploit:~
s3tk encrypt my-bucket --kms-key-id arn:aws:kms:...

要使用客户提供的密钥,请使用:

root@kitploit:~
s3tk encrypt my-bucket --customer-key secret-key

使用 --dry-run 标志进行测试

指定部分对象的方式与 scan-object-acl 相同

注意: 对象将丢失任何自定义 ACL

删除未加密版本

删除存储桶中所有对象的未加密版本

root@kitploit:~
s3tk delete-unencrypted-versions my-bucket

为安全起见,这不会删除任何对象的当前版本

使用 --dry-run 标志进行测试

指定部分对象的方式与 scan-object-acl 相同

扫描 DNS

扫描 Route 53 中的存储桶,以确保你拥有它们

root@kitploit:~
s3tk scan-dns

否则,你可能会遭受子域名接管

凭证

凭证可以在 ~/.aws/credentials 中指定,也可以通过环境变量指定。请参阅此指南了解环境变量的说明。

你可以指定要使用的配置文件:

root@kitploit:~
AWS_PROFILE=your-profile s3tk

IAM 策略

以下是每个命令所需的权限。只包含你需要的语句。

root@kitploit:~
{
    "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 日志。创建表并查询:

root@kitploit:~
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

CloudTrail 日志

Amazon Athena 也非常适合查询 CloudTrail 日志。创建表并查询:

root@kitploit:~
SELECT
    eventtime,
    eventname,
    useridentity.username,
    requestparameters
FROM
    cloudtrail_logs
WHERE
    eventname LIKE '%Bucket%'
ORDER BY 1

最佳实践

保持简单并遵循最小权限原则,以减少出错的可能性。

  • 严格限制可以执行存储桶相关操作的人员
  • 避免在同一个存储桶中混合不同权限的对象(使用存储桶策略强制执行)
  • 不要在存储桶级别指定公共读取权限(不在存储桶策略中使用 GetObject)
  • 频繁监控配置变更

存储桶策略

仅允许私有上传

root@kitploit:~
{
    "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),请在 EC2 服务器上运行 s3tk 以获得最小延迟。

说明

set-policy、block-public-access、enable-logging、enable-versioning 和 enable-default-encryption 命令是为方便而提供的。我们建议使用 Terraform 来管理你的存储桶。

root@kitploit:~
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
}

升级

运行:

root@kitploit:~
pip install s3tk --upgrade

要使用主分支,运行:

root@kitploit:~
pip install git+https://github.com/ankane/s3tk.git --upgrade

Docker

运行:

root@kitploit:~
docker run -it ankane/s3tk aws configure

提交你的凭证:

root@kitploit:~
docker commit $(docker ps -l -q) my-s3tk

然后运行:

root@kitploit:~
docker run -it my-s3tk s3tk scan

历程

查看变更日志

贡献

欢迎帮助改进此项目。以下是一些你可以提供帮助的方式:

  • 报告 bug
  • 修复 bug 并提交拉取请求
  • 编写、澄清或修复文档
  • 建议或添加新功能

开始开发:

root@kitploit:~
git clone https://github.com/ankane/s3tk.git
cd s3tk
pip install --group dev
下载工具