AWS CodeArtifact
npm、Maven、PyPI、NuGet のパッケージリポジトリをフルマネージドで提供するアーティファクト管理サービス
概要
AWS CodeArtifact は、ソフトウェアパッケージのリポジトリをフルマネージドで提供するサービスです。npm、Maven、PyPI、NuGet、Swift、Cargo など主要なパッケージマネージャーに対応し、パブリックレジストリからのパッケージキャッシュと社内プライベートパッケージの一元管理を実現します。IAM ポリシーによるきめ細かなアクセス制御、クロスアカウント共有、パッケージバージョンの不変性保証を備え、サプライチェーンセキュリティの強化に貢献します。
ドメインとリポジトリの階層設計
CodeArtifact のリソース構造は、ドメインとリポジトリの 2 階層で構成されます。ドメインは組織全体のパッケージ管理の境界を定義し、同一ドメイン内のリポジトリ間ではパッケージの重複排除 (デデュプリケーション) が自動的に行われるため、ストレージコストを最適化できます。リポジトリはチーム別、プロジェクト別、環境別に作成し、それぞれに独立したアクセスポリシーを設定します。実務では、社内共通ライブラリ用のリポジトリ、プロダクトチーム専用のリポジトリ、パブリックパッケージのキャッシュ用リポジトリを分離する設計が一般的です。ドメインレベルの暗号化には AWS KMS のカスタマーマネージドキーを指定でき、保存されるすべてのパッケージアセットが暗号化されます。クロスアカウント共有はドメインポリシーで制御し、Organizations 内の複数アカウントから同一ドメインのリポジトリにアクセスさせることで、組織全体でパッケージの一貫性を維持できます。
アップストリーム接続とパッケージキャッシュ
CodeArtifact のアップストリーム接続は、パブリックレジストリ (npmjs.com、PyPI、Maven Central、NuGet Gallery など) からのパッケージを自動的にキャッシュする仕組みです。開発者がパッケージをリクエストすると、まずローカルリポジトリを検索し、見つからなければアップストリームのリポジトリを順に辿り、最終的にパブリックレジストリから取得してキャッシュします。一度キャッシュされたパッケージはローカルに保持されるため、パブリックレジストリの障害やネットワーク遅延の影響を受けません。この仕組みはサプライチェーン攻撃への防御にも有効です。パッケージオリジンコントロールを設定すると、パブリックレジストリからの新規パッケージの自動取り込みを制限でき、依存関係かく乱攻撃 (Dependency Confusion) を防止できます。社内パッケージと同名のパッケージがパブリックに公開されても、オリジンコントロールにより社内版が優先されます。パッケージバージョンのステータス管理 (Published、Unlisted、Archived、Disposed) により、非推奨バージョンの利用を段階的に制限することも可能です。
CI/CD パイプラインとの認証統合
CodeArtifact の認証は、一時的な認証トークンを発行する仕組みで動作します。aws codeartifact get-authorization-token コマンドで最大 12 時間有効なトークンを取得し、npm、pip、Maven などのパッケージマネージャーの認証情報として設定します。CodeBuild との統合では、ビルドプロジェクトの IAM ロールに CodeArtifact へのアクセス権限を付与し、buildspec.yml の pre_build フェーズでトークンを取得してパッケージマネージャーを設定するパターンが標準的です。GitHub Actions や GitLab CI などの外部 CI サービスからは、OIDC フェデレーションで IAM ロールを引き受けてトークンを取得します。npm の場合は .npmrc ファイルにレジストリ URL とトークンを設定し、pip の場合は --index-url オプションでリポジトリ URL を指定します。パッケージの公開 (publish) 権限と取得 (read) 権限を IAM ポリシーで分離することで、CI パイプラインからの意図しないパッケージ公開を防止できます。リポジトリエンドポイントポリシーで VPC エンドポイント経由のアクセスに限定すれば、ネットワーク経路のセキュリティも確保できます。