Descripción del problema
El almacenamiento de objetos en los buckets públicos de AWS S3 podría poner en peligro la seguridad de los datos de su empresa. De forma predeterminada, no se concede acceso público a los nuevos buckets y objetos de AWS. Sin embargo, en la mayoría de los casos, los miembros de su equipo de ingeniería crean los buckets públicos ocasionalmente o el motivo radica en la falta de conocimientos y experiencia para configurar los buckets de AWS correctamente. Por lo tanto, sus datos críticos pueden volverse accesibles para cualquier persona. provisto de El enlace. La mejor manera de prevenir estos casos inseguros es evitar los contenedores públicos, excepto en casos especiales, cuando realmente sea necesario.
Sin embargo, es una tarea complicada configurar un control centralizado en los buckets con configuraciones de acceso público. La consola de AWS ofrece a los usuarios la oportunidad de identificar estos buckets mediante filtros, pero tenemos grandes dudas de que sus ingenieros ejecuten este procedimiento a diario para evitar buckets públicos inesperados.
La falta de un sistema de notificación dificulta mantener bajo control el ciclo de vida del depósito público.
Nuestras recomendaciones le ayudarán a administrar el acceso público a los recursos de Amazon S3 de forma adecuada y garantizar que todos los depósitos y objetos necesarios tengan su acceso público bloqueado.
Cómo generar una lista de nombres de depósitos que tenga acceso público de una manera sencilla
Recomendación:
Encuentre todos los depósitos con acceso público mediante la CLI de AWS. No es necesario instalar la CLI de AWS en su sistema. Puede usar la CLI de AWS directamente desde la consola de AWS. A continuación, se incluye una instrucción: https://aws.amazon.com/cloudshell/
Un depósito podría marcarse como público en dos casos:
- Tiene política pública configurada.
- Tiene acls públicas configuradas.
Al mismo tiempo, el acceso público no debe estar bloqueado por un bloqueo de acceso público, de lo contrario, el depósito no es público.
Optimización gratuita de los costos de la nube. De por vida
1. Caso de política pública
1.1 Enumere todos los depósitos del usuario y muestre el nombre como texto
aws s3api list-buckets --query 'Buckets[*].[Nombre]' --texto de salida
Puede encontrar más información aquí: https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-buckets.html
1.2 Verificar el estado de la política de depósito
aws s3api get-bucket-policy-status --bucket "$bucket" --query 'PolicyStatus.IsPublic' --texto de salida
Puede encontrar más información aquí:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-policy-status.html
1.3 Compruebe que el acceso público no esté bloqueado por la configuración de bloqueo de acceso público
aws s3api get-public-access-block --bucket "$bucket" --consulta 'PublicAccessBlockConfiguration.BlockPublicPolicy' --texto de salida
Puede encontrar más información aquí:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-public-access-block.html
Como resultado, una línea de comando:
para el depósito en $(aws s3api list-buckets --query 'Buckets[*].[Nombre]' --texto de salida);hacer si [[ $(aws s3api get-bucket-policy-status --bucket "$bucket" --query 'PolicyStatus.IsPublic' --texto de salida 2>/dev/null) == Verdadero ]] && [[ $(aws s3api get-public-access-block --bucket "$bucket" --query 'PublicAccessBlockConfiguration.BlockPublicPolicy' --texto de salida 2>/dev/null) == Falso ]]; entonces echo "$bucket"; hecho; hecho
2. Caso de ACL públicas
2.1 Enumere todos los depósitos del usuario y muestre el nombre como texto
Véase el punto 1.1.
2.2 Verificar las ACL del depósito que contienen los permisos AllUsers
aws s3api get-bucket-acl --bucket "$bucket" --query 'Grants[?Grantee.URI==`http://acs.amazonaws.com/groups/global/AllUsers`]' --texto de salida
Puede encontrar más información aquí:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-acl.html
2.3 Compruebe que las ACL públicas no estén bloqueadas por la configuración del bloqueo de acceso público
aws s3api get-public-access-block --bucket "$bucket" --consulta 'PublicAccessBlockConfiguration.BlockPublicAcls' --texto de salida
Puede encontrar más información aquí:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-public-access-block.html
Como resultado, una línea de comando:
para el depósito en $(aws s3api list-buckets --query 'Buckets[*].[Nombre]' --texto de salida);hacer si [[ $(aws s3api get-bucket-acl --bucket "$bucket" --query 'Grants[?Grantee.URI==`http://acs.amazonaws.com/groups/global/AllUsers`]' --texto de salida 2> /dev/null) ]] && [[ $(aws s3api get-public-access-block --bucket "$bucket" --query 'PublicAccessBlockConfiguration.BlockPublicAcls' --texto de salida 2>/dev/null) != True ]]; entonces echo "$bucket"; hecho; hecho
Resultado
Ambos casos en una línea:
para el depósito en $(aws s3api list-buckets --query 'Buckets[*].[Nombre]' --texto de salida); hacer si [[ $(aws s3api get-bucket-acl --bucket "$bucket" --query 'Grants[?Grantee.URI==`http://acs.amazonaws.com/groups/global/AllUsers`]' --texto de salida 2> /dev/null) ]] && [[ $(aws s3api get-public-access-block --bucket "$bucket" --query 'PublicAccessBlockConfiguration.BlockPublicAcls' --texto de salida 2>/dev/null) != True ]]; entonces hacer eco de "$bucket"; elif [[ $(aws s3api get-bucket-policy-status --bucket "$bucket" --query 'PolicyStatus.IsPublic' --texto de salida 2>/dev/null) == Verdadero ]] && [[ $(aws s3api get-public-access-block --bucket "$bucket" --query 'PublicAccessBlockConfiguration.BlockPublicPolicy' --texto de salida 2>/dev/null) == Falso ]]; entonces echo "$bucket"; hecho; hecho
Este comando generará una lista de nombres de depósitos que tienen acceso público.
👆🏻 El equipo de ingeniería suele crear decenas de instantáneas de volúmenes de AWS a diario. Sin embargo, pueden surgir algunos problemas al eliminar instancias y las empresas siguen pagando por ellas.
💡 Encuentre las formas de identificar y eliminar instantáneas huérfanas y sin usar para evitar el desperdicio y lograr objetivos de optimización → https://hystax.com/reduzca-su-factura-de-aws-limpiando-instantaneas-de-discos-huérfanos-y-sin-usar/