Descarga paquetes de Python con acceso directo al repositorio

Después de integrar Assured OSS con Security Command Center, los paquetes de Assured Open Source Software se alojan en un repositorio de Artifact Registry que se crea en un proyecto que controlas.

En esta página, se explica cómo puedes conectarte al repositorio de Artifact Registry para que Assured OSS acceda directamente a los paquetes de Python y los descargue.

Este documento se aplica solo al nivel pagado de Assured OSS. Para el nivel gratuito, consulta Descarga paquetes de Python mediante el acceso directo al repositorio para el nivel gratuito.

Antes de comenzar

  1. Integra Assured OSS con Security Command Center.

  2. Valida la conectividad a Assured OSS para las cuentas de servicio solicitadas.

  3. Instala la versión más reciente de Google Cloud CLI.

  4. Si ya instalaste Google Cloud CLI, asegúrate de tener la versión más reciente mediante la ejecución del siguiente comando:

    gcloud components update
    

Configura la autenticación

Puedes autenticarte en el repositorio de paquetes de Python de Assured OSS mediante uno de los siguientes métodos:

  • Autentica con un llavero de claves
  • Autentica con una clave de cuenta de servicio

En las siguientes secciones, se describe cómo configurar estos métodos de autenticación.

Autenticar con llavero de claves

Si deseas usar el llavero de claves de Python para autenticarte en Artifact Registry, consulta Cómo autenticar con llavero de claves y la información sobre el orden de búsqueda de credenciales. Te recomendamos que uses el llavero de claves de Python para la autenticación.

Si deseas configurar el llavero de claves para la autenticación, haz lo siguiente:

  1. Instala la biblioteca keyring:

    pip install keyring
    
  2. Instala el backend de Artifact Registry:

    pip install keyrings.google-artifactregistry-auth
    
  3. Enumera los backends para confirmar la instalación:

    keyring --list-backends
    

    La lista debe incluir lo siguiente:

    • ChainerBackend(priority:10)
    • GooglePythonAuth(priority:9)
  4. Para obtener información sobre cómo configurar las credenciales predeterminadas de la aplicación, consulta Configura la autenticación.

    Este paso garantiza que el auxiliar de credenciales de Assured OSS obtenga tu clave cuando se conecte con los repositorios.

Autentica con una clave de cuenta de servicio

Autentícate con una clave de cuenta de servicio cuando la aplicación requiera autenticación con un nombre de usuario y una contraseña.

Reemplaza la URL del repositorio de paquetes https://us-python.pkg.dev/PROJECT_ID/assuredoss-python/simple por la URL https://_json_key_base64:BASE64_KEY@us-python.pkg.dev/PROJECT_ID/assuredoss-python/simple

Reemplaza lo siguiente:

  • Reemplaza PROJECT_ID por el ID del proyecto que seleccionaste cuando configuraste Assured Open Source Software.
  • Reemplaza BASE64_KEY por la codificación en base64 de todo el archivo de claves JSON de la cuenta de servicio. Para convertir todo el archivo de claves JSON de la cuenta de servicio a la codificación en base64, usa el siguiente comando:

    BASE64_KEY=$(cat KEY_FILE_LOCATION | base64)
    

    Reemplaza KEY_FILE_LOCATION por la ubicación del archivo de claves JSON de la cuenta de servicio.

Instalar paquetes

En las siguientes instrucciones, se supone que usas PyPI como repositorio para descargar tus dependencias. Si usas otro repositorio, debes seguir diferentes pasos para descargar las dependencias.

Instala paquetes existentes en Assured OSS

Para especificar los paquetes de Assured OSS de Python que deseas descargar, crea dos archivos requirements.txt. Los archivos de muestra son los siguientes:

  • requirements-google.txt

    # Packages present in Google's Artifact Registry
    
    urllib3==1.26.11 --hash=sha256:1cffe1aa066363a75c856f261c8fce62d87f7c40ce0f46453ea12bf652b12a13
    jsonschema==4.13.0 --hash=sha256:29895bfe55b93b75552fbdd1e09aa0c82b7c1c9395d4f267e10c7d43cd31a74e
    
  • requirements-pypi.txt

    # Packages present in Google's Artifact Registry are mentioned here so that pip
    # downloads their dependencies from PyPI.
    
    urllib3==1.26.11
    jsonschema==4.13.0
    
    # Below this comment, add any package version which you need but is NOT
    # present in Google's Artifact Registry and therefore needs to be downloaded from
    # PyPI.
    

Para descargar los paquetes, ejecuta los siguientes comandos:

  • Si quieres descargar los paquetes obligatorios que están presentes en Artifact Registry para Assured OSS, ejecuta lo siguiente:

     pip install --require-hashes --requirement=requirements-google.txt --index-url https://_json_key_base64:BASE64_KEY@us-python.pkg.dev/PROJECT_ID/assuredoss-python repo/simple  -v --no-deps
    

    Ten en cuenta lo siguiente:

    • --require-hashes es opcional. Si se incluyen, los hash se especifican para todos los paquetes y todas las versiones de los paquetes en el archivo requirements.txt.
    • -v es opcional. Si se especifica, el comando brinda más resultados.
  • Si quieres descargar los paquetes obligatorios que no están presentes en Artifact Registry para Assured OSS, ejecuta lo siguiente:

     pip install --requirement=requirements-pypi.txt --index-url https://pypi.org/simple -v
    

    Este comando también descarga las dependencias faltantes de los paquetes que descargaste con el comando anterior.

Enumerar todos los paquetes de Python disponibles en Assured OSS

Si quieres usar una API para obtener una lista de todos los paquetes de Python en el repositorio de Artifact Registry, consulta Enumera todos los paquetes de Python disponibles en Assured OSS.

Genera el archivo requirements-google.txt

En esta sección, se proporciona información adicional sobre cómo generar el archivo requirements-google.txt que necesitas para descargar los paquetes de Python. Para descargar el hash y generar el archivo requirements-google.txt para tu entorno, puedes usar una de las dos opciones siguientes:

  • Usa una secuencia de comandos a fin de generar un único archivo de requisitos para todos los artefactos.

  • Descarga un archivo de requisitos separado para cada artefacto.

En las siguientes secciones, se proporciona más información sobre estas opciones.

Opción 1: Usa una secuencia de comandos a fin de generar un solo archivo de requisitos para todos los artefactos

Usa la secuencia de comandos generator.sh a fin de generar un solo archivo requirements-google.txt para todos los paquetes de Python (junto con sus hashes) disponibles con Assured OSS para el sistema operativo Linux. Los paquetes deben cumplir con limitaciones, como la versión de Python, la arquitectura de la máquina y el sistema operativo. Luego, puedes borrar las versiones del paquete que no necesitas y usar el archivo resultante.

La secuencia de comandos generator.sh es útil de las siguientes dos maneras:

  • Genera la lista más reciente de las versiones de paquetes de Python disponibles con Assured OSS que se pueden instalar con éxito en tu sistema.
  • Genera el archivo requirements-google.txt junto con todos los hash.

La secuencia de comandos requerida y su archivo README.md están disponibles en un bucket de Cloud Storage (gs://cloud-aoss/utils/python-requirements-txt/v1.0) que se puede descargar con la herramienta de línea de comandos de gsutil.

Para descargar la secuencia de comandos y el archivo README.md, sigue estos pasos:

  1. Autentica con la cuenta de servicio para acceder al bucket de Cloud Storage con el siguiente comando:

    gcloud auth activate-service-account --key-file KEY_FILE
    

    Reemplaza KEY_FILE por la ruta al archivo que contiene las credenciales de la cuenta de servicio que se proporcionó durante la configuración.

  2. Descarga generator.sh en tu máquina con el siguiente comando:

    gsutil cp -r gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh PATH_TO_LOCAL_STORE
    

    Reemplaza PATH_TO_LOCAL_STORE por la ruta de acceso local en la que deseas guardar el archivo descargado.

  3. Descarga el archivo README.md con el siguiente comando:

    gsutil cp -r gs://cloud-aoss/utils/python-requirements-txt/v1.0/README.md PATH_TO_LOCAL_STORE
    

    Reemplaza PATH_TO_LOCAL_STORE por la ruta de acceso local en la que deseas guardar el archivo descargado. El archivo README.md contiene instrucciones para usar la secuencia de comandos.

Para ejecutar la secuencia de comandos, usa los siguientes comandos:

  • Para generar el archivo requirements-google.txt, ejecuta el siguiente comando:

     chmod +x generator.sh
     ./generator.sh
    
  • Para obtener la información del paquete en un archivo CSV, ejecuta el siguiente comando:

    chmod +x generator.sh
    ./generator.sh -i
    

Opción 2: Descarga requirements.txt para cada artefacto requerido

También puedes descargar un archivo requirements.txt independiente (que contenga el hash) para cada artefacto de Python y, luego, combinarlos en un solo archivo requirements.txt.

Los hashes de artefactos están disponibles en un bucket de Cloud Storage, que se puede descargar con la herramienta de línea de comandos de gsutil. Los hashes para cada paquete y una versión se encuentran en la ubicación gs://cloud-aoss/python/PACKAGE_NAME/VERSION del bucket de Cloud Storage.

Para descargar el archivo requirements.txt, sigue estos pasos:

  1. Autentica con la cuenta de servicio para acceder al bucket de Cloud Storage con el siguiente comando:

    gcloud auth activate-service-account --key-file KEY_FILE
    

    Reemplaza KEY_FILE por la ruta de acceso al archivo que contiene las credenciales de la cuenta de servicio.

  2. Descarga el archivo requirements.txt de un paquete y una versión específicos en tu máquina local con el siguiente comando:

    gsutil cp -r gs://cloud-aoss/python/PACKAGE_NAME/VERSION PATH_TO_LOCAL_STORE
    

    Reemplaza lo siguiente:

    • PACKAGE_NAME: Es el nombre del paquete.
    • VERSION: Es la versión del paquete.
    • PATH_TO_LOCAL_STORE: Es la ruta de acceso local en la que deseas descargar el archivo.

    Comando de muestra:

    gsutil cp -r gs://cloud-aoss/python/bleach/5.0.0 /tmp/bleach

    Archivo requirements.txt de muestra:

    bleach==5.0.0 \
     --hash=sha256:6d286e765bfd3e309209cfa1d063e4d46afa966dea8cb97431c02b1e3067d812
    

    El contenido de cada archivo requirements.txt se puede combinar en un solo archivo requirements-google.txt.

¿Qué sigue?