レジストリプロキシ(オンプレミス)
レジストリプロキシは、マルウェアをブロックし、パッケージの最小経過期間を強制することで、サプライチェーンを安全に保ちます。パブリックレジストリから直接パッケージを取得する代わりに、プライベートレジストリはリクエストをAikidoのレジストリプロキシ経由でルーティングします。
これは、Artifactoryのようなプライベートレジストリのアップストリームとして使用するか、開発者のマシン上で直接レジストリとして使用できます。
flowchart LR dev["Developer"] priv["Private Registry (optional)\neg. Artifactory"] aikido["Aikido\nRegistry Proxy"] pub["Public Registry"] blocked["Blocked"]
dev -->|"install"| priv priv --> aikido aikido -->|"safe"| pub aikido -->|"malware / too new"| blocked
style blocked fill:#fdecea,stroke:#e53935,color:#b71c1c style aikido fill:#e8f5e9,stroke:#43a047Aikidoは各パッケージが環境に到達する前に検査を行い、既知の悪意あるパッケージをブロックし、信頼するには新しすぎるパッケージを拒否します。
AikidoのOn-Prem Registry Proxyは、public.ecr.aws/e3k7x4i5/aikido-registry-proxy で提供されているDockerイメージとして配布されています。
ネットワーク要件
Section titled “ネットワーク要件”Aikidoのマルウェアリストは、最新の検出結果で継続的に更新されています。Aikidoは1日あたり10万件以上のパッケージを処理し、悪意あるものを検索しています。最新の統計情報を確認するには、こちらをクリックしてください。
最新のマルウェアリストを取得するために、レジストリプロキシは https://malware-list.aikido.dev への発信インターネット接続を必要とします。
スタンドアロンDockerコンテナ
Section titled “スタンドアロンDockerコンテナ”レジストリプロキシは、以下のコマンドを使用することでスタンドアロンのDockerコンテナとして実行できます:
docker run -p 8080:8080 -e REPOSITORY_TYPE=npm public.ecr.aws/e3k7x4i5/aikido-registry-proxy上記のコマンドは、ポート8080でリッスンしNPMパッケージを提供するコンテナを起動します。Pythonのパッケージを提供するにはREPOSITORY_TYPE=pypiを、Javaのパッケージを提供するにはREPOSITORY_TYPE=mavenを使用してください。
Kubernetesデプロイ
Section titled “Kubernetesデプロイ”以下のコマンドは、レジストリプロキシをKubernetesサービスとして実行する方法を示しています:
apiVebrsion: apps/v1kind: Deploymentmetadata: name: aikido-registry-proxy-npmspec: selector: matchLabels: app: aikido-registry-proxy-npm template: metadata: labels: app: aikido-registry-proxy-npm spec: containers: - name: proxy image: public.ecr.aws/e3k7x4i5/aikido-registry-proxy env: - name: REPOSITORY_TYPE value: npm ports: - containerPort: 8080 readinessProbe: httpGet: { path: /health, port: 8080 } livenessProbe: httpGet: { path: /health, port: 8080 }---apiVersion: v1kind: Servicemetadata: name: aikido-registry-proxy-npmspec: selector: app: aikido-registry-proxy-npm ports: - port: 8080REPOSITORY_TYPE を適切な値(npm、pypi、mavenなど)に設定することを忘れないでください。
| 環境変数 | 説明 | 値 |
|---|---|---|
| REPOSITORY_TYPE | レジストリプロキシの単一インスタンスは、単一の言語のパッケージを提供します。REPOSITORY_TYPEは、どのパッケージが提供されるかを定義します。 | - Nodeアプリケーションの場合はnpm - Pythonアプリケーションの場合はpypi - Javaアプリケーションの場合はmaven |
| NODE_PORT | パッケージが提供されるポート。 | デフォルト: 8080 |
| MINIMUM_PACKAGE_AGE_HOURS | パッケージが安全とみなされ、プロキシによって提供されるまでに公開されてから必要な時間数。 | デフォルト: 48 |
エラーコード
Section titled “エラーコード”- マルウェア: ダウンロード時(npmのtarball、pypiのファイル、mavenのjar/war/aar)に403 MALWAREでブロックされます。
- 最小パッケージ経過期間: しきい値より新しいバージョンは、メタデータ(npmのpackument、pypiのSimpleインデックス、maven-metadata.xml)から非表示になり、直接ダウンロード時にブロックされます(mavenアーティファクトの場合は403 PACKAGE_TOO_NEW)。
- 見つからない場合/アップストリームエラー: アップストリームにパッケージが存在しない場合は404、アップストリームで失敗した場合は502となります。
以下のコマンドを実行することで、.npmrcにレジストリを設定します:
npm config set registry https://npm.acme.com/onprem/以下のコマンドを実行することで、requirements.txtにインデックスを設定します:
pip install --index-url https://pypi.acme.com/onprem/simple/ <pkg>注意: Pypiの場合、末尾の /simple/ を忘れないでください
settings.xmlにレジストリを設定します:
<mirror> <id>aikido-onprem</id> <mirrorOf>*</mirrorOf> <url>https://maven.acme.com/onprem/</url></mirror>プライベートパッケージリポジトリ
Section titled “プライベートパッケージリポジトリ”以下の設定において、AikidoのUIにあるURLの代わりに、オンプレミスのURL(例: https://npm.acme.com/onprem)を使用してください: