Bloquee el acceso público a Amazon RDS mediante Cloud Custodian - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Bloquee el acceso público a Amazon RDS mediante Cloud Custodian

Creado por abhay kumar (AWS) y Dwarika Patra () AWS

Entorno: producción

Tecnologías: bases de datos, seguridad, identidad, conformidad

Carga de trabajo: todas las demás cargas de trabajo; código abierto

AWSservicios: Amazon RDS

Resumen

Muchas organizaciones ejecutan sus cargas de trabajo y servicios en múltiples proveedores de nube. En estos entornos de nube híbrida, la infraestructura de nube necesita un gobierno estricto, además de la seguridad proporcionada por los proveedores de nube individuales. Una base de datos en la nube como Amazon Relational Database Service (RDSAmazon) es un servicio importante que debe supervisarse para detectar cualquier vulnerabilidad de acceso y permiso. Si bien puede restringir el acceso a la RDS base de datos de Amazon configurando un grupo de seguridad, puede añadir una segunda capa de protección para prohibir acciones como el acceso público. Garantizar que el acceso público esté bloqueado le ayudará a cumplir con el Reglamento General de Protección de Datos (GDPR), la Ley de Portabilidad y Responsabilidad de los Seguros de Salud (HIPAA), el Instituto Nacional de Estándares y Tecnología (NIST) y el Estándar de Seguridad de Datos de la Industria de Tarjetas de Pago (PCIDSS).

Cloud Custodian es un motor de reglas de código abierto que puedes utilizar para hacer cumplir las restricciones de acceso a los recursos de Amazon Web Services (AWS), como Amazon. RDS Cloud Custodian le permite establecer reglas que validen el entorno según los estándares de seguridad y conformidad definidos. Puede usar Cloud Custodian para administrar sus entornos de nube y así garantizar el cumplimiento de las políticas de seguridad, las políticas de etiquetado, la recopilación de elementos no utilizados y la administración de costos. Con Cloud Custodian puede usar una única interfaz para implementar la gobernanza en su entorno de nube híbrida. Por ejemplo, puede usar la interfaz Cloud Custodian para interactuar con Microsoft Azure AWS y reducir así el esfuerzo de trabajar con mecanismos como AWS Config, grupos de AWS seguridad y políticas de Azure.

Este patrón proporciona instrucciones para usar Cloud Custodian AWS para imponer la restricción de la accesibilidad pública en las RDS instancias de Amazon.

Requisitos previos y limitaciones

Requisitos previos 

Arquitectura

Pila de tecnología de destino

  • Amazon RDS

  • AWS CloudTrail

  • AWSLambda

  • Cloud Custodian

Arquitectura de destino

En el siguiente diagrama, se muestra a Cloud Custodian implementando la política en Lambda AWS CloudTrail , iniciando CreateDBInstance el evento y PubliclyAccessible configurando la función Lambda en false en Amazon. RDS

Uso de Cloud Custodian AWS para restringir el acceso público a las RDS instancias de Amazon.

Herramientas

AWSservicios

  • AWS CloudTraille ayuda a auditar la gobernanza, el cumplimiento y el riesgo operativo de su AWS cuenta.

  • AWSLa interfaz de línea de comandos (AWSCLI) es una herramienta de código abierto que le ayuda a interactuar con AWS los servicios mediante comandos en su consola de línea de comandos.

  • AWSIdentity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.

  • AWSLambda es un servicio informático que le ayuda a ejecutar código sin necesidad de aprovisionar o administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • Amazon Relational Database Service (RDSAmazon) le ayuda a configurar, operar y escalar una base de datos relacional en AWS la nube.

Otras herramientas

  • Cloud Custodian unifica las herramientas y scripts que emplean muchas organizaciones para administrar sus cuentas de nube pública en una sola herramienta de código abierto. Emplea un motor de reglas sin estado para la definición y aplicación de las políticas con métricas, resultados estructurados e informes detallados de la infraestructura de la nube. Se integra perfectamente con tiempos de ejecución sin servidor para proporcionar soluciones y respuestas en tiempo real con una baja sobrecarga operativa.

