CodeCommitのリポジトリを特定のIPアドレスのみアクセス許可する方法


はじめに

CodeCommitでgit管理する際、どのIPアドレスでもコミットできると、ユーザー名とパスワードが漏れた場合、リポジトリがアクセスされる可能性がありますので、特定のIPアドレスのみが使用できるようにIAMロールを設定します。

CodeCommitのセットアップ

下記の記事を参考に、リポジトリをgit cloneできるところまで進めます。
一箇所変更点があり、IAMロールは、AWSCodeCommitPowerUserを使用しています。

CodeCommitをHTTPSとパスワード認証で使いセットアップする

IAMポリシーにIP制限をかける

IP制限をかける方法は、AWSCodeCommitPowerUserのポリシー内容をベースに、IP制限をかけたポリシーを新たに作成し、commitユーザーにアタッチするだけです。

新しくポリシーを作成します。
作成画面から、管理ポリシーのインポートをクリックし、AWSCodeCommitPowerUser管理ポリシーをインポートします。



CodeCommitのリクエスト条件をクリックすると、送信元IP欄がありますので、そこに記載したIPアドレスのみがgit管理できるようになります。

jsonタブに切り替えると、"aws:SourceIp": "111.111.111.111/32"と、IP制限できていることが分かりました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "codecommit:ListRepositoriesForApprovalRuleTemplate",
                "codecommit:CreateApprovalRuleTemplate",
                "codecommit:UpdateApprovalRuleTemplateName",
                "codecommit:GetApprovalRuleTemplate",
                "codecommit:ListApprovalRuleTemplates",
                "codecommit:ListRepositories",
                "codecommit:UpdateApprovalRuleTemplateContent",
                "codecommit:UpdateApprovalRuleTemplateDescription"
            ],
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "111.111.111.111/32"
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "codecommit:Merge*",
                "codecommit:Get*",
                "codecommit:TagResource",
                "codecommit:BatchAssociateApprovalRuleTemplateWithRepositories",
                "codecommit:BatchGet*",
                "codecommit:GitPull",
                "codecommit:UntagResource",
                "codecommit:BatchDisassociateApprovalRuleTemplateFromRepositories",
                "codecommit:Update*",
                "codecommit:OverridePullRequestApprovalRules",
                "codecommit:Post*",
                "codecommit:EvaluatePullRequestApprovalRules",
                "codecommit:Test*",
                "codecommit:Create*",
                "codecommit:List*",
                "codecommit:DisassociateApprovalRuleTemplateFromRepository",
                "codecommit:Describe*",
                "codecommit:Put*",
                "codecommit:GitPush",
                "codecommit:DeleteFile",
                "codecommit:BatchDescribe*",
                "codecommit:AssociateApprovalRuleTemplateWithRepository",
                "codecommit:DeleteBranch"
            ],
            "Resource": "arn:aws:codecommit:ap-northeast-1:161750041531:wordpress",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "111.111.111.111/32"
                }
            }
        },
        # 以下省略

リソースを制限

ちなみにIAMポリシーに、使用できるリポジトリを制限するとよりセキュリティー面が保たれます。
リソースをクリックし、ARNを追加をクリックし、必要な情報を入力するだけです。
アクセスできるリポジトリは、wordpressとします。


jsonの内容はこのようになりました。CodeCommitのアクション内容には一部、リソースが絞れないものもあるようですね。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "codecommit:ListRepositoriesForApprovalRuleTemplate",
                "codecommit:CreateApprovalRuleTemplate",
                "codecommit:UpdateApprovalRuleTemplateName",
                "codecommit:GetApprovalRuleTemplate",
                "codecommit:ListApprovalRuleTemplates",
                "codecommit:ListRepositories",
                "codecommit:UpdateApprovalRuleTemplateContent",
                "codecommit:UpdateApprovalRuleTemplateDescription"
            ],
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "111.111.111.111/32"
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "codecommit:Merge*",
                "codecommit:Get*",
                "codecommit:TagResource",
                "codecommit:BatchAssociateApprovalRuleTemplateWithRepositories",
                "codecommit:BatchGet*",
                "codecommit:GitPull",
                "codecommit:UntagResource",
                "codecommit:BatchDisassociateApprovalRuleTemplateFromRepositories",
                "codecommit:Update*",
                "codecommit:OverridePullRequestApprovalRules",
                "codecommit:Post*",
                "codecommit:EvaluatePullRequestApprovalRules",
                "codecommit:Test*",
                "codecommit:Create*",
                "codecommit:List*",
                "codecommit:DisassociateApprovalRuleTemplateFromRepository",
                "codecommit:Describe*",
                "codecommit:Put*",
                "codecommit:GitPush",
                "codecommit:DeleteFile",
                "codecommit:BatchDescribe*",
                "codecommit:AssociateApprovalRuleTemplateWithRepository",
                "codecommit:DeleteBranch"
            ],
            "Resource": "arn:aws:codecommit:ap-northeast-1:xxxxxxxxx:wordpress",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "111.111.111.111/32"
                }
            }
        },
        # 以下省略

そして、IAMポリシーの作成をクリックします。

あとは、作成したポリシーをCodeCommitユーザーにアタッチするだけです。
これによって、作成したポリシーをアタッチしたCodeCommitユーザーは、IPアドレスが111.111.111.111/32だった場合に限り、リポジトリ名wordpressのみアクセスできる。
ということになります。

参考

CodeCommitへのアクセスをIPアドレスで制限

AWS AWS CodeCommitドキュメント