Blog de Amazon Web Services (AWS)
Uso de AWS Config para la autorremediación contra el acceso público al bucket de Amazon S3
Por Wembley Carvalho, Enterprise Solutions Architect AWS
La visualización de contenido público en Internet, en su mayor parte, es intencionada e intencionada. Los sitios y los blogs, por ejemplo, deben estar abiertos al público que quiera acceder a ellos. En este escenario, es muy común incluso que el público contenga usuarios anónimos de Internet; sin embargo, en algunos casos, nadie debe acceder a este tipo de contenido sin autorización o permiso. Para ello, las políticas de acceso al contenido deben estar muy bien estructuradas, restringiendo el acceso desconocido.
El propósito de este blog es crear una corrección automática contra la configuración de bucket que pueda hacer pública la información en Amazon S3. Para ello, utilicemos algunas herramientas directa e indirectamente para supervisar y corregir las políticas a nivel de bucket, como AWS Config, AWS IAM y AWS Systems Manager.
Amazon Simple Storage Service, o Amazon S3, es un servicio de almacenamiento de objetos y tiene configuración nativa para bloquear el acceso público y se puede configurar a nivel de cuenta de AWS o de bucket, por lo que los objetos nunca tienen acceso público, ahora o en el futuro.
Sin embargo, incluso con estos controles, se recomienda crear medidas de protección para situaciones en las que estas políticas se cambian o eliminan, intencionalmente o no. La autorremediación restablecerá la política y dejará protegido el contenido.
AWS Config es un servicio que le permite acceder, auditar y evaluar la configuración de los recursos de AWS. Con la función Conformance Packs, puede administrar el cumplimiento de las configuraciones de recursos de AWS y
AWS CloudFormation es una herramienta para automatizar y aprovisionar la infraestructura como código. Al final de esta entrada de blog, pondré a disposición la plantilla para automatizar la implementación de esta solución.
Activación de AWS Config
Paso 1: Acceda al servicio AWS Config y habilitarlo si aún no lo ha hecho. Para ello, vaya a la consola de AWS y, a continuación, al servicio AWS Config.
Paso 2: Si AWS Config no está configurado, haga clic en el botón «Configuración con 1 clic», vaya a la pantalla de revisión y confirme la configuración inicial del servicio.
Paso 3: Tras esta primera configuración de AWS Config, la pantalla de inicio del servicio será la siguiente:
Paso 4: Haz clic en «Ver panel» para acceder al estado del servicio y a los elementos analizados de tu cuenta.
Configuración de reglas de AWS Config
Paso 1: La primera acción consiste en agregar una regla administrada de AWS existente a la consola de AWS Config para verificar que se pueda acceder públicamente a los depósitos de Amazon S3. Para ello, acceda al menú Reglas de AWS Config.
Paso 2: Haga clic en Agregar regla para agregar una regla administrada por AWS. Para este análisis de cumplimiento, utilizaremos la regla administrada llamada s3-bucket-level-public-access-prohibidos.
Paso 2: En este paso, tendremos que introducir el nombre y la descripción que le daremos a la regla; o podemos dejarlo con la información predeterminada.
Paso 3: En este otro paso, se debe mantener la configuración de la sección Desencadenador (desencadenador). En la configuración de la sección Parameter s, podemos informar opcionalmente el parámetro ExcludedPublicBuckets a AWS Config, que utilizará esta información para definir qué depósitos (separados por comas) pueden ser públicos y permanecerán fuera de esa regla de cumplimiento.
Paso 4: Revise y cree la regla de configuración de AWS.
Paso 5: Una vez creada la regla, en la lista de reglas creadas en AWS Config, ahora puede ver la regla creada y también si ya existen depósitos no conformes (incumplimiento).
Creación del rol de IAM
AWS Config utilizará AWS Systems Manager para realizar correcciones en Amazon S3. Por lo tanto, después de crear la regla de verificación de bucket público en S3, tendremos que crear un rol de IAM con permisos para la corrección. Para ello, sigamos los siguientes pasos.
Paso 1: Acceda al servicio AWS IAM desde la consola de AWS.
Después de eso, selecciona Funciones en el menú lateral izquierdo y haz clic en el botón de desplazamiento Crear. Se le redirigirá a la pantalla de creación de roles. Elija la opción AWS Service y, en la lista que aparece, seleccione el servicio Systems Manager como entidad de confianza. (En la opción «Seleccione su caso de uso», vuelva a elegir solo Systems Manager.)
Paso 2: En el siguiente paso, debe seleccionar una política existente o crearla. Haga clic en Crear política y, a continuación, seleccione la opción JSON para abrir el editor de texto de políticas. Utilice como plantilla la siguiente política que se muestra a continuación y haga clic en Siguiente:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:GetBucketPublicAccessBlock",
"s3:PutBucketPublicAccessBlock"
],
"Resource": "*"
}
]
}
Paso 3: La configuración de etiquetas para ayudar a identificar la función es opcional. Haz clic en Siguiente.
Paso 4: Asigne un nombre y una descripción a su política y, a continuación, haga clic en Crear política.
Paso 5: Después de crear la política, vuelva a la pantalla Creación de roles y haga clic en el botón para actualizar la lista de políticas.
Paso 6: Una vez actualizado, busque y seleccione la política creada en los pasos anteriores.
Paso 7: La configuración de etiquetas para ayudar a identificar la función es opcional. En este caso, la etiqueta se refiere a Role. En el anterior, estaba relacionado con la política. Haz clic en Siguiente.
Paso 8: Asigne un nombre y una descripción al rol y, a continuación, haga clic en Crear rol.
Paso 9: Una vez creado el rol, la pantalla . Busque y haga clic en su rol respectivo. En la parte Resumen, copie ARN de rol en el espacio de trabajo.
Creación de remediación
Con la regla de configuración de AWS y el rol de IAM creados, vamos a configurar la corrección.
Paso 1: Para crear la corrección, vuelva a AWS Config, vaya a la lista Reglas, seleccione la regla con el nombre s3-bucket-level-public-access-prohibidos, haga clic en Acciones y Gestione las correcciones.
Paso 2: En Acción de corrección, en el submenú Seleccionar método de corrección, debe elegir si la corrección será automática* o manual.
*Nota: En un entorno productivo, se recomienda configurar la primera ejecución manualmente y asistida para que no haya cambios de configuración en los Buckets que deban ser públicos y que aún no estén en la lista de excepciones
Paso 3: En el submenú Detalles de la Acción de remediación, seleccione la corrección del bloque de acceso público de AWS ConfigreMediation-configure3BucketPublicAccessBlock
Paso 4: El submenú Límites de velocidad se utiliza para configurar cuántas correcciones llevará a cabo Systems Manager simultáneamente. En este caso podemos mantener los parámetros estándar de:
2 Tasa de ejecución simultánea
5 Tasa de errores
Paso 5: En el submenú Parámetro de ID de recurso, seleccionaremos el parámetro BucketName
Paso 6: En el submenú Parámetros agregaremos en el parámetro AutomationAssumeRole el ARN de rol copiado en el paso 9 de la creación del rol de IAM. Después de todo esto, haz clic en Guardar cambios.
Probando la solución.
Una vez creada la corrección, podemos esperar a que la próxima revisión o solicitar que se vuelva a evaluar instantáneamente el cumplimiento del bucket.
O bien, solo podemos seleccionar el que queremos realizar la corrección manualmente y hacer clic en Corregir.
Después de esto, puede validar el éxito de la corrección accediendo al Bucket, establecido en No conforme y validar si la configuración Bloquear acceso público está activa y como Bloquear todo.
Después de unos minutos, la Regla de configuración de AWS volverá al estado Cumplimiento una vez que la Política de acceso público corrija y bloquee todos los depósitos.
Automatización de la creación de correcciones mediante AWS CloudFormation
Otra forma de crear esta automatización es a través de AWS CloudFormation. Para ello, tenemos dos pasos:
Paso 1: Habilite AWS Config (si lo necesita)
Si el servicio AWS Config aún no está habilitado en la cuenta de AWS, utilice esta plantilla de AWS CloudFormation para habilitar AWS Config.
La consola de AWS se abrirá con los parámetros configurados, con solo tener que seleccionar la casilla «Reconozco que AWS CloudFormation podría crear recursos de IAM» y hacer clic en Crear pila.
Paso 2: Configurar AWS Config
Una vez habilitado el servicio AWS Config en la cuenta, podemos crear la regla para verificar los depósitos de S3 y crear correcciones. Para ello, necesitamos ejecutar la plantilla AWS CloudFormation que aparece a continuación para realizar toda la configuración de AWS Config, como crear permisos en AWS IAM y volver a medir.
Guarde esta plantilla en un archivo de texto, con la extensión.yml, y cree una pila de AWS CloudFormation a partir de ella.
AWSTemplateFormatVersion: 2010-09-09
Description: Checks if Amazon Simple Storage Service (Amazon S3) buckets are publicly accessible. This rule is NON_COMPLIANT if an Amazon S3 bucket is not listed in the excludedPublicBuckets parameter and bucket level settings are public.
Resources:
S3PublicAccessRule:
Type: AWS::Config::ConfigRule
Properties:
Description: Checks if Amazon Simple Storage Service (Amazon S3) buckets are publicly accessible. This rule is NON_COMPLIANT if an Amazon S3 bucket is not listed in the excludedPublicBuckets parameter and bucket level settings are public.
Source:
Owner: AWS
SourceIdentifier: S3_BUCKET_LEVEL_PUBLIC_ACCESS_PROHIBITED
RemediationConfig:
Type: AWS::Config::RemediationConfiguration
Properties:
Automatic: False
ConfigRuleName:
Ref: "S3PublicAccessRule"
Parameters:
AutomationAssumeRole:
StaticValue:
Values:
- Fn::GetAtt:
- "AutoRemediationIamRole"
- "Arn"
BucketName:
ResourceValue:
Value: "RESOURCE_ID"
TargetId: "AWSConfigRemediation-ConfigureS3BucketPublicAccessBlock"
TargetType: "SSM_DOCUMENT"
TargetVersion: "1"
AutoRemediationIamRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Principal:
Service:
- "ssm.amazonaws.com"
Action:
- "sts:AssumeRole"
Policies: []
AutomationPassRolePolicy:
Type: "AWS::IAM::Policy"
Properties:
PolicyName: "s3GetPutPublicAccess"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: "Allow"
Action:
- "s3:GetBucketPublicAccessBlock"
- "s3:PutBucketPublicAccessBlock"
Resource: "*"
Roles:
- Ref: "AutoRemediationIamRole"
Deberá seleccionar la casilla «Reconozco que AWS CloudFormation podría crear recursos de IAM» y hacer clic en Crear pila, tal como hicimos en el paso anterior.
En este caso, el script está configurado para que la corrección se ejecute manualmente, para evitar problemas de bloqueo incorrecto de los buckets. Sin embargo, esta ejecución manual se puede cambiar a automática en la consola de AWS Config.
Conclusión
Con algunas herramientas, como AWS Config, AWS IAM y AWS Systems Manager, podemos crear soluciones automáticas contra configuraciones de bucket público, que pueden exponer información en Internet de Amazon S3. El objetivo es evitar que los ajustes incorrectos, realizados accidentalmente o no, permitan el acceso público en depósitos a los que no se debe acceder de esta manera.
Sobre el autor
Wembley Carvalho
ha sido arquitecto de soluciones empresariales en AWS desde 2019, hoy en el equipo de AWS Telco LATAM. Trabajando en varias áreas de TI durante más de 20 años y certificado AWS desde 2016, se ha especializado en seguridad en la nube y transformación digital en los últimos años.