1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CodeCommit復活で再考するGitLabとAWS 統制を両立するリポジトリミラーリング設計

1
Posted at

目次

#1.はじめに
#2.GitLab単体構成では満たしにくいAWS統制要件
#3.なぜ「完全移行」ではなく「ミラーリング」なのか
#4.なぜ一方向ミラーなのか
#5.実際にやってみる
#6.まとめ

1.はじめに

※本記事は個人の見解であり、所属組織とは関係ありません
※本記事の執筆にあたり調査や検証をしていますが、技術的な誤りがありましたら申し訳ありません
※本記事の作成にあたり生成AIを活用しています

CodeCommitは一時期サービス終了予定がアナウンスされ、多くの現場で外部Gitホスティングサービスへの移行が進んでいたかと思います。
先日以下発表され各所で大きな話題となっていましたが、CodeCommitは一般提供が継続される形でサービスが維持され、再び選択肢として検討できる状況になりました。

一方で、私がよく利用するGitLabはDevSecOpsの統合プラットフォームであり、例えば以下の点で非常に優れた開発体験を提供します。

  • issueによるチケット管理やMergeRequestを用いたプロジェクト管理
  • GitLabから提供されるスキャナーによる脆弱性チェック
  • GitLab CIによりセキュリティチェックのシームレスな実施
  • GitLabDuoでのAI開発支援

しかし、実行環境がAWSで稼働している場合は、GitリポジトリをCodeCommitで持つことで、IAM認証やログ管理、CI/CDパイプラインの観点でも便利なケースがあるのもまた事実です。

本記事では、

開発はGitLab、
AWSリソースとの連携はCodeCommit

という役割分担を前提に、
GitLab → CodeCommit の一方向ミラーリング設計を整理してみます。

2.GitLab単体構成では満たしにくいAWS統制要件

GitLabは高機能なGit ホスティングサービスですが、AWS統制という観点では以下の制約があります。

  • IAMと直接統合できない
  • AWS Organizations / SCP による操作制御ができない
  • CloudTrailによる操作監査の対象外

「AWSアカウント配下で何が行われたか」を厳密に管理したいケースで重要な要素ですね。
これらの点から、CodeCommitは単なるGitホスティングというより、
「AWSアカウント配下のリソースとして、IAM・CloudTrail・Organizationsによる統制を受けられる」
という位置付けで捉えることができます。

3.なぜ「完全移行」ではなく「ミラーリング」なのか

CodeCommit復活に伴い検討した代替案は以下3点です。

  • GitLabのみを利用する案

⇒開発体験は変わりませんが、前述の通りAWS統制要件を満たせません

  • CodeCommitに完全回帰する案

⇒AWS統制要件は満たせますが、GitLabに移行して開発機能に旨味を感じているユーザは嬉しくないですし開発標準の再設計が発生します。

  • 成果物のみをAWS側で管理する案

⇒リポジトリの二重化、リポジトリを使わないなら履歴なしなど問題があります。

これらを踏まえて、開発体験とAWS統制を分離し、役割分担で両立するという設計判断から、ミラーリング構成がいいと考えました。

Developer

GitLab(主リポジトリ)
↓(一方向ミラー)
CodeCommit(AWS側リポジトリ)

GitLab:開発者向けの正リポジトリ
CodeCommit:AWS統制・監査用途のミラー先リポジトリ

4.なぜ一方向ミラーなのか

以下のGitLabドキュメントにも記載はありますが、双方向ミラーリングの場合、競合する可能性が高いです。
一応ブランチ戦略や運用を工夫すれば対応自体は可能ですが、#3に記載したGitLabとCodeCommitの役割分担だとCodeCommit側では更新は発生しない(させない)ため、一方向がベストと考えています。

なお、本構成ではCodeCommit側での直接編集やPull Request運用は行わず、
あくまでAWS統制・監査用途の参照リポジトリとして利用する前提としています。

5.実際にやってみる

1.AWS上でCodeCommitリポジトリ、認証用IAMユーザを準備する

今回はAWSコンソールで「CodeCommitUser」というユーザを作成しました。
用途はミラーリングのみなのでコンソールアクセスはなしにしています。
ユーザ作成後、CodeCommit認証用の設定が必要になりますが、以下の画像のようにhttpsとsshの選択肢があります。

image.png

要件としてはどちらでも構わないのですが、今回はより簡単に検証が行えるhttpsを採用しました。
以下のように認証用のIDとパスワードの生成が可能です。

image.png

なお、GitLabのリポジトリミラーリング機能では、
STSによる一時クレデンシャルを用いたIAM Roleの利用ができないため、
本構成ではIAMユーザのGit認証情報を利用しています。

IAMユーザはミラーリング専用とし、
対象リポジトリの最小権限のみを付与することで、
リスクを限定した運用を想定しています。

ユーザ作成後、ミラーリング先となるリポジトリ「mirror_gitlab」を作成しました。
この時点では何もコミットされていない空っぽのリポジトリです。

image.png

2.GitLab側のリポジトリでミラーリング設定を行う
設定->リポジトリ->リポジトリのミラーリングから設定追加を行います。

image.png

リポジトリの設定ではリポジトリのURLと手順1で取得したIAMユーザの認証情報を入力します。

image.png
image.png

ミラーリングの設定が追加されました。

image.png

更新ボタンを押下するとリポジトリミラーリングが動作したようです。

image.png

CodeCommit側にリポジトリがミラーリングされました。
image.png

3.ミラーリングの検証とCloudTrailの確認を行う

続いてこの状態でGitLabリポジトリに新たにコミットを行いCodeCommit側に同期されるか確認をします。
GitLab側に2件目のコミットを行いました。
image.png

しばらくするとCodeCommit側にも2件目のコミットが取り込まれました。
image.png

以下ドキュメントにも記載がありますが、GitLabのpushミラーリングは即時ではなく、5分以内の動作のようです。

CloudTrailを確認してみると「CodeCommitUser」によるログもちゃんと記録されています。
image.png

6.まとめ

CodeCommit復活のニュースを受けてGitLabとのリポジトリミラーリングを検討してみました。
現場の要件によって必ずしもミラーリングが最適解となるとは限りませんが、
今後このような要件やケースも出てくるのかなと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?