1import * as GCP from "@/GCP";
2import * as Effect from "effect/Effect";
3import { serveProbes } from "../../bindingHost.ts";
4import { TEST_ATTESTATION, TEST_POD, TEST_RESOURCE_URI } from "../common.ts";
5
6const Authority = GCP.ContainerAnalysis.Note("Authority", {
7 shortDescription: "binding attestor",
8 attestation: { hint: { humanReadableName: "Alchemy Bind" } },
9});
10
11/** Attestor the host reads (roles/binaryauthorization.attestorsViewer). */
12export const Viewed = Effect.gen(function* () {
13 const note = yield* Authority;
14 return yield* GCP.BinaryAuthorization.Attestor("Viewed", {
15 noteReference: note.name,
16 });
17});
18
19/** Attestor the host verifies against (roles/binaryauthorization.attestorsVerifier). */
20export const Verifier = Effect.gen(function* () {
21 const note = yield* Authority;
22 return yield* GCP.BinaryAuthorization.Attestor("Verifier", {
23 noteReference: note.name,
24 });
25});
26
27/** GKE platform policy the host reads and evaluates (project-level roles). */
28export const GkePolicy = GCP.BinaryAuthorization.PlatformsPolicy("Gke", {
29 gkePolicy: {},
30});
31
32/**
33 * Effect-native Cloud Run service exercising every Binary Authorization
34 * binding as its own runtime service account. Deployed from
35 * {@link ../Bindings.test.ts}.
36 */
37export default class BinaryAuthorizationBindingsHost extends GCP.Function<BinaryAuthorizationBindingsHost>()(
38 "BinaryAuthorizationBindingsHost",
39 { main: import.meta.url, invokerIamDisabled: true },
40 Effect.gen(function* () {
41 const getAttestor = yield* GCP.BinaryAuthorization.GetAttestor(Viewed);
42 const validate =
43 yield* GCP.BinaryAuthorization.ValidateAttestation(Verifier);
44 const getPolicy =
45 yield* GCP.BinaryAuthorization.GetPlatformsPolicy(GkePolicy);
46 const evaluate =
47 yield* GCP.BinaryAuthorization.EvaluateGkePolicy(GkePolicy);
48
49 return {
50 fetch: serveProbes({
51 getAttestor: getAttestor(),
52 validateAttestation: validate({
53 occurrenceResourceUri: TEST_RESOURCE_URI,
54 attestation: TEST_ATTESTATION,
55 }),
56 getPlatformsPolicy: getPolicy(),
57 evaluateGkePolicy: evaluate({ resource: TEST_POD }),
58 }),
59 };
60 }).pipe(
61 Effect.provide(GCP.BinaryAuthorization.GetAttestorHttp),
62 Effect.provide(GCP.BinaryAuthorization.ValidateAttestationHttp),
63 Effect.provide(GCP.BinaryAuthorization.GetPlatformsPolicyHttp),
64 Effect.provide(GCP.BinaryAuthorization.EvaluateGkePolicyHttp),
65 ),
66) {}