Saltar al contenido

¿Cómo administro los secretos y las claves de acceso de las tareas y los servicios de Amazon ECS?

4 minutos de lectura
0

He configurado Amazon Elastic Container Service (Amazon ECS) para acceder a información confidencial, como credenciales de bases de datos o claves de API. Quiero administrar y recuperar de forma segura los secretos que no están codificados de forma fija.

Resolución

Para administrar secretos y claves de acceso que no estén codificadas de forma fija, utiliza AWS Secrets Manager o el Almacén de parámetros, una función de AWS Systems Manager.

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Creación de un secreto

Para crear un secreto, utiliza la consola de Secrets Manager o la AWS CLI. Para almacenar el secreto con el Almacén de parámetros, ejecuta el siguiente comando put-parameter:

aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue

Nota: Sustituye awsExampleParameter por tu parámetro y awsExampleValue por tu secreto.

Permitir que las tareas de Amazon ECS accedan a los secretos

Amazon ECS utiliza un rol de ejecución de tareas de AWS Identity and Access Management (IAM) para obtener información de los secretos de Secrets Manager o del Almacén de parámetros. Crea una política de IAM para el rol que tenga los permisos mínimos necesarios. Si usas Secrets Manager, el rol de IAM debe tener los permisos secretsmanager:GetSecretValue. Si usas el Almacén de parámetros, el rol de IAM debe tener los permisos ssm:GetParameters y kms:Decrypt.

Ejemplo de política de Secrets Manager:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
    }
  ]
}

Nota: Sustituye arn:aws:secretsmanager:region:account-id:secret:secret-name por el ARN del secreto.

Ejemplo de política del Almacén de parámetros:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:GetParameters",
                "ssm:GetParameterHistory"
            ],
            "Resource": "arn:aws:ssm:region:account-id:parameter/parameter-name"
        },
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:region:account-id:key/kms-key-id"
        }
    ]
}

Nota: Sustituye arn:aws:ssm:region:account-id:parameter/parameter-name por el ARN del parámetro y arn:aws:kms:region:account-id:key/kms-key-id por tu clave de AWS Key Management Service (AWS KMS).

Adjunta la política de IAM al rol de ejecución de tareas de Amazon ECS.

Acceso a los secretos de las tareas de Amazon ECS

Puedes pasar datos confidenciales (por ejemplo, claves de API o credenciales) como parámetros o variables de entorno. En primer lugar, modifica la definición de tareas de Amazon ECS para incluir las variables de entorno o las asignaciones de secretos.

Ejemplo de asignación de secretos en una definición de tarea:

{
  "name": "MY_SECRET",
  "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
}

A continuación, pasa las variables de entorno al contenedor de Amazon ECS.

Ejemplos de containerDefinitions en la definición de la tarea:

  - name: my-container
    environment:
      - name: Example_PASSWORD
        valueFrom: arn:aws:ssm:us-west-2:123456789012:parameter/my-app/example-password

Administración de secretos con CI/CD

Utiliza variables de entorno para transmitir secretos de forma dinámica durante las implementaciones de integración continua y entrega continua (CI/CD). Obtén secretos de Secrets Manager o del Almacén de parámetros en los scripts de implementación. No codifiques de forma fija los secretos en las definiciones de tareas. En su lugar, utiliza parámetros o marcadores de posición. Para obtener más información y ver las prácticas recomendadas, consulta Strengthen the DevOps pipeline and protect data with AWS Secrets Manager, AWS KMS, and AWS Certificate Manager (Fortalecimiento de la canalización de DevOps y protección de los datos con AWS Secrets Manager, AWS KMS y AWS Certificate Manager).

Por ejemplo, si usas AWS CodePipeline, configura un paso de compilación que utilice la AWS CLI para obtener los secretos:

bashCopy codeaws secretsmanager get-secret-value --secret-id secret-name --query 'SecretString' --output text

Nota: Sustituye secret-name por tu secreto.

Solución de problemas con la administración de secretos

Si tienes problemas al usar secretos en Amazon ECS, toma las siguientes medidas:

  • Asegúrate de que el rol de IAM de la tarea de Amazon ECS tenga los permisos secretsmanager:GetSecretValue o ssm:GetParameter correctos.

  • Si recibes errores Denied, asegúrate de que la política de IAM esté asociada al rol de ejecución de tareas de Amazon ECS correcto. Además, asegúrate de que el ARN del secreto de la política de IAM sea exacto.

  • Si Amazon ECS no puede obtener el secreto, comprueba que estás utilizando la región y el secreto de AWS correctos. Para probar el secreto, ejecuta el siguiente comando get-secret-value fuera de Amazon ECS:

    aws secretsmanager get-secret-value --secret-id secret-name --region region-code

    Nota: Sustituye secret-name por el secreto y region-code por la región.

OFICIAL DE AWSActualizada hace 2 años