Uso de AWS Secrets Manager en GitLab - AWS Secrets Manager

Uso de AWS Secrets Manager en GitLab

AWS Secrets Manager se integra con GitLab. Puede aprovechar los secretos de Secrets Manager para proteger sus credenciales de GitLab, a fin de que dejen de estar codificadas en GitLab. GitLab Runner recupera estos secretos de Secrets Manager cuando su aplicación ejecuta un trabajo en las canalizaciones de CI/CD de GitLab.

Para usar esta integración, debe crear un proveedor de identidad OpenID Connect (OIDC) en IAM de AWS Identity and Access Management y un rol de IAM. Esto permite a GitLab Runner acceder a su secreto de Secrets Manager. Para obtener más información sobre GitLab CI/CD y OIDC, consulte la documentación de GitLab.

Consideraciones

Si utiliza una instancia de GitLab privada, no puede utilizar esta integración de Secrets Manager. Más bien, consulte la documentación de GitLab para las instancias privadas.

Requisitos previos

Para integrar Secrets Manager con GitLab, se deben cumplir los siguientes requisitos previos:

  1. Creación de un secreto de AWS Secrets Manager

    Necesitará un secreto de Secrets Manager que se recupere en su trabajo de GitLab y que elimine el requisito de realizar una codificación rígida para estas credenciales. El ID secreto de Secrets Manager será necesario cuando configure su canalización de GitLab. Para obtener más información, consulte Creación de un secreto de AWS Secrets Manager.

  2. Transformación de GitLab en el proveedor de OIDC en la consola de IAM.

    En este paso, convertirá a GitLab en su proveedor de OIDC en la consola de IAM. Para obtener más información, consulte Crear un proveedor de identidad de OpenID Connect (OIDC) y la documentación de GitLab.

    Al crear el proveedor de OIDC en la consola de IAM, debe utilizar las siguientes configuraciones:

    1. Establezca provider URL en su instancia de GitLab. Por ejemplo, gitlab.example.com.

    2. Establezca audience o aud en sts.amazonaws.com.

  3. Creación de una política y un rol de IAM

    Deberá crear un rol de IAM y una política. GitLab asume este rol con AWS Security Token Service (STS). Para obtener más información, consulte Crear un rol mediante políticas de confianza personalizadas.

    1. En la consola de IAM, utilice la siguiente configuración al crear el rol de IAM:

      • Establece Trusted entity type en Web identity.

      • Establece Group en your GitLab group.

      • Establezca Identity provider en la misma URL del proveedor (la instancia de GitLab) que utilizó en el paso 2.

      • Establezca Audience en la misma audiencia que utilizó en el paso 2.

    2. El siguiente ejemplo es una política de confianza que le permite a GitLab adoptar roles. La política de confianza debe incluir su Cuenta de AWS, la URL de GitLab y la ruta del proyecto.

      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRoleWithWebIdentity", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/gitlab.example.com" }, "Condition": { "StringEquals": { "gitlab.example.com:aud": [ "sts.amazon.com" ] }, "StringLike": { "gitlab.example.com:sub": [ "project_path:mygroup/project-*:ref_type:branch-*:ref:main*" ] } } } ] }
    3. También tendrá que crear una política de IAM que permita el acceso de GitLab a AWS Secrets Manager. Puede agregar esta política a la política de confianza. Para obtener más información, consulte Creación de políticas de IAM.

      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:your-secret" } ] }

Integración de AWS Secrets Manager con GitLab

Tras completar los requisitos previos, configure GitLab para que utilice Secrets Manager para proteger las credenciales.

Configure la canalización de GitLab para utilizar Secrets Manager

Deberá actualizar su archivo de configuración de CI/CD de GitLab con la siguiente información:

  • La audiencia del token establecido en STS.

  • El ID del secreto de Secrets Manager.

  • El rol de IAM que se desea que GitLab Runner asuma al ejecutar tareas en la canalización de GitLab.

  • La Región de AWS donde se almacena el secreto.

GitLab obtiene el secreto de Secrets Manager y almacena el valor en un archivo temporal. La ruta a este archivo se almacena en una variable CI/CD, similar a las variables CI/CD de tipo archivo.

A continuación, se muestra es un fragmento del archivo YAML para un archivo de configuración de CI/CD de GitLab:

variables: AWS_REGION: us-east-1 AWS_ROLE_ARN: 'arn:aws:iam::111122223333:role/gitlab-role' job: id_tokens: AWS_ID_TOKEN: aud: 'sts.amazonaws.com' secrets: DATABASE_PASSWORD: aws_secrets_manager: secret_id: "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret-name"

Para obtener más información, consulte la documentación de la integración de Secrets Manager en GitLab.

De manera opcional, puede probar su configuración de OIDC en GitLab. Para obtener más información, consulte la documentación de GitLab para probar la configuración de OIDC.

Solución de problemas

La siguiente información puede ayudar a solucionar problemas comunes que encuentre a la hora de integrar Secrets Manager con GitLab.

Problemas con la canalización de GitLab

Si tiene problemas con la canalización de GitLab, asegúrase de lo siguiente:

  • El archivo YAML tiene el formato correcto. Para obtener más información, consulte la documentation de GitLab.

  • La canalización de GitLab asume el rol correcto, tiene los permisos adecuados y el acceso al secreto de AWS Secrets Manager correcto.

Recursos adicionales

Los siguientes recursos pueden ayudar a solucionar problemas con GitLab y AWS Secrets Manager: