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

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

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

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

工具目录

分类

查看所有分类
Loading categories
policy_sentry — 根据资源ARN和访问级别生成最低权限的AWS IAM策略,自动化云基础设施的安全策略创建。 | Kitploit
工具/GitHubGitHub/salesforce/policy_sentry
云基础设施安全配置审计云安全DevSecOps身份与访问管理 (IAM)
GitHubsalesforce/policy_sentry

policy_sentry

根据资源ARN和访问级别生成最低权限的AWS IAM策略,自动化云基础设施的安全策略创建。

查看仓库
2.2k1573天前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

Policy Sentry

IAM 最小权限策略生成器。

continuous-integration Documentation Status Join the chat at https://gitter.im/salesforce/policy_sentry Twitter PyPI Python Version Downloads

  • 教程
    • 安装
      • 包管理器
      • Shell 补全
    • 步骤 1:创建模板
    • 步骤 2:复制/粘贴 ARN
    • 步骤 3:write-policy 命令
  • 速查表
    • 策略编写速查表
    • IAM 数据库查询速查表
    • 本地初始化(可选)
  • 其他用法
    • 命令
    • Python 库用法
    • Docker
    • Terraform
  • 参考

文档

有关详细说明和完整文档,请访问 ReadTheDocs 上的项目。

查看 Salesforce 工程博客文章 了解 Policy Sentry。

概述

手动编写安全高效的 IAM 策略既繁琐又低效。许多基础设施即代码 (IaC) 开发者都有过这样的经历:

  • 你决心尽最大努力为用户和角色提供执行任务所需的最小权限,但你花了太多时间通读 AWS IAM 文档中关于 AWS 服务的操作、资源和条件键 的内容。
  • 你的团队领导鼓励你将安全性融入 IAM 策略以提高产品质量,但最终由于项目截止日期而感到沮丧。
  • 你的团队中没有专职安全人员来为你编写这些 IAM 策略,也没有任何自动化工具能自动感知你执行的 AWS API 调用,并为你编写带有资源 ARN 约束的策略。
  • 在幻想这种自动化水平之后,你意识到编写最小权限 IAM 策略(看似是出于善意)会危及你按时完成代码的能力。
  • 你使用托管策略(因为为什么不呢?)或者你粗略估算 API 调用的名称并使用通配符,以便继续生活。

这样的流程对于安全性和基础设施即代码开发者来说都不理想。我们需要让安全地编写 IAM 策略变得更容易,并抽象出编写最小权限 IAM 策略的复杂性。这就是我创建这个工具的原因。

Policy Sentry 允许用户在几秒钟内创建最小权限的 IAM 策略,而不是手动繁琐地编写 IAM 策略。这些策略根据访问级别和资源进行范围缩小。在发生入侵时,这有助于通过仅授予 IAM 主体所需访问权限来限制泄露凭据的爆炸半径。

在此之前,手工制作一个带有资源 ARN 约束的 IAM 策略可能需要数小时——但现在只需几秒钟。这样,开发者只需确定他们需要访问的资源,而 Policy Sentry 将 IAM 策略的复杂性从其开发流程中抽象出来。

基于资源约束和访问级别编写安全策略

Policy Sentry 的旗舰功能是能够根据资源 ARN 和访问级别创建 IAM 策略。我们的 CRUD 功能采用了一种固执己见的做法:IaC 开发者不应该需要理解 AWS IAM 的复杂性——我们应该为他们抽象出复杂性。事实上,开发者只需说出……

  • “我需要 arn:aws:s3:::example-org-sbx-vmimport 的 读取/写入/列表 访问权限”
  • “我需要 arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret 的 权限管理 访问权限”
  • “我需要 arn:aws:ssm:us-east-1:123456789012:parameter/test 的 标签管理 访问权限”

……然后我们的自动化工具就会创建对应这些访问级别的策略。

我们如何做到这一点?Policy Sentry 利用 AWS 关于操作、资源和条件键 的文档来查找操作、访问级别和资源类型,并根据 ARN 和访问级别生成策略。考虑下面的表格片段:

Policy Sentry 将所有文档聚合到一个数据库中,并使用该数据库根据操作、资源和访问级别生成策略。

教程

安装

包管理器

  • Homebrew
root@kitploit:~
brew tap salesforce/policy_sentry https://github.com/salesforce/policy_sentry
brew install policy_sentry
  • Pip
root@kitploit:~
pip3 install --user policy_sentry

Shell 补全

要启用 Bash 补全,请将以下内容放入你的 .bashrc:

root@kitploit:~
eval "$(_POLICY_SENTRY_COMPLETE=bash_source policy_sentry)"

要启用 ZSH 补全,请将以下内容放入你的 .zshrc:

root@kitploit:~
eval "$(_POLICY_SENTRY_COMPLETE=zsh_source policy_sentry)"

步骤 1:创建模板

  • 要根据资源和访问级别生成策略,请先使用此命令创建模板,以便你只需填写 ARN:
root@kitploit:~
policy_sentry create-template --output-file crud.yml --template-type crud
  • 它将生成如下文件:
root@kitploit:~
mode: crud
name: ''
# 指定资源 ARN
read:
- ''
write:
- ''
list:
- ''
tagging:
- ''
permissions-management:
- ''
# 不支持资源约束的操作
wildcard-only:
  single-actions: # 独立操作
  - ''
  # 服务级别 - 如 's3' 或 'ec2'
  service-read:
  - ''
  service-write:
  - ''
  service-list:
  - ''
  service-tagging:
  - ''
  service-permissions-management:
  - ''
# 在此列出需要跳过资源约束要求的操作。
skip-resource-constraints:
- ''
# 通过在此指定操作来从输出中排除它们。支持通配符,例如 kms:Delete*
exclude-actions:
- ''
# 如果此策略需要包含 AssumeRole 操作
sts:
  assume-role:
    - ''
  assume-role-with-saml:
    - ''
  assume-role-with-web-identity:
    - ''

步骤 2:复制/粘贴 ARN

  • 复制/粘贴你希望包含在策略中的 ARN。你可以删除不使用的行,或者直接保留它们。
root@kitploit:~
mode: crud
read:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
write:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
list:
- 'arn:aws:ssm:us-east-1:123456789012:parameter/myparameter'
tagging:
- 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret'
permissions-management:
- 'arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret'

步骤 3:write-policy 命令

  • 然后运行此命令:
root@kitploit:~
policy_sentry write-policy --input-file crud.yml
  • 它将生成以下结果:
root@kitploit:~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SsmReadParameter",
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:GetParameterHistory",
                "ssm:GetParameters",
                "ssm:GetParametersByPath",
                "ssm:ListTagsForResource"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:123456789012:parameter/myparameter"
            ]
        },
        {
            "Sid": "SsmWriteParameter",
            "Effect": "Allow",
            "Action": [
                "ssm:DeleteParameter",
                "ssm:DeleteParameters",
                "ssm:LabelParameterVersion",
                "ssm:PutParameter"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-1:123456789012:parameter/myparameter"
            ]
        },
        {
            "Sid": "SecretsmanagerPermissionsmanagementSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DeleteResourcePolicy",
                "secretsmanager:PutResourcePolicy"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
            ]
        },
        {
            "Sid": "SecretsmanagerTaggingSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:TagResource",
                "secretsmanager:UntagResource"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
            ]
        }
    ]
}

请注意,上面的策略识别了用户提供的 ARN,以及请求的访问级别。例如,SID SecretsmanagerTaggingSecret 仅包含分配给秘密资源类型的标签管理操作。

这极大地加快了开发 IAM 策略的速度,并确保所有创建的策略将访问权限限制为你的角色所需。这样,开发者只需确定他们需要访问的资源,我们将 IAM 策略的复杂性从他们的开发流程中抽象出来。

速查表

策略编写速查表

root@kitploit:~
# 首先创建模板!!!这样你就可以直接粘贴所需值,而无需记住 YAML 格式
# CRUD 模式
policy_sentry create-template --output-file tmp.yml --template-type crud
# 操作模式
policy_sentry create-template --output-file tmp.yml --template-type actions

# 基于资源特定的访问级别编写策略
policy_sentry write-policy --input-file examples/yml/crud.yml

# 基于操作列表编写策略
policy_sentry write-policy --input-file examples/yml/actions.yml

IAM 数据库查询速查表

root@kitploit:~

###############
# 操作表
###############
# 注意:使用 --fmt yaml 或 --fmt json 更改输出格式。默认查询时使用 json

# 获取不支持资源约束的操作列表
policy_sentry query action-table --service s3 --resource-type "*" --fmt yaml

# 获取 S3 中“写入”级别且不支持资源约束的操作列表
policy_sentry query action-table --service s3 --access-level write --resource-type "*" --fmt yaml

# 获取所有 AWS 服务中具有“权限管理”访问级别的所有 IAM 操作列表
policy_sentry query action-table --service all --access-level permissions-management

# 获取可用 RAM 服务的所有 IAM 操作列表
policy_sentry query action-table --service ram

# 获取 `ram:TagResource` IAM 操作的详细信息
policy_sentry query action-table --service ram --name tagresource

# 获取 RAM 服务下具有“权限管理”访问级别的所有 IAM 操作列表
policy_sentry query action-table --service ram --access-level permissions-management

# 获取 SES 服务下支持 `ses:FeedbackAddress` 条件键的所有 IAM 操作列表
policy_sentry query action-table --service ses --condition ses:FeedbackAddress

###########
# ARN 表
###########

# 获取 SSM 服务可用的所有原始 ARN 格式列表
policy_sentry query arn-table --service ssm

# 获取 `cloud9` ARN 的原始 ARN 格式,短名称为 `environment`
policy_sentry query arn-table --service cloud9 --name environment

# 获取所有原始 ARN 格式及其短名称的键值对
policy_sentry query arn-table --service cloud9 --list-arn-types

######################
# 条件键表
######################

# 获取 Cloud9 服务可用的所有条件键列表
policy_sentry query condition-table --service cloud9

# 获取条件键 `cloud9:Permissions` 的详细信息
policy_sentry query condition-table --service cloud9 --name cloud9:Permissions

本地初始化(可选)

root@kitploit:~
# 初始化 policy_sentry 配置文件夹并创建 IAM 数据库表。
policy_sentry initialize

# 获取最新版本的 AWS 文档,以便尝试新服务。
policy_sentry initialize --fetch

# 通过指定你自己的访问级别来覆盖访问级别(示例:修正权限管理级别)
policy_sentry initialize --access-level-overrides-file ~/.policy_sentry/overrides-resource-policies.yml

policy_sentry initialize --access-level-overrides-file ~/.policy_sentry/access-level-overrides.yml

其他用法

命令

  • create-template:创建用于 write-policy 命令类型的 YML 文件模板。

  • write-policy:利用 YAML 文件为你编写策略

    • 选项 1:指定 CRUD 级别(读取、写入、列表、标签管理或权限管理)和资源的 ARN。它将为你自动编写。请参阅文档
    • 选项 2:指定操作列表。它将为你编写 IAM 策略,但你需要填写 ARN。请参阅文档。
  • query:查询 IAM 数据库表。这有助于填写 Policy Sentry 模板,或者只是快速查询数据库获取知识。

    • 选项 1:查询操作表 (action-table)
    • 选项 2:查询 ARN 表 (arn-table)
    • 选项 3:查询条件表 (condition-table)
  • initialize:(可选)。创建一个 SQLite 数据库,其中包含 操作、资源和条件键文档 中可用的所有服务。请参阅文档。

Python 库用法

如果你正在开发自己的 Python 代码,并希望将 Policy Sentry 作为第三方包导入,你可以跳过初始化,直接利用 Python 包自带的本地数据库文件。

这对于那些希望利用需要 IAM 数据库的 Policy Sentry 功能(例如查询 IAM 数据库表)的开发者尤其有用。这样,你不必初始化数据库,就可以立即查询。

代码示例在此处。下面也展示了它。

root@kitploit:~
from policy_sentry.querying.actions import get_actions_for_service


def example():
    actions = get_actions_for_service('cloud9')  # 然后你可以使用任何需要访问数据库的方法。
    for action in actions:
        print(action)

if __name__ == '__main__':
    example()

结果将如下所示:

root@kitploit:~
cloud9:CreateEnvironmentEC2
cloud9:CreateEnvironmentMembership
cloud9:DeleteEnvironment
cloud9:DeleteEnvironmentMembership
cloud9:DescribeEnvironmentMemberships
cloud9:DescribeEnvironmentStatus
cloud9:DescribeEnvironments
cloud9:GetUserSettings
cloud9:ListEnvironments
cloud9:ListTagsForResource
cloud9:TagResource
cloud9:UntagResource
cloud9:UpdateEnvironment
cloud9:UpdateEnvironmentMembership
cloud9:UpdateUserSettings

Docker

如果你更喜欢使用 Docker 而不是用 Python 安装脚本,我们也支持这种方式。从仓库根目录,使用以下命令构建 Docker 镜像:

root@kitploit:~
docker build -t kmcquade/policy_sentry .

使用以下命令运行一些基本操作:

root@kitploit:~
# 不带参数的基本命令
docker run -i --rm kmcquade/policy_sentry:latest "--help"
docker run -i --rm kmcquade/policy_sentry:latest "query"

# 查询数据库
docker run -i --rm kmcquade/policy_sentry:latest "query action-table --service all --access-level permissions-management"

write-policy 命令也支持通过 STDIN 传入 YML 配置。如果你使用 Docker 方法,可以在这里尝试:

root@kitploit:~
# 通过 STDIN 传递配置来编写策略
cat examples/yml/crud.yml | docker run -i --rm kmcquade/policy_sentry:latest "write-policy"

cat examples/yml/actions.yml | docker run -i --rm kmcquade/policy_sentry:latest "write-policy"

Terraform

Terraform 模块在此处发布和维护。

参考

  • 文档抓取过程的灵感来源于一个类似的 ansible 黑客脚本。
  • 基于身份的策略与基于资源的策略
  • AWS 服务的操作、资源和条件键
下载工具
操作访问级别资源类型
ssm:GetParameter读取参数
ssm:DescribeParameters列表参数
ssm:PutParameter写入参数
secretsmanager:PutResourcePolicy权限管理密钥
secretsmanager:TagResource标签管理密钥