コンテンツにスキップ

レジストリプロキシ(オンプレミス)

レジストリプロキシは、マルウェアをブロックし、パッケージの最小経過期間を強制することで、サプライチェーンを安全に保ちます。パブリックレジストリから直接パッケージを取得する代わりに、プライベートレジストリはリクエストを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:#43a047

Aikidoは各パッケージが環境に到達する前に検査を行い、既知の悪意あるパッケージをブロックし、信頼するには新しすぎるパッケージを拒否します。

AikidoのOn-Prem Registry Proxyは、public.ecr.aws/e3k7x4i5/aikido-registry-proxy で提供されているDockerイメージとして配布されています。

Aikidoのマルウェアリストは、最新の検出結果で継続的に更新されています。Aikidoは1日あたり10万件以上のパッケージを処理し、悪意あるものを検索しています。最新の統計情報を確認するには、こちらをクリックしてください。

最新のマルウェアリストを取得するために、レジストリプロキシは https://malware-list.aikido.dev への発信インターネット接続を必要とします。

レジストリプロキシは、以下のコマンドを使用することでスタンドアロンのDockerコンテナとして実行できます:

Terminal window
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サービスとして実行する方法を示しています:

apiVebrsion: apps/v1
kind: Deployment
metadata:
name: aikido-registry-proxy-npm
spec:
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: v1
kind: Service
metadata:
name: aikido-registry-proxy-npm
spec:
selector:
app: aikido-registry-proxy-npm
ports:
- port: 8080

REPOSITORY_TYPE を適切な値(npm、pypi、mavenなど)に設定することを忘れないでください。

環境変数 説明
REPOSITORY_TYPE レジストリプロキシの単一インスタンスは、単一の言語のパッケージを提供します。REPOSITORY_TYPEは、どのパッケージが提供されるかを定義します。

- Nodeアプリケーションの場合はnpm

- Pythonアプリケーションの場合はpypi

- Javaアプリケーションの場合はmaven

NODE_PORT パッケージが提供されるポート。 デフォルト: 8080
MINIMUM_PACKAGE_AGE_HOURS パッケージが安全とみなされ、プロキシによって提供されるまでに公開されてから必要な時間数。 デフォルト: 48
  • マルウェア: ダウンロード時(npmのtarball、pypiのファイル、mavenのjar/war/aar)に403 MALWAREでブロックされます。
  • 最小パッケージ経過期間: しきい値より新しいバージョンは、メタデータ(npmのpackument、pypiのSimpleインデックス、maven-metadata.xml)から非表示になり、直接ダウンロード時にブロックされます(mavenアーティファクトの場合は403 PACKAGE_TOO_NEW)。
  • 見つからない場合/アップストリームエラー: アップストリームにパッケージが存在しない場合は404、アップストリームで失敗した場合は502となります。

以下のコマンドを実行することで、.npmrcにレジストリを設定します:

Terminal window
npm config set registry https://npm.acme.com/onprem/

以下のコマンドを実行することで、requirements.txtにインデックスを設定します:

Terminal window
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)を使用してください: