GiitHub Action Token ID를 사용한 AWS CDK

이거죠↓
https://dev.classmethod.jp/articles/github-actions-without-permanent-credential/
GiitHub Secrets에 묻혀 있는 꺼림칙한 Access Key를 버리려 했다.
잘한 게 이거였어↓
https://github.com/yamatatsu/github-actions-id-sample
GiitHub Action의 결과는 바로 이겁니다. ↓.
https://github.com/yamatatsu/github-actions-id-sample/runs/3628343114?check_suite_focus=true

모티프


CDK를 사용하면...
"이렇게 하면 lambda 디자인을 진행할 수 있습니다."
"이렇게 하면 s3 depro를 진행할 수 있습니다."
이렇게 하면 ECR DEPRO를 수행할 수 있습니다.
내 생각에는 이렇다.
그러다 보니 기릿허브 액션스로 이동하려면 못 참겠어.

방법


AWS 편


CDK로 지저분하게 썼어요.
하는 일과 원문의 CFn는 기본적으로 변화가 없다.

GiitHub Action 편


이런 느낌으로 움직일 것 같아서요.
jobs:
  invoke:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - run: sleep 5 # there's still a race condition for now

      - name: Configure AWS
        run: |
          export AWS_ROLE_ARN=arn:aws:iam::407172421073:role/ExampleGithubRole
          export AWS_WEB_IDENTITY_TOKEN_FILE=/tmp/awscreds
          export AWS_REGION=ap-northeast-1

          echo AWS_WEB_IDENTITY_TOKEN_FILE=$AWS_WEB_IDENTITY_TOKEN_FILE >> $GITHUB_ENV
          echo AWS_ROLE_ARN=$AWS_ROLE_ARN >> $GITHUB_ENV
          echo AWS_REGION=$AWS_REGION >> $GITHUB_ENV

          curl -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=sigstore" | jq -r '.value' > $AWS_WEB_IDENTITY_TOKEN_FILE

      - uses: actions/checkout@v2
      - run: yarn
      - run: yarn cdk deploy
기사와는 달리AWS_DEFAULT_REGION가 아니라 사용AWS_REGION이다.
aws-Cdk에서 AWS SDK를 사용했기 때문에 aws cli가 조금 사용하는 환경 변수와는 다른 것 같습니다.(사실 푹 빠졌어요)

총결산


CodeCov 이벤트로 인해 GiitHub Action의 환경 변수에서 다양한 인증 정보 및 개인 정보가 유출된 이벤트 나는 기억이 새롭다고 생각한다.
이런 비극이 되풀이되지 않도록 이번 지아이허브의 신apede(공식 발표는 아니지만) 영구적인 신용을 쫓아내자.

쓴 말


나는 한순간에 완성할 수 있을 것이라고 생각했지만 CLI와 SDK가 레지온에 주는 환경 변수의 이름이 다르다는 것을 몰라서 무한히 시간을 소모했다...
일단 이거 나와.
Error: Need to perform AWS calls for account XXXXXXXXXXXX, but no credentials have been configured
--varbose 이후에 실행하면 리본을 설정하지 않은 오류가 발생합니다.
Unable to determine the default AWS account: Error [ConfigError]: Missing region in config
    at Request.optInRegionalEndpoint (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/services/sts.js:75:30)
    at Request.callListeners (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/request.js:688:14)
    at Request.transition (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at Request.runTo (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/request.js:408:15)
    at Request.send (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/request.js:372:10)
    at features.constructor.makeUnauthenticatedRequest (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/service.js:230:31)
    at features.constructor.assumeRoleWithWebIdentity (/home/runner/work/github-actions-id-sample/github-actions-id-sample/node_modules/aws-sdk/lib/services/sts.js:44:17) {
  code: 'ConfigError',
  time: 2021-09-16T12:02:44.650Z
}
오, SDK가 드디어 됐나요? Doc를 보면 설정된 환경 변수가 AWS_REGION라는 것을 알 수 있습니다.
https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/setting-region.html#setting-region-environment-variable
위에서 말한 바와 같이 인류는 우여곡절이 많은 생물이기 때문에 나는 이미 코드를 읽었다.먼저 문서를 보여 주세요.아, 울었어.

좋은 웹페이지 즐겨찾기