のぴぴのメモ

自分用のLinuxとかの技術メモ

AWS CodeCommitを使ってみた

1.AWS CodeCommitとは?

AWS CodeCommit は、プライベート Git リポジトリをホストする、安全で高度にスケーラブルなマネージド型のソース管理サービス」です。平たく言えば、「簡単にプライベートなGitリポジトリが利用できるAWSサービス」です。
料金は、5ユーザまで、ストレージ50GB/月まで、10,000Gitリクエスト/月まで、無料で利用できます。
詳細は下記AWSのCodeCommitの概要を参照して下さい。

2.使ってみる

2.1 リポジトリを作ってみる

  • AWSコンソールにログインし、サービスからCodeCommitを選択する。
  • 下記画面が出るので「今すぐ始める」をクリックする

f:id:nopipi:20180421083159p:plain

  • リポジトリの作成
    • リポジトリ名 ※必須。半角英数字と「. _ -」 のみ。
    • 説明 ※任意。日本語可。
  • Eメール通知の設定
    • AWS SNS(Amazon Simple Notification Service)を利用した、プルリクされたなどのイベントのEメール通知設定
    • 通知設定が不要なら「スキップ」する
  • リポジトリに接続」というのが出るので、その内容に従い次の節で、レポジトリ接続用の IAMアカウントを作成します

2.2 gitアクセス用のIAMアカウントを作ってみる

設定内容
  • git接続方式: httpsssh接続が利用でき、かつ複数の認証方式があります。今回はCodeCommitで最も簡単な方法の「AWS CodeCommit 用に HTTPS Git 認証情報を設定」する方法で行います。 *1
  • IAMユーザ: IAMのベストプラクティス *2では、個々のユーザに権限割り当てを行うのではなくグループに権限を割り当てるのを推奨しています。というのを踏まえて、 git管理専用に以下の設定のグループとユーザを作ります。
    • グループDevAdminGrpを作成し必要なポリシーを付与する
    • ユーザgit_adminを作成し、DevAdminGrpに所属させる
手順
  • AWSコンソールから、IAMサービスに移動する
  • グループ作成
    • ダッシュボードから「グループ」を選択し、「新しいグループの作成」を押して「DevAdminGrp」グループを作成する
    • ポリシーのアタッチで、以下の3つのポリシーをアタッチする
      • CodeCommit接続に必要なポリシー (2つ)
        • IAMSelfManageServiceSpecificCredentials*3
        • IAMReadOnlyAccess*4
      • Gitレポジトリ操作用に必要なポリシー(1つ)
        • AWSCodeCommitFullAccess
  • ユーザー作成
    • ダッシュボードから「ユーザ」を選び「ユーザを追加」を押す
    • ユーザ名に「git_admin」を入れる。「プログラムによるアクセス」は後で削除するので、どちらかを適当に選択する。
    • 先ほど作成した「DevAdminGrp」ユーザを追加する
    • 確認をしてユーザ作成を行う。アクセスキーやパスワードはこの後削除するので控えは不要。
  • ユーザ認証情報の設定
    • 作成した「git_admin」ユーザを選び、「認証情報」のタブをクリックします
    • 「サインイン認証情報」で、「コンソールのパスワード」が「有効」になっている場合は「無効」に変更する
    • 「アクセスキー」が存在する場合、右端の「X」ボタンを押し、アクセスキーを削除する
    • AWS CodeCommit の HTTPS Git 認証情報」で「生成」を押し、gitへのhttps接続用のユーザとパスワードを生成する。(ユーザ名とパスワードを必ず控える!)

2.3 gitコマンドでcloneしてみる

gitの初期設定

PCにgitがインストールされてない場合は、gitをインストールします。
インストール後に、gitの初期設定として、(1)メールアドレス、(2)名前、(3)push時のモードを指定して、最後に設定内容を確認します。

$ git config --global user.email "xxxxxxx@gmail.com"
$ git config --global user.name "xxxxxxxx"
$ git config --global push.default simple

$ git config --global -l
CodeCommitと接続しリポジトリをcloneする
  • AWSコンソールで、CodeCommitの対象レポジトリに移動し「クローンURL」の「https」のURLをコピーする
  • コンソールを開き、下記コマンドでcloneする
    • 実行するとユーザ名とパスワードを聞かれるので、控えた「HTTPS Git 認証情報」を入力する
    • "git branch"はcloneされたことを示すためのコマンドで必須ではない
$ git clone  <https://リポジトリcloneURL>
Cloning into 'リポジトリ名...
Username for 'https://git-codecommit.ap-northeast-1.amazonaws.com': XXXXXXXX <==控えたユーザ名を入力
Password for 'https://XXXXXXXX@git-codecommit.ap-northeast-1.amazonaws.com':  XXXXX <== 控えたパスワードを入力
$ cd <リポジトリ名称>
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

3.gitコマンドでの、HTTPS Git認証情報の扱いについて

cloneする時に入力したHTTPS接続ときのユーザ名とパスワードは、gitのcredential.helper機能を使い管理することができます。
管理モードは以下の5つです。*5

  • 管理しない
  • メモリ上に一時キャッシュする: cache
  • テキストファイルで保存する: store
  • (Macのみ)Macのキーチェーンを利用する: osxkeychain
  • (Winのみ)Windowsの管理機能(Windows Credential Store)を利用する: wincred

プラットホームごとの確認はしてないですが、少なくともMacはosxkeychainがデフォルトのようですので、特に意識しなくても大丈夫そうです。(git公式ページのgit-osx-installerからセットアップした場合)

*1:https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up.html

*2:https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html#bp-use-aws-defined-policies

*3:IAMSelfManageServiceSpecificCredentialsは、自分のIAMの認証設定の参照/変更用ポリシーのようです

*4:IAMReadOnlyAccessは、IAM情報の参照用ポリシーのようです

*5:Git - Credential Storage