Есть такой инструмент для сканирования на утечку секретов, паролей и API ключей – GitLeaks.
Очень популярный проект, но совершенно, на мой взгляд не заслуженно. Качество кода вызывает вопросы, нельзя указывать свои списки с regex паттернами для проверки, и он не умеет отдавать правильный JSON в stdout, что делает его бесполезным автоматизации или пользовании на бэкенде.
Прекрасная возможность:
-
Использовать Julia – один из лучших языков программирования, который почему-то считается нишевым. Область его применения гораздо шире HPC. Он идеально подходит для решения самых разных задач.
-
Научиться как правильно публиковаться на GitHub.
-
Научиться делать линуксовые пакеты.
Долго не будем останавливаться на коде. Код лучше писать или читать, обсуждать его не очень интересно.
Сам скрипт работает следующим образом:
Usage: julia leaquor.jl [options] Options: -h, --help Display this help message. --json Output results in JSON format. --output-file FILE Write JSON results to the specified file. --patterns FILE Load additional patterns from a YAML file. --ignore-files LIST Comma-separated list of files to ignore (e.g., "file1.txt,file2.json"). --repo URL Clone and scan a GitHub repository (e.g., https://github.com/user/repo.git). --dir PATH Scan a specific directory on the file system. --entropy-threshold FLOAT Set custom entropy threshold (default: 3.5). --log-file FILE Write logs to the specified file. Arguments: Either --repo or --dir must be provided. Examples: julia leaquor.jl --repo https://github.com/user/repo.git --json --output-file out.json julia leaquor.jl --dir ./my_project --patterns custom_patterns.yaml | jq .
--patterns <YAML файл с кастомными regex паттернами для поиска>
--dir указываем директорию для сканирования
--repo можно указывать сразу GitHub репо
Интереснее посмотреть как это правильно оформить для GitHub:
Docker и DEB пакеты
В одном Docker файле мы собираем проект на Julia. Julia в этом смысле ничем не отличается от Python или других более популярных языков.
В втором Docker файле мы так же собираем проект, но добавляется nfpm — инструмент на замну стандартному toolchainу для DEB и RPM пакетов.
# Generate DEB packages RUN nfpm pkg --config nfpm.yaml --target leaquor.deb # Final stage to output packages FROM scratch COPY --from=packager /app/leaquor.deb /leaquor.deb
Последние две директивы собирают и копируют пакет в текущую директорю.
Make
Создается Makefile который использует для Docker для сборки:
# Build the Docker image docker-build: @echo "Building Docker image $(DOCKER_IMAGE)..." docker build -t $(DOCKER_IMAGE) . # Run the Docker container docker-run: @echo "Running Docker container $(DOCKER_CONTAINER)..." docker run --rm -v $(PWD):/app $(DOCKER_IMAGE) --help
Если вызвать его без аргументов то появится help:
make Available targets: test - Run unit tests docker-build - Build the Docker image docker-run - Run the Docker container docker-push - Push the Docker image to Docker Hub docker-clean - Clean up Docker artifacts (images, containers, volumes) docker-clean-all - Force cleanup of all Docker images and artifacts release - Create a GitHub release open-issue - Open a new issue on GitHub create-pr - Create a pull request list-issues - List open issues list-prs - List open pull requests deploy-docs - Deploy documentation to GitHub Pages check-workflows - Check GitHub Actions workflow status generate-changelog - Generate a changelog
Этой командой можно запушить образ на DockerHub:
# Push the Docker image to Docker Hub docker-push: docker-build @echo "Logging into Docker Hub..." @docker login -u $(DOCKER_HUB_USERNAME) @echo "Tagging image for Docker Hub..." docker tag $(DOCKER_IMAGE) $(DOCKER_HUB_REPO):latest @echo "Pushing image to Docker Hub..." docker push $(DOCKER_HUB_REPO):latest @echo "Image pushed successfully to $(DOCKER_HUB_REPO):latest"
Ничто не мешает нам использовать GitHub CLI для того, чтобы тэгировать репо из грузить его, а также в GitHub release (да это там слева с цифрами v1.0.0):
# Target: Create a Git tag and release on GitHub .PHONY: release release: @echo "Creating Git tag and releasing on GitHub..." @read -p "Enter the version number (e.g., v1.0.0): " version; \ git tag -a $$version -m "Release $$version"; \ git push origin $$version; \ gh release create $$version --generate-notes @echo "Release $$version created and pushed to GitHub." # Upload .deb package to GitHub release upload-release: @if [ ! -f "leaquor.deb" ]; then \ echo "Error: leaquor.deb not found. Please run 'make package' first."; \ exit 1; \ fi @echo "Uploading leaquor.deb to GitHub release $(RELEASE_TAG)..." gh release upload $(RELEASE_TAG) leaquor.deb --repo $(GITHUB_REPO) @echo "Upload complete"
Test
В данном случае мы просто запускаем скрипт в docker контейнере и используем на leaky-repo – тестовый репо где точно есть утечки секретных данных.
# Test target to validate the script test: docker-build clone-test-repo @echo "Running tests..." docker run --rm \ -v $(PWD)/$(JULIA_SCRIPT):/app/$(JULIA_SCRIPT) \ -v $(PWD)/$(TEST_REPO_DIR):/app/$(TEST_REPO_DIR) \ --name $(DOCKER_CONTAINER) \ $(DOCKER_IMAGE) \ julia /app/$(JULIA_SCRIPT) --dir /app/$(TEST_REPO_DIR) \ --patterns patterns.yaml \ --output-file results.json \ --log-file /app/test.log @echo "Tests completed. Check test.log for details."
Pipeline
Ну и наконец, чтобы все было по GitOps давайте сделаем пайплайн GitHub:
name: CI/CD Pipeline on: push: branches: - main pull_request: branches: - main jobs: build-and-test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Log in to Docker Hub if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_TOKEN }} - name: Build Docker image run: make docker-build - name: Run tests run: make test - name: Build package (on tag push) if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') run: make package - name: Push Docker image to Docker Hub (on tag push) if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') run: | docker tag leaquor-image:latest ${{ secrets.DOCKER_HUB_REPO }}:${{ github.ref_name }} docker push ${{ secrets.DOCKER_HUB_REPO }}:${{ github.ref_name }}
Здесь в очень просто, потому что мы завернули все в Make. Можно просто запускать таргеты make docker-build, make test и делать это автоматически при пуше.
На самом деле все очень просто. С помощью Julia можно решать стандартные каждодневные day-to-day задачи, и использовать для этого Docker и GitHub.
ссылка на оригинал статьи https://habr.com/ru/articles/904146/
Добавить комментарий