SEC02-BP03 Almacenamiento y uso seguros de secretos - Marco de AWS Well-Architected

SEC02-BP03 Almacenamiento y uso seguros de secretos

Una carga de trabajo necesita una capacidad automatizada para demostrar su identidad a bases de datos, recursos y servicios de terceros. Para ello, se utilizan credenciales de acceso secretas, como claves de acceso a API, contraseñas y tokens OAuth. El uso de un servicio creado específicamente para almacenar, administrar y rotar estas credenciales ayuda a reducir la probabilidad de que dichas credenciales se vean comprometidas.

Resultado deseado: implementación de un mecanismo de administración segura de las credenciales de las aplicaciones que logre los siguientes objetivos:

  • Identificar qué secretos son necesarios para la carga de trabajo.

  • Reducir el número de credenciales de larga duración necesarias y sustituirlas por credenciales de corta duración cuando sea posible.

  • Establecer un almacenamiento seguro y una rotación automatizada de las credenciales restantes de larga duración.

  • Auditar el acceso a los secretos que existen en la carga de trabajo.

  • Supervisar de forma continua para verificar que no se incruste ningún secreto en el código fuente durante el proceso de desarrollo.

  • Reduzca la probabilidad de que las credenciales se divulguen por accidente.

Patrones comunes de uso no recomendados:

  • No rotar las credenciales.

  • Almacenar credenciales a largo plazo en el código fuente o en archivos de configuración.

  • Almacenar credenciales en reposo sin cifrar.

Beneficios de establecer esta práctica recomendada:

  • Los secretos se almacenan cifrados en reposo y en tránsito.

  • El acceso a las credenciales se controla a través de una API (considérela como una máquina expendedora de credenciales).

  • El acceso a una credencial (tanto de lectura como de escritura) se audita y registra.

  • Separación de preocupaciones: la rotación de credenciales la hace un componente independiente, que puede separarse del resto de la arquitectura.

  • Los secretos se distribuyen automáticamente bajo demanda a los componentes de software, y la rotación se produce en una ubicación central.

  • El acceso a las credenciales puede controlarse de forma detallada.

Nivel de riesgo expuesto si no se establece esta práctica recomendada: alto

Guía para la implementación

En el pasado, las credenciales que se utilizaban para autenticarse en bases de datos, API de terceros, tokens y otros secretos podían estar incrustadas en el código fuente o en archivos del entorno. AWS proporciona varios mecanismos para almacenar estas credenciales de forma segura, rotarlas automáticamente y auditar su uso.

La mejor manera de abordar la administración de secretos es seguir la norma de eliminar, sustituir y rotar. La credencial más segura es aquella que no se tiene que almacenar, administrar ni manejar. Es posible que haya credenciales que ya no sean necesarias para el funcionamiento de la carga de trabajo y que, por tanto, puedan eliminarse de forma segura.

En el caso de las credenciales que siguen siendo necesarias para el correcto funcionamiento de la carga de trabajo, podría existir la oportunidad de sustituir una credencial de larga duración por una credencial temporal o de corta duración. Por ejemplo, en lugar de codificar rígidamente una clave de acceso secreta de AWS, considere la posibilidad de sustituir esa credencial de larga duración por una credencial temporal a través de roles de IAM.

Es posible que algunos secretos de larga duración no puedan eliminarse ni sustituirse. Estos secretos se pueden almacenar en un servicio, como AWS Secrets Manager, donde se pueden almacenar, administrar y rotar de forma centralizada periódicamente.

Una auditoría del código fuente y de los archivos de configuración de la carga de trabajo puede revelar muchos tipos de credenciales. La siguiente tabla resume las estrategias para manejar los tipos comunes de credenciales:

Tipo de credenciales Descripción Estrategia sugerida
claves de acceso de IAM Claves de acceso y secretas de AWS IAM que se utilizan para asumir roles de IAM dentro de una carga de trabajo Reemplazo: utilice los roles de IAM asignados a las instancias de cómputo (como Amazon EC2 o AWS Lambda) en su lugar. Para garantizar la interoperabilidad con terceros que tengan que acceder a los recursos en la Cuenta de AWS, pregunte si admiten el acceso entre cuentas de AWS. En el caso de aplicaciones móviles, considere la posibilidad de usar credenciales temporales a través de grupos de identidades de Amazon Cognito (identidades federadas). Para las cargas de trabajo que se ejecutan fuera de AWS, considere IAM Roles Anywhere o Activaciones híbridas de AWS Systems Manager.
Claves de SSH Las claves privadas de Secure Shell se utilizan para iniciar sesión en las instancias de EC2 de Linux, de forma manual o como parte de un proceso automatizado Reemplazo: utilice AWS Systems Manager o EC2 Instance Connect para proporcionar acceso mediante programación y humano a las instancias de EC2 mediante roles de IAM.
Credenciales de aplicaciones y bases de datos Contraseñas: cadena de texto sin formato Rotación: almacene las credenciales en AWS Secrets Manager y establezca una rotación automatizada si es posible.
Credenciales de Amazon RDS y Aurora Admin Database Contraseñas: cadena de texto sin formato Reemplazo: utilice la integración de Secrets Manager en Amazon RDS o Amazon Aurora. Además, algunos tipos de bases de datos de RDS pueden utilizar roles de IAM en lugar de contraseñas en algunos casos de uso (para obtener más información, consulte Autenticación de bases de datos de IAM).
Tokens OAuth Tokens secretos: cadena de texto sin formato Rotación: almacene los tokens en AWS Secrets Manager y configure la rotación automatizada.
Tokens y claves de API Tokens secretos: cadena de texto sin formato Rotación: almacénelas en AWS Secrets Manager y establezca una rotación automatizada si es posible.