Epics

TareaDescripciónHabilidades requeridas

Instalar AWSCLI.

Para instalarlo AWSCLI, siga las instrucciones de la AWSdocumentación.

AWSadministrador

Configure AWS las credenciales.

Configure los ajustes con AWS CLI los que AWS interactuarán, incluidos la AWS región y el formato de salida que desee utilizar.

$>aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: <your_secret_access_key> Default region name [None]: Default output format [None]:

Para obtener más información, consulte la AWSdocumentación.

AWSadministrador

Crea un IAM rol.

Para crear un IAM rol con el rol de ejecución de Lambda, ejecute el siguiente comando.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}
AWS DevOps
TareaDescripciónHabilidades requeridas

Instale Cloud Custodian.

Para instalar Cloud Custodian en su sistema operativo y entorno, siga las instrucciones de la documentación de Cloud Custodian.

DevOps ingeniero

Consulte el esquema de Cloud Custodian.

Para ver la lista completa de RDS los recursos de Amazon contra los que puedes ejecutar políticas, usa el siguiente comando.

custodian schema aws.rds
DevOps ingeniero

Cree la política de Cloud Custodian.

Guarda el código que se encuentra en el archivo de políticas de Cloud Custodian en la sección de información adicional con una YAML extensión.

DevOps ingeniero

Defina las acciones de Cloud Custodian para cambiar el indicador de acceso público.

  1. Localice el código de Custodian (por ejemplo, /Users/abcd/custodian/lib/python3.9/site-packages/c7n/resources/rds.py).

  2. Localice la clase RDSSetPublicAvailability en rds.py y modifíquela introduciendo el código que se encuentra en el archivo rds.py de recursos de c7n, en la sección de Información adicional.

DevOps ingeniero

Ejecute una prueba.

(Opcional) Para comprobar qué recursos identifica la política sin ejecutar ninguna acción en ellos, emplee el siguiente comando.

custodian run -dryrun <policy_name>.yaml -s <output_directory>
DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implemente la política mediante Lambda.

Para crear la función de Lambda que ejecutará la política, introduzca el siguiente comando.

custodian run -s policy.yaml

Luego, el AWS CloudTrail CreateDBInstance evento iniciará esta política.

Como resultado, AWS Lambda establecerá el indicador de acceso público en false para las instancias que coincidan con los criterios.

DevOps ingeniero

Recursos relacionados

Información adicional

Archivo de políticas YAML de Cloud Custodian

policies: - name: "block-public-access" resource: rds description: | This Enforcement blocks public access for RDS instances. mode: type: cloudtrail events: - event: CreateDBInstance # Create RDS instance cloudtrail event source: rds.amazonaws.com ids: requestParameters.dBInstanceIdentifier role: arn:aws:iam::1234567890:role/Custodian-compliance-role filters: - type: event key: 'detail.requestParameters.publiclyAccessible' value: true actions: - type: set-public-access state: false

Archivo rds.py de recursos de c7n

@actions.register('set-public-access') class RDSSetPublicAvailability(BaseAction): schema = type_schema( "set-public-access", state={'type': 'boolean'}) permissions = ('rds:ModifyDBInstance',) def set_accessibility(self, r): client = local_session(self.manager.session_factory).client('rds') waiter = client.get_waiter('db_instance_available') waiter.wait(DBInstanceIdentifier=r['DBInstanceIdentifier']) client.modify_db_instance( DBInstanceIdentifier=r['DBInstanceIdentifier'], PubliclyAccessible=self.data.get('state', False)) def process(self, rds): with self.executor_factory(max_workers=2) as w: futures = {w.submit(self.set_accessibility, r): r for r in rds} for f in as_completed(futures): if f.exception(): self.log.error( "Exception setting public access on %s \n %s", futures[f]['DBInstanceIdentifier'], f.exception()) return rds

Integración de Security Hub

Cloud Custodian se puede integrar con AWSSecurity Hub para enviar las conclusiones de seguridad e intentar tomar medidas correctivas. Para obtener más información, consulte Anuncio de la integración de Cloud Custodian con AWS Security Hub.