CodeCommitへオンプレのような内部ネットワークからだけGitさせたい(その2)
こんにちは、シマです。
先日、以下の記事を書きました。
先日の構成の場合、DNSの設定を変更するためDNSを利用している全てのユーザに影響のある設計となっています。しかし、1つのプロジェクトだけで内部ネットワークからgitさせたいようなケースの場合は、DNSへの設定変更は難しいと思います。今回はオンプレDNSの設定を変更せず、VPCエンドポイントを直接利用する方法を試してみました。
構成
基本的には前回と同じ構成です。疑似オンプレVPCを作成し、CodeCommitエンドポイントを配置したVPCとTransit Gatewayで接続しています。前回と違い、オンプレのDNSに条件付きフォワーダの設定はせずに、インターネットの名前解決ができる環境とします。
CodeCommitへのアクセスはエンドポイント経由でアクセスすることで、内部からアクセス可能にしています。CodeCommitエンドポイントを配置するVPCとオンプレ相当VPCはTransitGatewayで接続しています。また、オンプレ相当VPCからCodeCommitエンドポイントの名前解決のために、DNS(WindowsServer)を用意しています。DNSではフォワーダーとしてパブリックDNSを設定しており、インターネット上の名前解決が出来るようにしています。Gitオペレーションを実行するEC2(Client)はDNS(WindowsServer)で名前解決するように設定しています。
必要な設定
1. git用CodeCommitエンドポイント
詳細は割愛しますが、前回同様に対象VPCにCodeCommitへgitコマンド発行用エンドポイントを作成します。
2. IAMユーザのポリシー
こちらも前回同様に、対象ユーザのポリシー設定において、前述で作成したVPCEndpointからのアクセスのみ許可するように指定します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codecommit:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-xxxxxx" } } } ] }
gitする時の変更点
このまま、EC2(Client)から以下のコマンドを実行してもエラーになってしまいます。
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/TestRepository Cloning into 'TestRepository'... fatal: unable to access 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/TestRepository/': The requested URL returned error: 403
これは前回とは違い「git-codecommit.ap-northeast-1.amazonaws.com」のアクセスがインターネット経由でのアクセスになっており、前述で設定したIAMユーザのポリシーにより特定のVPCEndpointからのアクセスのみ許可するようにしているためです。そのため、今回の構成では特定のVPCEndpointを指定するURLでアクセスする必要があります。
AWS管理コンソールのエンドポイントのページからDNS名を確認します。
※要件によりAZを指定したアクセスを行う場合は、「ap-northeast-1a」のようなものを含んでいるDNS名を使用します。
確認したDNS名と「git-codecommit.ap-northeast-1.amazonaws.com」を置き換えて、先ほどのコマンドを実行します。
$ git clone https://vpce-0123456789abcdef-01234567.git-codecommit.ap-northeast-1.vpce.amazonaws.com/v1/repos/TestRepository Cloning into 'TestRepository'... remote: Counting objects: 3, done. Unpacking objects: 100% (3/3), 219 bytes | 219.00 KiB/s, done.
正常にアクセスできました。
最後に
前回の記事を書いた後で、DNSの設定変更ってハードルが高いケースがあるなーと感じて今回の構成を記事にしてみました。
本記事がどなたかのお役に立てれば幸いです。