Quarantine for a misbehaving actor
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 28/100
調査の方向性
Start by reading the QuarantineActor proposal and the named ResumeActor, SuspendActor, DeleteActor, and UpdateActorEgressPolicy RPCs, plus the router’s resume path in atenet-router. The issue describes cross-cutting changes to actor state, networking, snapshot retention, permissions, and audit events, but names no source files or tests. Done means a supported single-call quarantine meets the listed containment, preservation, permission, and audit requirements.
索引モデルが issue の本文から書いたものです。
説明
We need a supported, fast, single-call way to contain a misbehaving actor and keep its state for forensics.
Current quarantine procedure
UpdateActorEgressPolicywithrules: [], so new egress is denied within about 10s.SuspendActor, which checkpoints the actor and tears down the workload, closing open connections.- Copy the actor's snapshot prefix out of object storage to a restricted forensics bucket, because
DeleteActordeletes it. - Then
DeleteActor, or delete theActorTemplateif all actors created from it can be stopped too. - Gap: anything that reaches the actor between steps 2 and 4 wakes it, though the damage is limited because egress is denied. Blocking ingress to the actor would close this gap, because the router resumes the actor only when a request gets through. But there is no per-actor ingress control today. The only one is the router's caller allowlist (
--ingress-allowed-spiffe-ids), and it applies to every actor in the cluster.
What's missing today
ActorStatehas no quarantined value, so a suspended actor can always be resumed.atenet-routercallsResumeActoron every inbound request to the actor, and nothing can block ingress to a single actor.- Undoing a quarantine should require a special permission, but today it needs only the same permission as normal use.
- There's not currently a way to signal that a snapshot should be held for evidence:
DeleteActordeletes the actor's snapshot prefix in object storage and hard-deletes the actor row.- Deleting the
ActorTemplatekeeps the snapshots and blocks resume (FailedPrecondition: actor template not found). But it blocks every actor created from that template, and actors that are already running keep running.
- Setting the egress policy to deny-all (
rules: []) works and is allowed while the actor is suspended. But it only affects new connections, after a policy cache TTL of up to 10s. TLS-passthrough connections that are already open stay up until the workload is torn down.
Proposal
A QuarantineActor RPC (or a quarantine field on the actor) that does all of the following in one call:
- Quarantines the actor. Ingress to the actor is blocked before resume, so no request wakes it.
ResumeActorfrom any caller returnsFailedPrecondition, and the router returns a fixed error. - Cuts the network now. Egress is denied without waiting for the cache TTL, and open connections are reset. Ingress to the actor is refused.
- Suspends and preserves. Suspend if running (or pause, if a faster stop is needed). Mark the snapshot as tainted and on hold:
- snapshot GC and
DeleteActorkeep it; - it can't be resumed in production;
- it can be exported or restored only into an isolated debug environment with no egress.
- snapshot GC and
- Separate permissions to release. Add a
can_quarantinepermission (atespace editor, global owner, and a detection-integration role) and acan_release_quarantinepermission held only by an admin or security role, not the atespace editor. - Audit. Record the caller, the reason, and an incident ID in a structured audit event for quarantine, release, and each attempt to resume a quarantined actor.
Also worth considering:
- Broader scopes: quarantine everything created from a template, or everything in an atespace, for incidents that affect a whole class of actors (e.g. a poisoned image or template).
- Automation: an API that detection vendors (Wiz, Datadog, custom) can call, so containment doesn't need a human.
- Supported playbook doc: the ordered steps and the guarantees and limits of each one (what stops immediately, what lasts up to the TTL, what is out of scope).
- 主要言語
- Go
- スター
- 5.9k
- フォーク
- 637
- 平均マージ
- 2日 2時間
- マージ済み PR(30日)
- 528
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
agent-substrate/substrate のほかの issue
-
Clean up the ko retry tests対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンarea/dev-infra area/reliability area/tests kind/cleanup
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
agent-substrate/substrate#3461 ·
メンテナーはふだん 1 日以内に返信
-
egress: drop the empty-provider check in providerCredential対応中かも @cloudonly が 3 日前に担当しました。 オープンarea/network kind/cleanup
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
agent-substrate/substrate#3428 ·
メンテナーはふだん 1 日以内に返信
-
kubectl-ate create actor-template -f <file> fails with useless error対応中かも @cloudonly が 5 日前に担当しました。 オープンarea/cli kind/bug
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
agent-substrate/substrate#3406 ·
メンテナーはふだん 1 日以内に返信
-
k8s-credential-provider manifest is missing ate-otel-config envFrom, failing OTLP metric exports to [::1]:4317 / 127.0.0.1:4317 every 60s対応中かも @ericcurtin が 6 日前に担当しました。 オープンarea/dev-infra area/observability area/security kind/bug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
agent-substrate/substrate#3282 ·
メンテナーはふだん 1 日以内に返信
-
filecachegc.runPass suppresses eviction logs when FreedBytes < target and consecutiveShortfalls > 3対応中かも @ericcurtin が 5 日前に担当しました。 オープンarea/node area/observability area/storage kind/bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
agent-substrate/substrate#3281 ·
メンテナーはふだん 1 日以内に返信
agent-substrate/substrate の issue をすべて見る
似ている issue
-
agent-butler-finding chore
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
jordansmall/spindrift#6318 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Eyevinn/moqlivemock#166 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
JakeChampion/lang#14091 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
hyperledger/fabric-x-orderer#1409 ·
メンテナーはふだん 3 日以内に返信
-
get actions doesn't show the approval flag, and describe action shows it unformatted対応中かも @kenokech が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信