Skip to content

Instantly share code, notes, and snippets.

@gabanox
Created March 10, 2022 16:03
Show Gist options
  • Save gabanox/e241799119c5afc3d329267cb4bde320 to your computer and use it in GitHub Desktop.
Save gabanox/e241799119c5afc3d329267cb4bde320 to your computer and use it in GitHub Desktop.
webinar-seguridad-amazon-s3

Webinar Protegiendo tus datos con Amazon S3

Estándar de prácticas recomendadas de seguridad fundamental en AWS

El estándar AWS Foundational Security Best Practices es un conjunto de controles que detectan cuando sus cuentas y recursos implementados se desvían de las prácticas recomendadas de seguridad. Proporciona orientación práctica y prescriptiva sobre cómo mejorar y mantener la postura de seguridad de su organización. Conozca más en el siguiente link AWS Security Hub Best Practices

Agenda

Control Detectivo Descripción
[S3.1] La configuración Bloquear acceso público debe estar habilitada
[S3.2] Los buckets de S3 deben prohibir el acceso público de lectura
[S3.3] Los buckets de S3 deben prohibir el acceso público de escritura
[S3.4] Los buckets S3 deben tener habilitado el cifrado del lado del servidor
[S3.5] Los buckets de S3 deben requerir solicitudes para usar la capa de conexión segura (TLS)
[S3.6] Se deben restringir los permisos de Amazon S3 otorgados a otras cuentas de AWS en las políticas de bucket
[S3.8] La configuración de S3 Block Public Access debe estar habilitada en el nivel del bucket
[S3.9] El registro de acceso al servidor del depósito S3 debe estar habilitado

Recursos

[S3.1]

La configuración Bloquear acceso público debe estar habilitada

Contexto:

Amazon S3 siempre ha permitido a los clientes proteger los datos, pero con la adición de esta nueva característica ahora pueden garantizar que sus datos no se hagan públicos por error. Con S3 Block Public Access los clientes pueden gestionar la configuración del acceso público a nivel de cuenta o de cubo, aplicando el bloqueo de todo el acceso público por defecto. La función evitará automáticamente la exposición de los recursos de Amazon S3 y les notificará cuando su configuración pueda causar una exposición inadvertida en el futuro.

Control detectivo y correctivo

  • AWS Config Rules

html#access-control-block-public-access-policy-status)?

  1. ¿Cómo configurar el nivel de bucket de S3 Block Public Access?

Vamos a crear un bucket con permisos públicos. (acceso anónimo)

¿Qué es acceso público.

account_id=$(aws sts get-caller-identity --query 'Account' --output text)
bucket_name="public-bucket-"$account_id
aws s3 mb s3://$bucket_name

Consultar el bucket creado desde la consola de AWS.

aws s3api get-bucket-acl --bucket $bucket_name
wget https://unsplash.com/photos/gGC63oug3iY
aws s3 cp gGC63oug3iY s3://$bucket_name/ --acl public-read
aws s3api get-object-acl --bucket $bucket_name --key gGC63oug3iY

[S3.2]

Los buckets de S3 deben prohibir el acceso público de lectura

Restringir el acceso público

aws s3api put-public-access-block \
    --bucket $bucket_name \
    --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"

Habilitar el acceso público

--public-access-block-configuration "BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"

[S3.3]

Los buckets de S3 deben prohibir el acceso público de escritura

Eliminar los recursos

aws s3 rb s3://$bucket_name --force
  1. Cómo configurar el nivel de cuenta de S3 Block Public Access?
aws s3control put-public-access-block --account-id $account_id --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"

Habilitar una regla en AWS Config s3-account-level-public-access-blocks-periodic

Creación del rol de automatización

[S3.4]

Los buckets S3 deben tener habilitado el cifrado del lado del servidor

Requerir cifrado de datos en reposo

{
    "Version": "2012-10-17",
    "Id": "ExamplePolicy",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::s3-bucket-ssl-requests-only-681707848755/*",
            "Condition": {
                "StringNotEqualsIfExists": {
                    "s3:x-amz-server-side-encryption": "AES256"
                }
            }
        }
    ]
}

Carga sin SSE

aws s3 cp gGC63oug3iY s3://s3-bucket-ssl-requests-only-681707848755

Carga con AES256

aws s3 cp gGC63oug3iY s3://s3-bucket-ssl-requests-only-681707848755 --sse AES256

[S3.5]

Los buckets de S3 deben requerir solicitudes para usar la capa de conexión segura (TLS)

ssl_only_bucket_name="s3bucket-ssl-requests-only-"$account_id
aws s3 mb s3://$ssl_only_bucket_name

Reforzar encripción de datos en tránsito

Adjuntar la política de bucket

{
  "Id": "ExamplePolicy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowSSLRequestsOnly",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::s3-bucket-ssl-requests-only-681707848755",
        "arn:aws:s3:::s3-bucket-ssl-requests-only-681707848755/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      },
      "Principal": "*"
    }
  ]
}

revisar

aws s3api put-bucket-encryption --bucket $ssl_only_bucket_name --server-side-encryption-configuration '{
    "Rules": [
        {
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            }
        }
    ]
}'

aws s3 cp gGC63oug3iY

aws s3api put-bucket-acl --bucket $ssl_only_bucket_name --grant-write uri=http://acs.amazonaws.com/groups/global/AllUsers

[S3.6]

Se deben restringir los permisos de Amazon S3 otorgados a otras cuentas de AWS en las políticas de bucket

https://aws.amazon.com/es/premiumsupport/knowledge-center/s3-instance-access-bucket/

[S3.8]

La configuración de S3 Block Public Access debe estar habilitada en el nivel del bucket

Service Control Policy (SCP)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "access-analyzer:DeleteAnalyzer",
        "ec2:DisableEbsEncryptionByDefault",
        "s3:PutAccountPublicAccessBlock"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

[S3.9]

El registro de acceso al servidor del bucket S3 debe estar habilitado

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment