ある企業が、EC2 インスタンスから外部の Python パッケージリポジトリ(PyPI)にアクセスせずに Python ライブラリをインストールしたい。プライベートサブネットのインスタンスからインターネットアクセスを禁止しており、社内で承認されたパッケージのみを使用することがポリシーで定められている。このニーズを満たす AWS サービスの組み合わせを 2 つ選択してください。
- A. Amazon ECR(Elastic Container Registry)にコンテナイメージを保存し、すべての依存パッケージをイメージに組み込む。EC2 インスタンスは ECR からイメージを取得して実行する。
- B. AWS CodeArtifact の上流リポジトリ設定で PyPI を上流として設定し、必要なパッケージが CodeArtifact 経由でキャッシュされるようにする(承認ポリシーと組み合わせて)。
- C. AWS CodeArtifact にプライベートリポジトリを作成し、承認済みパッケージのみをキャッシュ・ホストする。EC2 インスタンスは CodeArtifact の VPC エンドポイント経由でパッケージを取得する。
- D. EC2 インスタンスに NAT ゲートウェイを経由させて PyPI への直接アクセスを許可する。
- E. PyPI からすべてのパッケージをダウンロードして S3 に保存し、EC2 インスタンスから S3 経由でインストールする。
解答と解説を見る
正解: A, C
承認済みパッケージのみをプライベートネットワーク内で提供するには 2 つのアプローチが有効である。選択肢CのAWS CodeArtifact は AWS のプライベートアーティファクトリポジトリで、承認済みパッケージのみをホストし、VPC エンドポイント経由でインターネットアクセスなしにパッケージを取得できる。CodeArtifact の承認ポリシーで未承認パッケージを制限できる。選択肢AのAmazon ECR へのコンテナイメージ保存(依存パッケージ込み)は、アプリケーションをコンテナ化して必要なパッケージをすべてイメージに含めることで、実行時のパッケージ取得が不要になる。ECR も VPC エンドポイント経由でアクセス可能。選択肢EのS3 へのパッケージ保存は実装できるが、承認されていないパッケージも含まれる可能性があり、承認管理の仕組みが別途必要。CodeArtifact の方が標準的で管理が容易。選択肢BのPyPI 上流キャッシュは CodeArtifact 経由のパッケージ取得に使えるが、結果的にインターネットアクセス(PyPI)が発生するため「インターネットアクセス禁止」要件に反する(ただし EC2 直接ではなく CodeArtifact が代理アクセスするため許容される場合もあるが、厳格なポリシー環境では問題)。選択肢DはNAT ゲートウェイ経由でインターネットアクセスを許可するもので「インターネットアクセス禁止」の要件に明確に反する。
📚 関連サービスの解説: Amazon ECR ・ Amazon EC2