本記事はOracle Cloud Infrastructure Advent Calendar 2023 カレンダー1の Day22として書いています。
皆さま、こんにちは!y.takanashiです。
今回はGitHubをOCIの外部接続として登録する方法についてご紹介します。
目次
OCI上で動的グループとポリシーを作成
まず最初に事前準備として、OCI上で以下の動的グループとポリシーを作成する必要があります。
- 動的グループ
- DevOpsを使用する際に必要
- All {resource.compartment.id = '<コンパートメントのOCID>', Any {resource.type = 'devopsdeploypipeline', resource.type = 'devopsbuildpipeline', resource.type = 'devopsrepository', resource.type = 'devopsconnection', resource.type = 'devopstrigger'}}
- ポリシー
- 外部コード・リポジトリと統合する際に必要
Allow dynamic-group <DevOps用の動的グループ名> to read secret-family in <コンパートメント名> - 外部接続を検証する際に必要
Allow group <グループ名> to use devops-connection in <コンパートメント名>
- 外部コード・リポジトリと統合する際に必要
上記の動的グループとポリシーの詳細については以下のドキュメントをご覧ください。
PATの生成
GitHubをOCIの外部接続として登録する際のクレデンシャルとして、GitHub上で個人用アクセス・トークン(PAT)を生成し、OCI ボールトに格納する必要があります。
ここではPATの生成方法についてご紹介します。
GitHubのマイページに行き、右上のアイコンから「Settings」を選択します。
GitHubマイページ用の設定画面が表示されるので、「Developer settings」→「Tokens(classic)」をそれぞれ選択します。
「Generate new token(classic)」から以下の項目を選択、入力を行い、「Generate Token」を選択します。
- Name:任意(ここでは「Test-Token」)
- Expiration:任意(ここでは30日)
- Select scopes:任意(ここではrepo)
※プライベート・リポジトリからコードを読み取る場合は「repo」、パブリック・リポジトリからコードへのアクセスを許可する場合は「public_repo」スコープを選択します。
設定後にPATが生成されますので、以下の赤枠を選択してコピーを行います。
PATをOCI ボールトに格納
PATの生成後、OCI ボールトにシークレットとして保存する作業も合わせて行います。
OCIコンソール左上のハンバーガーアイコンから「アイデンティティとセキュリティ」→ キー管理とシークレット管理内の「ボールト」を選択します。
「ボールトの作成」から任意のボールト名(ここでは「OCI-Vault」)を入力して作成を行います。
数分経過したのち、作成されたボールトが表示されます。
ボールトの作成後、シークレットを管理するためのマスター暗号化キーを作成する必要があります。
「キーの作成」から以下の項目を入力、選択を行い作成します。
- 保護モード:HSM
- 名前:任意(ここでは「OCI-MasterKey」)
- キーのシェイプ・アルゴリズム:AES
※GitHubのPATの場合、対称鍵暗号方式を選択する必要があります。
詳細は、キーの管理を参照してください - キーのシェイプ・長さ:任意(ここでは256ビット)
数分経過したのち、作成されたマスター暗号化キーがボールト内に表示されます。
マスター暗号化キーの作成後、PATを格納するシークレットの作成も行います。
「シークレットの作成」から以下の項目を入力、選択を行い作成します。
- 名前、説明:任意(ここでは「OCI-Secret」)
- 暗号化キー:OCI-MasterKey
※作成した暗号化キーを選択する必要があります。 - シークレット・タイプ・テンプレート:プレーン・テキスト
- シークレット・コンテンツ:「PATの生成」でコピーしたPATをペーストします。
- Base64変換の表示:任意(ここでは「有効」)
※既にBase64でエンコードを行っている場合は「無効」を選択する必要があります。
数分経過したのち、作成されたシークレットがボールト内に表示されます。
生成したPATをシークレットとしてボールトに保存する手順は以上となります。
OCI DevOps プロジェクトを作成
PATをOCI ボールトに格納後、GitHubリポジトリをOCIの外部接続として登録する作業を行います。
「外部接続」はOCI DevOps プロジェクトの構成要素の一つで、最初にOCI DevOps プロジェクトの作成手順についてご紹介します。
OCIコンソール左上のハンバーガーアイコンから「開発者サービス」→ DevOps内の「プロジェクト」を選択します。
「DevOps プロジェクトの作成」から以下の項目を入力、選択を行います。
- プロジェクト名:任意(ここでは「OCI-DevOps」)
- トピック:任意(ここでは「OCI-Topic」)
※事前にトピックを作成する必要があります。
作成を行っていない場合は、以下のドキュメントを元に作成を行いましょう。
OCI公式ドキュメント - 「トピックの作成」
作成後、設定したOCI DevOps プロジェクトが表示されます。
GitHubを外部接続として登録
OCI DevOps プロジェクトの作成後、「外部接続」から「外部接続の作成」を選択、以下の項目を入力して外部接続の作成を行います。
- 名前:任意(ここでは「OCI-DevOpsConnection」)
- タイプ:GitHub
ボールト・シークレット- ボールト:任意(ここでは「OCI-Vault」)
- シークレット:任意(ここでは「OCI-Secret」)
※「PATをOCI ボールトに格納」で作成したボールト・シークレットを選択する必要があります。
作成後、設定した外部接続がOCI DevOps プロジェクト内に表示されます。
外部接続の検証
外部接続の作成後、「接続の検証」を行い、登録したGitHubリポジトリがOCI DevOps プロジェクト内で使用可能か確認します。
検証が成功した場合、即時で「最終検証結果」の項目が"合格"と表示されます。
検証に失敗した場合はポリシーの不足等が原因の可能性があり、「OCI上で動的グループとポリシーを作成」で設定したポリシーを確認することを推奨します。
作成した外部接続はOCI DevOps プロジェクトのビルド・パイプライン内の「プライマリ・コード・リポジトリ」から登録することができます。
コード・リポジトリに登録
最後に補足として、OCIのDevOps プロジェクト内の構成要素の一つである「コード・リポジトリ」にGitHubリポジトリを登録する方法をご紹介します。
OCI DevOps プロジェクト内の「コード・リポジトリ」の「リポジトリのミラー化」を選択します。
以下の項目を入力、選択したのち「リポジトリのミラー化」を行います。
- 接続:任意(ここでは「OCI-DevOpsConnection」)
- リポジトリ:test
※接続を選択する際に自動選択されます。 - ミラーリング・スケジュール:任意(ここではデフォルト)
※以下のスケジュールから選択できます。- 1回: リポジトリは、ミラー化されたリポジトリの作成後に1回同期されます。
- デフォルト: リポジトリは、ミラー化されたリポジトリの作成後15分ごとに自動的に同期されます。
- カスタム: ミラー化されたリポジトリの作成後にリポジトリが同期される頻度を選択します。
- 名前:任意(ここでは「github_test」)
作成後、「ミラーリングが進行中です。」の表示が消えればコード・リポジトリへの登録は完了となります。
コード・リポジトリに登録することで、外部接続と同様にGitHubをOCI DevOps プロジェクト内に組み込んで利用することが可能となります。
外部接続とコード・リポジトリの違いについて、
GitHub上でリポジトリを管理する場合は外部接続を使用した方法、
OCI上で管理する場合はコード・リポジトリを使用した方法が適しているのかなと考えています。
しかし、そこまで明確に使用用途が分けられていないので、運用時には柔軟な判断が必要となります。
まとめ
今回はGitHubリポジトリをOCIの外部接続として登録する方法についてご紹介しました。
そこまで複雑ではない手順で、外部リポジトリをOCIと連携できる点は素晴らしいと思います。
また、ミラーリングを手動で実行できたり、CI/CDのパイプラインに組み込めたりと使い勝手の良いサービスだと感じました。
以上となります。
この記事を通じて読者の皆様の問題解決の一助となれば幸いです。
最後まで読んで頂き、ありがとうございましたm(_ _)m