はじめに

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 > ユーザ > ユーザの作成の順にクリック

適当なユーザ名を入力して、次へをクリック user_name

許可のオプションで「ポリシーを直接アタッチする」を選択し、「AWSCodeCommitFullAccess」にチェックを入れ、次へをクリック policy

ユーザの作成をクリック create_user

作成したユーザのセキュリテイ認証情報タブから、「SSH公開キーのアップロード」をクリックし、事前に作成した公開鍵(id_rsa.pub)の中身を貼り付ける key_paste

アップロード後、表示されたSSHキーIDを控えておく 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接続するためのパスを控える ssh_path

リモートリポジトリを登録する

$ 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認証情報の有効期限切れを気にしなくてすむため快適になりました。