#はじめに
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
のみアクセスできる。
ということになります。