Un patrón común de uso no recomendado es incrustar claves de acceso de IAM dentro del código fuente, los archivos de configuración o las aplicaciones móviles. Cuando se necesite una clave de acceso de IAM para comunicarse con un servicio de AWS, utilice credenciales de seguridad temporales (a corto plazo). Estas credenciales a corto plazo se pueden proporcionar mediante roles de IAM para instancias de EC2, roles de ejecución para funciones de Lambda, roles de IAM de Cognito para el acceso de usuarios móviles y políticas de IoT Core para dispositivos de IoT. Al interactuar con terceros, prefiera delegar el acceso a un rol de IAM con el acceso necesario a los recursos de su cuenta en lugar de configurar un usuario de IAM y enviar al tercero la clave de acceso secreta de ese usuario.

Hay muchos casos en los que la carga de trabajo requiere el almacenamiento de los secretos necesarios para interoperar con otros servicios y recursos. AWS Secrets Manager está diseñado específicamente para administrar estas credenciales de forma segura, así como para el almacenamiento, el uso y la rotación de los tokens de API, las contraseñas y otras credenciales.

AWS Secrets Manager proporciona cinco funciones clave para garantizar el almacenamiento y la administración seguros de las credenciales confidenciales: cifrado en reposo, cifrado en tránsito, auditoría exhaustiva, control de acceso detallado y rotación de credenciales ampliable. También son aceptables otros servicios de administración de secretos de socios de AWS o soluciones desarrolladas localmente que proporcionen capacidades y garantías similares.

Pasos para la implementación

  1. Identifique las rutas de código que contienen credenciales con codificación rígida mediante herramientas automatizadas, como Amazon CodeGuru.

    1. Utilice Amazon CodeGuru para analizar los repositorios de código. Una vez finalizada la revisión, filtre por Type=Secrets en CodeGuru para encontrar líneas de código que presentan problemas.

  2. Identifique las credenciales que pueden eliminarse o sustituirse.

    1. Identifique las credenciales que ya no sean necesarias y márquelas para eliminarlas.

    2. En el caso de las claves secretas de AWS que estén incrustadas en el código fuente, sustitúyalas por roles de IAM asociados a los recursos necesarios. Si parte de la carga de trabajo se encuentra fuera de AWS, pero requiere credenciales de IAM para acceder a los recursos de AWS, considere la posibilidad de usar IAM Roles Anywhere o Activaciones híbridas de AWS Systems Manager.

  3. Para otros secretos de terceros de larga duración que requieran el uso de la estrategia de rotación, integre Secrets Manager en el código para recuperar secretos de terceros en tiempo de ejecución.

    1. La consola de CodeGuru puede crear automáticamente un secreto en Secrets Manager con las credenciales detectadas.

    2. Integre la recuperación de secretos desde Secrets Manager en el código de la aplicación.

      1. Las funciones de Lambda sin servidor pueden utilizar una extensión de Lambda independiente del lenguaje.

      2. Para las instancias o contenedores de EC2, AWS proporciona un ejemplo de código del lado del cliente para recuperar secretos de Secrets Manager en varios lenguajes de programación populares.

  4. Revise periódicamente la base de código y vuelva a analizarla para verificar que no se hayan agregado nuevos secretos al código.

    1. Considere la posibilidad de utilizar una herramienta, como git-secrets, para evitar confirmar nuevos secretos en el repositorio del código fuente.

  5. Supervisión de la actividad de Secrets Manager para detectar indicios de uso inesperado, acceso inapropiado a secretos o intentos de eliminar secretos.

  6. Reduzca la exposición humana a las credenciales. Restrinja el acceso para leer, escribir y modificar credenciales a un rol de IAM dedicado a este fin, y solo proporcione acceso para asumir el rol a un pequeño subconjunto de usuarios operativos.

Recursos

Prácticas recomendadas relacionadas:

Documentos relacionados:

Videos relacionados:

Talleres relacionados: