🐖
GithubActionsでIAMRoleを使ってCodeCommitにミラーリングする
概要
GithubからActionsを使ってCodeCommitへミラーリングをさせる方法について記載します。
検索した限りでは、こちらのアクションを使って実装できるようです。
pixta-dev/repository-mirroring-action
ただ、上記はIAMのSSHキーをSecretsに登録してpushさせる方法になっていますが、
この間GithubがAWSのフェデレーションに対応したという話を聞きました。
セキュリティ的にも可能なのであればIAMRoleを使って実装したいと思い、調べたのでメモします
手順
IAMRoleの作成
Github側でAssumeRoleするためのRoleを用意します。
こちらの記事を参考にしてGithubActionsDeployRole
を作成、Roleのarnを後続作業で使います。
actionsの設定
以下のyamlをactionsに設定、pushすればミラーリングされます。簡単!
name: Mirror to CodeCommit
on:
push:
env:
AWS_REGION: ap-northeast-1
AWS_ROLE_ARN: arn:aws:iam::xxxxxxxx:role/GithubActionsDeployRole
AWS_WEB_IDENTITY_TOKEN_FILE: /tmp/awscreds
ECR_REPOSITORY: yourrepo
jobs:
deploy:
name: Mirror
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Configure AWS
run: |
echo AWS_WEB_IDENTITY_TOKEN_FILE=$AWS_WEB_IDENTITY_TOKEN_FILE >> $GITHUB_ENV
echo AWS_ROLE_ARN=$AWS_ROLE_ARN >> $GITHUB_ENV
echo AWS_DEFAULT_REGION=$AWS_REGION >> $GITHUB_ENV
curl --silent -H "Authorization: bearer ${ACTIONS_ID_TOKEN_REQUEST_TOKEN}" "${ACTIONS_ID_TOKEN_REQUEST_URL}&audience=sigstore" | jq -r '.value' > $AWS_WEB_IDENTITY_TOKEN_FILE
- name: Configure git
run: |
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
- name: Mirroring
run: |
git remote add mirror https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/$ECR_REPOSITORY
git push --tags --force --prune mirror "refs/remotes/origin/*:refs/heads/*"
IAMRoleのarnとリポジトリ名をそれぞれ設定しましょう
AWSの認証を作成する部分はAWS federation comes to GitHub Actionsを参考にしています
AWSアカウントをSecretsに登録するのがよりベターかと思います
gitのconfig追加はAWSのドキュメントを参考にして、認証情報ヘルパーを設定しています
ミラーリングのコマンドはpixta-dev/repository-mirroring-actionを参考に設定
一度以下のようなエラーが発生しましたが、
checkout
にwith:fetch-depth: 0
というパラメータが必要なようです
remote: Unknown commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
error: remote unpack failed: Unknown commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/xxxxxx
! [remote rejected] origin/main -> main (unpacker error)
error: failed to push some refs to 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/xxxxxx'
SSHキーの運用から解放されましょう!
Discussion