묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
cosign tlog 관련 409에러
1. 무엇을 하고 싶으신가요?cosign sign을 통한 이미지 스캔을 하고 싶은데 단순히 이미지 재빌드하고 푸시하면 해결될 것이라고 생각하는데 그러지 않고 해결할 수 있는 방법을 찾고 싶습니다. 2. 언제, 어떤 오류가 발생하시나요? cosign에서 맨처음에 태그 기반으로 사이닝을 진행(최초 --tlog-upload=false 옵션 없이 이때 따로 진행할거냐는 경고 없이 바로 사이닝 진행 , 이후 --tlog-upload=false 옵션과 함께 진행하였지만 이미 사인되어있다는 메시지 그리고 ECR을 확인해보니 레포지토리에 서명 결과가 푸시된 것을 확인) , 이후 서명 결과를 ECR에서 삭제하고 다이제스트 기반으로 sign 명령을 내려도 계속 409 에러가 발생합니다. 3. 어떤 시도를 해보셨나요? 4. 작성한 코드를 공유해주세요.cosign sign --tlog-upload=false \ --key awskms:///REDACTED-KMS-KEY-ID \ <AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/<REPO>@$( docker buildx imagetools inspect \ <AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/<REPO>:latest \ --format "{{json .Manifest}}" | jq -r ".digest" ) Error: signing [<AWS_ACCOUNT_ID>.dkr.ecr.<REGION>.amazonaws.com/<REPO>@sha256:<DIGEST>]: signing digest: signing bundle: [POST /api/v1/log/entries][409] createLogEntryConflict {"code":409,"message":"an equivalent entry already exists in the transparency log with UUID <REDACTED>"}
-
미해결[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
gitleaks 시크릿 스캔의 기준에 대한 질문입니다.
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
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
gitlab-ci.yml과 CI/CD 파이프라인 까지 수강중입니다.
1. 무엇을 하고 싶으신가요?현재 ocp 로 구축된 서버가 있는데 , 이 서버에 gitlab을 컨테이너로 올려서 구축후에 테스트해보고 싶습니다. 2. 언제, 어떤 오류가 발생하시나요? 3. 어떤 시도를 해보셨나요? 4. 작성한 코드를 공유해주세요.
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
first before
1개념이해를 도와주세요 before after를 전역으로 사용하면 first 잡에서 호출하지 않아도 실행이 되는 건가요? 그렇다면 모든잡에서 항상 실행되는 건가요? 특정 잡에서는 전역값이 실행 안될 수 있게 설정할 수 있나요?
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
Private Subnet과 Gitlab
안녕하세요. 이번에 public subnet 에 있는 bastion host를 통해서 private subnet에 있는 web server라는 ec2에 cli 명령어로 gitlab ee 버젼을 설치해서 도메인(a.test.com)으로 설정하였습니다. 그런데 sudo vi /etc/gitlab/gitlab.rb 파일에 bastion host의 public ip를 넣어야 도메인으로 gitlab server의 사이트로 접속이 되던데.. 이러면 public ip가 그대로 노출될 수도 있어서 도메인으로 바꾸면 사이트의 접속이 막히고 있습니다. 도메인으로 설정을 바꾸면 어떻게 해야하나 질문을 드립니다. CI/CD 과정은 리포지토리는 Gitlab, 빌드과정은 codebuild를 사용하려고 합니다. codebuild와 연결을 할때도 액세스 토큰이 필요해서 이부분은 어떻게 설정해야 하나요?
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
강의 교안
강의 교안은 없는 건가요? 못잧겠어요. 어느경로에 있나요 ?
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
DooD, DinD 또는 Kaniko 외 다른 방법은 없는걸까요?
안녕하세요 지식 공유자님 :) 또 이렇게 질문을 남깁니다 ㅜㅜ (질문이 많아 죄송합니다...) 이미지를 빌드할 때 DooD, DinD 을 섞어서 사용하거나 Kaniko 를 사용한다고 하셨는데,DooD + DinD 는 privileged 문제, Kaniko 는 빌드 속도 문제를 보완한 프로젝트 같은 것이 아예 없는 것인지 궁금합니다. DooD + DinD 를 사용해도 privileged 문제가 완전히 해결되지 않을텐데, 이를 감안하고 사용하나요?
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
Kaniko 의 한계 부분에 대한 질문
안녕하세요 지식공유자님 소중한 지식 공유 감사드립니다! 강의를 들으면서 아래 빨간 부분이 이해가 잘 가지 않는데, 조금 더 구체적으로 설명해주실 수 있을까요?외부에서 빌드하고 CI/CD 이 끝난 후에 Kaniko 로 빌드한다는 것이 잘 이해되지 않습니다 ㅜㅜ
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
artifacts 에 대한 질문이 있습니다!
안녕하세요 지식공유자님 수준 높은 강의를 제공해주셔서 감사합니다! gitlab-sast 같은 내용을 artifacts 로 업로드에서 사용하시던데,artifacts 에 업로드 되는 내용으로 라이브러리 같은 것도 괜찮은가요? artifacts 를 cache 처럼 사용해도 되는건가요? 예를들어 python3.8 를 CI/CD 가 실행될 때마다 직접 빌드를 하게되는데, 10분 정도가 소요된다고 했을때,오래 걸리니, 한번 빌드 후 artifacts 에 업로드한 것을 다운 받아 사용하는 겁니다. (라이브러리 캐싱 처럼)
-
해결됨[DevOps] 빠르고 안전한 어플리케이션 배포 파이프라인(CI/CD) 만들기
App Runner 서비스 생성 시 실패
1. 무엇을 하고 싶으신가요? App Runner 서비스 생성2. 언제, 어떤 오류가 발생하시나요? 생성 중 애플리케이션 배포 실패3. 어떤 시도를 해보셨나요? 도커 이미지 재생성 및 App Runner 서비스 재생성, App Runner 스펙업(cpu,mem), iam, root 계정에서 생성 시도(권한 문제는 아닌듯)4. 작성한 코드를 공유해주세요.이슈:hands-on-fast-and-secure-cicd-pipeline 깃헙 클론 - 도커파일 경로에서 도커 이미지 생성 - ecr에 푸시 - ecr 이미지 url 이용하여 App Runner 서비스 생성 시 생성 실패하는 상황입니다.의심 되었던 부분:1. 컨테이너 이미지나 포트 설정에 문제가 있었다면 localhost:8080으로 접속해도 문제가 생겼을텐데 문제 없이 접속 가능하고요.2. App Runner의 리소스 제한이 있었을까봐 cpu, mem을 스펙업하고 재생성 했는데도 상황은 동일합니다.3. 계정 간 권한의 문제일까봐 iam, root 계정에서 생성해보았습니다. 상황은 동일합니다. 스샷:에러 로그:02-16-2024 06:37:27 PM [AppRunner] Deployment with ID : 7b4ba5a1c8f0433187d873df5bd1aa8c started. Triggering event : SERVICE_CREATE02-16-2024 06:37:27 PM [AppRunner] Deployment Artifact: [Repo Type: ECR], [Image URL: 938923105461.dkr.ecr.us-east-1.amazonaws.com/chadtest], [Image Tag: latest]02-16-2024 06:37:51 PM [AppRunner] Pulling image 938923105461.dkr.ecr.us-east-1.amazonaws.com/chadtest from ECR repository.02-16-2024 06:37:54 PM [AppRunner] Successfully pulled your application image from ECR.02-16-2024 06:38:05 PM [AppRunner] Provisioning instances and deploying image for publicly accessible service.02-16-2024 06:38:15 PM [AppRunner] Performing health check on protocol TCP [Port: '8080'].02-16-2024 06:39:06 PM [AppRunner] Your application stopped or failed to start. See logs for more information. Container exit code: 102-16-2024 06:39:28 PM [AppRunner] Deployment with ID : 7b4ba5a1c8f0433187d873df5bd1aa8c failed.제가 겪은 이슈와 같은 상황을 겪고 있는 유저:https://repost.aws/ko/questions/QU0lse8IEMSi-H4mlp5AAFWw/apprunner-failed-to-deployhttps://komodor.com/learn/exit-codes-in-containers-and-kubernetes-the-complete-guide/이게 유력한 원인으로 보이는데요...이게 아니라면 App Runner가 업데이트 되어 강의의 생성 내용과 달라져서 그런 것 인지...흠...혹시 App Runner 부분이 정상적으로 진행되지 않는다면 이후 강의에 차질이 생길까요??