CodeCommitをAWS-CLIからつかう

# CodeCommit をCLIからつかう方法について

CLIから閲覧権限操作が可能なgitリポジトリ CodeCommit。
CLIでの操作をまとめています。

GUI操作 参考
---------------
日本語 
  ユーザ観点での紹介 http://dev.classmethod.jp/cloud/aws/aws-codecommit-released/

英語 sshでの利用方法 http://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-ssh-unixes.html


## 目次
このエントリでは下記のような流れで、リモートのgitリポジトリにデータを入れるところまで行きます。

* CodeCommitへのアクセス権限(ポリシー)を持ったグループの作成
* リポジトリにアクセスするAWS IAMアカウントの作成
* そのアカウントのssh公開鍵の作成、登録
  ( これを、書き込みができるPowerUserとReadOnlyユーザを作成します )

* CodeCommit側でのリポジトリ操作
 + リストアップ
 + 作成
 + 削除

* 作業端末側 ~/.ssh/config 設定

* サーバのfingerprintを ~/.ssh/known_hosts に追加

* 手元のディレクトリを git管理にしてpushする



## CodeCommit用 IAMアカウント作成

CodeCommit PowerUserと ReadOnly用の設定をします

グループを作成、
IAMアカウントを作成、
グループ内にIAMアカウントを追加します

### PowerUser 作成

```bash:PowerUser用グループ作成
 $ aws iam create-group --group-name codecommit_poweruser
 {
     "Group": {
         "Path": "/",
         "CreateDate": "2016-05-25T23:36:43.207Z",
         "GroupId": "********************",
         "Arn": "arn:aws:iam::***********:group/CodeCommit_PowerUser",
         "GroupName": "CodeCommit_PowerUser"
     }
 }
```

```bash:グループにPowerUser権限の付与
 $ aws iam attach-group-policy --group-name codecommit_poweruser --policy-arn "arn:aws:iam::aws:policy/AWSCodeCommitPowerUser"
```

```bash:PowerUser用アカウント作成
$ aws iam create-user --user-name codecommit_poweruser
{
    "User": {
        "UserName": "codecommit_poweruser",
        "Path": "/",
        "CreateDate": "2016-05-26T00:00:03.883Z",
        "UserId": "**********************",
        "Arn": "arn:aws:iam::482789188173:user/codecommit_poweruser"
    }
}
```

```bash:PowerUser用グループにIAMアカウントを追加
 $ aws iam add-user-to-group --group-name  codecommit_poweruser --user-name codecommit_poweruser
```

```bash:PowerUser用ssh鍵の作成 
 $ cd ~/.ssh/ &&  ssh-keygen -f codecommit_poweruser
```

PowerUser用 ssh 公開鍵のIAMへの登録

```bash:既にssh公開鍵が設定されていないか確認
 $ aws iam list-ssh-public-keys --user-name codecommit_poweruser
 {
    "SSHPublicKeys": [],
    "IsTruncated": false
 }
```

```bash:IAMアカウントにssh公開鍵追加
 $ aws iam upload-ssh-public-key --user-name codecommit_poweruser --ssh-public-key-body "$(cat ~/.ssh/codecommit_poweruser.pub)"
 {
     "SSHPublicKey": {
         "UserName": "codecommit_poweruser",
         "Status": "Active",
         "SSHPublicKeyBody": "ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXX hoge@localhost.localdomain",
         "UploadDate": "2016-04-20T23:51:41.425Z",
         "Fingerprint": "8e:c5:32:85:d0:0d:7d:2b:e5:36:6a:e9:5a:62:89:24",
         "SSHPublicKeyId": "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
     }
 }
```


### ReadOnly グループの作成

```bash:グループの作成
 $ aws iam create-group --group-name codecommit_readonly 
 {
    "Group": {
        "Path": "/",
        "CreateDate": "2016-05-25T23:54:03.143Z",
        "GroupId": "**********************",
        "Arn": "arn:aws:iam::************:group/CodeCommit_ReadOnly",
        "GroupName": "codecommit_readonly"
    }
 }
```

```bash:グループにReadOnly権限の付与
 $ aws iam attach-group-policy --group-name codecommit_readonly --policy-arn "arn:aws:iam::aws:policy/AWSCodeCommitReadOnly"
```

```bash:ReadOnly用IAMアカウント作成
  $ aws iam get-user --user-name codecommit_readonly
  codecommit_readonly ユーザがいないことを確認

  $ aws iam create-user --user-name codecommit_readonly
```

```bash:ReadOnly用グループにIAMアカウントを追加
 $ aws iam add-user-to-group --group-name  codecommit_readonly --user-name codecommit_readonly
```

```bash:ReadOnly用ssh鍵の作成
 $ cd ~/.ssh/ && ssh-keygen -f codecommit_readonly
```

ReadOnly用 ssh 公開鍵のIAMへの登録

```bash:既に設定されていないか確認
 $ aws iam list-ssh-public-keys --user-name codecommit_readonly
 {
    "SSHPublicKeys": [],
    "IsTruncated": false
 }
```

```bash:IAMアカウントにssh公開鍵追加
 $ aws iam upload-ssh-public-key --user-name codecommit_readonly --ssh-public-key-body "$(cat ~/.ssh/codecommit_readonly.pub)"
 {
     "SSHPublicKey": {
         "UserName": "codecommit_readonly",
         "Status": "Active",
         "SSHPublicKeyBody": "ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXXXX hoge@localhost.localdomain",
         "UploadDate": "2016-04-20T23:51:41.425Z",
         "Fingerprint": "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX",
         "SSHPublicKeyId": "XXXXXXXXXXXXXXXXXXXXXXX"
     }
 }
```

```bash:確認
 $ aws iam list-ssh-public-keys --user-name codecommit_readonly
```

```bash:コンソールでレポジトリへのアクセスができるか確認する
 $ git clone ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/
```

## CodeCommit側でのリポジトリ操作

```bash:現在のレポジトリ一覧
 $ aws codecommit --region us-east-1 list-repositories
```

```bash:新しいレポジトリを作る
 $ aws codecommit --region us-east-1 create-repository --repository-name hoge
```

```bash:レポジトリの削除
 $ aws codecommit --region us-east-1 delete-repository --repository-name hoge
```

## 作業端末側 ~/.ssh/config 設定

### ~/.ssh/config 編集 ssh通信できるようにする
指定の公開鍵を使ってアクセスするように設定

※ ~/.ssh/config の [ User ]は AWS IAMアカウントで確認できる  SSHPublicKeyId にする
この値はAWS-CLIで

```bash:SHHPublicKeyIdの確認
    aws iam --region us-east-1 list-ssh-public-keys --user-name username
```

でも確認できる

$ vi ~/.ssh/config

下記追加した

```~/.ssh/configに追加
  Host git-codecommit.*.amazonaws.com
    User AKI***************
    IdentityFile ~/.ssh/codecommit_readonly.pem
```

上記は CodeCommit用に作成したアカウントのAccess Key Idと、
作成した鍵のファイル名にしている。

### サーバのfingerprintをknown_hostsに追加する
下記は2015/09/04に実施した。この時のCodeCommit側フィンガープリントは
『a6:9c:7d:bc:35:f5:d4:5f:8b:ba:6f:c8:bc:d4:83:84.』だった

## 手元のディレクトリを git管理にしてpushする
```クライアント側
 $ git init 
 $ git config credential.helper '!aws codecommit credential-helper $@'
 
 $ git config credential.UseHttpPath true
 
 $ git remote add codecommit ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/${PWD##*/}
 
 $ git commit
 
 $ git push -u repogitory_name master
```