Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
policy_sentry — Genera policy IAM AWS con privilegi minimi basate su ARN di risorse e livelli di accesso, automatizzando la creazione sicura di policy per l'infrastruttura cloud. | Kitploit
Strumenti/GitHubGitHub/salesforce/policy_sentry
Sicurezza dell'Infrastruttura CloudAudit di ConfigurazioneSicurezza CloudDevSecOpsGestione Identità e Accessi (IAM)
GitHubsalesforce/policy_sentry

policy_sentry

Genera policy IAM AWS con privilegi minimi basate su ARN di risorse e livelli di accesso, automatizzando la creazione sicura di policy per l'infrastruttura cloud.

Vedi Repository
2.2k1575 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

Policy Sentry

Generatore di Policy IAM con privilegio minimo (Least Privilege).

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

  • Tutorial
    • Installazione
      • Gestori di pacchetti
      • Completamento shell
    • Passo 1: Creare il template
    • Passo 2: Copia/incolla ARN
    • Passo 3: Comando write-policy
  • Cheat sheets
    • Cheat sheet per la scrittura delle policy
    • Cheat sheet per interrogare il database IAM
    • Inizializzazione locale (opzionale)
  • Altri usi
    • Comandi
    • Utilizzo della libreria Python
    • Docker
    • Terraform
  • Riferimenti

Documentazione

Per guide e documentazione completa, visita il progetto su ReadTheDocs.

Leggi l'articolo sul blog di Salesforce Engineering su Policy Sentry.

Panoramica

Scrivere manualmente policy IAM attente alla sicurezza può essere molto tedioso e inefficiente. Molti sviluppatori di Infrastructure as Code hanno vissuto situazioni come questa:

  • Determinato a fare del proprio meglio per concedere a utenti e ruoli il minimo privilegio necessario per svolgere le proprie mansioni, si perde troppo tempo a setacciare la documentazione AWS IAM su Azioni, Risorse e Condizioni per i Servizi AWS.
  • Il tuo team lead ti incoraggia a integrare la sicurezza nelle policy IAM per la qualità del prodotto, ma alla fine ti frustri a causa delle scadenze del progetto.
  • Non hai una persona di sicurezza dedicata nel team che possa scrivere quelle policy IAM per te, e non esiste uno strumento automatizzato che possa captare magicamente le chiamate API AWS che esegui e scriverle automaticamente con vincoli di ARN delle risorse.
  • Dopo aver fantasticato su questo livello di automazione, ti rendi conto che scrivere policy IAM con privilegio minimo, quasi per beneficenza, metterà a repentaglio la tua capacità di completare il codice in tempo per rispettare le scadenze.
  • Usi le policy gestite (perché, beh, perché no) o stimi a occhio i nomi delle chiamate API e usi caratteri jolly per andare avanti.

Un processo del genere non è ideale né per la sicurezza né per gli sviluppatori di Infrastructure as Code. Dobbiamo rendere più facile scrivere policy IAM in modo sicuro e astrarre la complessità della scrittura di policy IAM con privilegio minimo. Ecco perché ho creato questo strumento.

Policy Sentry consente agli utenti di creare policy IAM con privilegio minimo in pochi secondi, invece di doverle scrivere a mano in modo tedioso. Queste policy sono limitate in base ai livelli di accesso e alle risorse. In caso di violazione, questo aiuta a limitare il raggio d'esplosione delle credenziali compromesse, concedendo solo l'accesso necessario ai principali IAM.

Prima di questo strumento, potevano essere necessarie ore per creare una policy IAM con vincoli di ARN delle risorse — ora può richiedere pochi secondi. In questo modo, gli sviluppatori devono solo determinare le risorse a cui devono accedere, e Policy Sentry astrae la complessità delle policy IAM dai loro processi di sviluppo.

Scrivere policy sicure basate su vincoli di risorse e livelli di accesso

