Обновления Amazon CodeGuru Reviewer: новые детекторы для Java и интеграция с CI/CD GitHub Actions

Оригинал статьи: ссылка (Alex Casalboni, Developer Advocate)

Amazon CodeGuru позволяет вам автоматизировать процесс ревизии кода (code review) и улучшить качество исходного кода вашего приложения, а благодаря новой модели ценообразования, объявленной в апреле, вы можете начать работу с ним с более низкими и предсказуемыми расходами, которые зависят от размера вашего репозитория (до 90% дешевле по сравнению с предыдущей моделью). CodeGuru Reviewer помогает вам находить потенциальные проблемы и ошибки в приложениях на Java и Python, которые тяжело было бы найти вручную. Вы можете использовать его через консоль управления AWS, AWS SDK или с помощью инструментов командной строки AWS.

Мы рады объявить о том, что теперь CodeGuru Reviewer штатным образом поддерживает интеграцию с инструментами, которыми вы регулярно пользуетесь для упаковки и развёртывания исходного кода. Новый интерфейс CI/CD позволяет запустить анализ качества кода и его безопасности как часть процесса сборки в GitHub Actions.

Хотя пользовательская консоль CodeGuru Reviewer и остаётся центральным интерфейсом для управления всеми добавленными репозиториями, интерфейс CI/CD позволяет более глубоко интегрировать CodeGuru Reviewer с вашими любимыми инструментами по управлению кодом и CI/CD-инструментами.

И это ещё не всё! Мы также выпустили 20 новых детекторов безопасности для Java, чтобы помочь вам выявить ещё больше потенциальных проблем, связанных с безопасностью и соответствием лучшим практикам AWS.

Новый интерфейс CI/CD в CodeGuru Reviewer
Разработчики и команды разработки добавляют новый код в репозиторий каждый день и хотят иметь возможность находить уязвимости безопасности на ранних этапах цикла разработки, в идеале – при каждой отправке кода в репозиторий. Во время проверки pull-request (PR) все рекомендации CodeGuru будут представлены в виде комментариев, как будто в процессе проверки вашего PR участвует ещё один человек. В комментариях также содержатся ссылки, которые помогут с решением найденной проблемы.

Когда вы добавляете новый код или запускаете запланированные ревизии кода, рекомендации появятся в GitHub на вкладке Security > Code scanning alerts.

Давайте теперь посмотрим на то, как настроить CodeGuru Reviewer в GitHub Actions.

Первым делом создайте файл .yml в вашем репозитории в директории .github/workflows/ (или обновите уже существующее действие). В указанном файле будут содержаться все шаги вашего действия. Давайте посмотрим на каждый из них.

На первом шаге вы настраиваете учётные данные AWS. Это стоит делать безопасным способом, не сохраняя сами данные в репозитории – с этим поможет действие Configure AWS Credentials. Оно позволяет вам настроить роль IAM, которую GitHub будет использовать для работы с сервисами AWS. Для этой роли понадобятся несколько привилегий, связанных с CodeGuru Reviewer и Amazon S3. Вы можете прикрепить к ней управляемую политику AmazonCodeGuruReviewerFullAccess, а также методы s3:GetObject, s3:PutObject и s3:ListBucket.

Первый шаг выглядит следующим образом:

- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-1

Ключ доступа и секретный ключ будут указывать на вашу роль IAM и будут использоваться для работы с CodeGuru Reviewer и Amazon S3.

Далее, вы добавляете действие для самого CodeGuru Reviewer и последний шаг для загрузки результатов:

- name: Amazon CodeGuru Reviewer Scanner
uses: aws-actions/codeguru-reviewer
if: ${{ always() }}
with:
build_path: target # build artifact(s) directory
s3_bucket: 'codeguru-reviewer-myactions-bucket' # S3 Bucket starting with "codeguru-reviewer-*"
- name: Upload review result
if: ${{ always() }}
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: codeguru-results.sarif.json

Для действия CodeGuru Reviewer требуются два входных параметра:

build_path: путь к артефактам сборки в репозитории.

s3_bucket: название S3-бакета, созданного заранее, в котором будут храниться артефакты сборки и результаты анализа. Так как вы являетесь владельцем этого бакета, у вас есть полный контроль над доступом и разрешениями к нему, на случай если необходимо будет поделиться его содержимым с другими системами.

