会社内からのみ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 TestRepoA
Gitは認証ヘルパーを使用して認証しています。
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のリポジトリへアクセス制限をかけることができました。