인프런 커뮤니티 질문&답변
gitleaks 시크릿 스캔의 기준에 대한 질문입니다.
작성
·
5
1
1. 무엇을 하고 싶으신가요?
gitleaks가 secret을 판별하는 기준에 대해서, 또 지금 현 상황에 대한 이유가 궁금합니다.
2. 언제, 어떤 오류가 발생하시나요?
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "AROAWU22AXDEPO3JX44FD"
@app.route("/rextest")
def rextest():
return "REXTEST_PATH"
if __name__ == "__main__":
app.run(
host="0.0.0.0",
port=8080,
debug=True,
) app.py 코드를 위처럼 작성해서 MR을 날릴 경우, 파이프라인에서 gitleaks에 시크릿 값(AWS 예제)가 스캔되지 않습니다. 때문에 build job까지 문제 없이 실행이 됩니다.
3. 어떤 시도를 해보셨나요?
로컬 환경에서 강사님 코드를 pull 하고 tools 디렉토리의 gitleaks 디렉토리에서 gitleaks detect -v --no-git 명령을 수행해도 디스코드 예제와 깃랩 예제 2 종류만 스캔될 뿐 AWS 예제는 스캔되지 않습니다.
그래서 app.py 파일에 디스코드 예제를 넣어서 파이프라인을 실행할 경우, 정상적으로 gitleaks에서 시크릿이 스캔되어 job이 실패합니다.
이러한 경우, 코드 문제가 아니라 gitleaks에 대한 문제라고 생각이 드는데, 강의 영상에서는 AWS 예제가 스캔되어 job이 실패되고 저는 정상적으로 실행되는 이유가 궁금합니다.
4. 작성한 코드를 공유해주세요.
stages:
- gitleaks
- build
- deploy
default:
image:
name: bentolor/docker-dind-awscli
id_tokens:
GITLAB_OIDC_TOKEN:
aud: https://gitlab.com
variables:
AWS_DEFAULT_REGION: ap-northeast-2
IMAGE: ${CI_PROJECT_NAME}:latest
REMOTE_LATEST_IMAGE: ${AWS_ECR_REPO_URL}:latest
REMOTE_REGULAR_IMAGE: ${AWS_ECR_REPO_URL}:${CI_COMMIT_SHORT_SHA}
.get_aws_role: &get_aws_role
- >
export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s AWS_SESSION_TOKEN=%s"
$(aws sts assume-role-with-web-identity
--role-arn ${AWS_ROLE_ARN}
--role-session-name "GitLabRunner-${CI_PROJECT_ID}-${CI_PIPELINE_ID}"
--web-identity-token ${GITLAB_OIDC_TOKEN}
--duration-seconds 3600
--query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]'
--output text))
.get_ecr_token: &get_ecr_token
- *get_aws_role
- aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ${AWS_ECR_REPO_URL}
gitleaks:
stage: gitleaks
image:
name: zricethezav/gitleaks:latest
entrypoint: [""]
script:
- gitleaks detect -v --no-git --redact --report-format json
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- app.py
- Dockerfile
- requirements.txt
build-container-image:
stage: build
services:
- name: docker:dind
before_script:
- *get_ecr_token
script:
- docker build -t ${IMAGE} .
- docker tag ${IMAGE} ${REMOTE_LATEST_IMAGE}
- docker push ${REMOTE_LATEST_IMAGE}
- docker tag ${IMAGE} ${REMOTE_REGULAR_IMAGE}
- docker push ${REMOTE_REGULAR_IMAGE}
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
paths:
- app.py
- Dockerfile
- requirements.txt
deploy:
stage: deploy
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
before_script: *get_aws_role
variables:
AWS_DEFAULT_REGION: ap-northeast-1
script:
- |
export SERVICE_NAME="${CI_PROJECT_NAME}-service"
export AR_SERVICE_NAME=$(aws apprunner list-services --query "ServiceSummaryList[?ServiceName=='${SERVICE_NAME}'].ServiceName | [0]" --output text)
# AppRunner에 해당 레포의 매핑되는 서비스가 없는 경우
if [ ${AR_SERVICE_NAME} != ${SERVICE_NAME} ]; then
export AR_SERVICE_ARN=$(aws apprunner create-service --service-name "${SERVICE_NAME}" --source-configuration "{\"AuthenticationConfiguration\": {\"AccessRoleArn\": \"${AWS_APP_RUNNER_SERVICE_ROLE_ARN}\"}, \"ImageRepository\": {\"ImageIdentifier\": \"${REMOTE_LATEST_IMAGE}\", \"ImageRepositoryType\": \"ECR\"}}" --instance-configuration 'Cpu="0.25 vCPU",Memory="0.5 GB"' --output text --query "Service.ServiceArn")
echo "[+] Creating ${AR_SERVICE_ARN}"
# AppRunner 서비스가 존재하는 경우
else
export AR_SERVICE_ARN=$(aws apprunner list-services --query "ServiceSummaryList[?ServiceName=='${SERVICE_NAME}'].ServiceArn | [0]" --output text)
aws apprunner start-deployment --service-arn ${AR_SERVICE_ARN}
echo "[+] Deploying ${AR_SERVICE_ARN}"
fi
export AR_SERVICE_STATUS=$(aws apprunner describe-service --service-arn ${AR_SERVICE_ARN} --output text --query "Service.Status")
while [ ${AR_SERVICE_STATUS} != "RUNNING" ]; do
echo "[*] Waiting..."
sleep 10
export AR_SERVICE_STATUS=$(aws apprunner describe-service --service-arn ${AR_SERVICE_ARN} --output text --query "Service.Status")
if [ ${AR_SERVICE_STATUS} = "CREATE_FAILED" ]; then
echo "[-] ${AR_SERVICE_ARN} ${AR_SERVICE_STATUS}"
exit 1
fi
done
echo "[+] ${AR_SERVICE_ARN} deployed!"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
changes:
paths:
- app.py
- Dockerfile
- requirements.txt답변 1
0
천강민
지식공유자
안녕하세요.
확인해보니 gitleaks가 업데이트 되면서 오탐으로 분류된 것으로 보입니다.
https://github.com/gitleaks/gitleaks/pull/1307
위 링크 참고 부탁드릴게요.
감사합니다. 천강민 드림.