Теперь давайте соберём все части вместе.

Ваш файл .yml должен выглядеть примерно так:

name: CodeGuru Reviewer GitHub Actions Integration
on: [pull_request, push, schedule]
jobs:
CodeGuru-Reviewer-Actions:
runs-on: ubuntu-latest
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-2
- name: Amazon CodeGuru Reviewer Scanner
uses: aws-actions/codeguru-reviewer
if: ${{ always() }}
with:
build_path: target # build artifact(s) directory
s3_bucket: 'codeguru-reviewer-myactions-bucket' # S3 Bucket starting with "codeguru-reviewer-*"
- name: Upload review result
if: ${{ always() }}
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: codeguru-results.sarif.json

Важно помнить, что название бакета S3 должно начинаться с codeguru_reviewer-, а указанные действия могут запускаться по триггерам pull_request, push или schedule (полный список событий, которые могут выступать в качестве триггеров рабочих процессов, вы найдёте в документации GitHub). Также не забывайте о том, что есть небольшие отличия в том, как происходит настройка раннеров, размещённых в самом GitHub, и раннеров, которые вы размещаете самостоятельно: в основном, эти отличия в шаге настройки учётных данных. Например, если вы запускаете GitHub Actions в самостоятельно размещённом раннере, у которого уже есть доступ к учётным данным AWS: скажем, в инстансе EC2, то вам не нужно предоставлять какие-либо данные в самом действии (подробности смотрите в документации по самостоятельно размещённым раннерам).

Теперь, когда вы отправляете изменения в репозиторий или открываете PR, CodeGuru Reviewer добавит рекомендации в виде комментариев к вашим изменениям.

Вы также можете настроить ежедневное или еженедельное сканирование репозитория и увидеть рекомендации на вкладке Security > Code scanning alerts.

Новые детекторы безопасности для Java
В декабре прошлого года мы выпустили детекторы безопасности для Java в CodeGuru Reviewer, чтобы вы могли найти и исправить потенциальные проблемы с безопасностью в ваших приложениях на Java. Эти детекторы созданы с использованием машинного обучения и технологий автоматизации логических рассуждений и обучены на более, чем 100 тысячах репозиториев самой компании Amazon, а также продуктов с открытым исходным кодом. Они основываются на десятилетиях опыта команды AWS Application Security (AppSec).

Например, некоторые из этих детекторов следят за потенциальной утечкой чувствительной информации или учётных данных через слишком подробные лог-файлы, при обработке исключений или при сохранении паролей в памяти в незашифрованном виде. Детекторы безопасности также помогают вам находить различные уязвимости веб-приложений, такие как инъекция кода, слабая криптография, слабое хеширование, LDAP-инъекция, обход каталога, флаг cookie “Secure”, SQL-инъекция, XPATH-инъекция и межсайтовый скриптинг (XSS).

Новые детекторы безопасности для Java помогают находить проблемы с безопасностью в Java Servlet API, а также фреймворках для веб-приложений, таких как Spring. Некоторые из новых детекторов помогают вам с использованием лучших практик безопасности в AWS API во время работы с такими сервисами как Amazon S3, IAM и AWS Lambda, а также другими библиотеками и инструментами, например, Apache ActiveMQ, LDAP-серверами, парсерами SAML и кодировщиками паролей.

Доступно уже сейчас без дополнительных затрат
Новый интерфейс интеграции с CI/CD и детекторы безопасности для Java доступны уже сегодня без дополнительных затрат за исключением места для хранения в S3, которое можно оценить, основываясь на размере ваших артефактов сборки и частоте ревизии кода. Вы можете найти действие CodeGuru Reviewer в GitHub Marketplace, а на странице цен Amazon CodeGuru вы увидите примеры расчётов с использованием новой модели ценообразования, выпущенной в прошлом месяце.

Мы будем рады узнать ваши отзывы о новой функциональности и продолжим выпускать ещё больше детекторов, чтобы помочь вам с нахождением потенциальных проблем в исходном коде, а также интегрируем ещё больше инструментов CI/CD в будущем.

Вы можете узнать больше об интерфейсе CI/CD из технической документации.