|
En Amazon Web Services (AWS), la gran mayoría de las nuevas capacidades están impulsadas por sus comentarios directos. Hace dos años, Jeff anunció algoritmos de suma de verificación adicionales y el cálculo opcional de sumas de verificación del lado del cliente para garantizar que los objetos almacenados en Amazon S3 sean exactamente lo que envió. Nos dijiste que te encanta esta verificación adicional porque te da confianza de que el objeto almacenado es el que enviaste. También nos dijo que preferiría que esta verificación adicional se habilitara automáticamente, lo que le liberaría de desarrollar código adicional.
A partir de hoy, actualizaremos el comportamiento predeterminado de Amazon Simple Storage Service (Amazon S3) al cargar objetos. Para aprovechar su postura de durabilidad existente, Amazon S3 ahora verifica automáticamente que sus datos se transmitan correctamente a través de la red desde sus aplicaciones a su depósito S3.
Amazon S3 está diseñado para ofrecer una durabilidad de datos del 99,999999999 % (es decir, 11 nueves). Amazon S3 siempre ha verificado la integridad de las cargas de objetos mediante el cálculo de sumas de verificación cuando los objetos llegan a nuestros servidores, antes de que se escriban en varios dispositivos de almacenamiento. Una vez que sus datos se almacenan en Amazon S3, este monitorea continuamente la durabilidad de los datos a lo largo del tiempo con comprobaciones periódicas de integridad de los datos en reposo. Amazon S3 también monitorea activamente la redundancia de sus datos para ayudar a verificar que sus objetos puedan tolerar fallas simultáneas de múltiples dispositivos de almacenamiento.
Pero los datos aún pueden enfrentar riesgos de integridad a medida que atraviesan la Internet pública antes de llegar a nuestros servidores. Problemas como hardware defectuoso en redes que no administramos o errores en el software del cliente podrían corromper o eliminar datos antes de que Amazon S3 tenga la oportunidad de validarlos. Anteriormente, podía ampliar la protección de la integridad proporcionando sus propias sumas de comprobación precalculadas con sus solicitudes PutObject o UploadPart. Sin embargo, esto requiere configurar herramientas y aplicaciones para generar y rastrear sumas de verificación, lo que puede ser complejo de implementar de manera consistente en todas las aplicaciones cliente que cargan objetos en Amazon S3.
El nuevo comportamiento predeterminado se basa en las protecciones de integridad de datos existentes sin requerir ningún cambio en sus aplicaciones. Además, las nuevas sumas de verificación se almacenan en los metadatos del objeto, lo que los hace accesibles para la verificación de integridad en cualquier momento.
Protección automática de la integridad del lado del cliente
Amazon S3 ahora extiende la protección de la integridad de los datos hasta las aplicaciones del lado del cliente de forma predeterminada. Las últimas versiones de nuestros SDK de AWS calculan automáticamente un Suma de comprobación basada en verificación de redundancia cíclica (CRC) para cada carga y enviarlo a Amazon S3. Amazon S3 calcula de forma independiente una suma de verificación en el lado del servidor y la valida con el valor proporcionado antes de almacenar de forma duradera el objeto y su suma de verificación en los metadatos del objeto.
Cuando su aplicación cliente no envía una suma de verificación CRC (tal vez utiliza una versión antigua de nuestro SDK o aún no ha actualizado el código personalizado de su aplicación), Amazon S3 calcula una suma de verificación basada en CRC de todos modos y la almacena en los metadatos del objeto. para referencia futura. Puede comparar en una etapa posterior el CRC almacenado con un CRC calculado por su parte y verificar que la transmisión de la red fue correcta.
Esta nueva capacidad le proporciona un cálculo automático de suma de verificación y validación para nuevas cargas desde las últimas versiones de los SDK de AWS, la interfaz de línea de comandos de AWS (AWS CLI) y la consola de administración de AWS. También puedes verificar la suma de verificación almacenada en los metadatos del objeto en cualquier momento. Las nuevas protecciones de integridad de datos predeterminadas utilizan los algoritmos CRC32 y CRC32C existentes o el nuevo algoritmo CRC64NVME. Amazon S3 también proporciona a los desarrolladores sumas de verificación coherentes de todos los objetos en cargas de una o varias partes.
Al cargar archivos en varias partes, los SDK calculan sumas de verificación para cada parte. Amazon S3 utiliza estas sumas de verificación para verificar la integridad de cada parte a través del UploadPart
API. Además, S3 valida el tamaño y la suma de verificación de todo el archivo cuando llamas al CompleteMultipartUpload
API.
El CreateMultiPartUpload
API introduce un nuevo encabezado HTTP, x-amz-checksum-type
que le permite especificar el tipo de suma de comprobación que se utilizará. Puede elegir una suma de verificación completa del objeto (calculada combinando las sumas de verificación de todas las partes individuales) o una suma de verificación compuesta.
La suma de comprobación completa del objeto se almacena con los metadatos del objeto para referencia futura. Esta nueva protección funciona perfectamente con el cifrado del lado del servidor. El comportamiento consistente entre cargas, cargas de varias partes, descargas y modos de cifrado simplifica las comprobaciones de integridad del lado del cliente. La capacidad de utilizar sumas de verificación de objetos completos para validar la integridad y almacenarlas para usarlas más adelante puede ayudarlo a optimizar sus aplicaciones.
Veámoslo en acción
Para comenzar a utilizar esta protección de integridad adicional, actualice a la última versión de AWS SDK o AWS CLI. No se requieren cambios de código para habilitar las nuevas protecciones de integridad.
Caso 1: Amazon S3 ahora adjunta una suma de verificación a los objetos en el lado del servidor cuando los objetos se cargan sin una suma de verificación
Escribí un script Python simple para cargar y descargar contenido desde y hacia un depósito S3. Habilité la máxima detalle de registro para ver los encabezados HTTP reales enviados hacia y desde Amazon S3.
import boto3
import logging
BUCKET_NAME="aws-news-blog-20241111"
CONTENT='Hello World!'
OBJECT_NAME='test.txt'
# Enable debug logging for boto3 and botocore to stdout (this is verbose !!!)
logging.basicConfig(level=logging.DEBUG)
# create a s3 client
client = boto3.client('s3')
# put an object
client.put_object(Bucket=BUCKET_NAME, Key=OBJECT_NAME, Body=CONTENT)
# get the object
response = client.get_object(Bucket=BUCKET_NAME, Key=OBJECT_NAME)
print(response['Body'].read().decode('utf-8'))
En el primer paso de esta demostración, utilizo un SDK de AWS antiguo para Python que no calcula la suma de comprobación CRC en el lado del cliente. A pesar de esto, puedo observar que Amazon S3 ahora responde con una suma de verificación que calcula al recibir el objeto.
S3 RESPONSE:
{
...
"x-amz-checksum-crc64nvme": "AuUcyF784aU=",
"x-amz-checksum-type": "FULL_OBJECT",
...
}
Caso 2: Carga con suma de comprobación CRC64NVME calculada previamente manualmente, un nuevo tipo de suma de comprobación
Cuando no tengo la opción de usar la última versión del SDK de AWS, o cuando uso mi propio código para cargar objetos en depósitos de S3, puedo calcular la suma de verificación y enviarla en el PutObject
Solicitud de API. Así es como calculo la suma de verificación de mi contenido antes de enviarlo a Amazon S3. Para mantener este código breve, uso el checksums
paquete disponible en el nuevo AWS SDK para Python.
from awscrt import checksums
import base64
checksum = checksums.crc64nvme("Hello World!")
checksum_bytes = checksum.to_bytes(8, byteorder="big") # CRC64 is 8 bytes
checksum_base64 = base64.b64encode(checksum_bytes)
print(checksum_base64)
Y cuando lo ejecuto, veo que la suma de comprobación CRC64NVME es la misma que la devuelta por Amazon S3 en el paso anterior.
$ python crc.py
b'AuUcyF784aU='
Puedo proporcionar esta suma de verificación como parte del PutObject
Llamada API.
response = s3.put_object(
Bucket=BUCKET_NAME,
Key=OBJECT_NAME,
Body=b'Hello World!',
ChecksumAlgorithm='CRC64NVME',
ChecksumCRC64NVME=checksum_base64
)
Caso 3: Los nuevos SDK calculan la suma de comprobación en el lado del cliente
Ahora ejecuto nuevamente el script de carga y descarga. Esta vez, utilizo la última versión de AWS SDK para Python. Observo que el SDK ahora envía los encabezados CRC en la solicitud. La respuesta también contiene la suma de comprobación. Puedo comparar fácilmente las versiones en la solicitud y en la respuesta para asegurarme de que el objeto recibido es el que envié.
REQUEST:
{
...
"x-amz-checksum-crc64nvme": "AuUcyF784aU=",
"x-amz-checksum-type": "FULL_OBJECT",
...
}
En cualquier momento, puedo solicitar la suma de verificación del objeto para verificar la integridad de mi copia local usando el HeadObject
o GetObject
API.
get_response = s3.get_object(
Bucket=BUCKET_NAME,
Key=OBJECT_NAME,
ChecksumMode="ENABLED"
)
El objeto de respuesta contiene la suma de comprobación en el HTTPHeaders
campo.
{
...
"x-amz-checksum-crc64nvme": "AuUcyF784aU=",
"x-amz-checksum-type": "FULL_OBJECT",
...
}
Caso 4: Cargas de varias partes con nueva suma de comprobación de todo el objeto basada en CRC
Al cargar objetos grandes usando el CreateMultipartUpload
, UploadPart
y CompleteMultipartUpload
API, la última versión del SDK calculará automáticamente las sumas de verificación.
Si desea validar la integridad de sus datos mediante el uso de una suma de verificación de contenido conocida, puede calcular previamente la suma de verificación de todo el objeto basada en CRC para cargas de varias partes para simplificar las herramientas del lado del cliente. Cuando utilice sumas de verificación de objetos completos para cargas de varias partes, ya no tendrá que realizar un seguimiento de las sumas de verificación a nivel de piezas a medida que carga objetos.
# precomputed CRC64NVME checksum for the full object
full_object_crc64_nvme_checksum = 'Naz0uXkYBPM='
# start multipart upload
create_response = s3.create_multipart_upload(
Bucket=BUCKET_NAME,
Key=OBJECT_NAME,
ChecksumAlgorithm='CRC64NVME',
ChecksumType="FULL_OBJECT"
)
upload_id = create_response['UploadId']
# Upload parts
uploaded_parts = []
# part 1
data_part_1 = b'0' * (5 * 1024 * 1024) # minimum part size
upload_part_response_1 = s3.upload_part(
Body=data_part_1,
Bucket=BUCKET_NAME,
Key=OBJECT_NAME,
PartNumber=1,
UploadId=upload_id,
ChecksumAlgorithm='CRC64NVME'
)
uploaded_parts.append({'PartNumber': 1, 'ETag': upload_part_response_1['ETag']})
# part 2
data_part_2 = b'0' * (5 * 1024 * 1024)
upload_part_response_2 = s3.upload_part(
Body=data_part_2,
Bucket=BUCKET_NAME,
Key=OBJECT_NAME,
PartNumber=2,
UploadId=upload_id,
ChecksumAlgorithm='CRC64NVME'
)
uploaded_parts.append({'PartNumber': 2, 'ETag': upload_part_response_2['ETag']})
# Complete the multipart upload with the FULL_OBJECT CRC64NVME checksum to validate the integrity of your entire object.
complete_response = s3.complete_multipart_upload(
Bucket=BUCKET_NAME,
Key=OBJECT_NAME,
UploadId=upload_id,
ChecksumCRC64NVME=full_object_crc64_nvme_checksum,
ChecksumType="FULL_OBJECT",
MultipartUpload={'Parts': uploaded_parts}
)
print(complete_response)
Cosas que debes saber
Para sus objetos existentes, la suma de verificación se agregará cuando los copie. Actualizamos el CopyObject
API para que pueda elegir el algoritmo de suma de comprobación deseado para el objeto de destino.
Este nuevo cálculo de suma de comprobación del lado del cliente se implementa en la última versión de los SDK de AWS. Cuando utiliza un SDK antiguo o un código personalizado que no calcula previamente las sumas de verificación, Amazon S3 calcula la suma de verificación de todos los objetos nuevos que recibe y la almacena en los metadatos del objeto, incluso para cargas de varias partes.
Precios y disponibilidad
Este almacenamiento y cálculo de suma de comprobación extendidos está disponible en todas las regiones de AWS sin costo adicional.
Actualice su AWS SDK y AWS CLI hoy para beneficiarse automáticamente de esta protección de integridad adicional para los datos en tránsito.
Para obtener más información sobre la protección de la integridad de los datos en Amazon S3, visite Comprobación de la integridad de objetos en la Guía del usuario de Amazon S3.
GIPHY App Key not set. Please check settings