はじめに
SSH接続でCodeCommitリポジトリにアクセスする方法を記します。
本記事を書いたきっかけ
本ブログは、ローカルで作成した記事をCodeCommitへプッシュすることで、自動的にサイトに反映するように構築しております。
ただ、ある日突然、git pushを実行しても403エラーが表示されてしまうようになってしまいました。
$ git push origin main
fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/***': The requested URL returned error: 403
公式サイトによると、CodeCommitに接続する際に使用していた認証情報の有効期限が切れてしまうと、接続できなくなってしまう模様。
[参考] https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/troubleshooting-ch.html
上記サイトの手順を参考に設定したが、一向に上手く行かなかったたため、今回思い切ってCodeCommitへSSH接続する方式に切り替えてみました。
作業環境
$ lsb_release -a
LSB Version: core-11.1.0ubuntu4-noarch:security-11.1.0ubuntu4-noarch
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
SSHキーの作成
以下のコマンドを実行してSSHキーを作成する。
今回は、専用のディレクトリを作成したが、デフォルトでもOK。
$ mkdir /codecommit_key_directory ; cd $_
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): ./id_rsa ★カレントディレクトリに作成
Enter passphrase (empty for no passphrase): ★空欄
Enter same passphrase again: ★空欄
Your identification has been saved in ./id_rsa
Your public key has been saved in ./id_rsa.pub
<省略>
作成された公開鍵(id.rsa.pub)の中身は後ほど利用するので控えておく。
$ cat id_rsa.pub
CodeCommit接続用のIAMユーザを作成する
AWSマネジメントコンソールより、IAM > ユーザ > ユーザの作成の順にクリック
適当なユーザ名を入力して、次へをクリック
許可のオプションで「ポリシーを直接アタッチする」を選択し、「AWSCodeCommitFullAccess」にチェックを入れ、次へをクリック
ユーザの作成をクリック
作成したユーザのセキュリテイ認証情報タブから、「SSH公開キーのアップロード」をクリックし、事前に作成した公開鍵(id_rsa.pub)の中身を貼り付ける
アップロード後、表示されたSSHキーIDを控えておく
CodeCommitへ接続するためのSSH_CONFIGを設定する
CodecommitへSSH接続を行うために、configファイルにSSHキーIDと秘密鍵のパスを記載する
$ vim ~/.ssh/config
Host git-codecommit.*.amazonaws.com
User <IAMユーザSSHキーID>
IdentityFile "/codecommit_key_directory/id_rsa"
CodeCommitへSSH接続を行う
CodeCommitのリポジトリにアクセスし、URLのクローンからSSHのクローンをクリックし、SSH接続するためのパスを控える
リモートリポジトリを登録する
$ git remote add origin <CodeCommitのSSH接続パス>
$ git remote -v
origin codecommit://*** (fetch)
origin codecommit://*** (push)
すでにリモートリポジトリが登録されていたら、以下のコマンドで削除した後で再度git remote addを実行する
$ git remote -v
origin codecommit://*** (fetch)
origin codecommit://*** (push)
$ git remote rm origin
$ git remote -v
→リモートリポジトリが削除されたこと
以上でSSH接続を用いてCodeCommitに接続できるようになった。
最後に
一度SSH接続の登録をすれば、CodeCommit認証情報の有効期限切れを気にしなくてすむため快適になりました。