Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
policy_sentry — Genera políticas de IAM de AWS con el mínimo privilegio basadas en ARNs de recursos y niveles de acceso, automatizando la creación de políticas seguras para la infraestructura en la nube. | Kitploit
Herramientas/GitHubGitHub/salesforce/policy_sentry
Seguridad de Infraestructura en la NubeAuditoría de ConfiguraciónSeguridad en la NubeDevSecOpsGestión de Identidad y Acceso (IAM)
GitHubsalesforce/policy_sentry

policy_sentry

Genera políticas de IAM de AWS con el mínimo privilegio basadas en ARNs de recursos y niveles de acceso, automatizando la creación de políticas seguras para la infraestructura en la nube.

Ver Repositorio
2.2k1573hace 23 díasRevisado por Kitploit
Sitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Policy Sentry

Generador de políticas de mínimo privilegio para IAM.

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

  • Tutorial
    • Instalación
      • Gestores de paquetes
      • Completado de shell
    • Paso 1: Crear la plantilla
    • Paso 2: Copiar/pegar ARNs
    • Paso 3: Comando write-policy
  • Hojas de referencia
    • Hoja de referencia para escritura de políticas
    • Hoja de referencia para consultas a la base de datos IAM
    • Inicialización local (opcional)
  • Otros usos
    • Comandos
    • Uso como librería de Python
    • Docker
    • Terraform
  • Referencias

Documentación

Para guías y documentación completa, visite el proyecto en ReadTheDocs.

Consulte la publicación del blog de ingeniería de Salesforce sobre Policy Sentry.

Resumen

Redactar políticas IAM seguras a mano puede ser muy tedioso e ineficiente. Muchos desarrolladores de Infraestructura como Código han experimentado algo así:

  • Decidido a esforzarse al máximo para otorgar a usuarios y roles el mínimo privilegio necesario para realizar sus tareas, pasan demasiado tiempo revisando la documentación de AWS IAM sobre Acciones, Recursos y Claves de Condición para los Servicios de AWS.
  • El líder del equipo le anima a incorporar seguridad en sus políticas IAM para la calidad del producto, pero al final se frustra debido a los plazos del proyecto.
  • No tiene un especialista en seguridad integrado en su equipo que pueda redactar esas políticas IAM por usted, y no existe una herramienta automatizada que detecte mágicamente las llamadas a la API de AWS que realiza y luego las escriba con restricciones de ARN de recursos.
  • Después de fantasear con ese nivel de automatización, se da cuenta de que redactar políticas IAM de mínimo privilegio, prácticamente por caridad, pondrá en peligro su capacidad para terminar el código a tiempo y cumplir los plazos del proyecto.
  • Utiliza políticas administradas (porque, oye, ¿por qué no?) o mira los nombres de las llamadas a la API y usa comodines para poder seguir adelante con su vida.

Este proceso no es ideal ni para la seguridad ni para los desarrolladores de Infraestructura como Código. Necesitamos facilitar la redacción segura de políticas IAM y abstraer la complejidad de redactar políticas IAM de mínimo privilegio. Por eso creé esta herramienta.

Policy Sentry permite a los usuarios crear políticas IAM de mínimo privilegio en cuestión de segundos, en lugar de redactarlas tediosamente a mano. Estas políticas se delimitan según los niveles de acceso y los recursos. En caso de una violación de seguridad, esto ayuda a limitar el radio de explosión de las credenciales comprometidas, concediendo solo el acceso que las entidades IAM necesitan.

Antes de esta herramienta, podía llevar horas elaborar una política IAM con restricciones de ARN de recursos, pero ahora puede llevar cuestión de segundos. De esta forma, los desarrolladores solo tienen que determinar los recursos a los que necesitan acceder, y Policy Sentry abstrae la complejidad de las políticas IAM de sus procesos de desarrollo.

Redacción de políticas seguras basadas en restricciones de recursos y niveles de acceso

La característica estrella de Policy Sentry es que puede crear políticas IAM basadas en ARN de recursos y niveles de acceso. Nuestra funcionalidad CRUD adopta el enfoque opinado de que los desarrolladores de IAC no deberían tener que entender las complejidades de AWS IAM; nosotros deberíamos abstraer la complejidad por ellos. De hecho, los desarrolladores solo deberían poder decir...

  • "Necesito acceso de Lectura/Escritura/Listado a arn:aws:s3:::example-org-sbx-vmimport"
  • "Necesito acceso de Administración de permisos a arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret"
  • "Necesito acceso de Etiquetado a arn:aws:ssm:us-east-1:123456789012:parameter/test"

...y nuestra automatización debería crear políticas que correspondan a esos niveles de acceso.

¿Cómo logramos esto? Bueno, Policy Sentry aprovecha la documentación de AWS sobre Acciones, Recursos y Claves de Condición para buscar las acciones, niveles de acceso y tipos de recursos, y genera políticas según los ARN y niveles de acceso. Considere el fragmento de tabla a continuación:

AccionesNivel de accesoTipos de recurso
ssm:GetParameterLecturaparámetro
ssm:DescribeParametersListaparámetro
ssm:PutParameterEscrituraparámetro
secretsmanager:PutResourcePolicyAdministración de permisossecreto
secretsmanager:TagResourceEtiquetadosecreto

Policy Sentry agrega toda esa documentación en una única base de datos y utiliza esa base de datos para generar políticas según acciones, recursos y niveles de acceso.

Tutorial

Instalación

Gestores de paquetes

  • 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

Completado de shell

Para habilitar el completado de Bash, coloque esto en su .bashrc:

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

Para habilitar el completado de ZSH, coloque esto en su .zshrc:

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

Paso 1: Crear la plantilla

  • Para generar una política según recursos y niveles de acceso, comience por crear una plantilla con este comando para que solo tenga que rellenar los ARN:
root@kitploit:~
policy_sentry create-template --output-file crud.yml --template-type crud
  • Generará un archivo 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:
    - ''

Paso 2: Copiar/pegar ARNs

  • Copie y pegue los ARN que desee incluir en su política. Puede eliminar las líneas que no utilice o simplemente dejarlas ahí.
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'

Paso 3: Comando write-policy

  • Luego ejecute este comando:
root@kitploit:~
policy_sentry write-policy --input-file crud.yml
  • Generará estos 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 cómo la política anterior reconoce los ARN que el usuario proporciona, junto con el nivel de acceso solicitado. Por ejemplo, el SID SecretsmanagerTaggingSecret contiene solo acciones de Etiquetado asignadas al tipo de recurso secreto.

Esto acelera rápidamente el tiempo de desarrollo de políticas IAM y garantiza que todas las políticas creadas limiten el acceso exactamente a lo que su rol necesita. De esta manera, los desarrolladores solo tienen que determinar los recursos a los que necesitan acceder, y nosotros abstraemos la complejidad de las políticas IAM de sus procesos de desarrollo.

Hojas de referencia

Hoja de referencia para escritura de políticas

root@kitploit:~
# ¡¡¡Cree plantillas primero!!! De esta forma solo tiene que pegar los valores que necesita en lugar de recordar el formato YAML
# Modo CRUD
policy_sentry create-template --output-file tmp.yml --template-type crud
# Modo de acciones
policy_sentry create-template --output-file tmp.yml --template-type actions

# Escribir política basada en niveles de acceso específicos de recursos
policy_sentry write-policy --input-file examples/yml/crud.yml

# Escribir política basada en una lista de acciones
policy_sentry write-policy --input-file examples/yml/actions.yml

Hoja de referencia para consultas a la base de datos IAM

root@kitploit:~

###############
# Tabla de acciones
###############
# NOTA: Use --fmt yaml o --fmt json para cambiar el formato de salida. Por defecto es json para consultas

# Obtener una lista de acciones que no admiten restricciones de recursos
policy_sentry query action-table --service s3 --resource-type "*" --fmt yaml

# Obtener una lista de acciones de nivel "Escritura" en S3 que no admiten restricciones de recursos
policy_sentry query action-table --service s3 --access-level write --resource-type "*" --fmt yaml

# Obtener una lista de todas las acciones IAM en TODOS los servicios que tienen acceso de "Administración de permisos"
policy_sentry query action-table --service all --access-level permissions-management

# Obtener una lista de todas las acciones IAM disponibles para el servicio RAM
policy_sentry query action-table --service ram

# Obtener detalles sobre la acción IAM `ram:TagResource`
policy_sentry query action-table --service ram --name tagresource

