Tabla de contenido
El principio de integración de Jihu GitLab CI y Vault
Dos formas de integrar Jihu GitLab CI con Vault
Uso de secretos: palabra clave de bóveda
"Un dique de mil millas se derrumba en un hormiguero". La gestión de claves es para todo el ciclo de vida del desarrollo de software lo que un hormiguero es para un largo terraplén. La filtración de claves se ha convertido en un factor importante que provoca que las empresas sean atacadas por chantaje . Las claves de gestión de seguridad y cumplimiento no solo pueden evitar eficazmente que las empresas sufran pérdidas económicas importantes, sino también crear una buena cultura de seguridad corporativa, ayudando a las empresas a acelerar la entrega de software y al mismo tiempo garantizar el cumplimiento de la seguridad.
La gestión de claves debe cubrir todo el ciclo de vida del desarrollo de software. Por ejemplo, es necesario evitar la codificación rígida de las claves durante la fase de codificación, evitar que las claves se impriman en el registro de construcción durante la fase de construcción y escanear si las claves se imprimen en el registro de construcción durante la fase de construcción. Se necesita código modificado (o historial) durante la fase de prueba. Contiene información clave, etc. El propio GitLab tiene funciones de administración de claves maduras. Por ejemplo, en la etapa CI/CD Pipeline, las variables de entorno de CI se pueden usar para almacenar claves y también se pueden integrar métodos de escaneo de seguridad para la detección de claves en CI/CD Pipeline para detectar problemas en tiempo Cambie la información clave en el código para evitar fugas. Para obtener información sobre Jihu GitLab CI y administración de claves, puede ver el artículo Jihu GitLab CI/CD SSHKEY Mask . Para obtener artículos sobre el escaneo de seguridad de claves de Jihu GitLab, puede ver 1 línea de código para habilitar la "detección de claves" para proporcionar información confidencial. Datos más bloqueo de protección .
Este artículo demostrará la integración de Jihu GitLab CI y Vault para la gestión de seguridad y cumplimiento de claves.
Acerca de la bóveda
Vault es un sistema de gestión de cifrado y claves basado en identidad de código abierto lanzado por Hashorp. Utilice el principio de Denegar todo predeterminado para administrar claves como clave API, nombre de usuario y contraseña (contraseña), token de acceso (token) y certificados (certificados). Para obtener más información sobre Vault, consulte el sitio web oficial de Vault .
El principio de integración de Jihu GitLab CI y Vault
-
Configure la clave en la bóveda (ya sea UI, CLI o API);
-
Generar JWT para uso de CI Job;
-
Runner se conecta con Hashicorp y utiliza JWT para la autenticación;
-
Vault valida JWT;
-
Vault verifica el reclamo encuadernado y la política de bóveda correspondiente;
-
Vault devuelve el token de acceso;
-
Runner lee información clave de Vault para su uso.
Dos formas de integrar Jihu GitLab CI con Vault
Puede usar secrets
palabras clave o CLI para usar Vault en GitLab CI.
secrets:vault
Uso de palabras clave
secrets
Es la palabra clave utilizada en GitLab CI para leer claves de herramientas externas de administración de claves. Puede usarlo secrets:vault
para leer la información clave almacenada en el servidor de la bóveda.
Por ejemplo, el motor kv (v2) se utiliza en la bóveda para almacenar el nombre de usuario y la contraseña del almacén de imágenes del contenedor:
# 写入用户名和密码
$ vault kv put jh/docker-registry/credentials username=jh-gitlab password=passw0rd
# 读取用户名和密码
vault read -format=json jh/data/docker-registry/credentials | jq -r '.data.data'
{
"password": "passw0rd",
"username": "jh-gitlab"
}
Almacene las variables de entorno relacionadas con la bóveda en variables de GitLab CI:
-
VAULT_SERVER_URL:vault
dirección del servidor; -
VAULT_AUTH_ROLE
: El rol creado en la bóveda se utiliza para vincularse a la política correspondiente para lograr una gestión y un control refinados de las claves de almacenamiento; -
VAULT_AUTH_PATH
: La ruta de montaje del método de autenticación en Vault Auth, el valor predeterminado esjwt
.
.gitlab-ci.yml
El contenido del archivo es el siguiente:
stages:
- vault
get_credentials:
stage: vault
tags:
- vault
image:
name: vault:1.13.3
secrets:
DATABASE_PASSWORD:
vault: docker-registry/credentials/password@jh
script:
- echo $DATABASE_PASSWORD
Ver los resultados de la compilación de CI/CD Pipeline:
Puede ver que Jihu GitLab CI lee con éxito la información de la bóveda y la guarda en DATABASE_PASSWORD
el archivo nombrado. La ruta es como se muestra en la captura de pantalla del cuadro rojo.
Modo CLI
Al igual que acceder a Valut localmente a través de la CLI, puede usar varios comandos de la bóveda para agregar, eliminar, modificar y consultar claves. Sigo tomando la información clave escrita anteriormente como ejemplo para demostrar el uso de CLI en GitLab CI.
.gitlab-ci.yml
El contenido del archivo es el siguiente:
get_credentials:
stage: vault
tags:
- vault
image: vault:1.13.3
script:
# vault 服务器的地址
- export VAULT_ADDR=http://163.228.231.126:8200
# vault 认证授权所用的 token
- export VAULT_TOKEN="$(vault write -field=token auth/jwt/login role=jh jwt=$CI_JOB_JWT)"
# 从 vault 读取密钥信息
- export PASSWORD="$(vault kv get -field=password jh/docker-registry/credentials)"
# 打印密钥信息
- echo $PASSWORD
Ver los resultados de la compilación de CI/CD Pipeline:
Puede ver que Jihu GitLab CI lee correctamente la información de la bóveda.
Tenga en cuenta que la información clave leída directamente mediante la CLI se puede
echo
imprimir mediante comandos. Debe evitar imprimir la información clave durante la compilación de CI/CD Pipeline o tomar el primer método para evitar que se pierda la información clave durante la CI/CD. CD Pipeline build Fugas durante el proceso.
referencia: