会社内からのみCodeCommitにアクセスさせたくないという場合、簡単なものとしてIPによる制限が考えられます。
そこで今回は前回のリポジトリタグに加えてIPによるアクセス制限を実施してみます。
↓前回記事↓
capybara-engineer.hatenablog.com
公式の以下のドキュメントにIPアドレスによる制限するJSON設定が書いてあるのでそれを参考にします。
docs.aws.amazon.com
ちなみにこれです
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codecommit:BatchGetRepositories",
"codecommit:CreateBranch",
"codecommit:CreateRepository",
"codecommit:Get*",
"codecommit:GitPull",
"codecommit:GitPush",
"codecommit:List*",
"codecommit:Put*",
"codecommit:Post*",
"codecommit:Merge*",
"codecommit:TagResource",
"codecommit:Test*",
"codecommit:UntagResource",
"codecommit:Update*"
],
"Resource": "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"XXX.XXX.XXX.XXX/16"
]
}
}
}
]
}
実施作業
IAMポリシー作成
前回の記事で作成したIAMポリシーを元にIPの制限を加えていきます。
以下のDenyの部分が追加箇所です。
設定内容としては、特定のIP以外からのアクセスは全拒否し、特定のリソースタグを持つCodeCommitのリポジトリに対して特定のIPからのアクセス操作を許可する権限を与えています。
※"aws:SourceIp"には自分のPCからアクセスする際のグローバルIPを設定しました。
※CloudformationでIAMポリシー作成したら、Conditionが先頭に表示されて見づらくなってます。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"codecommit:ListRepositories"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Condition": {
"StringEquals": {
"aws:ResourceTag/TESTKEY": "A"
}
},
"Action": [
"codecommit:GitPull",
"codecommit:GitPush"
],
"Resource": "arn:aws:codecommit:ap-northeast-1:12345678912:TestRepoA",
"Effect": "Allow"
},
{
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"XXX.XXX.XXX.XXX/32"
]
}
},
"Action": "*",
"Resource": "*",
"Effect": "Deny"
}
]
}
許可端末からのgit clone実施
まずAWSのマネジメントコンソールから取得するリポジトリに指定のリソースタグが設定されているか確認します。

HTTPSのURLを取得します。
https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/TestRepoA
上記URLに対してgit cloneを実行すると、以下のように正常にリポジトリが取得できました。
PS C:\work\codecommit> git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/TestRepoA
Cloning into 'TestRepoA'...
warning: You appear to have cloned an empty repository.
PS C:\work\codecommit> ls
Directory: C:\work\codecommit
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2020/07/21 14:38 TestRepoAGitは認証ヘルパーを使用して認証しています。
PS C:\work\codecommit> git config --list credential.helper=!aws --profile test-codecommit codecommit credential-helper $@ credential.usehttppath=true
許可端末以外からのgit clone実施
許可されている端末以外からの実行を確認するために、サーバを1台作成します。

使用する認証情報は同じものを設定しています。
[root@ip-XX-XX-XX-XX work_codecommit]# git config --list credential.helper=!aws --profile test-codecommit --region ap-northeast-1 codecommit credential-helper $@ credential.usehttppath=true
IP制限がかかっているため、別のIPを持つ端末からではgit cloneできませんでした。

感想及び所感
想定通りCodeCommitのリポジトリへアクセス制限をかけることができました。