LoginSignup
6
8

More than 5 years have passed since last update.

httpsとsshの両方でAWS CodeCommitを導入してみた(httpsでエラーが出た時の対処法も載せた)

Last updated at Posted at 2016-06-08

AWS CodeCommitをローカル環境のUbuntu14.04から導入したときのメモです。

SSHでgit cloneする場合は導入がスムーズだったのですが、httpsでgit cloneした場合はGitをOpenSSLでコンパイルする作業があり、思った以上に工数があったので、それの解決方法も追記しました。

IAMグループの作成

  1. IAMで"グループ"の項目から新しいグループの作成"を選択する。
  2. 手順1でグループ名の選択でグループ名(例. codecommit-test)を入力する。
  3. 手順2で"ポリシーのアタッチ"でAWSCodeCommitPowerUserを選択する。
  4. 手順3で設定の確認をしたらグループの作成を選択する。

IAMユーザーの作成

  1. "ユーザー"の項目から"新規ユーザーの作成"を選択する。
  2. ユーザー名を入力して、発行される認証情報(以下のようなアクセスキーIDとシークレットアクセスキーの情報)のcsvファイルをダウンロードして閉じるを選択する。 ※再度ダウンロードできなくなるので注意(ダウンロードしないで閉じようとすると、その旨が表示されて本当に閉じていいか確認画面が出てくる)
 test-user
アクセスキー ID: XXXXXXXXXXXXXXXXXXXX
シークレットアクセスキー: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

作成したIAMユーザーをグループにアタッチ

  1. 作成したユーザーを選択して、"グループ"から"グループにユーザーを追加"を選択して先ほど作成した湯ループを選択してアタッチする。

公開鍵のアップロード

  1. ターミナルから以下のコマンドを実行
$ ssh-keygen
  1. IAMユーザーの"認証情報"タブ中の"AWS CodeCommit の SSH キー"の項目から"SSH 公開キーのアップロード"を選択する。
  2. ssh-keygenで作成した公開鍵の情報(.pubの識別子の中身)をコピペする。

SSHの設定

~/.ssh/config中に以下の内容を追記する

Host '<CodeCommitのエンドポイントのホスト名>'
    User '<SSH ID>'
    IdentityFile '<ssh-keyで鍵を生成するときに指定した鍵のパス>'

HostはCodeCommitの"Code"項目中の"Clone URL"などから確認できる。git-codecommit.<リージョン名>.amazonaws.com(2016年6月現在ではリージョン名はus-east-1のみ)となる。

UserはIAMユーザーの"認証情報"タブ中の"AWS CodeCommit の SSH キー"の項目のSSH IDとなる。

設定ができたかの確認

$ ssh git-codecommit.us-east-1.amazonaws.com
Enter passphrase for key '/home/test-user/awstest/id_rsa_codecommit_test': 
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
Connection to git-codecommit.us-east-1.amazonaws.com closed.

以上で通常通りにgitを使えるようになる。

CodeCommitでgit cloneしてみる

sshでgitを操作する場合

$ git clone ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-codecommit test-repo

鍵のフレーズが問われるので、ssh-keygenで生成したときに設定したパスワードを入力する。

httpsでgitを操作する場合

httpsで操作する場合は以下のようなエラーが出てgit cloneなどの操作ができなかったので対処法について書きます。

$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-codecommit
Cloning into 'test-codecommit'...
fatal: unable to access 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-codecommit/': gnutls_handshake() failed: Illegal parameter

何もしない状態でUbuntu14.04からgit cloneをするとエラーになる。
エラーの内容としてはGnuTLSでエラーが出ます。
これに対しては、GitをOpenSSLでコンパイルする必要がある。

GitをOpenSSLでコンパイル

$ sudo apt-get update
$ sudo apt-get install build-essential fakeroot 
$ dpkg-dev libcurl4-openssl-dev
$ sudo apt-get build-dep git
$ mkdir ~/git-openssl
$ cd ~/git-openssl

# gitのソースコードをダウンロード
$ apt-get source git
$ gpg --list-keys
/home/test-user/.gnupg/pubring.gpg
------------------------------
pub   4096R/AA02C70A 2011-09-01
uid                  Tyler Hicks <tyhicks@tyhicks.net>
uid                  Tyler Hicks <tyhicks@ou.edu>
uid                  Tyler Hicks <tyhicks@gmail.com>
uid                  Tyler Hicks <tyhicks@kernel.org>
uid                  Tyler Hicks <tyhicks@ubuntu.com>
uid                  Tyler Hicks <tyhicks@canonical.com>
uid                  Tyler Hicks <tyler.hicks@ubuntu.com>
uid                  Tyler Hicks <tyler.hicks@canonical.com>
sub   4096R/CB16CDD4 2011-09-01

#$ sudo gpg --armor --export AA02C70A | sudo apt-key add -
#gpg: 警告: 構成ファイル「/home/test-user/.gnupg/gpg.conf」の安全でない所有者
#OK

$ gpg --no-default-keyring -a --export AA02C70A | gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --import -
gpg: 鍵輪「/home/test-user/.gnupg/trustedkeys.gpg」ができました
gpg: 鍵AA02C70A: 公開鍵“Tyler Hicks <tyhicks@tyhicks.net>”を読み込みました
gpg: 処理数の合計: 1
gpg:               読込み: 1  (RSA: 1)
gpg: 絶対的に信用する鍵が見つかりません


$ dpkg-source -x git_1.9.1-1ubuntu0.3.dsc
dpkg-source: info: extracting git in git-1.9.1
dpkg-source: info: unpacking git_1.9.1.orig.tar.xz
dpkg-source: info: unpacking git_1.9.1-1ubuntu0.3.debian.tar.gz

次に重要な作業があり、gksuを使うなどしてdebian/control中のlibcurl4-gnutls-devlibcurl4-openssl-devに書き替える。

$ gksu vim debian/control

パッケージをビルドする。しばらく時間がかかる。

$ sudo apt-get install libcurl4-openssl-dev
$ sudo dpkg-buildpackage -rfakeroot -p -uc -us

ビルドしたパッケージをインストールする。

$ cd ../
$ sudo dpkg -i git_1.9.1-1ubuntu0.3_amd64.deb

git credential helperの設定

$ git config --global credential.helper '!aws --region us-east-1 codecommit credential-helper $@'
$ git config --global credential.UseHttpPath true

すると、~/.gitconfigに以下の内容が追記される。

[credential]
        helper = !aws --region us-east-1 codecommit credential-helper $@
        UseHttpPath = true

以上でgitが使えるようになる。

(追記) AWS CodeCommit CLIコマンド 一覧

CodeCommitには以下の14種類のコマンドが用意されている。

batch-get-repositories
create-branch
create-repository
delete-repository
get-branch
get-repository
get-repository-triggers
list-branches
list-repositories
put-repository-triggers
test-repository-triggers
update-default-branch
update-repository-description
update-repository-name

例えば、リモートのブランチの一覧を表示させたいときは以下のように入力する。

aws codecommit list-branches --repository-name test-codecommit --region us-east-1

参考

6
8
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
6
8