

La AWS SDK para .NET V3 ha entrado en modo de mantenimiento.

Le recomendamos que migre a la [AWS SDK para .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Para obtener información y detalles adicionales sobre cómo migrar, consulta nuestro [anuncio sobre el modo de mantenimiento](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Seguridad para este AWS producto o servicio
<a name="security"></a>

La seguridad en la nube de Amazon Web Services (AWS) es la máxima prioridad. Como cliente de AWS, se beneficia de una arquitectura de red y un centro de datos que se han diseñado para satisfacer los requisitos de seguridad de las organizaciones más exigentes. La seguridad es una responsabilidad compartida entre usted AWS y usted. En el [modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/), se habla de “seguridad de la nube” y “seguridad en la nube”:

**Seguridad de la nube**: AWS se encarga de proteger la infraestructura en la que se ejecutan todos los servicios que se ofrecen en la AWS nube y de proporcionarle servicios que pueda utilizar de forma segura. Nuestra responsabilidad en materia de seguridad es nuestra máxima prioridad AWS, y auditores externos comprueban y verifican periódicamente la eficacia de nuestra seguridad como parte de los [programas de AWS conformidad](https://aws.amazon.com/compliance/programs/).

**Seguridad en la nube**: su responsabilidad viene determinada por el AWS servicio que utilice y otros factores, como la confidencialidad de sus datos, los requisitos de su organización y las leyes y reglamentos aplicables.

Este AWS producto o servicio sigue el [modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/) a través de los servicios específicos de Amazon Web Services (AWS) a los que da soporte. Para obtener información sobre la seguridad de los AWS servicios, consulte la [página de documentación sobre la seguridad del AWS servicio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) y [AWS los servicios que se encuentran dentro del ámbito de aplicación de AWS las medidas de conformidad establecidas por el programa de conformidad](https://aws.amazon.com/compliance/services-in-scope/).

**Topics**
+ [Protección de datos](data-protection.md)
+ [Gestión de identidad y acceso](security-iam.md)
+ [Validación de la conformidad](compliance-validation.md)
+ [Resiliencia](disaster-recovery-resiliency.md)
+ [Seguridad de infraestructuras](infrastructure-security.md)
+ [Aplicación de una versión mínima de TLS](enforcing-tls.md)
+ [Migración del cliente de cifrado S3 (V1 a V2)](s3-encryption-migration-v1-v2.md)
+ [Migración del cliente de cifrado S3 (de V2 a V4)](s3-encryption-migration-v2-v4.md)

# Protección de datos en este AWS producto o servicio
<a name="data-protection"></a>

El [modelo de ](https://aws.amazon.com/compliance/shared-responsibility-model/) se aplica a protección de datos de este AWS producto o servicio. Como se describe en este modelo, AWS es responsable de proteger la infraestructura global en la que se ejecutan todos los Nube de AWS. Eres responsable de mantener el control sobre el contenido alojado en esta infraestructura. También eres responsable de las tareas de administración y configuración de seguridad para los Servicios de AWS que utiliza. Para obtener más información sobre la privacidad de los datos, consulte las [Preguntas frecuentes sobre la privacidad de datos](https://aws.amazon.com/compliance/data-privacy-faq/). Para obtener información sobre la protección de datos en Europa, consulte la publicación de blog sobre el [Modelo de responsabilidad compartida de AWS y GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) en el * Blog de seguridad de AWS *.

Con fines de protección de datos, le recomendamos que proteja Cuenta de AWS las credenciales y configure los usuarios individuales con AWS IAM Identity Center o AWS Identity and Access Management (IAM). De esta manera, solo se otorgan a cada usuario los permisos necesarios para cumplir sus obligaciones laborales. También recomendamos proteger sus datos de la siguiente manera:
+ Utiliza la autenticación multifactor (MFA) en cada cuenta.
+ Se utiliza SSL/TLS para comunicarse con AWS los recursos. Exigimos TLS 1.2 y recomendamos TLS 1.3.
+ Configure la API y el registro de actividad de los usuarios con AWS CloudTrail. Para obtener información sobre el uso de CloudTrail senderos para capturar AWS actividades, consulte [Cómo trabajar con CloudTrail senderos](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html) en la *Guía del AWS CloudTrail usuario*.
+ Utilice soluciones de AWS cifrado, junto con todos los controles de seguridad predeterminados Servicios de AWS.
+ Utiliza servicios de seguridad administrados avanzados, como Amazon Macie, que lo ayuden a detectar y proteger la información confidencial almacenada en Amazon S3.
+ Si necesita módulos criptográficos validados por FIPS 140-3 para acceder a AWS través de una interfaz de línea de comandos o una API, utilice un punto final FIPS. Para obtener más información sobre los puntos de conexión de FIPS disponibles, consulte [Estándar de procesamiento de la información federal (FIPS) 140-3](https://aws.amazon.com/compliance/fips/).

Se recomienda encarecidamente no introducir nunca información confidencial o sensible, como por ejemplo, direcciones de correo electrónico de clientes, en etiquetas o campos de formato libre, tales como el campo **Nombre**. Esto incluye cuando trabaja con este AWS producto o servicio u otro Servicios de AWS mediante la consola, la API o. AWS CLI AWS SDKs Cualquier dato que introduzca en etiquetas o campos de formato libre utilizados para los nombres se pueden emplear para los registros de facturación o diagnóstico. Si proporciona una URL a un servidor externo, recomendamos encarecidamente que no incluya información de credenciales en la URL a fin de validar la solicitud para ese servidor.

# Gestión de identidad y acceso
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) es una herramienta Servicio de AWS que ayuda al administrador a controlar de forma segura el acceso a los AWS recursos. Los administradores de IAM controlan quién puede *autenticarse (iniciar* sesión) y quién puede *autorizarse* (tener permisos) para usar los recursos. AWS La IAM es una Servicio de AWS opción que puede utilizar sin coste adicional.

**Topics**
+ [Público](#security_iam_audience)
+ [Autenticación con identidades](#security_iam_authentication)
+ [Administración del acceso con políticas](#security_iam_access-manage)
+ [¿Cómo Servicios de AWS trabajar con IAM](#security_iam_service-with-iam)
+ [Solución de problemas de AWS identidad y acceso](#security_iam_troubleshoot)

## Público
<a name="security_iam_audience"></a>

La forma de usar AWS Identity and Access Management (IAM) varía según el trabajo en el que se realice. AWS

**Usuario del servicio**: si Servicios de AWS solía hacer su trabajo, el administrador le proporcionará las credenciales y los permisos que necesita. A medida que vaya utilizando más AWS funciones para realizar su trabajo, es posible que necesite permisos adicionales. Entender cómo se administra el acceso puede ayudarlo a solicitar los permisos correctos al administrador. Si no puede acceder a una función de AWS, consulte [Solución de problemas de AWS identidad y acceso](#security_iam_troubleshoot) o consulte la guía del usuario de la Servicio de AWS que está utilizando.

**Administrador de servicios**: si está a cargo de AWS los recursos de su empresa, probablemente tenga acceso total a ellos AWS. Su trabajo consiste en determinar a qué AWS funciones y recursos deben acceder los usuarios del servicio. Luego, debe enviar solicitudes a su administrador de IAM para cambiar los permisos de los usuarios de su servicio. Revise la información de esta página para conocer los conceptos básicos de IAM. Para obtener más información sobre cómo su empresa puede utilizar la IAM AWS, consulte la guía del usuario del Servicio de AWS que está utilizando.

**Administrador de IAM**: si es un administrador de IAM, es posible que quiera conocer más detalles sobre cómo escribir políticas para administrar el acceso a AWS. Para ver ejemplos de políticas AWS basadas en la identidad que puede utilizar en IAM, consulte la guía del usuario de la Servicio de AWS que está utilizando.

## Autenticación con identidades
<a name="security_iam_authentication"></a>

La autenticación es la forma de iniciar sesión AWS con sus credenciales de identidad. Debe autenticarse como usuario de Usuario raíz de la cuenta de AWS IAM o asumir una función de IAM.

Puede iniciar sesión como una identidad federada con las credenciales de una fuente de identidad, como AWS IAM Identity Center (IAM Identity Center), la autenticación de inicio de sesión único o las credenciales. Google/Facebook Para obtener más información sobre el inicio de sesión, consulte [Cómo iniciar sesión en la Cuenta de AWS](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) en la *Guía del usuario de AWS Sign-In *.

Para el acceso programático, AWS proporciona un SDK y una CLI para firmar criptográficamente las solicitudes. Para obtener más información, consulte [AWS Signature Version 4 para solicitudes de API](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) en la *Guía del usuario de IAM*.

### Cuenta de AWS usuario root
<a name="security_iam_authentication-rootuser"></a>

 Al crear un Cuenta de AWS, se comienza con una identidad de inicio de sesión denominada *usuario Cuenta de AWS raíz* que tiene acceso completo a todos Servicios de AWS los recursos. Se recomiendaencarecidamente que no utilice el usuario raíz para las tareas diarias. Para ver las tareas que requieren credenciales de usuario raíz, consulte [Tareas que requieren credenciales de usuario raíz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks) en la *Guía del usuario de IAM*. 

### Identidad federada
<a name="security_iam_authentication-federated"></a>

Como práctica recomendada, exija a los usuarios humanos que utilicen la federación con un proveedor de identidades para acceder Servicios de AWS mediante credenciales temporales.

Una *identidad federada* es un usuario del directorio empresarial, del proveedor de identidades web o al Directory Service que se accede Servicios de AWS mediante credenciales de una fuente de identidad. Las identidades federadas asumen roles que proporcionan credenciales temporales.

Para una administración de acceso centralizada, se recomienda AWS IAM Identity Center. Para obtener más información, consulte [¿Qué es el Centro de identidades de IAM?](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) en la *Guía del usuario de AWS IAM Identity Center *.

### Usuarios y grupos de IAM
<a name="security_iam_authentication-iamuser"></a>

Un *[usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)* es una identidad con permisos específicos para una sola persona o aplicación. Recomendamos el uso de credenciales temporales en lugar de usuarios de IAM con credenciales de larga duración. Para obtener más información, consulte [Exigir a los usuarios humanos que utilicen la federación con un proveedor de identidad para acceder AWS mediante credenciales temporales](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp) en la Guía del usuario de *IAM*.

Un [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) especifica un conjunto de usuarios de IAM y facilita la administración de los permisos para grupos grandes de usuarios. Para obtener más información, consulte [Casos de uso para usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) en la *Guía del usuario de IAM*.

### Roles de IAM
<a name="security_iam_authentication-iamrole"></a>

Un *[Rol de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)* es una identidad con permisos específicos que proporciona credenciales temporales. Puede asumir un rol [cambiando de un rol de usuario a uno de IAM (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html) o llamando a una AWS CLI operación de AWS API. Para obtener más información, consulte [Métodos para asumir un rol](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html) en la *Guía del usuario de IAM*.

Los roles de IAM son útiles para el acceso de usuario federado, los permisos de usuario de IAM temporales, el acceso entre cuentas, el acceso entre servicios y las aplicaciones que se ejecutan en Amazon EC2. Para obtener más información, consulte [Acceso a recursos entre cuentas en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) en la *Guía del usuario de IAM*.

## Administración del acceso con políticas
<a name="security_iam_access-manage"></a>

 AWS Para controlar el acceso, puede crear políticas y adjuntarlas a AWS identidades o recursos. Una política define los permisos cuando están asociados a una identidad o un recurso. AWS evalúa estas políticas cuando un director hace una solicitud. La mayoría de las políticas se almacenan AWS como documentos JSON. Para obtener más información sobre los documentos de políticas de JSON, consulte [Información general de políticas de JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json) en la *Guía del usuario de IAM*.

Mediante las políticas, los administradores especifican quién tiene acceso a qué, definiendo qué **entidad principal** puede realizar **acciones** sobre qué **recursos** y en qué **condiciones**.

De forma predeterminada, los usuarios y los roles no tienen permisos. Un administrador de IAM crea políticas de IAM y las agrega a roles, que los usuarios pueden asumir posteriormente. Las políticas de IAM definen permisos independientemente del método que se utilice para realizar la operación.

### Políticas basadas en identidades
<a name="security_iam_access-manage-id-based-policies"></a>

Las políticas basadas en identidad son documentos de política de permisos JSON que asocia a una identidad (usuario, grupo o rol). Estas políticas controlan qué acciones pueden realizar las identidades, en qué recursos y en qué condiciones. Para obtener más información sobre cómo crear una política basada en la identidad, consulte [Definición de permisos de IAM personalizados con políticas administradas por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *Guía del usuario de IAM*.

Las políticas basadas en identidad pueden ser *políticas insertadas* (incrustadas directamente en una sola identidad) o *políticas administradas* (políticas independientes asociadas a varias identidades). Para obtener información sobre cómo elegir entre políticas administradas e insertadas, consulte [Selección entre políticas administradas y políticas insertadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html) en la *Guía del usuario de IAM*.

### Políticas basadas en recursos
<a name="security_iam_access-manage-resource-based-policies"></a>

Las políticas basadas en recursos son documentos de políticas JSON que se asocian a un recurso. Los ejemplos incluyen las *Políticas de confianza de roles* de IAM y las *Políticas de bucket* de Amazon S3. En los servicios que admiten políticas basadas en recursos, los administradores de servicios pueden utilizarlos para controlar el acceso a un recurso específico. Debe [especificar una entidad principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) en una política basada en recursos.

Las políticas basadas en recursos son políticas insertadas que se encuentran en ese servicio. No puedes usar políticas AWS gestionadas de IAM en una política basada en recursos.

### Listas de control de acceso () ACLs
<a name="security_iam_access-manage-acl"></a>

Las listas de control de acceso (ACLs) controlan qué responsables (miembros de la cuenta, usuarios o roles) tienen permisos para acceder a un recurso. ACLs son similares a las políticas basadas en recursos, aunque no utilizan el formato de documento de políticas JSON.

Amazon S3 y Amazon VPC son ejemplos de servicios compatibles. AWS WAF ACLs Para obtener más información ACLs, consulte la [descripción general de la lista de control de acceso (ACL)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) en la *Guía para desarrolladores de Amazon Simple Storage Service*.

### Otros tipos de políticas
<a name="security_iam_access-manage-other-policies"></a>

AWS admite tipos de políticas adicionales que pueden establecer los permisos máximos otorgados por los tipos de políticas más comunes:
+ **Límites de permisos:** establecen los permisos máximos que una política basada en identidad puede conceder a una entidad de IAM. Para obtener más información, consulte [Límites de permisos para las entidades de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) en la *Guía del usuario de IAM*.
+ **Políticas de control de servicios (SCPs)**: especifican los permisos máximos para una organización o unidad organizativa en AWS Organizations. Para obtener más información, consulte [Políticas de control de servicios](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) en la *Guía del usuario de AWS Organizations *.
+ **Políticas de control de recursos (RCPs)**: establece los permisos máximos disponibles para los recursos de tus cuentas. Para obtener más información, consulte [Políticas de control de recursos (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html) en la *Guía del AWS Organizations usuario*.
+ **Políticas de sesión:** políticas avanzadas que se pasan como parámetro cuando se crea una sesión temporal para un rol o un usuario federado. Para obtener más información, consulte [Políticas de sesión](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) en la *Guía del usuario de IAM*.

### Varios tipos de políticas
<a name="security_iam_access-manage-multiple-policies."></a>

Cuando se aplican varios tipos de políticas a una solicitud, los permisos resultantes son más complicados de entender. Para saber cómo se AWS determina si se debe permitir una solicitud cuando se trata de varios tipos de políticas, consulte la [lógica de evaluación de políticas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html) en la *Guía del usuario de IAM*.

## ¿Cómo Servicios de AWS trabajar con IAM
<a name="security_iam_service-with-iam"></a>

Para obtener una visión general de cómo Servicios de AWS trabajar con la mayoría de las funciones de IAM, consulte [AWS los servicios que funcionan con IAM en la Guía del usuario de *IAM*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html).

Para obtener información sobre cómo utilizar una función específica Servicio de AWS con IAM, consulte la sección de seguridad de la guía del usuario del servicio correspondiente.

## Solución de problemas de AWS identidad y acceso
<a name="security_iam_troubleshoot"></a>

Utilice la siguiente información como ayuda para diagnosticar y solucionar los problemas habituales que pueden surgir al trabajar con un AWS IAM.

**Topics**
+ [No estoy autorizado a realizar ninguna acción en AWS](#security_iam_troubleshoot-no-permissions)
+ [No estoy autorizado a realizar tareas como: PassRole](#security_iam_troubleshoot-passrole)
+ [Quiero permitir que personas ajenas a mí accedan Cuenta de AWS a mis AWS recursos](#security_iam_troubleshoot-cross-account-access)

### No estoy autorizado a realizar ninguna acción en AWS
<a name="security_iam_troubleshoot-no-permissions"></a>

Si recibe un error que indica que no tiene autorización para realizar una acción, las políticas se deben actualizar para permitirle realizar la acción.

En el siguiente ejemplo, el error se produce cuando el usuario de IAM `mateojackson` intenta utilizar la consola para consultar los detalles acerca de un recurso ficticio `my-example-widget`, pero no tiene los permisos ficticios `awes:GetWidget`.

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: awes:GetWidget on resource: my-example-widget
```

En este caso, la política del usuario `mateojackson` debe actualizarse para permitir el acceso al recurso `my-example-widget` mediante la acción `awes:GetWidget`.

Si necesita ayuda, póngase en contacto con su AWS administrador. El administrador es la persona que le proporcionó las credenciales de inicio de sesión.

### No estoy autorizado a realizar tareas como: PassRole
<a name="security_iam_troubleshoot-passrole"></a>

Si recibe un error que indica que no tiene autorización para realizar la acción `iam:PassRole`, las políticas deben actualizarse a fin de permitirle pasar un rol a AWS.

Algunas Servicios de AWS permiten transferir una función existente a ese servicio en lugar de crear una nueva función de servicio o una función vinculada a un servicio. Para ello, debe tener permisos para transferir la función al servicio.

En el siguiente ejemplo, el error se produce cuando un usuario de IAM denominado `marymajor` intenta utilizar la consola para realizar una acción en AWS. Sin embargo, la acción requiere que el servicio cuente con permisos que otorguen un rol de servicio. Mary no tiene permisos para transferir el rol al servicio.

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

En este caso, las políticas de Mary se deben actualizar para permitirle realizar la acción `iam:PassRole`.

Si necesita ayuda, póngase en contacto con su AWS administrador. El administrador es la persona que le proporcionó las credenciales de inicio de sesión.

### Quiero permitir que personas ajenas a mí accedan Cuenta de AWS a mis AWS recursos
<a name="security_iam_troubleshoot-cross-account-access"></a>

Se puede crear un rol que los usuarios de otras cuentas o las personas externas a la organización puedan utilizar para acceder a sus recursos. Se puede especificar una persona de confianza para que asuma el rol. En el caso de los servicios que respaldan las políticas basadas en recursos o las listas de control de acceso (ACLs), puedes usar esas políticas para permitir que las personas accedan a tus recursos.

Para obtener más información, consulte lo siguiente:
+ Para saber si AWS es compatible con estas funciones, consulte. [¿Cómo Servicios de AWS trabajar con IAM](#security_iam_service-with-iam)
+ Para obtener información sobre cómo proporcionar acceso a los recursos de su Cuentas de AWS propiedad, consulte [Proporcionar acceso a un usuario de IAM en otro usuario de su propiedad Cuenta de AWS en](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html) la Guía del *usuario de IAM*.
+ Para obtener información sobre cómo proporcionar acceso a tus recursos a terceros Cuentas de AWS, consulta Cómo [proporcionar acceso a recursos que Cuentas de AWS son propiedad de terceros](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html) en la Guía del usuario de *IAM*.
+ Para obtener información sobre cómo proporcionar acceso mediante una federación de identidades, consulte [Proporcionar acceso a usuarios autenticados externamente (identidad federada)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) en la *Guía del usuario de IAM*.
+ Para conocer sobre la diferencia entre las políticas basadas en roles y en recursos para el acceso entre cuentas, consulte [Acceso a recursos entre cuentas en IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) en la *Guía del usuario de IAM*.

# Validación de la conformidad de este AWS producto o servicio
<a name="compliance-validation"></a>

Para saber si un programa de cumplimiento Servicio de AWS está dentro del ámbito de aplicación de programas de cumplimiento específicos, consulte [Servicios de AWS Alcance por programa](https://aws.amazon.com/compliance/services-in-scope/) de de cumplimiento y elija el programa de cumplimiento que le interese. Para obtener información general, consulte Programas de [AWS cumplimiento > Programas AWS](https://aws.amazon.com/compliance/programs/) .

Puede descargar informes de auditoría de terceros utilizando AWS Artifact. Para obtener más información, consulte [Descarga de informes en AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html) .

Su responsabilidad de cumplimiento al Servicios de AWS utilizarlos viene determinada por la confidencialidad de sus datos, los objetivos de cumplimiento de su empresa y las leyes y reglamentos aplicables. Para obtener más información sobre su responsabilidad de conformidad al utilizarlos Servicios de AWS, consulte [AWS la documentación de seguridad](https://docs.aws.amazon.com/security/).

Este AWS producto o servicio sigue el [modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/) a través de los servicios específicos de Amazon Web Services (AWS) a los que da soporte. Para obtener información sobre la seguridad de los AWS servicios, consulte la [página de documentación sobre la seguridad del AWS servicio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) y [AWS los servicios que se encuentran dentro del ámbito de aplicación de AWS las medidas de conformidad establecidas por el programa de conformidad](https://aws.amazon.com/compliance/services-in-scope/).

# Resiliencia de este AWS producto o servicio
<a name="disaster-recovery-resiliency"></a>

La infraestructura AWS global se basa en Regiones de AWS zonas de disponibilidad. 

Regiones de AWS proporcionan varias zonas de disponibilidad aisladas y separadas físicamente, que están conectadas mediante redes de baja latencia, alto rendimiento y alta redundancia. 

Con las zonas de disponibilidad, puede diseñar y utilizar aplicaciones y bases de datos que realizan una conmutación por error automática entre las zonas sin interrupciones. Las zonas de disponibilidad tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las infraestructuras tradicionales de uno o varios centros de datos. 

[Para obtener más información sobre AWS las regiones y las zonas de disponibilidad, consulte Infraestructura global.AWS](https://aws.amazon.com/about-aws/global-infrastructure/)

Este AWS producto o servicio sigue el [modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/) a través de los servicios específicos de Amazon Web Services (AWS) a los que da soporte. Para obtener información sobre la seguridad de los AWS servicios, consulte la [página de documentación sobre la seguridad del AWS servicio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) y [AWS los servicios que se encuentran dentro del ámbito de aplicación de AWS las medidas de conformidad establecidas por el programa de conformidad](https://aws.amazon.com/compliance/services-in-scope/).

# Seguridad de la infraestructura para este AWS producto o servicio
<a name="infrastructure-security"></a>

Este AWS producto o servicio utiliza servicios gestionados y, por lo tanto, está protegido por la seguridad de la red AWS global. Para obtener información sobre los servicios AWS de seguridad y cómo se AWS protege la infraestructura, consulte [Seguridad AWS en la nube](https://aws.amazon.com/security/). Para diseñar su AWS entorno utilizando las mejores prácticas de seguridad de la infraestructura, consulte [Protección de infraestructuras en un marco](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html) de buena * AWS arquitectura basado en el pilar de la seguridad*.

Utiliza las llamadas a la API AWS publicadas para acceder a este AWS producto o servicio a través de la red. Los clientes deben admitir lo siguiente:
+ Seguridad de la capa de transporte (TLS). Exigimos TLS 1.2 y recomendamos TLS 1.3.
+ Conjuntos de cifrado con confidencialidad directa total (PFS) como DHE (Ephemeral Diffie-Hellman) o ECDHE (Elliptic Curve Ephemeral Diffie-Hellman). La mayoría de los sistemas modernos como Java 7 y posteriores son compatibles con estos modos.

Además, las solicitudes deben estar firmadas mediante un ID de clave de acceso y una clave de acceso secreta que esté asociada a una entidad principal de IAM. También puedes utilizar [AWS Security Token Service](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) (AWS STS) para generar credenciales de seguridad temporales para firmar solicitudes.

Este AWS producto o servicio sigue el [modelo de responsabilidad compartida](https://aws.amazon.com/compliance/shared-responsibility-model/) a través de los servicios específicos de Amazon Web Services (AWS) a los que da soporte. Para obtener información sobre la seguridad de los AWS servicios, consulte la [página de documentación sobre la seguridad del AWS servicio](https://docs.aws.amazon.com/security/?id=docs_gateway#aws-security) y [AWS los servicios que se encuentran dentro del ámbito de aplicación de AWS las medidas de conformidad establecidas por el programa de conformidad](https://aws.amazon.com/compliance/services-in-scope/).

# Imponer una versión mínima de TLS en el AWS SDK para .NET
<a name="enforcing-tls"></a>

Para aumentar la seguridad al comunicarse con AWS los servicios, debe configurarlos AWS SDK para .NET para que utilicen TLS 1.2 o una versión posterior.

 AWS SDK para .NET Utiliza el entorno de ejecución de.NET subyacente para determinar qué protocolo de seguridad utilizar. De forma predeterminada, las versiones actuales de .NET utilizan el último protocolo configurado que admite el sistema operativo. Su aplicación puede anular este comportamiento del SDK, pero *no se recomienda* hacerlo.

## .NET Core
<a name="enforcing-tls-dotnet-core"></a>

De forma predeterminada, .NET Core utiliza el último protocolo configurado que admite el sistema operativo. El AWS SDK para .NET no proporciona un mecanismo para anular esto.

Si está utilizando una versión de .NET Core anterior a la 2.1, le recomendamos *encarecidamente* que actualice la versión de .NET Core.

Consulte lo siguiente para obtener información específica de cada sistema operativo.

**Windows**

Las distribuciones modernas de Windows tienen la compatibilidad con TLS 1.2 [habilitada de forma predeterminada](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-). Si utiliza Windows 7 SP1 o Windows Server 2008 R2 SP1, debe asegurarse de que la compatibilidad con TLS 1.2 esté habilitada en el registro, tal y como se describe en [https://learn.microsoft.com/en-us/windows- server/security/tls/tls -registry-settings](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12) \$1tls -12. Si está ejecutando una distribución anterior, debe actualizar el sistema operativo. Para obtener información sobre la compatibilidad con TLS 1.3 en Windows, eche un vistazo a la documentación de Microsoft más reciente para conocer las versiones de cliente o de servidor mínimas requeridas.

**macOS**

Si ejecuta .NET Core 2.1 o una versión posterior, TLS 1.2 está habilitado de forma predeterminada. TLS 1.2 es compatible con [OS X Mavericks v10.9 o posterior](https://support.apple.com/en-us/103373). La versión 2.1 y posteriores de.NET Core requieren versiones más recientes de macOS, tal y como se describe en [https://learn.microsoft.com/en-us/dotnet/core/install/windows? tabs=net80&pivots=os-macos](https://learn.microsoft.com/en-us/dotnet/core/install/windows?tabs=net80&pivots=os-macos).

Si está utilizando.NET Core 1.0, .NET Core [usa OpenSSL en macOS](https://github.com/dotnet/announcements/issues/21), una dependencia que debe instalarse por separado. OpenSSL ha incluido soporte para TLS 1.2 en la versión 1.0.1 y soporte para TLS 1.3 en la versión 1.1.1.

**Linux**

.NET Core en Linux requiere OpenSSL, que viene incluido con muchas distribuciones de Linux. Pero también se puede instalar por separado. OpenSSL ha incluido soporte para TLS 1.2 en la versión 1.0.1 y soporte para TLS 1.3 en la versión 1.1.1. Si está utilizando una versión moderna de .NET Core (2.1 o posterior) y ha instalado un administrador de paquetes, es probable que se haya instalado una versión más moderna de OpenSSL para usted.

Para estar seguro, puede ejecutar **`openssl version`** en un terminal y verificar que la versión sea posterior a 1.0.1.

## .NET Framework
<a name="enforcing-tls-dotnet-framework"></a>

Si está ejecutando una versión moderna de .NET Framework (4.7 o posterior) y una versión moderna de Windows (al menos Windows 8 para clientes, Windows Server 2012 o posterior para servidores), TLS 1.2 está habilitado y utilizado de forma predeterminada.

Si utiliza un entorno de ejecución de.NET Framework que no utiliza la configuración del sistema operativo (.NET Framework 3.5 a 4.5.2), AWS SDK para .NET intentará [añadir compatibilidad con TLS 1.1 y TLS 1.2 a los protocolos compatibles](https://github.com/aws/aws-sdk-net/blob/aws-sdk-net-v3.7/sdk/src/Core/Amazon.Runtime/Pipeline/HttpHandler/AmazonSecurityProtocolManager.cs). Si está utilizando .NET Framework 3.5, esto tendrá éxito solo si se instala la revisión activa adecuada, de la siguiente manera:
+ Windows 10, versión 1511, y Windows Server 2016: [KB3156421](https://support.microsoft.com/kb/3156421)
+ Windows 8.1 y Windows Server 2012 R2 — [KB3154520](https://support.microsoft.com/kb/3154520)
+ Windows Server 2012 — [KB3154519](https://support.microsoft.com/kb/3154519)
+ Windows 7 SP1 y Server 2008 R2 SP1 — [KB3154518](https://support.microsoft.com/kb/3154518)

**aviso**  
A partir del 15 de agosto de 2024, AWS SDK para .NET dejarán de ser compatibles con .NET Framework 3.5 y cambiarán la versión mínima de.NET Framework a la 4.7.2. Para obtener más información, consulte la entrada del blog [Cambios importantes que se avecinan para los objetivos .NET Framework 3.5 y 4.5 de AWS SDK para .NET](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/).

Si su aplicación se ejecuta en una versión más reciente de .NET Framework en Windows 7 SP1 o Windows Server 2008 R2 SP1, debe asegurarse de que la compatibilidad con TLS 1.2 esté habilitada en el registro, tal y como se describe en [https://learn.microsoft.com/en-us/windows- server/security/tls/tls -registry-settings](https://learn.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12) \$1tls -12. Las versiones más recientes de Windows lo tienen [habilitado de forma predeterminada](https://learn.microsoft.com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-).

Para obtener información detallada sobre las prácticas recomendadas para el uso de TLS con.NET Framework, consulte el artículo de Microsoft en [https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls](https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls).

## Herramientas de AWS para PowerShell
<a name="enforcing-tls-ps"></a>

[Herramientas de AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)utilice el AWS SDK para .NET para todas las llamadas a los AWS servicios. El comportamiento del entorno depende de la versión de Windows PowerShell que esté ejecutando, como se indica a continuación.

**De Windows PowerShell 2.0 a 5.x**

Windows PowerShell 2.0 a 5.x se ejecuta en .NET Framework. Puede comprobar qué motor de ejecución de.NET (2.0 o 4.0) se utiliza PowerShell mediante el siguiente comando.

```
$PSVersionTable.CLRVersion
```
+ Al utilizar .NET Runtime 2.0, siga las instrucciones proporcionadas anteriormente con relación a AWS SDK para .NET y .NET Framework 3.5.
**aviso**  
A partir del 15 de agosto de 2024, AWS SDK para .NET dejará de ser compatible con .NET Framework 3.5 y cambiará la versión mínima de .NET Framework a la 4.7.2. Para obtener más información, consulte la entrada del blog [Cambios importantes que se avecinan para los objetivos .NET Framework 3.5 y 4.5 de AWS SDK para .NET](https://aws.amazon.com/blogs/developer/important-changes-coming-for-net-framework-3-5-and-4-5-targets-of-the-aws-sdk-for-net/).
+ Al utilizar .NET Runtime 4.0, siga las instrucciones proporcionadas anteriormente con relación a AWS SDK para .NET y .NET Framework 4\$1.

**Windows 6.0 PowerShell **

Windows PowerShell 6.0 y versiones posteriores se ejecutan en .NET Core. Puede verificar qué versión de .NET Core se está utilizando ejecutando el siguiente comando.

```
[System.Reflection.Assembly]::GetEntryAssembly().GetCustomAttributes([System.Runtime.Versioning.TargetFrameworkAttribute], $true).FrameworkName
```

Siga las instrucciones proporcionadas anteriormente en relación con la AWS SDK para .NET versión correspondiente de .NET Core.

## Xamarin
<a name="enforcing-tls-xamarin"></a>

[Para Xamarin, consulte las instrucciones en -layer-security. https://learn.microsoft.com/en-us/ xamarin/cross-platform/app-fundamentals/transport](https://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/transport-layer-security) En resumen:

**Para Android**
+ Requiere Android 5.0 o posterior.
+ **Propiedades del proyecto****, **opciones de Android**: HttpClient la implementación debe estar configurada en **Android** y la SSL/TLS implementación en Native TLS 1.2\$1.**

**Para iOS**
+ Requiere iOS 7 o posterior.
+ **Propiedades del proyecto**, **compilación de iOS**: HttpClient la implementación debe estar configurada como **NSUrlSesión**.

**Para macOS**
+ Requiere macOS 10.9 o posterior.
+ **Opciones de proyecto**, **compilación**, **compilación para Mac**: HttpClient la implementación debe estar configurada como **NSUrlSesión**.

## Unity
<a name="enforcing-tls-unity"></a>

Debe usar Unity 2018.2 o una versión posterior y usar el tiempo de ejecución de scripting equivalente de .NET 4.x. Puede configurarlo en los **ajustes del proyecto**, en la **configuración** o en el **reproductor**, tal y como se describe en [https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html.](https://docs.unity3d.com/2019.1/Documentation/Manual/ScriptingRuntimeUpgrade.html) El tiempo de ejecución de secuencias de comandos equivalente a .NET 4.x permite la compatibilidad con TLS 1.2 en todas las plataformas Unity que ejecutan Mono o CPP. IL2 

## Navegador (para Blazor) WebAssembly
<a name="enforcing-tls-browser"></a>

WebAssembly se ejecuta en el navegador en lugar de en el servidor y utiliza el navegador para gestionar el tráfico HTTP. Por lo tanto, la compatibilidad con TLS está determinada por la compatibilidad con el navegador.

[Blazor WebAssembly, en la versión preliminar de ASP.NET Core 3.1, solo es compatible con navegadores compatibles WebAssembly, tal y como se describe en https://learn.microsoft.com/en-us/ aspnet/core/blazor/supported -platforms.](https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms) Todos los navegadores convencionales eran compatibles con TLS 1.2 antes de admitirlo. WebAssembly Si este es el caso de su navegador, si su aplicación se ejecuta, puede comunicarse a través de TLS 1.2.

Consulte la documentación de su navegador para obtener más información y verificación.

# Migración del cliente de cifrado Amazon S3 (V1 a V2)
<a name="s3-encryption-migration-v1-v2"></a>

**nota**  
Si utiliza la V2 y desea migrar a la V4, consulte[Migración del cliente de cifrado Amazon S3 (V2 a V4)](s3-encryption-migration-v2-v4.md).

En este tema se muestra cómo migrar las aplicaciones de la versión 1 (V1) del cliente de cifrado de Amazon Simple Storage Service (Amazon S3) a la versión 2 (V2), y cómo garantizar la disponibilidad de las aplicaciones durante todo el proceso de migración.

Los objetos cifrados con el cliente de la versión 2 no se pueden descifrar con el cliente de la versión V1. Para facilitar la migración al nuevo cliente sin tener que volver a cifrar todos los objetos a la vez, se ha proporcionado un cliente “de transición a la versión 1”. Este cliente puede *descifrar* objetos cifrados tanto en la versión 1 como en la versión 2, pero solo *cifra* objetos en un formato compatible con la versión 1. El cliente de la versión 2 puede *descifrar* objetos cifrados tanto en la versión 1 como en la versión 2 (si está habilitada para objetos de la versión 1), pero solo *cifra* objetos en un formato compatible con la versión 2.

## Información general sobre la migración
<a name="s3-encryption-migration-v1-v2-overview"></a>

Esta migración se produce en tres fases. Estas fases se indican aquí y se describen en detalle más adelante. Cada fase debe completarse en *todos* los clientes que utilizan objetos compartidos para que la siguiente fase pueda iniciarse.

1. **Actualizar los clientes existentes a clientes de transición a la versión 1 para leer nuevos formatos.** En primer lugar, actualice las aplicaciones para que establezcan una dependencia con el cliente de transición a la versión 1 en lugar de con cliente de la versión 1. El cliente de transición a la versión 1 permite que el código existente descifre los objetos escritos por los nuevos clientes de la versión 2 y los objetos escritos en un formato compatible con la versión 1.
**nota**  
El cliente de transición a la versión 1 se proporciona únicamente con fines de migración. Después de pasar al cliente de transición a la versión 1, proceda a actualizar el cliente de la versión 2.

1. **Migrar los clientes de transición a la versión 1 a clientes de la versión 2 para escribir nuevos formatos.** A continuación, reemplace todos los clientes de transición a la versión 1 de las aplicaciones por clientes de la versión 2 y establezca el perfil de seguridad en `V2AndLegacy`. Establecer así este perfil de seguridad en los clientes de la versión 2 permite a esos clientes descifrar los objetos que se cifraron en un formato compatible con la versión 1.

1. **Actualizar los clientes de la versión 2 para que dejen de leer formatos de la versión 1.** Por último, una vez que todos los clientes se hayan migrado a la versión 2 y todos los objetos se hayan cifrado o vuelto a cifrar en un formato compatible con la versión 2, establezca el perfil de seguridad de la versión 2 en `V2` en lugar de en `V2AndLegacy`. Esto impide el descifrado de los objetos que están en un formato compatible con la versión 1.

## Actualización de los clientes existentes a clientes de transición a la versión 1 para leer nuevos formatos
<a name="s3-encryption-migration-v1-v2-to-v1n"></a>

El cliente de cifrado de la versión 2 utiliza algoritmos de cifrado que las versiones anteriores del cliente no admiten. El primer paso de la migración consiste en actualizar los clientes de descifrado de la versión 1 para que puedan leer el nuevo formato.

El cliente de transición a la versión 1 permite a las aplicaciones descifrar los objetos cifrados tanto en la versión 1 como en la versión 2. Este cliente forma parte del paquete [Amazon.Extensions.S3.Encryption.](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet Realice los siguientes pasos en cada una de sus aplicaciones para utilizar el cliente de transición a la versión 1.

1. Establezca una nueva dependencia en el paquete [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). **Si su proyecto depende directamente del .S3 o. AWSSDK AWSSDK** ** KeyManagementService**paquetes, debe actualizar esas dependencias o eliminarlas para que sus versiones actualizadas se incluyan en este nuevo paquete.

1. Cambie la instrucción `using` apropiada de `Amazon.S3.Encryption` a `Amazon.Extensions.S3.Encryption`. Así: 

   ```
   // using Amazon.S3.Encryption;
     using Amazon.Extensions.S3.Encryption;
   ```

1. Recompile y vuelva a implementar la aplicación.

El cliente de transición a la versión 1 es totalmente compatible con las API del cliente de la versión 1, por lo que no es necesario realizar ningún otro cambio de código.

## Migración de los clientes de transición a la versión 1 a clientes de la versión 2 para escribir nuevos formatos
<a name="s3-encryption-migration-v1-v2-v1n-to-v2"></a>

El cliente V2 forma parte del paquete [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption). Permite a las aplicaciones descifrar los objetos cifrados tanto con la versión 1 como con la versión 2 (si están configuradas para ello), pero solo cifra los objetos en un formato compatible con la versión 2.

Después de actualizar los clientes existentes para leer el nuevo formato de cifrado, puede proceder a actualizar las aplicaciones sin problemas a la versión 2 de los clientes de cifrado y descifrado. Realice los siguientes pasos en cada una de las aplicaciones para utilizar el cliente de la versión 2:

1. Cambie `EncryptionMaterials` a `EncryptionMaterialsV2`.

   1. Si usa KMS:

      1. Proporcione un ID de clave de KMS.

      1. Declare el método de cifrado que está utilizando, esto es, `KmsType.KmsContext`.

      1. Proporcione un contexto de cifrado a KMS para asociarlo a esta clave de datos. Puede enviar un diccionario vacío (el contexto de cifrado de Amazon se seguirá combinando), pero se recomienda incluir más contexto.

   1. Si usa métodos de empaquetado de claves proporcionados por el usuario (cifrado simétrico o asimétrico):

      1. Proporcione una instancia de `AES` o de `RSA` que contenga los materiales de cifrado.

      1. Declare qué algoritmo de cifrado utilizar, esto es, `SymmetricAlgorithmType.AesGcm` o `AsymmetricAlgorithmType.RsaOaepSha1`.

1. Cambie `AmazonS3CryptoConfiguration` a `AmazonS3CryptoConfigurationV2` con la propiedad `SecurityProfile` establecida en `SecurityProfile.V2AndLegacy`.

1. Cambie `AmazonS3EncryptionClient` a `AmazonS3EncryptionClientV2`. Este cliente toma los objetos `AmazonS3CryptoConfigurationV2` y `EncryptionMaterialsV2` recién convertidos de los pasos anteriores.

### Ejemplo: de KMS a KMS\$1Contexto
<a name="s3-encryption-migration-v1-v2-ex-kms"></a>

**Antes de la migración**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab");
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Después de la migración**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

### Ejemplo: algoritmo simétrico (empaquetado de claves de AES-CBC a AES-GCM)
<a name="s3-encryption-migration-v1-v2-ex-aes"></a>

`StorageMode` puede ser `ObjectMetadata` o `InstructionFile`.

**Antes de la migración**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Después de la migración**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

**nota**  
Al descifrar con AES-GCM, lea todo el objeto hasta el final antes de empezar a utilizar los datos descifrados. Esto se hacer para verificar que el objeto no se ha modificado desde que se cifró.

### Ejemplo: algoritmo asimétrico (empaquetado de RSA a 1 clave) RSA-OAEP-SHA
<a name="s3-encryption-migration-v1-v2-ex-rsa"></a>

`StorageMode` puede ser `ObjectMetadata` o `InstructionFile`.

**Antes de la migración**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Después de la migración**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

## Actualización de clientes de la versión 2 para que dejen de leer formatos de la versión 1
<a name="s3-encryption-migration-v1-v2-v2-cleanup"></a>

Con el tiempo, todos los objetos acabarán cifrándose o volviéndose a cifrar con un cliente de la versión 2. *Una vez completada esta conversión*, puede deshabilitar la compatibilidad con la versión 1 en los clientes de la versión 2 estableciendo la propiedad `SecurityProfile` en `SecurityProfile.V2`, como se muestra en el siguiente fragmento de código.

```
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
```

# Migración del cliente de cifrado Amazon S3 (V2 a V4)
<a name="s3-encryption-migration-v2-v4"></a>

**nota**  
Si utiliza la V1 y desea migrar a la V4, primero debe migrar a la V2. Consulte [Migración del cliente de cifrado Amazon S3 (V1 a V2)](s3-encryption-migration-v1-v2.md).

En este tema se muestra cómo migrar las aplicaciones de la versión 2 (V2) del cliente de cifrado Amazon Simple Storage Service (Amazon S3) a la versión 4 (V4) y cómo garantizar la disponibilidad de las aplicaciones durante todo el proceso de migración. La versión 4 utiliza AES-GCM con un compromiso clave para el cifrado de contenido e introduce políticas de compromiso para mejorar la seguridad contra los ataques de sustitución de claves.

[El cliente V4 está disponible en el paquete Amazon.Extensions.S3.Encryption.](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet 

**importante**  
**Cambios importantes: los** clientes V4 configurados con la `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` política no pueden descifrar los objetos cifrados con los clientes V1 o V2. Solo los clientes de la versión V2 más recientes pueden descifrar los objetos cifrados en la V4 con un compromiso clave. Antes de pasar a la `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` política, debe volver a cifrar todos los datos existentes mediante clientes de la versión 4 que tengan el compromiso de claves activado.

## Comprender los conceptos de la versión 4
<a name="s3-encryption-migration-v2-v4-concepts"></a>

La versión 4 utiliza AES-GCM con un compromiso clave con el cifrado de contenido e introduce conceptos de seguridad clave que mejoran la protección de sus datos cifrados:

### Política de compromiso
<a name="s3-encryption-migration-v2-v4-concepts-policy"></a>

La política de compromiso controla la forma en que el cliente de cifrado gestiona el compromiso de claves durante las operaciones de cifrado y descifrado. La versión 4 admite tres políticas de compromiso:

`FORBID_ENCRYPT_ALLOW_DECRYPT`  
*Cifrado:* sin compromiso  
*Descifrado:* permite objetos que no se comprometen  
*Seguridad:* no impone el compromiso y puede permitir la manipulación  
*Compatibilidad:* todas las implementaciones de la versión 2 y la versión 4 pueden leer objetos cifrados con esta política

`REQUIRE_ENCRYPT_ALLOW_DECRYPT`  
*Cifrado:* con un compromiso clave  
*Descifrado:* permite confirmar y no comprometer objetos  
*Seguridad:* los objetos nuevos están protegidos contra los ataques de sustitución de claves, y los objetos antiguos siguen siendo legibles  
*Compatibilidad:* solo la versión 4 admite esta política

`REQUIRE_ENCRYPT_REQUIRE_DECRYPT`(Predeterminado para la V4)  
*Cifrado:* con compromiso clave  
*Descifrado:* solo se consignan objetos  
*Seguridad:* cumplimiento del compromiso total para una máxima seguridad  
*Compatibilidad:* solo la versión 4 admite esta política

### AES GCM con un compromiso clave
<a name="s3-encryption-migration-v2-v4-concepts-aesgcm"></a>

La V4 utiliza el AES-GCM con un compromiso clave para el cifrado de contenido, lo que proporciona una seguridad mejorada:
+ *Protección contra la manipulación:* protege contra los ataques de sustitución de claves al vincular criptográficamente la clave a los datos cifrados.
+ *Compatibilidad de versiones:* los objetos cifrados con un compromiso de clave solo pueden descifrarlos los clientes V4 y las versiones más recientes.

**aviso**  
Antes de habilitar el cifrado por compromiso de clave en producción, asegúrese de que todas las aplicaciones que necesitan descifrar los objetos se hayan actualizado a la versión 4 o a una versión más reciente, ya que el cliente V2 está en desuso.

## Actualice los clientes existentes para leer los formatos V4
<a name="s3-encryption-migration-v2-v4-update-clients"></a>

El cliente de cifrado V4 utiliza algoritmos de cifrado que las versiones anteriores del cliente no admiten. El primer paso de la migración consiste en actualizar los clientes de la versión 2 para que puedan leer el nuevo formato de la versión 4.

### Update NuGet Package Dependencies
<a name="s3-encryption-migration-v2-v4-update-nuget"></a>

Actualice sus aplicaciones para utilizar la última versión del paquete [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption), que incluye compatibilidad con la versión 4. Realice los siguientes pasos en cada una de sus aplicaciones:

1. Actualice al paquete [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) más reciente. **Si su proyecto depende directamente del .S3 o. AWSSDK AWSSDK** ** KeyManagementService**paquetes, debe actualizar esas dependencias o eliminarlas para que sus versiones actualizadas se incluyan en este nuevo paquete.

1. Asegúrese de que sus `using` declaraciones hagan referencia al espacio de nombres correcto:

   ```
   using Amazon.Extensions.S3.Encryption;
   using Amazon.Extensions.S3.Encryption.Primitives;
   ```

1. Recompile y vuelva a implementar la aplicación.

Sus clientes V2 actuales seguirán trabajando con el paquete actualizado y podrán descifrar los objetos cifrados por los clientes V4 (en función de la política de compromiso utilizada).

### Cree e implemente aplicaciones
<a name="s3-encryption-migration-v2-v4-build-deploy"></a>

Tras actualizar las dependencias de sus NuGet paquetes:

1. Cree su aplicación para asegurarse de que todas las dependencias se resuelvan correctamente.

1. Pruebe la aplicación en un entorno de desarrollo para comprobar que la funcionalidad existente sigue funcionando.

1. Implemente la aplicación actualizada en su entorno de producción.

Esta actualización permite a sus clientes de V2 existentes descifrar los objetos que serán cifrados por los clientes de V4, lo que garantiza la compatibilidad durante el proceso de migración.

## Migre a clientes V4
<a name="s3-encryption-migration-v2-v4-migrate"></a>

Tras actualizar sus clientes actuales para que lean el nuevo formato de cifrado, puede proceder a actualizar sus aplicaciones de forma segura para que utilicen clientes de cifrado y descifrado V4. El cliente V4 proporciona una seguridad mejorada mediante el compromiso con las claves y, al mismo tiempo, mantiene la compatibilidad con los objetos cifrados existentes.

### Proceso de migración en 4 pasos
<a name="s3-encryption-migration-v2-v4-migrate-steps"></a>

La migración de la V2 a la V4 sigue un proceso estructurado de 4 pasos para garantizar la compatibilidad y la seguridad. Cada paso representa una configuración específica que debe implementarse en todas las aplicaciones antes de continuar con el siguiente paso.

1. **Paso 0: Cliente V2 (punto de partida)**: su implementación V2 existente

1. **Paso 1: Compatibilidad con V2**: migre al cliente V4 y mantenga un comportamiento de cifrado compatible con la V2

1. **Paso 2: Versión 4 con escritura con compromiso de clave**: comience a cifrar con compromiso de clave y, al mismo tiempo, permita descifrar los objetos heredados

1. **Paso 3: V4 con plena aplicación**: se requiere el compromiso de clave tanto para el cifrado como para el descifrado

### Paso 0: Cliente V2 (punto de partida)
<a name="s3-encryption-migration-v2-v4-step0"></a>

Esto representa la configuración de su cliente V2 existente. Este paso muestra el estado inicial antes de la migración.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 0: V2 Client - Starting configuration
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext);

#pragma warning disable 0618
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
#pragma warning enable 0618

var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

### Paso 1: Compatibilidad entre V4 y V2
<a name="s3-encryption-migration-v2-v4-step1"></a>

Migre al cliente V4 manteniendo un comportamiento idéntico al de la V2. En este paso se utiliza una `FORBID_ENCRYPT_ALLOW_DECRYPT` política para cifrar sin compromiso y permitir el descifrado de todos los objetos.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 1: V4 Client with V2 compatibility
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcm);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamiento:** cifra sin compromiso, puede descifrar tanto los objetos que se están confirmando como los que no lo están. Comportamiento idéntico al de la V2.

### Paso 2: V4 con escrituras clave
<a name="s3-encryption-migration-v2-v4-step2"></a>

Comience a cifrar con el compromiso de clave y, al mismo tiempo, mantenga la compatibilidad con versiones anteriores para el descifrado. En este paso se utiliza `REQUIRE_ENCRYPT_ALLOW_DECRYPT` la política.

**aviso**  
Antes de implementar el paso 2, asegúrese de que todos los lectores se hayan actualizado al paso 1 o a una versión posterior para gestionar el cifrado por compromiso de clave.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 2: V4 Client with key commitment writes
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamiento:** cifra con compromiso, puede descifrar tanto los objetos confirmados como los que no se comprometen. Los objetos nuevos están protegidos contra los ataques de sustitución de claves.

### Paso 3: V4 con plena aplicación
<a name="s3-encryption-migration-v2-v4-step3"></a>

Exija un compromiso clave tanto para el cifrado como para el descifrado. En este paso se utiliza una `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` política para garantizar la máxima seguridad.

**aviso**  
Antes de implementar el paso 3, asegúrese de que todos los objetos del sistema se hayan vuelto a cifrar con la clave (paso 2). Este paso no podrá descifrar los objetos cifrados sin compromiso.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 3: V4 Client with full key commitment enforcement
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamiento:** cifra con compromiso, solo descifra los objetos cifrados con compromiso. Máxima seguridad contra los ataques de sustitución de claves.

## Ejemplos de configuración adicionales
<a name="s3-encryption-migration-v2-v4-examples"></a>

En esta sección se proporcionan ejemplos adicionales para configurar los clientes de la versión 4 con diferentes opciones durante la migración.

### Habilitación de Legacy Support
<a name="s3-encryption-migration-v2-v4-examples-legacy"></a>

Para permitir que los clientes V4 lean los objetos cifrados por los clientes V1 y V2, configure el cliente con una política de compromiso que permita el descifrado tradicional:

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

// Configure V4 client to read V1/V2 objects
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};

// This configuration allows:
// - Encryption: With commitment (secure)
// - Decryption: Both V2 (non-committing) and V4 (committing) objects
```

Utilice esta configuración durante la migración cuando necesite descifrar objetos cifrados por clientes antiguos y, al mismo tiempo, garantizar que los nuevos objetos estén cifrados con mayor seguridad.

### Configuración del método de almacenamiento
<a name="s3-encryption-migration-v2-v4-examples-storage"></a>

La versión 4 admite dos métodos de almacenamiento para los metadatos de cifrado. Elija el método que mejor se adapte a su caso de uso:

**Metadatos de objetos (predeterminados)**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
// Encryption metadata is stored in S3 object metadata
```

**Archivo de instrucciones**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.InstructionFile
};
// Encryption metadata is stored in a separate S3 object (instruction file)
```

Úselo `InstructionFile` cuando necesite conservar los metadatos de los objetos para otros fines o cuando trabaje con objetos que tienen limitaciones de tamaño de los metadatos.

### Configuración de la política de compromiso
<a name="s3-encryption-migration-v2-v4-examples-policy"></a>

Elija la política de compromiso adecuada en función de sus requisitos de seguridad y de la fase de migración:

**Fase de migración (compatibilidad con la versión 2)**

```
// For migration: encrypt without commitment, allow all decryption
var migrationConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT);
```

**Fase de transición (recomendada)**

```
// For transition: encrypt with commitment, allow legacy decryption
var transitionConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
```

**Fase de seguridad total**

```
// For maximum security: require commitment for both encryption and decryption
var secureConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT);
```

Comience con `FORBID_ENCRYPT_ALLOW_DECRYPT` la migración inicial, pase a la fase `REQUIRE_ENCRYPT_ALLOW_DECRYPT` de transición y, finalmente, utilícela `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` cuando todos los clientes se hayan actualizado y todos los objetos se hayan vuelto a cifrar con compromiso.