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
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 |
- AWS Foundational Security Best Practices standard
- Amazon Simple Storage Service (Amazon S3) Block Public Access
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)?
- ¿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
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"
Eliminar los recursos
aws s3 rb s3://$bucket_name --force
- 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
{
"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
ssl_only_bucket_name="s3bucket-ssl-requests-only-"$account_id
aws s3 mb s3://$ssl_only_bucket_name
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": "*"
}
]
}
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
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/
Service Control Policy (SCP)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"access-analyzer:DeleteAnalyzer",
"ec2:DisableEbsEncryptionByDefault",
"s3:PutAccountPublicAccessBlock"
],
"Resource": [
"*"
]
}
]
}