es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminación de datos sensibles de un repositorio Git de AWS CodeCommit con git-filter-repo.

Descubrí un script que tenía una contraseña en él y fue cometido hace muchos años al control de origen en AWS CodeCommit. Desde entonces, se creó un script completamente nuevo que hace el mismo trabajo sin una contraseña, así que todo lo que necesitaba hacer para “limpiar” era hacer que pareciera que el archivo nunca había existido, mientras se preservaba el resto del historial del repositorio de mi equipo.

GitHub escribió la documentación oficial “Eliminando datos sensibles de un repositorio” que aclara qué datos no se pueden eliminar de GitHub de forma autoservicio, pero no puedo encontrar ninguna documentación similar de AWS CodeCommit.

Decidí intentar usar las instrucciones de GitHub contra CodeCommit de todos modos, y ver cómo iba. No fue muy bien.

  1. Eliminé por completo c:\mi_repo\ de mi disco duro y lo volví a clonar desde la nube (reemplazando c:\mi_repo\.git\config desde una copia de seguridad).
  2. Desde MINGW64:/c/my_repo, ejecuté git filter-repo --invert-paths --path sub_folder/bad_script.java.
  3. En el explorador de archivos de Windows, vi que ya no existía un archivo c:\my_repo\sub_folder\bad_script.java.
  4. En SourceTree, en el commit donde se había agregado sub_folder/bad_script.java al repositorio (llamémoslo 1234567890987654321), vi que ya no estaba en la lista de archivos agregados. ¡Genial!
  5. En la consola web de AWS CodeCommit, tomé notas sobre un estado anterior: el archivo existía y tenía una contraseña en su cuerpo en:
  • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/refs/heads/main/–/sub_folder/bad_script.java?#`
  • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/commit/1234567890987654321?region=my-region`
  • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/1234567890987654321/–/sub_folder?region=my-region`
  • https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/0987654321234567890/--/sub_folder?region=my-region` (el commit987654321234567890` siendo uno posterior que no editó el archivo, pero lo encontré de esta manera navegando por el árbol de archivos de ese commit).
    1. Lo único que omití de las instrucciones de GitHub fue cometer un archivo .gitignore antes de hacer push, pero no creí que fuera relevante ya que git-filter-repo había eliminado el archivo de mi disco duro.
    2. Después de arreglar c:\my_repo\.git\config para que apunte de nuevo a AWS después de que git-filter-repo hubiera eliminado el puntero, desde MINGW64:/c/my_repo, ejecuté git push origin --force --all.
    3. En la consola web de AWS CodeCommit, https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/refs/heads/main/--/sub_folder/bad_script.java?#` había desaparecido. Obtuve una cabeceraPathDoesNotExistExceptioncon un cuerpoCould not find path sub_folder/bad_script.java;` como un gran mensaje de error rojo.
    4. Sin embargo, en la consola web de AWS CodeCommit, el archivo todavía existía y tenía una contraseña en su cuerpo en los tres URLs restantes:
  • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/commit/1234567890987654321?region=my-region`

  • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/1234567890987654321/–/sub_folder?region=my-region`
  • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/0987654321234567890/–/sub_folder?region=my-region`
    1. Eliminé completamente c:\my_repo\ de mi disco duro nuevamente y lo volví a clonar desde la nube (reemplazando c:\my_repo\.git\config desde una copia de seguridad) de nuevo, y los archivos aún no aparecen en la vista del historial de SourceTree, así que … creo que esto podría ser solo un problema de AWS?

¿Alguien ha eliminado con éxito un archivo del historial de CodeCommit? ¿Hay pasos que necesito trabajar con el personal de AWS para lograrlo, como mencionó GitHub en sus documentos para su servicio? ¿Hay algo mejor que puedo hacer con mi enfoque para limpiar bad_script.java de mi copia local del repositorio, quizás algún defecto fatal en los pasos que tomé?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para Eliminar Datos Sensibles de AWS CodeCommit

    Como experto en IT especializado en git, Amazon Web Services, AWS CodeCommit y git-filter-repo, me encontré en una situación en la que descubrí un script que tenía una contraseña en el mismo y que se había comprometido hace muchos años en el control de origen en AWS CodeCommit. Desde entonces, se ha creado un nuevo script que hace el mismo trabajo sin una contraseña, por lo que todo lo que necesitaba hacer para “limpiar” era hacer que pareciera que el archivo nunca había existido, mientras se preservaba el resto del historial del repo de mi equipo.

    Usando la documentación “Eliminación de Datos Sensibles en un Repositorio” de GitHub

    Para resolver este problema, decidí tratar de usar las instrucciones de GitHub contra CodeCommit de todos modos, y ver cómo iba. Sin embargo, no salió muy bien.

    Inicialmente, eliminé por completo c:\my_repo\ de mi disco duro y lo volví a clonar desde la nube (reemplazando c:\my_repo\.git\config desde una copia de seguridad). Desde MINGW64:/c/my_repo, ejecuté git filter-repo --invert-paths --path sub_folder/bad_script.java.

    En el Explorador de archivos de Windows, vi que ya no había un archivo c:\my_repo\sub_folder\bad_script.java. En SourceTree, en el compromiso donde se había agregado sub_folder/bad_script.java al repo (llamémoslo 1234567890987654321), vi que ya no estaba en la lista de archivos agregados.

    Consola web de AWS CodeCommit

    En la consola web de AWS CodeCommit, tomé notas sobre un estado anterior: el archivo existía y tenía una contraseña en su cuerpo:

    • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/refs/heads/main/–/sub_folder/bad_script.java?#`
    • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/commit/1234567890987654321?region=my-region`
    • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/1234567890987654321/–/sub_folder?region=my-region`
    • https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/0987654321234567890/--/sub_folder?region=my-region` _(el compromiso987654321234567890` siendo uno más reciente que no editó el archivo, pero lo encontré de esta manera navegando por el árbol de archivos de ese compromiso)_.

    Lo único que se omitió de las instrucciones de GitHub fue comprometer un archivo .gitignore antes de hacer push, pero no pensé que sería relevante, ya que git-filter-repo había eliminado el archivo de mi disco duro.

    Después de corregir c:\my_repo\.git\config para apuntar nuevamente a AWS, desde MINGW64:/c/my_repo, ejecuté git push origin --force --all.

    Estado actual de la consola web de AWS CodeCommit

    Sin embargo, en la consola web de AWS CodeCommit, el archivo todavía existía y tenía una contraseña en su cuerpo en los tres URLs restantes:

    • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/commit/1234567890987654321?region=my-region`
    • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/1234567890987654321/–/sub_folder?region=my-region`
    • `https://console.aws.amazon.com/codesuite/codecommit/repositories/my_repo/browse/0987654321234567890/–/sub_folder?region=my-region`

    A pesar de haber eliminado todas las referencias locales a ese archivo y forzar la realización de push, AWS CodeCommit todavía mostraba el archivo.

    Solución

    A partir de lo anterior, se puede concluir que eliminar un archivo del historial de CodeCommit no es tan sencillo como usar las directrices de GitHub. Puede requerir la intervención adicional del personal de AWS para llevarse a cabo.

    Una solución para limpiar datos sensibles de AWS CodeCommit es crear un repositorio vacío y luego elegir cuidadosamente qué archivos empujar a él sin incluir el archivo sensible.

    Otra solución es recrear el repositorio sin incluir el archivo sensible, pero esto perdería todo el historial anterior.

    Alternativamente, AWS proporciona un servicio conocido como “AWS Support”, donde se puede contactar al personal de AWS para resolver el problema.

    En conclusión, eliminar datos sensibles de AWS CodeCommit no es tan simple como el método de autoservicio de GitHub, y puede requerir pasos adicionales o la asistencia del personal para eliminar completamente un archivo del historial.

Comments are closed.