La caratteristica principale di Policy Sentry è che può creare policy IAM basate su ARN di risorse e livelli di accesso. La nostra funzionalità CRUD adotta l'approccio opinionato che gli sviluppatori IaC non dovrebbero dover comprendere le complessità di AWS IAM — dovremmo astrarre la complessità per loro. In effetti, gli sviluppatori dovrebbero solo essere in grado di dire...

  • "Ho bisogno di accesso Read/Write/List a arn:aws:s3:::example-org-sbx-vmimport"
  • "Ho bisogno di accesso Permissions Management a arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
  • "Ho bisogno di accesso Tagging a arn:aws:ssm:us-east-1:123456789012:parameter/test"

...e la nostra automazione dovrebbe creare policy che corrispondono a quei livelli di accesso.

Come riusciamo a fare questo? Beh, Policy Sentry sfrutta la documentazione AWS su Azioni, Risorse e Condizioni per cercare le azioni, i livelli di accesso e i tipi di risorsa, e genera policy in base agli ARN e ai livelli di accesso. Considera il frammento di tabella qui sotto:

Policy Sentry aggrega tutta quella documentazione in un unico database e utilizza tale database per generare policy in base ad azioni, risorse e livelli di accesso.

Tutorial

Installazione

Gestori di pacchetti

  • 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

Completamento shell

Per abilitare il completamento Bash, inserisci questo nel tuo .bashrc:

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

Per abilitare il completamento ZSH, inserisci questo nel tuo .zshrc:

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

Passo 1: Creare il template

  • Per generare una policy in base a risorse e livelli di accesso, inizia creando un template con questo comando in modo da poter semplicemente compilare gli ARN:
root@kitploit:~
policy_sentry create-template --output-file crud.yml --template-type crud
  • Genererà un file come questo:
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: Copia/incolla ARN

  • Copia e incolla gli ARN che vuoi includere nella tua policy. Puoi eliminare le righe che non usi, o semplicemente lasciarle 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

  • Poi esegui questo comando:
root@kitploit:~
policy_sentry write-policy --input-file crud.yml
  • Genererà questi risultati:
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"
            ]
        }
    ]
}

Nota come la policy sopra riconosce gli ARN forniti dall'utente, insieme al livello di accesso richiesto. Ad esempio, il SID SecretsmanagerTaggingSecret contiene azioni di Tagging assegnate solo al tipo di risorsa secret.

Questo accelera notevolmente il tempo per sviluppare policy IAM e garantisce che tutte le policy create limitino l'accesso esattamente a ciò di cui il tuo ruolo ha bisogno. In questo modo, gli sviluppatori devono solo determinare le risorse a cui devono accedere e noi astraiamo la complessità delle policy IAM dai loro processi di sviluppo.

Cheat sheets

Cheat sheet per la scrittura delle policy

root@kitploit:~
# Create templates first!!! This way you can just paste the values you need rather than remembering the YAML format
# CRUD mode
policy_sentry create-template --output-file tmp.yml --template-type crud
# Actions mode
policy_sentry create-template --output-file tmp.yml --template-type actions

# Write policy based on resource-specific access levels
policy_sentry write-policy --input-file examples/yml/crud.yml

# Write policy based on a list of actions
policy_sentry write-policy --input-file examples/yml/actions.yml

Cheat sheet per interrogare il database IAM

root@kitploit:~

###############
# Actions Table
###############
# NOTE: Use --fmt yaml or --fmt json to change the output format. Defaults to json for querying

# Get a list of actions that do not support resource constraints
policy_sentry query action-table --service s3 --resource-type "*" --fmt yaml

# Get a list of actions at the "Write" level in S3 that do not support resource constraints
policy_sentry query action-table --service s3 --access-level write --resource-type "*" --fmt yaml

# Get a list of all IAM actions across ALL services that have "Permissions management" access
policy_sentry query action-table --service all --access-level permissions-management

# Get a list of all IAM Actions available to the RAM service
policy_sentry query action-table --service ram

# Get details about the `ram:TagResource` IAM Action
policy_sentry query action-table --service ram --name tagresource

# Get a list of all IAM actions under the RAM service that have the Permissions management access level.
policy_sentry query action-table --service ram --access-level permissions-management

# Get a list of all IAM actions under the SES service that support the `ses:FeedbackAddress` condition key.
policy_sentry query action-table --service ses --condition ses:FeedbackAddress

###########
# ARN Table
###########

# Get a list of all RAW ARN formats available through the SSM service.
policy_sentry query arn-table --service ssm

# Get the raw ARN format for the `cloud9` ARN with the short name `environment`
policy_sentry query arn-table --service cloud9 --name environment

# Get key/value pairs of all RAW ARN formats plus their short names
policy_sentry query arn-table --service cloud9 --list-arn-types

######################
# Condition Keys Table
######################

# Get a list of all condition keys available to the Cloud9 service
policy_sentry query condition-table --service cloud9

# Get details on the condition key titled `cloud9:Permissions`
policy_sentry query condition-table --service cloud9 --name cloud9:Permissions

Inizializzazione locale (opzionale)

root@kitploit:~
# Initialize the policy_sentry config folder and create the IAM database tables.
policy_sentry initialize

# Fetch the most recent version of the AWS documentation so you can experiment with new services.
policy_sentry initialize --fetch

# Override the Access Levels by specifying your own Access Levels (example:, correcting Permissions management levels)
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

Altri usi

Comandi

  • create-template: Crea i modelli di file YML da utilizzare nei tipi di comando write-policy.

  • write-policy: Sfrutta un file YAML per scrivere policy per te

    • Opzione 1: Specifica i livelli CRUD (Read, Write, List, Tagging o Permissions management) e l'ARN della risorsa. Scriverà la policy per te. Vedi la documentazione
    • Opzione 2: Specifica un elenco di azioni. Scriverà la policy IAM per te, ma dovrai compilare gli ARN. Vedi la documentazione.
  • query: Interroga le tabelle del database IAM. Può aiutare durante la compilazione dei template di Policy Sentry, o semplicemente per interrogare il database per conoscenza rapida.

    • Opzione 1: Interroga la tabella delle azioni (action-table)
    • Opzione 2: Interroga la tabella degli ARN (arn-table)
    • Opzione 3: Interroga la tabella delle condizioni (condition-table)
  • initialize: (Opzionale). Crea un database SQLite che contiene tutti i servizi disponibili attraverso la documentazione su Azioni, Risorse e Condizioni. Vedi la .

Utilizzo della libreria Python

Se stai sviluppando il tuo codice Python e vuoi importare Policy Sentry come pacchetto di terze parti, puoi saltare l'inizializzazione e sfruttare il file di database locale incluso nel pacchetto Python stesso.

Questo è particolarmente utile per gli sviluppatori che desiderano sfruttare le funzionalità di Policy Sentry che richiedono l'uso del database IAM (come interrogare la tabella del database IAM). In questo modo, non devi inizializzare il database e puoi interrogarlo immediatamente.

L'esempio di codice si trova qui. È mostrato anche qui sotto.

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


def example():
    actions = get_actions_for_service('cloud9')  # Then you can leverage any method that requires access to the database.
    for action in actions:
        print(action)

if __name__ == '__main__':
    example()

I risultati appariranno come:

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 preferisci usare Docker invece di installare lo script con Python, lo supportiamo anche. Dalla radice del repository, usa questo per creare l'immagine docker:

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

Usa questo per eseguire alcuni comandi di base:

root@kitploit:~
# Basic commands with no arguments
docker run -i --rm kmcquade/policy_sentry:latest "--help"
docker run -i --rm kmcquade/policy_sentry:latest "query"

# Query the database
docker run -i --rm kmcquade/policy_sentry:latest "query action-table --service all --access-level permissions-management"

Il comando write-policy supporta anche il passaggio della configurazione YML tramite STDIN. Se usi il metodo Docker, provalo qui:

root@kitploit:~
# Write policies by passing in the config 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

Il modulo Terraform è pubblicato e mantenuto qui.

Riferimenti

  • Il processo di scraping della documentazione è stato ispirato e preso in prestito da uno script ansible hacking simile.
  • Policy basate su identità vs. Policy basate su risorse
  • Azioni, Risorse e Condizioni per i Servizi AWS
Scarica lo strumento
AzioniLivello di AccessoTipi di Risorsa
ssm:GetParameterReadparameter
ssm:DescribeParametersListparameter
ssm:PutParameterWriteparameter
secretsmanager:PutResourcePolicyPermissions managementsecret
secretsmanager:TagResourceTaggingsecret
documentazione