Amazon Web Services 한국 블로그

Amazon CodeGuru Reviewer 업데이트 – 신규 Java Detector 및 GitHub 작업과 CI/CD 통합

Amazon CodeGuru를 사용하면 코드 검토를 자동화하고 코드 품질을 개선할 수 있으며, 4월에 발표된 새로운 요금 모델을 통해 리포지토리 크기에 따라 더 낮은 고정 월 요금으로 시작할 수 있습니다(최대 90% 저렴합니다). CodeGuru ReviewerAWS 관리 콘솔, AWS SDK, AWS CLI를 사용하여 Java 및 Python 애플리케이션에서 찾기 어려운 잠재적 결함과 버그를 감지할 수 있도록 지원합니다.

오늘 저는 CodeGuru Reviewer와 코드를 패키징하고 배포하기 위해 매일 사용하는 도구를 기본적으로 통합할 수 있다는 사실을 발표하게 되어 기쁩니다. 이 새로운 CI/CD 환경을 사용하면 GitHub 작업을 사용하는 빌드 프로세스에서 하나의 단계로 코드 품질 및 보안을 분석하도록 트리거할 수 있습니다.

CodeGuru Reviewer 콘솔이 여전히 모든 온보드 리포지토리에 대하여 분석 허브 역할을 하지만, 새로운 환경에서는 자주 사용하는 소스 코드 관리 및 CI/CD 도구와 CodeGuru Reviewer를 더 심도 있게 통합할 수 있습니다.

그것이 전부는 아닙니다! 현재 보안 및 AWS 모범 사례와 관련된 더 많은 문제를 식별할 수 있도록 Java용 보안 감지기 20개도 출시했습니다.

CodeGuru Reviewer를 위한 새로운 CI/CD 환경
개발자 또는 개발팀으로서 매일 새로운 코드를 푸시하고 개발 주기 초기에 보안 취약성을 식별하고 싶다면, 푸시할 때마다 매번 사용하기에 이상적입니다. 풀 리퀘스트(PR) 리뷰를 진행하는 동안 모든 CodeGuru 권장 사항이 마치 PR에 다른 눈이 달리기라도 한 것처럼 주석으로 표시됩니다. 이러한 주석에는 문제를 해결하는 데 도움이 되는 유용한 링크가 포함되어 있습니다.

새 코드를 푸시하거나 코드 검토를 예약하면 GitHub의 Security > Code scanning alerts 탭에 권장 사항이 나타납니다.

CodeGuru Reviewer와 GitHub 작업을 통합하는 방법을 살펴보겠습니다.

우선, .github/Workflows/ 아래 당신의 저장소에 .yml 파일을 만드십시오(또는 기존 작업을 업데이트하십시오). 이 파일에는 모든 작업 단계가 포함됩니다. 개별 단계를 살펴보겠습니다.

첫 번째 단계는 AWS 자격 증명을 구성하는 것입니다. AWS Credentials 설정 작업을 사용하여 리포지토리의 코드에 자격 증명을 저장하지 않고 안전하게 이 작업을 수행하려고 합니다. 이 작업을 통해 GitHub에서 AWS 서비스와 상호 작용하는 데 사용할 IAM 역할을 구성할 수 있습니다. 이 역할에는 CodeGuru Reviewer 및 Amazon S3와 관련된 몇 가지 권한이 필요합니다. s3:GetObject,s3:PutObjects3:ListBucket 외에도 AmazonCodeGuruReviewerFullAccess 관리형 정책을 작업 역할에 연결할 수 있습니다.

이 첫 번째 단계는 다음과 같습니다.

- 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 호스팅 러너와 자체 호스팅 러너를 구성하는 방법에는 약간의 차이가 있다는 것을 명심하십시오. 예를 들어 EC2 인스턴스와 같은 AWS 자격 증명에 대한 액세스 권한이 있는 자체 호스팅 러너에서 GitHub 작업을 실행하는 경우 이 작업에 대한 자격 증명을 제공할 필요가 없습니다(자체 호스팅 러너에 대한 전체 설명서를 참조하십시오).

이제 변경 사항을 푸시하거나 PR CodeGuru Reviewer를 열면 몇 가지 권장 사항이 표시되고 코드 변경 사항에 대해 댓글을 달 수 있습니다.

또는 일간 또는 주간 저장소 검사를 예약하고 Security > Code scanning alerts 탭에서 권장 사항을 확인할 수 있습니다.

Java를 위한 새로운 Security Detector
작년 12월에 Java 애플리케이션에서 잠재적인 보안 문제를 찾아 해결할 수 있도록 지원하기 위해 CodeGuru ReviewerJava Security Detectors를 출시했습니다. 이러한 감지기는 머신 러닝과 자동화된 추론 기법으로 구축되었고, 100,000개 이상의 Amazon 및 오픈 소스 코드 리포지토리에서 트레이닝 했으며, 수십 년간 AWS 애플리케이션 보안(AppSec) 팀의 전문 지식을 기반으로 합니다.

예를 들어, 이러한 감지기 중 일부는 지나치게 자세한 로깅, 예외 처리 및 메모리의 일반 텍스트에 암호 저장을 통해 중요한 정보 또는 자격 증명이 누출될 가능성이 있는지 살펴봅니다. 또한, 보안 감지기는 명령 삽입, 약한 암호화, 약한 해시, LDAP 삽입, 경로 탐색, 보안 쿠키 플래그, SQL 삽입, XPATH 삽입 및 XSS(사이트 간 스크립팅)와 같은 웹 애플리케이션의 여러 가지 취약성을 식별하는 데 도움이 됩니다.

새로운 Java용 보안 감지기는 Java 서블릿 API 및 Spring과 같은 웹 프레임워크의 보안 문제를 식별할 수 있습니다. 또한, 일부 새로운 감지기는 Amazon S3, IAM 및 AWS Lambda와 같은 서비스는 물론 Apache ActiveMQ, LDAP 서버, SAML 파서 및 암호 인코더와 같은 라이브러리 및 유틸리티를 사용할 때 AWS API에 대한 보안 모범 사례를 제공하는 데도 도움이 됩니다.

추가 비용 없이 바로 사용 가능
새로운 Java용 CI/CD 통합 및 보안 감지기는 빌드 아티팩트의 크기와 코드 검토 빈도에 따라 추정할 수 있는 S3의 스토리지를 제외하고 추가 비용 없이 바로 사용할 수 있습니다. GitHub 마켓플레이스에 있는 CodeGuru Reviewer Action Amazon CodeGuru 요금 책정 페이지에서 지난달에 출시한 새로운 요금 모델을 기반으로 한 요금 예시를 찾아보십시오.

당사는 피드백을 듣고, 잠재적인 문제를 식별할 수 있도록 더 많은 감지기를 출시하고, 향후 더 많은 CI/CD 도구와 통합할 수 있기를 기대합니다.

CI/CD 환경 및 구성에 대한 자세한 내용은 기술 문서에서 확인할 수 있습니다.

Alex