RPF-WP-0064-T06: pin the live production OpenBao image digest in the restore adapter
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 4384@bnt-lap001 Assistant-Session: 80d1f3da-7a91-4519-9737-9ba128b4da64
This commit is contained in:
parent
fb0b50234d
commit
1701a3fa2a
4 changed files with 16 additions and 7 deletions
|
|
@ -198,7 +198,7 @@
|
||||||
| task | RPF-WP-0064-T03 | done | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
| task | RPF-WP-0064-T03 | done | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
||||||
| task | RPF-WP-0064-T04 | done | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
| task | RPF-WP-0064-T04 | done | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
||||||
| task | RPF-WP-0064-T05 | wait | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
| task | RPF-WP-0064-T05 | wait | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
||||||
| task | RPF-WP-0064-T06 | wait | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
| task | RPF-WP-0064-T06 | done | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
||||||
| task | RPF-WP-0064-T07 | wait | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
| task | RPF-WP-0064-T07 | wait | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
||||||
| task | RPF-WP-0064-T08 | wait | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
| task | RPF-WP-0064-T08 | wait | — | workplans/RPF-WP-0064-isolated-original-openbao-restore.md |
|
||||||
| intake | RPF-IN-0001 | closed | — | intakes/intakes.md |
|
| intake | RPF-IN-0001 | closed | — | intakes/intakes.md |
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,10 @@ NAMESPACE = "railiance-openbao-restore-attempt"
|
||||||
ADMISSION_SCHEMA = "railiance-openbao-restore-admission/v1"
|
ADMISSION_SCHEMA = "railiance-openbao-restore-admission/v1"
|
||||||
RECEIPT_SCHEMA = "railiance-openbao-restore-receipt/v2"
|
RECEIPT_SCHEMA = "railiance-openbao-restore-receipt/v2"
|
||||||
IMAGE_REPOSITORY = "quay.io/openbao/openbao"
|
IMAGE_REPOSITORY = "quay.io/openbao/openbao"
|
||||||
# RPF-WP-0064-T06 writes the owner-confirmed production digest here. Until then
|
# RPF-WP-0064-T06: production digest, observed 2026-10-24 as the imageID of the live
|
||||||
# original-material runs refuse; synthetic rehearsals use the admission digest.
|
# openbao-0 container (spec image quay.io/openbao/openbao:2.5.4); equal to the T04
|
||||||
PINNED_IMAGE_DIGEST: str | None = None
|
# rehearsal pull. Original-material runs refuse any other image.
|
||||||
|
PINNED_IMAGE_DIGEST: str | None = "sha256:436eaf9778cad75507ff70ea26ace30dcbe15606e619ac3823495663d7f7c115"
|
||||||
MAX_DURATION_SECONDS = 2700
|
MAX_DURATION_SECONDS = 2700
|
||||||
REAPER_GRACE_SECONDS = 60
|
REAPER_GRACE_SECONDS = 60
|
||||||
DEFAULT_ANCHOR = Path("/etc/railiance-openbao-restore/allowed_signers")
|
DEFAULT_ANCHOR = Path("/etc/railiance-openbao-restore/allowed_signers")
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,8 @@ class AdmissionTests(Base):
|
||||||
path, sig, sha, signers = self.signed(self.admission(material="original"))
|
path, sig, sha, signers = self.signed(self.admission(material="original"))
|
||||||
with self.assertRaises(A.Refused):
|
with self.assertRaises(A.Refused):
|
||||||
A.load_admission(path, sig, sha, signers)
|
A.load_admission(path, sig, sha, signers)
|
||||||
self.assertIsNone(A.PINNED_IMAGE_DIGEST, "T06 fills the pin; update this test then")
|
self.assertEqual(A.PINNED_IMAGE_DIGEST,
|
||||||
|
"sha256:436eaf9778cad75507ff70ea26ace30dcbe15606e619ac3823495663d7f7c115")
|
||||||
|
|
||||||
def test_normalise_and_project(self):
|
def test_normalise_and_project(self):
|
||||||
source = {"token_ttl": "5m", "token_policies": ["b", "a"], "_note": "x"}
|
source = {"token_ttl": "5m", "token_policies": ["b", "a"], "_note": "x"}
|
||||||
|
|
|
||||||
|
|
@ -351,13 +351,20 @@ so a snapshot older than a later source edit yields `refused`. Signing T05 still
|
||||||
|
|
||||||
```task
|
```task
|
||||||
id: RPF-WP-0064-T06
|
id: RPF-WP-0064-T06
|
||||||
status: wait
|
status: done
|
||||||
priority: low
|
priority: low
|
||||||
depends_on: [RPF-WP-0064-T02]
|
depends_on: [RPF-WP-0064-T02]
|
||||||
blocking_reason: "rapp-openbao confirms the chart 0.28.2 / image 2.5.4 pin and digest used by production at the 2026-10-14 snapshot time (rehearsal pulled quay.io/openbao/openbao@sha256:436eaf9778cad75507ff70ea26ace30dcbe15606e619ac3823495663d7f7c115 for tag 2.5.4; not yet owner-confirmed). The confirmed digest is then written to PINNED_IMAGE_DIGEST in scripts/openbao-isolated-restore/restore_adapter.py; original-material runs refuse until it is set. Role/KV/auth definitions stay railiance-platform-owned; no rapp-openbao change requested."
|
|
||||||
state_hub_task_id: "cb689628-9a5a-5f2b-a3ec-be37bd6cdb37"
|
state_hub_task_id: "cb689628-9a5a-5f2b-a3ec-be37bd6cdb37"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
2026-10-24: done from the live runtime. The founder read `openbao-0` read-only: spec image
|
||||||
|
`quay.io/openbao/openbao:2.5.4`, container imageID
|
||||||
|
`docker.io/openbao/openbao@sha256:436eaf9778cad75507ff70ea26ace30dcbe15606e619ac3823495663d7f7c115`,
|
||||||
|
equal to the T04 rehearsal pull (digests are registry-independent). Written to `PINNED_IMAGE_DIGEST`;
|
||||||
|
the offline suite (17) passes. This is the current production digest. That the same digest ran at the
|
||||||
|
2026-10-14 snapshot is not separately proven; the attended run will refuse on any restore incompatibility
|
||||||
|
rather than repair. rapp-openbao was informed and may object; no rapp-openbao change requested.
|
||||||
|
|
||||||
## T07 — Attended original restore (phase A)
|
## T07 — Attended original restore (phase A)
|
||||||
|
|
||||||
```task
|
```task
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue