git-secrets 가져오기

Git 창고에 특정 정보를 등록하지 못하도록 하는'git-secrets'의 메모를 가져왔습니다.
이 내용은 여러 가지 기사를 정리해 놓았는데, 우연히 이 내용을 처음 발견한 AWS 초보자가 유출 사고를 방지하기 위한 설정에 도움을 주었으면 좋겠다.

배경.


AWS의 활용에서 인터넷에서 자주 다음과 같은 상황을 볼 수 있고 초보자의 자신도 이렇게 하는 것을 두려워한다.
  • Giit의 창고에 AWS 액세스 키를 등록하여 정보를 누설한다.가상화폐 발굴 등에 이용된 고액의 요청.
  • 배독한 글
  • 초보자가 AWS에서 불법으로 이용당해 6천 달러를 청구해 울 뻔한 이야기. -qiita
  • AWS가 불법으로 이용돼 300만 엔의 요청을 받은 후 면제될 때까지 일부를 처음부터 끝까지
  • git-secrets


    https://github.com/awslabs/git-secrets
  • commiit에서 미리 설정한 정규 표현식과 일치하는 정보를 포함하면 이commiit를 취소합니다.
  • 언제든지 파일이나 디렉토리를 검색할 수 있습니다.
  • 설치하다.


    macOS·Homebrew 환경, 아래 설명을 수행합니다.
    실행
    $ brew install git-secrets
    
    git secrets을 시도하고 다음 도움말이 표시되면 설치가 완료됩니다.
    $ git secrets
    usage: git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked]
    	:
    

    사용법


    각git창고에 대응git secrets --install,git-secrets.
    $ git init
    $ git secrets --install
    ✓ Installed commit-msg hook to .git/hooks/commit-msg
    ✓ Installed pre-commit hook to .git/hooks/pre-commit
    ✓ Installed prepare-commit-msg hook to .git/hooks/prepare-commit-msg
    
    AWS의 IAM에서 사용하는 것은 전문적인 선택이 있고 전문적인 선택이 있기 때문에 설치한다.
    $ git secrets --register-aws
    OK
    
    .git/config에 다음과 같은 내용이 추가된 것으로 확인할 수 있다.
    [secrets]
    	providers = git secrets --aws-provider
    	patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
    	patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?
    	patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?
    	allowed = AKIAIOSFODNN7EXAMPLE
    	allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    
    allowed 행에 지정된 행에는 경고가 표시되지 않는 예외 지정 기능이 있습니다.
    기재된 값은 AWS 자체가 공식 문서에 사용한 액세스 키의 샘플입니다.

    테스트


    상기 샘플 키의 일부를 변경한 관건적인 정보를 포함하는 신용 서류를 만들었다.
    $ cat credential_test.txt
    
    aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEa
    
    에서 제작된 파일을commiit해 보았습니다.
    $ git add .
    $ git commit -m "First Test"
    
    credential_test.txt:1:aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEa
    
    [ERROR] Matched one or more prohibited patterns
    
    Possible mitigations:
    - Mark false positives as allowed using: git config --add secrets.allowed ...
    - Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
    - List your configured patterns: git config --get-all secrets.patterns
    - List your configured allowed patterns: git config --get-all secrets.allowed
    - List your configured allowed patterns in .gitallowed at repository's root directory
    - Use --no-verify if this is a one-time false positive
    
    안전commiit가 취소되었습니다.
  • commiit를 진행하기 전에 임의의 시간에 검사를 하려면 실행git secrets --scan을 통해 확인할 수 있다.
  • $ git secrets --scan credential_test.txt
    credential_test.txt:1:aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEa
    
    [ERROR] Matched one or more prohibited patterns
    	:
    
    Git 웨어하우스에 포함되지 않은 파일이나 디렉토리를 검색하려면 --no-index 옵션을 사용합니다.
  • 검사를 잠시 중지하려면commiit--no-verify에서 옵션을 포함하여 실행하면 무효화할 수 있습니다.
  • $ git commit -m "First Test" --no-verify
    [master (root-commit) 421073b] First Test
     1 file changed, 1 insertion(+)
     create mode 100644 credential_test.txt
     
     $ git log --oneline
     421073b (HEAD -> master) First Test
    
  • 또한git-secrets를 기존 창고에 적용하면 과거의commiit 이력서를 검사할 생각입니다.이 경우 진행git secrets --scan-history을 통해git history를 확인할 수 있다.
  • $ git secrets --scan-history
    [ERROR] Matched one or more prohibited patterns
    
    Possible mitigations:
    - Mark false positives as allowed using: git config --add secrets.allowed ...
    - Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
    - List your configured patterns: git config --get-all secrets.patterns
    - List your configured allowed patterns: git config --get-all secrets.allowed
    - List your configured allowed patterns in .gitallowed at repository's root directory
    - Use --no-verify if this is a one-time false positive
    

    적용 범위


    지금까지의 내용은 각git창고를 통해 설정되었지만 git secrets --register-aws처럼 모든 창고에 반영됐으면 하는 설정이 있다고 생각합니다.
    이 때 실행git secrets --register-aws --global을 통해 설정할 수 있습니다.설정 내용은 ~/.gitconfig에 추가됩니다.
    $ git secrets --register-aws --global
    OK
    
    $ cat ~/.gitconfig
    
    [secrets]
    	providers = git secrets --aws-provider
    	patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
    	patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?
    	patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?
    	allowed = AKIAIOSFODNN7EXAMPLE
    	allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    
    설정 내용이 반영된 파일git secrets --register-aws→창고별.git/configgit secrets --register-aws --global   →   ~/.gitconfig마지막으로 모든 창고의 설정을 추가해 보십시오.이번에는 크리덴셜.test.txt를 허용하는 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEa 로 설정합니다.
    $ git secrets --add --allowed wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEa
    
    $ git secrets --scan credential_test.txt
    
    방금 표시된 [ERROR]이 표시되지 않는지 확인했습니다.
    그럼 프로필을 한번 봅시다.
    $ cat .git/config
    [secrets]
    	allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEa
    	
    $ cat ~/.gitconfig
    [secrets]
    	providers = git secrets --aws-provider
    	patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
    	patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?
    	patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?
    	allowed = AKIAIOSFODNN7EXAMPLE
    	allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    
    설정이 지정된 창고에만 반영되었음을 확인했습니다.
    최종 명령을 실행할 때 글로벌git-secrets에 설정되어 있기 때문에local의 창고에서 글로벌의 설정과 차이만 표시됩니다.
    이렇게 하면git-secrets를 전체적으로 사용하는 동시에 창고마다 맞춤형으로 제작할 수 있다.

    Tips


    git-secrets를 실행할 때 git init를 유효하게 하려면 다음과 같은 동작을 미리 실행할 수 있습니다.
    $ git secrets --install ~/.git-templates/git-secrets
    $ git config --global init.templatedir '~/.git-templates/git-secrets'
    

    총결산


    git-secrets를 가져오면 인위적인 오류로 인한 정보 유출을 방지할 수 있습니다!
    하지만 평소부터 기트에서 push에 안전한 정보가 나오지 않도록 하는 의식을 다시 한번 실감했다.
    이렇게 하면 안심하고 사적인 환경에서 공부를 할 수 있다...

    참고 자료

  • https://github.com/awslabs/git-secrets
  • 갑니다. - 큐타.
  • 초보자가 AWS에서 불법으로 이용당해 6천 달러를 청구해 울 뻔한 이야기. -qiita
  • AWS가 불법으로 이용돼 300만 엔의 요청을 받은 후 면제될 때까지 일부를 처음부터 끝까지
  • 좋은 웹페이지 즐겨찾기