Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
policy_sentry — Gera políticas AWS IAM de privilégio mínimo com base em ARNs de recursos e níveis de acesso, automatizando a criação segura de políticas para infraestrutura em nuvem. | Kitploit
Ferramentas/GitHubGitHub/salesforce/policy_sentry
Segurança de Infraestrutura em NuvemAuditoria de ConfiguraçãoSegurança na NuvemDevSecOpsGerenciamento de Identidade e Acesso (IAM)
GitHubsalesforce/policy_sentry

policy_sentry

Gera políticas AWS IAM de privilégio mínimo com base em ARNs de recursos e níveis de acesso, automatizando a criação segura de políticas para infraestrutura em nuvem.

Ver Repositório
2.2k1573há 24 diasRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Site
Compartilhar

Policy Sentry

Gerador de Políticas IAM de Menor Privilégio.

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

  • Tutorial
    • Instalação
      • Gerenciadores de pacotes
      • Autocompletar do shell
    • Passo 1: Criar o Modelo
    • Passo 2: Copiar/colar ARNs
    • Passo 3: Comando write-policy
  • Folhas de dicas
    • Folha de dicas para escrever políticas
    • Folha de dicas para consulta ao banco de dados IAM
    • Inicialização local (opcional)
  • Outros usos
    • Comandos
    • Uso da biblioteca Python
    • Docker
    • Terraform
  • Referências

Documentação

Para tutoriais e documentação completa, visite o projeto no ReadTheDocs.

Veja o post no blog de engenharia da Salesforce sobre o Policy Sentry.

Visão geral

Escrever Políticas IAM com consciência de segurança manualmente pode ser muito tedioso e ineficiente. Muitos desenvolvedores de Infraestrutura como Código já passaram por algo assim:

  • Determinado a fazer o melhor esforço para conceder a usuários e funções o menor privilégio necessário para realizar suas tarefas, você gasta tempo demais vasculhando a documentação AWS IAM sobre Ações, Recursos e Chaves de Condição para Serviços AWS.
  • Seu líder de equipe o incentiva a construir segurança em suas Políticas IAM para a qualidade do produto, mas eventualmente você fica frustrado devido aos prazos do projeto.
  • Você não tem uma pessoa de segurança incorporada na sua equipe que possa escrever essas Políticas IAM para você, e não há nenhuma ferramenta automatizada que perceba magicamente as chamadas de API AWS que você executa e depois as escreva com restrições de ARN de recurso.
  • Após fantasiar sobre esse nível de automação, você percebe que escrever Políticas IAM de menor privilégio, aparentemente por caridade, comprometerá sua capacidade de terminar seu código a tempo para cumprir os prazos do projeto.
  • Você usa Políticas Gerenciadas (porque, ei, por que não?) ou você avalia visualmente os nomes das chamadas de API e usa curingas para seguir em frente com sua vida.

Tal processo não é ideal para a segurança nem para os desenvolvedores de Infraestrutura como Código. Precisamos facilitar a escrita segura de Políticas IAM e abstrair a complexidade de escrever políticas IAM de menor privilégio. Foi por isso que criei esta ferramenta.

O Policy Sentry permite que os usuários criem políticas IAM de menor privilégio em questão de segundos, em vez de escrever políticas IAM tediosamente manualmente. Essas políticas são reduzidas de acordo com os níveis de acesso e recursos. No caso de uma violação, isso ajuda a limitar o raio de explosão de credenciais comprometidas, dando aos principais IAM apenas o acesso de que precisam.

Antes desta ferramenta, podia levar horas para criar uma Política IAM com restrições de ARN de recurso — mas agora pode levar questão de segundos. Dessa forma, os desenvolvedores só precisam determinar os recursos que precisam acessar, e o Policy Sentry abstrai a complexidade das políticas IAM de seus processos de desenvolvimento.

Escrevendo Políticas Seguras com base em Restrições de Recursos e Níveis de Acesso

A principal funcionalidade do Policy Sentry é que ele pode criar políticas IAM com base em ARNs de recursos e níveis de acesso. Nossa funcionalidade CRUD assume a abordagem opinativa de que os desenvolvedores de IAC não precisam entender as complexidades do AWS IAM — devemos abstrair a complexidade para eles. Na verdade, os desenvolvedores deveriam apenas poder dizer...

  • "Preciso de acesso de Leitura/Escrita/Listagem a arn:aws:s3:::example-org-sbx-vmimport"
  • "Preciso de acesso de Gerenciamento de Permissões a arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
  • "Preciso de acesso de Marcação a arn:aws:ssm:us-east-1:123456789012:parameter/test"

...e nossa automação deve criar políticas que correspondam a esses níveis de acesso.