# Obtener una lista de todas las acciones IAM bajo el servicio RAM que tienen el nivel de acceso "Administración de permisos"
policy_sentry query action-table --service ram --access-level permissions-management

# Obtener una lista de todas las acciones IAM bajo el servicio SES que admiten la clave de condición `ses:FeedbackAddress`
policy_sentry query action-table --service ses --condition ses:FeedbackAddress

###########
# Tabla de ARN
###########

# Obtener una lista de todos los formatos RAW de ARN disponibles a través del servicio SSM
policy_sentry query arn-table --service ssm

# Obtener el formato RAW de ARN para el ARN `cloud9` con el nombre corto `environment`
policy_sentry query arn-table --service cloud9 --name environment

# Obtener pares clave/valor de todos los formatos RAW de ARN más sus nombres cortos
policy_sentry query arn-table --service cloud9 --list-arn-types

######################
# Tabla de claves de condición
######################

# Obtener una lista de todas las claves de condición disponibles para el servicio Cloud9
policy_sentry query condition-table --service cloud9

# Obtener detalles sobre la clave de condición titulada `cloud9:Permissions`
policy_sentry query condition-table --service cloud9 --name cloud9:Permissions

Inicialización local (opcional)

root@kitploit:~
# Inicializar la carpeta de configuración de policy_sentry y crear las tablas de la base de datos IAM
policy_sentry initialize

# Obtener la versión más reciente de la documentación de AWS para experimentar con nuevos servicios
policy_sentry initialize --fetch

# Sobrescribir los niveles de acceso especificando sus propios niveles de acceso (ejemplo: corregir niveles de Administración de permisos)
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

Otros usos

Comandos

  • create-template: Crea las plantillas de archivos YML para usar en los tipos de comando write-policy.

  • write-policy: Utiliza un archivo YAML para escribir políticas por usted

    • Opción 1: Especificar niveles CRUD (Lectura, Escritura, Listado, Etiquetado o Administración de permisos) y el ARN del recurso. Lo escribirá por usted. Consulte la documentación
    • Opción 2: Especificar una lista de acciones. Escribirá la política IAM por usted, pero tendrá que completar los ARN. Consulte la documentación.
  • query: Consultar las tablas de la base de datos IAM. Esto puede ayudar al completar las plantillas de Policy Sentry, o simplemente consultar la base de datos para obtener conocimiento rápido.

    • Opción 1: Consultar la Tabla de Acciones (action-table)
    • Opción 2: Consultar la Tabla de ARN (arn-table)
    • Opción 3: Consultar la Tabla de Condiciones (condition-table)
  • initialize: (Opcional). Crear una base de datos SQLite que contenga todos los servicios disponibles a través de la documentación de Acciones, Recursos y Claves de Condición. Consulte la documentación.

Uso como librería de Python

Si está desarrollando su propio código Python y desea importar Policy Sentry como un paquete de terceros, puede omitir la inicialización y aprovechar el archivo de base de datos local que viene incluido con el paquete Python en sí.

Esto es especialmente útil para desarrolladores que deseen aprovechar las capacidades de Policy Sentry que requieren el uso de la base de datos IAM (como consultar la tabla de la base de datos IAM). De esta manera, no tiene que inicializar la base de datos y puede consultarla de inmediato.

El ejemplo de código se encuentra aquí. También se muestra a continuación.

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()

Los resultados se verán así:

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

Si prefiere usar Docker en lugar de instalar el script con Python, también lo admitimos. Desde la raíz del repositorio, use esto para construir la imagen Docker:

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

Use esto para ejecutar algunos comandos básicos:

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

# Consultar la base de datos
docker run -i --rm kmcquade/policy_sentry:latest "query action-table --service all --access-level permissions-management"

El comando write-policy también admite pasar la configuración YML a través de STDIN. Si está usando el método Docker, pruébelo aquí:

root@kitploit:~
# Escribir políticas pasando la configuración a través de 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

El módulo de Terraform está publicado y mantenido aquí.

Referencias

  • El proceso de extracción de documentos fue inspirado y tomado prestado de un script de hacking de ansible similar.
  • Políticas basadas en identidad vs. basadas en recursos
  • Acciones, Recursos y Claves de Condición para los Servicios de AWS
Descargar herramienta