AWS CodeCommit の特定リポジトリへの専用ユーザーを作成してみる

# ０．はじめに

AWS CodeCommit の特定のリポジトリに対して、
Git の基本操作だけを行えるユーザーを作成してみました。

権限設定の主な条件は、以下。

* Git の基本的なコマンドを実行出来る。
* リポジトリの作成や削除は行えない。
* ブランチの作成や削除は行えない。

# １．AWS IAM ポリシーの作成

1. AWS IAM のコンソールへアクセス。
    * [IAM Management Console](https://console.aws.amazon.com/iam/home?region=ap-northeast-1#/policies)
<br><br>
1. ダッシュボードの「ポリシーの作成」ボタンを押下。
<br><br>
    * ![FireShot Capture 189 - IAM Management Console_ - https___console.aws.amazon.com_iam_home.png](https://qiita-image-store.s3.amazonaws.com/0/161939/4c455f41-429f-8b14-12fb-d9c80003fb44.png)
<br><br>
1. 「Policy Generator」の「選択」ボタンを押下。
<br><br>
    * ![FireShot Capture 190 - IAM Management Console_ - https___console.aws.amazon.com_iam_home.png](https://qiita-image-store.s3.amazonaws.com/0/161939/74126a40-69e5-8d8a-279f-3df563692eeb.png)
<br><br>
1. 以下の手順で項目を入力し、「次のステップ」ボタンを押下。
    * 効果 : 許可
    * AWS サービス : AWS CodeCommit
    * アクション	: 
        * codecommit:ListRepositories
    * Amazon リソースネーム（ARN） : *
    * ※「ステートメントを追加」ボタンを押下
<br><br>
    * 効果 : 許可
    * AWS サービス : AWS CodeCommit
    * アクション	: 
        * codecommit:BatchGetRepositories
        * codecommit:GetBlob
        * codecommit:GetBranch
        * codecommit:GetCommit
        * codecommit:GetDifferences
        * codecommit:GetObjectIdentifier
        * codecommit:GetReferences
        * codecommit:GetRepository
        * codecommit:GetRepositoryTriggers
        * codecommit:GetTree
        * codecommit:GitPull
        * codecommit:GitPush
        * codecommit:ListBranches
        * codecommit:ListRepositories
    * Amazon リソースネーム（ARN） : ※許可するリポジトリの ARN 
        * arn:aws:codecommit:ap-northeast-1:xxxxxxxxxxxx:XXXXXXXX
    * ※「ステートメントを追加」ボタンを押下
<br><br>
    * ![FireShot Capture 192 - IAM Management Console_ - https___console.aws.amazon.com_iam_home.png](https://qiita-image-store.s3.amazonaws.com/0/161939/65bab4f4-d59a-5ff9-7778-3fac4c63a8eb.png)
<br><br>
1. 以下の項目を入力し、「ポリシーの作成」ボタンを押下。
    * ポリシー名 : GSCodeCommit_Sample_Developers_Access　※ 任意
    * 説明 : ※ 任意
    * ポリシードキュメント : ※ 以下の様な json データが表示されているはずです。

    ```
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "Stmt*************",
                "Effect": "Allow",
                "Action": [
                    "codecommit:ListRepositories"
                ],
                "Resource": [
                    "*"
                ]
            },
            {
                "Sid": "Stmt*************",
                "Effect": "Allow",
                "Action": [
                    "codecommit:BatchGetRepositories",
                    "codecommit:GetBlob",
                    "codecommit:GetBranch",
                    "codecommit:GetCommit",
                    "codecommit:GetDifferences",
                    "codecommit:GetObjectIdentifier",
                    "codecommit:GetReferences",
                    "codecommit:GetRepository",
                    "codecommit:GetRepositoryTriggers",
                    "codecommit:GetTree",
                    "codecommit:GitPull",
                    "codecommit:GitPush",
                    "codecommit:ListBranches",
                    "codecommit:ListRepositories"
                ],
                "Resource": [
                    "arn:aws:codecommit:ap-northeast-1:xxxxxxxxxxxx:XXXXXXXX"
                ]
            }
        ]
    }
    ```
    * ![FireShot Capture 194 - IAM Management Console_ - https___console.aws.amazon.com_iam_home.png](https://qiita-image-store.s3.amazonaws.com/0/161939/ce6cb436-d77c-cd16-9568-e0f004844267.png)
<br><br>
1. IAM ポリシーの一覧で、作成されたポリシーを確認します。
<br>
    * ![FireShot Capture 195 - IAM Management Console_ - https___console.aws.amazon.com_iam_home.png](https://qiita-image-store.s3.amazonaws.com/0/161939/a2560343-cdcc-7e92-8708-42dbf1532e7d.png)

# ２．AWS IAM ユーザーへのポリシーの適用

1. AWS IAM のコンソールへアクセス。
    * [IAM Management Console](https://console.aws.amazon.com/iam/home?region=ap-northeast-1#/users)
<br><br>
1. 「ユーザーを追加」ボタンを押下。
<br><br>
    * ![FireShot Capture 196 - IAM Management Console_ - https___console.aws.amazon.com_iam_home.png](https://qiita-image-store.s3.amazonaws.com/0/161939/a12a4abd-795c-3b56-bd0f-53d839f10779.png)
<br><br>
1. 以下の項目を入力し、「次のステップ:アクセス権限」ボタンを押下。
    * ユーザー名 : ※ 任意
    * アクセスの種類 : 
        * プログラムによるアクセス : ☑︎
        * AWS マネジメントコンソールへのアクセス : □
<br><br>
    * ![FireShot Capture 197 - IAM Management Console_ - https___console.aws.amazon.com_iam.png](https://qiita-image-store.s3.amazonaws.com/0/161939/1967dd3c-40c2-36b7-9799-62e5dd861f42.png)
<br><br>
1. 「既存のポリシーを直接アタッチ」を選択後、作成した IAM ポリシーを選択し、「次のステップ:確認」ボタンを押下する。
<br><br>
    * ![FireShot Capture 199 - IAM Management Console_ - https___console.aws.amazon.com_iam.png](https://qiita-image-store.s3.amazonaws.com/0/161939/e9c20565-77da-01ab-2adf-d0538c36b07f.png)
<br><br>
1. 設定内容を確認し、「ユーザーの作成」ボタンを押下する。
<br><br>
    * ![FireShot Capture 202 - IAM Management Console_ - https___console.aws.amazon.com_iam.png](https://qiita-image-store.s3.amazonaws.com/0/161939/c6cabd08-de0b-7774-d51c-01435f02218a.png)
<br><br>
1. 作成したユーザーの内容(アクセスキー ID、シークレットアクセスキー)を確認し、保存しておきます。
<br><br>
    * ![FireShot Capture 203 - IAM Management Console_ - https___console.aws.amazon.com_iam.png](https://qiita-image-store.s3.amazonaws.com/0/161939/c2bb1586-97c2-a25c-c3cc-a4b936d6c613.png)

# ３．AWS CodeCommit の HTTPS Git 認証情報のの作成

1. 作成したユーザーの概要画面を開き、「認証情報」タブの「AWS CodeCommit の HTTPS Git 認証情報」の「生成」ボタンを押下。
<br><br>
    * ![FireShot Capture 063 - IAM Management Con_ - https___console.aws.amazon.com_iam_home#_users_y.uekama.png](https://qiita-image-store.s3.amazonaws.com/0/161939/2a55489b-2fae-3779-159e-3a423e3ba629.png)
<br><br>
1. 「生成された Git 認証情報」ダイアログが表示されるので、「証明書のダウンロード」ボタンを押下し、「リポジトリのクローンを作成するステップ」の 1 の記載の通りに、コンピュータ上の安全な場所に保存。
<br><br>
    * ![FireShot Capture 067 - IAM Management Con_ - https___console.aws.amazon.com_iam_home#_users_y.uekama.png](https://qiita-image-store.s3.amazonaws.com/0/161939/91ca4cef-b040-c864-7695-f763bda540a1.png)
<br><br>
1. あとは、ターミナルを開き git clone などを行います。
<br><br>
    * `git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/********`
        * ※ユーザー名とパスワードを求められたら、保存した Git 認証情報を対応するフィールドに入力。

# ９９．ハマりポイント

* 特にありませんが、今回の IAM ポリシーには、AWS CodeCommit 全体のリソースへの権限と特定のリソースへの権限と設定しましたが、その方が後々便利かなと思いそうしました。不要であれば、特定のリポジトリへの権限だけでいいと思います。
<br><br>
* あと、ユーザーに直接 IAM ポリシーをアタッチしていますが、グループにアタッチして、そのグループに所属させるというやり方の方が便利かもしれません。

# ＸＸ．まとめ

外部の方とのコードのやり取りをどうしようかな、と思っていて、
今回、AWS CodeCommit を使ってみました。

CodeCommit も Git もあまり詳しくないので、
もしかしたら、権限設定に誤りがあるかもしれません…。

その際は、
遠慮なくコメント下さい。

よろしくお願いします。

こちら、
以前投稿した、AWS CodeCommit 絡みのものです。
ご参考までに。

* ※ 参考：
    * [Mac から AWS CodeCommit を使ってみる \- Qiita](https://qiita.com/kusokamayarou/items/531e4340046fa42110c8)