Como fazemos isso? Bem, o Policy Sentry aproveita a documentação da AWS sobre Ações, Recursos e Chaves de Condição para consultar as ações, níveis de acesso e tipos de recursos, e gera políticas de acordo com os ARNs e níveis de acesso. Considere o trecho da tabela abaixo:

AçõesNível de AcessoTipos de Recurso
ssm:GetParameterLeituraparâmetro
ssm:DescribeParametersListagemparâmetro
ssm:PutParameterEscritaparâmetro
secretsmanager:PutResourcePolicyGerenciamento de permissõessegredo
secretsmanager:TagResourceMarcaçãosegredo

O Policy Sentry agrega toda essa documentação em um único banco de dados e usa esse banco de dados para gerar políticas de acordo com ações, recursos e níveis de acesso.

Tutorial

Instalação

Gerenciadores de pacotes

  • 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

Autocompletar do shell

Para habilitar o autocompletar do Bash, coloque isso no seu .bashrc:

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

Para habilitar o autocompletar do ZSH, coloque isso no seu .zshrc:

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

Passo 1: Criar o Modelo

  • Para gerar uma política de acordo com recursos e níveis de acesso, comece criando um modelo com este comando para que você possa apenas preencher os ARNs:
root@kitploit:~
policy_sentry create-template --output-file crud.yml --template-type crud
  • Isso gerará um arquivo como este:
root@kitploit:~
mode: crud
name: ''
# Specify resource ARNs
read:
- ''
write:
- ''
list:
- ''
tagging:
- ''
permissions-management:
- ''
# Actions that do not support resource constraints
wildcard-only:
  single-actions: # standalone actions
  - ''
  # Service-wide - like 's3' or 'ec2'
  service-read:
  - ''
  service-write:
  - ''
  service-list:
  - ''
  service-tagging:
  - ''
  service-permissions-management:
  - ''
# Skip resource constraint requirements by listing actions here.
skip-resource-constraints:
- ''
# Exclude actions from the output by specifying them here. Accepts wildcards, like kms:Delete*
exclude-actions:
- ''
# If this policy needs to include an AssumeRole action
sts:
  assume-role:
    - ''
  assume-role-with-saml:
    - ''
  assume-role-with-web-identity:
    - ''

Passo 2: Copiar/colar ARNs

  • Copie/cole os ARNs que deseja incluir na sua política. Você pode deletar linhas que não usa, ou apenas deixá-las lá.
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'

Passo 3: Comando write-policy

  • Depois execute este comando:
root@kitploit:~
policy_sentry write-policy --input-file crud.yml
  • Isso gerará estes resultados:
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"
            ]
        }
    ]
}

Observe como a política acima reconhece os ARNs fornecidos pelo usuário, junto com o nível de acesso solicitado. Por exemplo, o SID SecretsmanagerTaggingSecret contém apenas ações de Marcação atribuídas ao tipo de recurso secreto.

Isso acelera rapidamente o tempo para desenvolver políticas IAM e garante que todas as políticas criadas limitem o acesso exatamente ao que sua função precisa acessar. Dessa forma, os desenvolvedores só precisam determinar os recursos que precisam acessar, e abstraímos a complexidade das políticas IAM de seus processos de desenvolvimento.

Folhas de dicas

Folha de dicas para escrever políticas

root@kitploit:~
# Crie modelos primeiro!!! Assim você pode apenas colar os valores necessários em vez de lembrar o formato YAML
# Modo CRUD
policy_sentry create-template --output-file tmp.yml --template-type crud
# Modo Actions
policy_sentry create-template --output-file tmp.yml --template-type actions

# Escreva política com base em níveis de acesso específicos de recurso
policy_sentry write-policy --input-file examples/yml/crud.yml

# Escreva política com base em uma lista de ações
policy_sentry write-policy --input-file examples/yml/actions.yml

Folha de dicas para consulta ao banco de dados IAM

root@kitploit:~

###############
# Tabela de Ações
###############
# NOTA: Use --fmt yaml ou --fmt json para mudar o formato de saída. Padrão é json para consulta

# Obtenha uma lista de ações que não suportam restrições de recurso
policy_sentry query action-table --service s3 --resource-type "*" --fmt yaml

# Obtenha uma lista de ações no nível "Write" no S3 que não suportam restrições de recurso
policy_sentry query action-table --service s3 --access-level write --resource-type "*" --fmt yaml

# Obtenha uma lista de todas as ações IAM em TODOS os serviços que têm acesso "Permissions management"
policy_sentry query action-table --service all --access-level permissions-management

# Obtenha uma lista de todas as Ações IAM disponíveis para o serviço RAM
policy_sentry query action-table --service ram

# Obtenha detalhes sobre a ação IAM `ram:TagResource`
policy_sentry query action-table --service ram --name tagresource

# Obtenha uma lista de todas as ações IAM no serviço RAM que têm o nível de acesso Permissions management
policy_sentry query action-table --service ram --access-level permissions-management

# Obtenha uma lista de todas as ações IAM no serviço SES que suportam a chave de condição `ses:FeedbackAddress`
policy_sentry query action-table --service ses --condition ses:FeedbackAddress

###########
# Tabela ARN
###########

# Obtenha uma lista de todos os formatos RAW de ARN disponíveis através do serviço SSM
policy_sentry query arn-table --service ssm

# Obtenha o formato raw ARN para o ARN `cloud9` com o nome curto `environment`
policy_sentry query arn-table --service cloud9 --name environment

# Obtenha pares chave/valor de todos os formatos RAW de ARN mais seus nomes curtos
policy_sentry query arn-table --service cloud9 --list-arn-types

######################
# Tabela de Chaves de Condição
######################

# Obtenha uma lista de todas as chaves de condição disponíveis para o serviço Cloud9
policy_sentry query condition-table --service cloud9

# Obtenha detalhes sobre a chave de condição intitulada `cloud9:Permissions`
policy_sentry query condition-table --service cloud9 --name cloud9:Permissions

Inicialização local (opcional)

root@kitploit:~
# Inicialize a pasta de configuração do policy_sentry e crie as tabelas do banco de dados IAM
policy_sentry initialize

# Obtenha a versão mais recente da documentação AWS para experimentar novos serviços
policy_sentry initialize --fetch

# Substitua os Níveis de Acesso especificando seus próprios Níveis de Acesso (exemplo: corrigindo níveis de Permissions management)
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

Outros usos

Comandos

  • create-template: Cria os modelos de arquivo YML para uso nos tipos de comando write-policy.

  • write-policy: Aproveita um arquivo YAML para escrever políticas para você

    • Opção 1: Especifique níveis CRUD (Read, Write, List, Tagging ou Permissions management) e o ARN do recurso. Ele escreverá isso para você. Veja a documentação
    • Opção 2: Especifique uma lista de ações. Ele escreverá a Política IAM para você, mas você terá que preencher os ARNs. Veja a documentação.
  • query: Consulte as tabelas do banco de dados IAM. Isso pode ajudar ao preencher os modelos do Policy Sentry, ou apenas consultar o banco de dados para conhecimento rápido.

    • Opção 1: Consultar a Tabela de Ações (action-table)
    • Opção 2: Consultar a Tabela de ARNs (arn-table)
    • Opção 3: Consultar a Tabela de Condições (condition-table)
  • initialize: (Opcional). Cria um banco de dados SQLite que contém todos os serviços disponíveis através da documentação de Ações, Recursos e Chaves de Condição. Veja a documentação.

Uso da biblioteca Python

Se você está desenvolvendo seu próprio código Python e deseja importar o Policy Sentry como um pacote de terceiros, você pode pular a inicialização e aproveitar o arquivo de banco de dados local que está incluído no próprio pacote Python.

Isso é especialmente útil para desenvolvedores que desejam aproveitar as capacidades do Policy Sentry que exigem o uso do banco de dados IAM (como consultar a tabela do banco de dados IAM). Dessa forma, você não precisa inicializar o banco de dados e pode consultá-lo imediatamente.

O exemplo de código está localizado aqui. Também é mostrado abaixo.

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


def example():
    actions = get_actions_for_service('cloud9')  # Então você pode usar qualquer método que exija acesso ao banco de dados.
    for action in actions:
        print(action)

if __name__ == '__main__':
    example()

Os resultados serão parecidos com:

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

Se você prefere usar Docker em vez de instalar o script com Python, também oferecemos suporte. A partir da raiz do repositório, use isso para construir a imagem docker:

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

Use isso para executar alguns comandos básicos:

root@kitploit:~
# Comandos básicos sem argumentos
docker run -i --rm kmcquade/policy_sentry:latest "--help"
docker run -i --rm kmcquade/policy_sentry:latest "query"

# Consulte o banco de dados
docker run -i --rm kmcquade/policy_sentry:latest "query action-table --service all --access-level permissions-management"

O comando write-policy também suporta passar a configuração YML via STDIN. Se você estiver usando o método Docker, experimente aqui:

root@kitploit:~
# Escreva políticas passando a configuração via 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

O módulo Terraform é publicado e mantido aqui.

Referências

  • O processo de raspagem de documentos foi inspirado e emprestado de um script hacking ansible similar.
  • Políticas baseadas em identidade vs. baseadas em recurso
  • Ações, Recursos e Chaves de Condição para Serviços AWS
Baixar ferramenta