@atlasauth/emulator-core 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adopt.d.ts +50 -0
- package/dist/adopt.js +57 -0
- package/dist/adopt.js.map +1 -0
- package/dist/coverage.d.ts +15 -0
- package/dist/coverage.js +31 -0
- package/dist/coverage.js.map +1 -0
- package/dist/crypto-util.d.ts +10 -0
- package/dist/crypto-util.js +76 -0
- package/dist/crypto-util.js.map +1 -0
- package/dist/engine.d.ts +33 -2
- package/dist/engine.js +53 -8
- package/dist/engine.js.map +1 -1
- package/dist/error-catalog.js +8 -0
- package/dist/error-catalog.js.map +1 -1
- package/dist/event-gate.d.ts +3 -0
- package/dist/event-gate.js +372 -0
- package/dist/event-gate.js.map +1 -0
- package/dist/generic.js +9 -1
- package/dist/generic.js.map +1 -1
- package/dist/handlers/approvals.d.ts +2 -0
- package/dist/handlers/approvals.js +365 -0
- package/dist/handlers/approvals.js.map +1 -0
- package/dist/handlers/authz.d.ts +2 -0
- package/dist/handlers/authz.js +347 -0
- package/dist/handlers/authz.js.map +1 -0
- package/dist/handlers/billing.d.ts +2 -0
- package/dist/handlers/billing.js +398 -0
- package/dist/handlers/billing.js.map +1 -0
- package/dist/handlers/connections.d.ts +2 -0
- package/dist/handlers/connections.js +332 -0
- package/dist/handlers/connections.js.map +1 -0
- package/dist/handlers/device.d.ts +47 -0
- package/dist/handlers/device.js +648 -0
- package/dist/handlers/device.js.map +1 -0
- package/dist/handlers/federation.d.ts +2 -0
- package/dist/handlers/federation.js +481 -0
- package/dist/handlers/federation.js.map +1 -0
- package/dist/handlers/governance.d.ts +2 -0
- package/dist/handlers/governance.js +460 -0
- package/dist/handlers/governance.js.map +1 -0
- package/dist/handlers/hooks.js +4 -1
- package/dist/handlers/hooks.js.map +1 -1
- package/dist/handlers/index.d.ts +5 -1
- package/dist/handlers/index.js +32 -3
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/keys.js +6 -1
- package/dist/handlers/keys.js.map +1 -1
- package/dist/handlers/machines.js +55 -8
- package/dist/handlers/machines.js.map +1 -1
- package/dist/handlers/messaging.d.ts +4 -0
- package/dist/handlers/messaging.js +486 -0
- package/dist/handlers/messaging.js.map +1 -0
- package/dist/handlers/oauth-flows.d.ts +28 -0
- package/dist/handlers/oauth-flows.js +419 -0
- package/dist/handlers/oauth-flows.js.map +1 -0
- package/dist/handlers/oauth.d.ts +75 -0
- package/dist/handlers/oauth.js +608 -0
- package/dist/handlers/oauth.js.map +1 -0
- package/dist/handlers/passkeys.d.ts +3 -0
- package/dist/handlers/passkeys.js +293 -0
- package/dist/handlers/passkeys.js.map +1 -0
- package/dist/handlers/platform.d.ts +15 -0
- package/dist/handlers/platform.js +454 -0
- package/dist/handlers/platform.js.map +1 -0
- package/dist/handlers/round2.d.ts +8 -0
- package/dist/handlers/round2.js +372 -0
- package/dist/handlers/round2.js.map +1 -0
- package/dist/handlers/scim.d.ts +2 -0
- package/dist/handlers/scim.js +408 -0
- package/dist/handlers/scim.js.map +1 -0
- package/dist/handlers/sessions.d.ts +7 -3
- package/dist/handlers/sessions.js +55 -25
- package/dist/handlers/sessions.js.map +1 -1
- package/dist/handlers/support.d.ts +20 -0
- package/dist/handlers/support.js +62 -0
- package/dist/handlers/support.js.map +1 -0
- package/dist/handlers/users.js +4 -0
- package/dist/handlers/users.js.map +1 -1
- package/dist/handlers/workflows.d.ts +2 -0
- package/dist/handlers/workflows.js +428 -0
- package/dist/handlers/workflows.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/jws.d.ts +41 -0
- package/dist/jws.js +133 -0
- package/dist/jws.js.map +1 -0
- package/dist/messages.d.ts +7 -0
- package/dist/messages.js +8 -4
- package/dist/messages.js.map +1 -1
- package/dist/parity-bin.js +3 -1
- package/dist/parity-bin.js.map +1 -1
- package/dist/parity-routes.d.ts +14 -0
- package/dist/parity-routes.js +421 -0
- package/dist/parity-routes.js.map +1 -0
- package/dist/parity.d.ts +10 -3
- package/dist/parity.js +14 -5
- package/dist/parity.js.map +1 -1
- package/dist/tokens.d.ts +17 -0
- package/dist/tokens.js +46 -0
- package/dist/tokens.js.map +1 -1
- package/dist/webauthn-virtual.d.ts +70 -0
- package/dist/webauthn-virtual.js +186 -0
- package/dist/webauthn-virtual.js.map +1 -0
- package/dist/webhook-ext.d.ts +16 -0
- package/dist/webhook-ext.js +218 -0
- package/dist/webhook-ext.js.map +1 -0
- package/dist/webhooks.d.ts +3 -0
- package/dist/webhooks.js +37 -3
- package/dist/webhooks.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/handlers/device.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.federationHandlers = federationHandlers;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const jws_1 = require("../jws");
|
|
6
|
+
const store_1 = require("../store");
|
|
7
|
+
const device_1 = require("./device");
|
|
8
|
+
const support_1 = require("./support");
|
|
9
|
+
const util_1 = require("./util");
|
|
10
|
+
/**
|
|
11
|
+
* Workload identity federation for machines: trust policies (`/v1/machine_trust_policies`) and the public exchange
|
|
12
|
+
* `POST /v1/machines/federate`. A GitHub Actions, Kubernetes, Google Cloud or generic OIDC token is verified against the
|
|
13
|
+
* issuer's keys (inline `jwks`, `jwks_uri`, or discovery through the engine's `fetch` option), its issuer, audience,
|
|
14
|
+
* expiry (24 h token age cap), subject pattern and claim conditions are checked, and a short machine token comes back.
|
|
15
|
+
* An AWS proof is a presigned STS GetCallerIdentity request, validated strictly (STS host, https, path, exact body,
|
|
16
|
+
* header whitelist, audience signed as `x-atlas-audience`); the engine never contacts AWS itself: the identity comes from
|
|
17
|
+
* the `fetch` option, which a test points at a fake STS. Every refusal is the same 403.
|
|
18
|
+
*/
|
|
19
|
+
const KINDS = ['github_actions', 'kubernetes', 'aws', 'gcp', 'oidc'];
|
|
20
|
+
const DEFAULT_ISSUERS = { github_actions: 'https://token.actions.githubusercontent.com', gcp: 'https://accounts.google.com' };
|
|
21
|
+
const SLUG = /^[a-z0-9][a-z0-9_.-]{0,63}$/;
|
|
22
|
+
const MAX_PER_MACHINE = 20;
|
|
23
|
+
const MAX_TOKEN_AGE_S = 24 * 3600;
|
|
24
|
+
const SKEW_S = 30;
|
|
25
|
+
const STS_HOST = /^sts(\.[a-z0-9-]{4,30})?\.amazonaws\.com(\.cn)?$/;
|
|
26
|
+
const GET_CALLER_BODY = 'Action=GetCallerIdentity&Version=2011-06-15';
|
|
27
|
+
const AWS_HEADERS = new Set(['authorization', 'host', 'content-type', 'content-length', 'x-amz-date', 'x-amz-security-token', 'x-amz-content-sha256', 'x-atlas-audience', 'user-agent']);
|
|
28
|
+
const st = (0, support_1.engineState)((e) => ({ policies: new store_1.Table('machine_trust_policies', e.clock.now, 'mtp'), spentAws: new Set() }));
|
|
29
|
+
const bad = (message, param) => new errors_1.EmulatorError('VALIDATION_FAILED', message, param);
|
|
30
|
+
const isObj = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
31
|
+
const issuerOf = (p) => p.issuer ?? DEFAULT_ISSUERS[p.kind] ?? null;
|
|
32
|
+
function subjectPatternProblem(kind, pattern) {
|
|
33
|
+
if (!pattern || pattern.length > 512)
|
|
34
|
+
return 'subject_pattern is 1 to 512 characters.';
|
|
35
|
+
if (/^[*?]+$/.test(pattern))
|
|
36
|
+
return 'subject_pattern cannot be only wildcards: name who is trusted.';
|
|
37
|
+
if (kind === 'github_actions' && !/^repo:[A-Za-z0-9_.-]+\/[^*?]*/.test(pattern))
|
|
38
|
+
return 'For github_actions the pattern must name the owner, for example repo:my-org/my-repo:ref:refs/heads/main (wildcards allowed after the owner).';
|
|
39
|
+
if (kind === 'aws' && !/^arn:aws[a-z-]*:(iam|sts)::\d{12}:/.test(pattern))
|
|
40
|
+
return 'For aws the pattern must start with the account, for example arn:aws:iam::123456789012:role/deployer.';
|
|
41
|
+
if (kind === 'kubernetes' && !/^system:serviceaccount:[^*?:]+:/.test(pattern))
|
|
42
|
+
return 'For kubernetes the pattern must name the namespace, for example system:serviceaccount:prod:deployer.';
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
function httpsUrl(raw, param) {
|
|
46
|
+
if (typeof raw !== 'string' || raw.length > 2048)
|
|
47
|
+
throw bad(`${param} must be an https URL.`, param);
|
|
48
|
+
let u;
|
|
49
|
+
try {
|
|
50
|
+
u = new URL(raw);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw bad(`${param} must be an https URL.`, param);
|
|
54
|
+
}
|
|
55
|
+
if (u.protocol !== 'https:' || u.username || u.password || u.search || u.hash)
|
|
56
|
+
throw bad(`${param} must be an https URL without credentials, query or fragment.`, param);
|
|
57
|
+
return raw;
|
|
58
|
+
}
|
|
59
|
+
function conditionsOf(raw) {
|
|
60
|
+
if (!Array.isArray(raw) || raw.length > 20)
|
|
61
|
+
throw bad('claim_conditions is a list of at most 20 conditions.', 'claim_conditions');
|
|
62
|
+
return raw.map((c, i) => {
|
|
63
|
+
const at = `claim_conditions[${i}]`;
|
|
64
|
+
if (!isObj(c))
|
|
65
|
+
throw bad('Each condition is an object with claim, op and value.', at);
|
|
66
|
+
if (Object.keys(c).some((k) => !['claim', 'op', 'value'].includes(k)))
|
|
67
|
+
throw bad('A condition takes claim, op and value.', at);
|
|
68
|
+
if (typeof c.claim !== 'string' || !c.claim || c.claim.length > 128)
|
|
69
|
+
throw bad('claim is a claim name of 1 to 128 characters.', `${at}.claim`);
|
|
70
|
+
if (!['equals', 'in', 'glob', 'exists'].includes(c.op))
|
|
71
|
+
throw bad('op is equals, in, glob or exists.', `${at}.op`);
|
|
72
|
+
if (c.op === 'exists') {
|
|
73
|
+
if (c.value !== undefined)
|
|
74
|
+
throw bad('exists takes no value.', `${at}.value`);
|
|
75
|
+
return { claim: c.claim, op: 'exists' };
|
|
76
|
+
}
|
|
77
|
+
const values = typeof c.value === 'string' ? [c.value] : Array.isArray(c.value) ? c.value : null;
|
|
78
|
+
if (!values || !values.length || values.length > 20 || values.some((v) => typeof v !== 'string' || !v || v.length > 256))
|
|
79
|
+
throw bad('value is a string, or a list of up to 20 strings of at most 256 characters.', `${at}.value`);
|
|
80
|
+
if (c.op === 'glob' && values.some((v) => /^[*?]+$/.test(v)))
|
|
81
|
+
throw bad('A glob cannot be only wildcards.', `${at}.value`);
|
|
82
|
+
return { claim: c.claim, op: c.op, value: c.value };
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function jwksOf(raw) {
|
|
86
|
+
const keys = isObj(raw) ? raw.keys : undefined;
|
|
87
|
+
if (!Array.isArray(keys) || !keys.length || keys.length > 20)
|
|
88
|
+
throw bad('jwks is { keys: [...] } with 1 to 20 public keys.', 'jwks');
|
|
89
|
+
for (const k of keys)
|
|
90
|
+
if (!isObj(k) || typeof k.kty !== 'string' || ['d', 'p', 'q', 'dp', 'dq', 'qi', 'k', 'oth'].some((x) => x in k))
|
|
91
|
+
throw bad('Every key in jwks must be a public JWK (no private parameters).', 'jwks');
|
|
92
|
+
return { keys };
|
|
93
|
+
}
|
|
94
|
+
function normalize(b, existing) {
|
|
95
|
+
const kind = b.kind ?? existing?.kind;
|
|
96
|
+
if (!KINDS.includes(kind))
|
|
97
|
+
throw bad(`kind must be one of ${KINDS.join(', ')}.`, 'kind');
|
|
98
|
+
if (existing && kind !== existing.kind)
|
|
99
|
+
throw bad('kind cannot change. Create a new policy.', 'kind');
|
|
100
|
+
const name = b.name ?? existing?.name;
|
|
101
|
+
if (typeof name !== 'string' || !SLUG.test(name))
|
|
102
|
+
throw bad('name is 1-64 characters: lowercase letters, digits, dot, dash or underscore, starting with a letter or digit.', 'name');
|
|
103
|
+
const audience = b.audience ?? existing?.audience;
|
|
104
|
+
if (typeof audience !== 'string' || !audience || audience.length > 255)
|
|
105
|
+
throw bad('audience is 1 to 255 characters.', 'audience');
|
|
106
|
+
if (kind === 'aws' && !/^[\x21-\x7e]{1,128}$/.test(audience))
|
|
107
|
+
throw bad('For aws the audience is 1 to 128 printable characters without spaces.', 'audience');
|
|
108
|
+
const subjectPattern = b.subject_pattern ?? existing?.subject_pattern;
|
|
109
|
+
if (typeof subjectPattern !== 'string')
|
|
110
|
+
throw bad('subject_pattern is required.', 'subject_pattern');
|
|
111
|
+
const problem = subjectPatternProblem(kind, subjectPattern);
|
|
112
|
+
if (problem)
|
|
113
|
+
throw bad(problem, 'subject_pattern');
|
|
114
|
+
let issuer = b.issuer !== undefined ? (b.issuer === null ? null : httpsUrl(b.issuer, 'issuer')) : (existing?.issuer ?? null);
|
|
115
|
+
const jwksUri = b.jwks_uri !== undefined ? (b.jwks_uri === null ? null : httpsUrl(b.jwks_uri, 'jwks_uri')) : (existing?.jwks_uri ?? null);
|
|
116
|
+
const jwks = b.jwks !== undefined ? (b.jwks === null ? null : jwksOf(b.jwks)) : (existing?.jwks ?? null);
|
|
117
|
+
if (kind === 'aws') {
|
|
118
|
+
if (issuer || jwksUri || jwks)
|
|
119
|
+
throw bad('An aws policy takes no issuer, jwks_uri or jwks: the signed STS request is the proof.', 'issuer');
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
if (!issuer && !DEFAULT_ISSUERS[kind])
|
|
123
|
+
throw bad(`A ${kind} policy needs an issuer.`, 'issuer');
|
|
124
|
+
if (issuer === DEFAULT_ISSUERS[kind])
|
|
125
|
+
issuer = null;
|
|
126
|
+
}
|
|
127
|
+
const maxTtl = b.max_ttl_seconds ?? existing?.max_ttl_seconds ?? 600;
|
|
128
|
+
if (typeof maxTtl !== 'number' || !Number.isInteger(maxTtl) || maxTtl < 60 || maxTtl > 3600)
|
|
129
|
+
throw bad('max_ttl_seconds is an integer from 60 to 3600.', 'max_ttl_seconds');
|
|
130
|
+
const enabled = b.enabled ?? existing?.enabled ?? true;
|
|
131
|
+
if (typeof enabled !== 'boolean')
|
|
132
|
+
throw bad('enabled must be true or false.', 'enabled');
|
|
133
|
+
return { name, kind, issuer, jwks_uri: jwksUri, jwks, audience, subject_pattern: subjectPattern, claim_conditions: b.claim_conditions !== undefined ? conditionsOf(b.claim_conditions) : (existing?.claim_conditions ?? []), max_ttl_seconds: maxTtl, enabled };
|
|
134
|
+
}
|
|
135
|
+
const present = (p) => ({
|
|
136
|
+
object: 'machine_trust_policy',
|
|
137
|
+
id: p.id,
|
|
138
|
+
machine_id: p.machine_id,
|
|
139
|
+
name: p.name,
|
|
140
|
+
kind: p.kind,
|
|
141
|
+
issuer: issuerOf(p),
|
|
142
|
+
jwks_uri: p.jwks_uri ?? null,
|
|
143
|
+
jwks: p.jwks ?? null,
|
|
144
|
+
audience: p.audience,
|
|
145
|
+
subject_pattern: p.subject_pattern,
|
|
146
|
+
claim_conditions: p.claim_conditions,
|
|
147
|
+
max_ttl_seconds: p.max_ttl_seconds,
|
|
148
|
+
enabled: p.enabled,
|
|
149
|
+
last_used_at: p.last_used_at ?? null,
|
|
150
|
+
created_at: p.created_at,
|
|
151
|
+
updated_at: p.updated_at,
|
|
152
|
+
});
|
|
153
|
+
const claimString = (v) => (Array.isArray(v) ? v : [v]).filter((x) => ['string', 'number', 'boolean'].includes(typeof x)).map(String);
|
|
154
|
+
/** A dotted claim path; `kubernetes.io.namespace` reads `claims['kubernetes.io'].namespace` when the whole key is absent. */
|
|
155
|
+
function claimAt(claims, path) {
|
|
156
|
+
if (path in claims)
|
|
157
|
+
return claims[path];
|
|
158
|
+
let cur = claims;
|
|
159
|
+
const parts = path.split('.');
|
|
160
|
+
for (let i = 0; i < parts.length; i++) {
|
|
161
|
+
if (!cur || typeof cur !== 'object')
|
|
162
|
+
return undefined;
|
|
163
|
+
let matched = false;
|
|
164
|
+
for (let j = parts.length; j > i; j--) {
|
|
165
|
+
const key = parts.slice(i, j).join('.');
|
|
166
|
+
if (key in cur) {
|
|
167
|
+
cur = cur[key];
|
|
168
|
+
i = j - 1;
|
|
169
|
+
matched = true;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (!matched)
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
return cur;
|
|
177
|
+
}
|
|
178
|
+
const conditionsPass = (conditions, claims) => conditions.every((c) => {
|
|
179
|
+
const got = claimAt(claims, c.claim);
|
|
180
|
+
if (c.op === 'exists')
|
|
181
|
+
return got !== undefined && got !== null;
|
|
182
|
+
const have = got === undefined || got === null ? [] : claimString(got);
|
|
183
|
+
const want = c.value === undefined ? [] : claimString(c.value);
|
|
184
|
+
if (!have.length || !want.length)
|
|
185
|
+
return false;
|
|
186
|
+
if (c.op === 'equals')
|
|
187
|
+
return have.some((h) => want.includes(h));
|
|
188
|
+
if (c.op === 'in')
|
|
189
|
+
return have.every((h) => want.includes(h));
|
|
190
|
+
return have.some((h) => want.some((w) => (0, jws_1.globMatch)(w, h)));
|
|
191
|
+
});
|
|
192
|
+
const deny = (reason) => ({ ok: false, reason });
|
|
193
|
+
const judge = (p, subject, claims) => (!(0, jws_1.globMatch)(p.subject_pattern, subject) ? deny('subject_mismatch') : !conditionsPass(p.claim_conditions, claims) ? deny('claim_condition_failed') : { ok: true, subject, claims });
|
|
194
|
+
async function issuerKeys(e, p) {
|
|
195
|
+
if (p.jwks?.keys?.length)
|
|
196
|
+
return p.jwks.keys;
|
|
197
|
+
const http = e.options.fetch ?? fetch;
|
|
198
|
+
const issuer = issuerOf(p);
|
|
199
|
+
let uri = p.jwks_uri;
|
|
200
|
+
const get = async (url) => {
|
|
201
|
+
const res = await http(url, { method: 'GET', headers: { accept: 'application/json' } });
|
|
202
|
+
if (!res.ok)
|
|
203
|
+
throw new Error(`status ${res.status}`);
|
|
204
|
+
return res.json();
|
|
205
|
+
};
|
|
206
|
+
if (!uri) {
|
|
207
|
+
const doc = await get(`${issuer.replace(/\/+$/, '')}/.well-known/openid-configuration`);
|
|
208
|
+
if (typeof doc.issuer !== 'string' || doc.issuer.replace(/\/+$/, '') !== issuer.replace(/\/+$/, ''))
|
|
209
|
+
throw new Error('issuer mismatch');
|
|
210
|
+
uri = doc.jwks_uri;
|
|
211
|
+
}
|
|
212
|
+
if (typeof uri !== 'string' || !/^https:\/\//i.test(uri))
|
|
213
|
+
throw new Error('jwks_uri must be https');
|
|
214
|
+
const set = await get(uri);
|
|
215
|
+
return (Array.isArray(set.keys) ? set.keys : []).filter((k) => !('d' in k) && !('k' in k));
|
|
216
|
+
}
|
|
217
|
+
async function verifyOidc(e, p, token) {
|
|
218
|
+
const issuer = issuerOf(p);
|
|
219
|
+
if (!issuer || p.kind === 'aws')
|
|
220
|
+
return deny('not_an_oidc_policy');
|
|
221
|
+
const jwt = (0, jws_1.decodeJwt)(token);
|
|
222
|
+
if (!jwt || !jws_1.SUPPORTED_ALGS.includes(String(jwt.header.alg)))
|
|
223
|
+
return deny('token_invalid');
|
|
224
|
+
let keys;
|
|
225
|
+
try {
|
|
226
|
+
keys = await issuerKeys(e, p);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return deny('issuer_keys_unavailable');
|
|
230
|
+
}
|
|
231
|
+
const candidates = keys.filter((k) => (jwt.header.kid ? k.kid === jwt.header.kid : true) && (!k.alg || k.alg === jwt.header.alg));
|
|
232
|
+
let verified = false;
|
|
233
|
+
for (const k of candidates)
|
|
234
|
+
if (await (0, jws_1.verifyJws)(jwt, k)) {
|
|
235
|
+
verified = true;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
if (!verified)
|
|
239
|
+
return deny('token_invalid');
|
|
240
|
+
const c = jwt.payload;
|
|
241
|
+
const nowS = e.clock.now() / 1000;
|
|
242
|
+
if (c.iss !== issuer)
|
|
243
|
+
return deny('token_invalid');
|
|
244
|
+
const aud = Array.isArray(c.aud) ? c.aud : [c.aud];
|
|
245
|
+
if (!aud.includes(p.audience))
|
|
246
|
+
return deny('token_invalid');
|
|
247
|
+
if (typeof c.exp !== 'number')
|
|
248
|
+
return deny('no_expiry');
|
|
249
|
+
if (c.exp + SKEW_S <= nowS)
|
|
250
|
+
return deny('token_invalid');
|
|
251
|
+
if (typeof c.nbf === 'number' && c.nbf - SKEW_S > nowS)
|
|
252
|
+
return deny('token_invalid');
|
|
253
|
+
if (typeof c.iat === 'number' && c.exp - c.iat > MAX_TOKEN_AGE_S)
|
|
254
|
+
return deny('token_too_long_lived');
|
|
255
|
+
if (typeof c.sub !== 'string' || !c.sub)
|
|
256
|
+
return deny('no_subject');
|
|
257
|
+
return judge(p, c.sub, c);
|
|
258
|
+
}
|
|
259
|
+
function checkAws(proof, audience) {
|
|
260
|
+
const fail = (reason) => ({ ok: false, reason });
|
|
261
|
+
if (proof.method !== undefined && String(proof.method).toUpperCase() !== 'POST')
|
|
262
|
+
return fail('aws_method');
|
|
263
|
+
if (typeof proof.url !== 'string')
|
|
264
|
+
return fail('aws_url');
|
|
265
|
+
let url;
|
|
266
|
+
try {
|
|
267
|
+
url = new URL(proof.url);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return fail('aws_url');
|
|
271
|
+
}
|
|
272
|
+
if (url.protocol !== 'https:' || !STS_HOST.test(url.hostname) || url.port || url.pathname !== '/' || url.search || url.username || url.password)
|
|
273
|
+
return fail('aws_url');
|
|
274
|
+
if (proof.body !== GET_CALLER_BODY)
|
|
275
|
+
return fail('aws_body');
|
|
276
|
+
if (!isObj(proof.headers))
|
|
277
|
+
return fail('aws_headers');
|
|
278
|
+
const headers = {};
|
|
279
|
+
for (const [k, v] of Object.entries(proof.headers)) {
|
|
280
|
+
const name = k.toLowerCase();
|
|
281
|
+
const value = Array.isArray(v) ? v[0] : v;
|
|
282
|
+
if (typeof value !== 'string' || !AWS_HEADERS.has(name) || value.length > 4096)
|
|
283
|
+
return fail('aws_headers');
|
|
284
|
+
headers[name] = value;
|
|
285
|
+
}
|
|
286
|
+
if (!headers.authorization || !headers['x-amz-date'])
|
|
287
|
+
return fail('aws_headers');
|
|
288
|
+
if (headers.host && headers.host !== url.host)
|
|
289
|
+
return fail('aws_headers');
|
|
290
|
+
if (headers['x-atlas-audience'] !== audience)
|
|
291
|
+
return fail('aws_audience');
|
|
292
|
+
const signed = /SignedHeaders=([^,\s]+)/.exec(headers.authorization)?.[1]?.split(';') ?? [];
|
|
293
|
+
if (!signed.includes('x-atlas-audience'))
|
|
294
|
+
return fail('aws_audience_unsigned');
|
|
295
|
+
return { ok: true, url: url.toString(), headers, fingerprint: `${headers.authorization}\n${headers['x-amz-date']}` };
|
|
296
|
+
}
|
|
297
|
+
async function verifyAws(e, p, proof) {
|
|
298
|
+
if (p.kind !== 'aws')
|
|
299
|
+
return deny('not_an_aws_policy');
|
|
300
|
+
const checked = checkAws(proof, p.audience);
|
|
301
|
+
if (!checked.ok)
|
|
302
|
+
return deny(checked.reason);
|
|
303
|
+
if (st(e).spentAws.has(checked.fingerprint))
|
|
304
|
+
return deny('aws_replayed');
|
|
305
|
+
let xml;
|
|
306
|
+
try {
|
|
307
|
+
const res = await (e.options.fetch ?? (() => Promise.reject(new Error('no fetch'))))(checked.url, { method: 'POST', headers: checked.headers, body: GET_CALLER_BODY });
|
|
308
|
+
if (!res.ok)
|
|
309
|
+
return { ...deny('aws_rejected') };
|
|
310
|
+
xml = await res.text();
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
return deny('aws_unavailable');
|
|
314
|
+
}
|
|
315
|
+
const field = (tag) => new RegExp(`<${tag}>([^<]{1,2048})</${tag}>`).exec(xml)?.[1];
|
|
316
|
+
const arn = field('Arn');
|
|
317
|
+
const account = field('Account');
|
|
318
|
+
if (!arn || !account || !/^\d{12}$/.test(account))
|
|
319
|
+
return deny('aws_response');
|
|
320
|
+
// An assumed-role ARN is the role it assumes; other ARNs are their own identity.
|
|
321
|
+
const m = /^arn:(aws[a-z-]*):sts::(\d{12}):assumed-role\/([^/]+)\/(.+)$/.exec(arn);
|
|
322
|
+
const subject = m ? `arn:${m[1]}:iam::${m[2]}:role/${m[3]}` : arn;
|
|
323
|
+
const verdict = judge(p, subject, { arn, account, ...(field('UserId') ? { user_id: field('UserId') } : {}), ...(m ? { session_name: m[4] } : {}), sub: subject });
|
|
324
|
+
return verdict.ok ? { ...verdict, fingerprint: checked.fingerprint } : verdict;
|
|
325
|
+
}
|
|
326
|
+
/** First enabled policy that accepts the subject proof; every refusal reason is kept for the dry run. */
|
|
327
|
+
async function match(e, policies, input, policyId) {
|
|
328
|
+
const reasons = [];
|
|
329
|
+
const pool = policies.filter((p) => p.enabled && (!policyId || p.id === policyId));
|
|
330
|
+
if (!pool.length)
|
|
331
|
+
return { reasons: ['no_matching_policy'] };
|
|
332
|
+
for (const p of pool) {
|
|
333
|
+
let v;
|
|
334
|
+
if (input.token !== undefined) {
|
|
335
|
+
const iss = (0, jws_1.decodeJwt)(input.token)?.payload.iss;
|
|
336
|
+
if (typeof iss !== 'string' || (p.kind === 'aws') || (issuerOf(p) ?? '').replace(/\/+$/, '') !== iss.replace(/\/+$/, '')) {
|
|
337
|
+
reasons.push('issuer_mismatch');
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
v = await verifyOidc(e, p, input.token);
|
|
341
|
+
}
|
|
342
|
+
else
|
|
343
|
+
v = await verifyAws(e, p, input.aws);
|
|
344
|
+
if (v.ok)
|
|
345
|
+
return { policy: p, verdict: v };
|
|
346
|
+
reasons.push(v.reason);
|
|
347
|
+
}
|
|
348
|
+
return { reasons };
|
|
349
|
+
}
|
|
350
|
+
const policyOf = (e, id) => {
|
|
351
|
+
const p = st(e).policies.get(id);
|
|
352
|
+
if (!p)
|
|
353
|
+
throw (0, errors_1.notFound)('Trust policy');
|
|
354
|
+
return p;
|
|
355
|
+
};
|
|
356
|
+
function federationHandlers() {
|
|
357
|
+
const machineOf = (e, id) => {
|
|
358
|
+
const m = e.db.machines.get(String(id ?? ''));
|
|
359
|
+
if (!m || m.deleted)
|
|
360
|
+
throw new errors_1.EmulatorError('NOT_FOUND', 'machine_id is not a machine.', 'machine_id');
|
|
361
|
+
return m;
|
|
362
|
+
};
|
|
363
|
+
return [
|
|
364
|
+
{
|
|
365
|
+
method: 'GET',
|
|
366
|
+
pattern: '/v1/machine_trust_policies',
|
|
367
|
+
scope: 'machines:read',
|
|
368
|
+
handler: (c) => {
|
|
369
|
+
const mid = c.query.get('machine_id');
|
|
370
|
+
return { body: { object: 'list', data: st(c.engine).policies.filter((p) => !mid || p.machine_id === mid).map(present), has_more: false } };
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
method: 'POST',
|
|
375
|
+
pattern: '/v1/machine_trust_policies',
|
|
376
|
+
scope: 'machines:write',
|
|
377
|
+
handler: (c) => {
|
|
378
|
+
const e = c.engine;
|
|
379
|
+
const m = machineOf(e, (0, util_1.need)(c.body, 'machine_id'));
|
|
380
|
+
const fields = normalize(c.body);
|
|
381
|
+
const s = st(e);
|
|
382
|
+
if (s.policies.filter((p) => p.machine_id === m.id).length >= MAX_PER_MACHINE)
|
|
383
|
+
throw new errors_1.EmulatorError('CONFLICT', `A machine has at most ${MAX_PER_MACHINE} trust policies.`);
|
|
384
|
+
if (s.policies.find((p) => p.machine_id === m.id && p.name === fields.name))
|
|
385
|
+
throw new errors_1.EmulatorError('CONFLICT', `This machine already has a trust policy named "${fields.name}".`, 'name');
|
|
386
|
+
const now = e.clock.now();
|
|
387
|
+
const row = s.policies.insert({ machine_id: m.id, ...fields, last_used_at: null, created_at: now, updated_at: now });
|
|
388
|
+
return { status: 201, body: present(row) };
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
{ method: 'GET', pattern: '/v1/machine_trust_policies/:id', scope: 'machines:read', handler: (c) => ({ body: present(policyOf(c.engine, c.params.id)) }) },
|
|
392
|
+
{
|
|
393
|
+
method: 'PATCH',
|
|
394
|
+
pattern: '/v1/machine_trust_policies/:id',
|
|
395
|
+
scope: 'machines:write',
|
|
396
|
+
handler: (c) => {
|
|
397
|
+
const e = c.engine;
|
|
398
|
+
const p = policyOf(e, c.params.id);
|
|
399
|
+
const fields = normalize(c.body, p);
|
|
400
|
+
if (fields.name !== p.name && st(e).policies.find((x) => x.machine_id === p.machine_id && x.name === fields.name))
|
|
401
|
+
throw new errors_1.EmulatorError('CONFLICT', `This machine already has a trust policy named "${fields.name}".`, 'name');
|
|
402
|
+
Object.assign(p, fields, { updated_at: e.clock.now() });
|
|
403
|
+
return { body: present(p) };
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
method: 'DELETE',
|
|
408
|
+
pattern: '/v1/machine_trust_policies/:id',
|
|
409
|
+
scope: 'machines:write',
|
|
410
|
+
handler: (c) => {
|
|
411
|
+
const p = policyOf(c.engine, c.params.id);
|
|
412
|
+
st(c.engine).policies.delete(p.id);
|
|
413
|
+
return { body: { object: 'machine_trust_policy', id: p.id, deleted: true } };
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
// A dry run: would this proof be accepted by this policy (even disabled)? Mints and spends nothing.
|
|
418
|
+
method: 'POST',
|
|
419
|
+
pattern: '/v1/machine_trust_policies/:id/test',
|
|
420
|
+
scope: 'machines:read',
|
|
421
|
+
handler: async (c) => {
|
|
422
|
+
const p = policyOf(c.engine, c.params.id);
|
|
423
|
+
if ((c.body.token === undefined) === (c.body.aws === undefined))
|
|
424
|
+
throw bad('Send token (OIDC kinds) or aws (aws kind), not both and not neither.', 'token');
|
|
425
|
+
if (c.body.token !== undefined && typeof c.body.token !== 'string')
|
|
426
|
+
throw bad('token must be a string.', 'token');
|
|
427
|
+
if (c.body.aws !== undefined && !isObj(c.body.aws))
|
|
428
|
+
throw bad('aws must be an object.', 'aws');
|
|
429
|
+
const found = await match(c.engine, [{ ...p, enabled: true }], { token: c.body.token, aws: c.body.aws }, p.id);
|
|
430
|
+
return 'verdict' in found
|
|
431
|
+
? { body: { object: 'machine_trust_policy_test', accepted: true, subject: found.verdict.subject, claims: found.verdict.claims, reasons: [] } }
|
|
432
|
+
: { body: { object: 'machine_trust_policy_test', accepted: false, subject: null, claims: null, reasons: [...new Set(found.reasons)] } };
|
|
433
|
+
},
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
method: 'POST',
|
|
437
|
+
pattern: '/v1/machines/federate',
|
|
438
|
+
public: true,
|
|
439
|
+
handler: (c) => federate(c),
|
|
440
|
+
},
|
|
441
|
+
];
|
|
442
|
+
}
|
|
443
|
+
async function federate(c) {
|
|
444
|
+
const e = c.engine;
|
|
445
|
+
const b = c.body;
|
|
446
|
+
const machineId = typeof b.machine_id === 'string' ? b.machine_id.trim() : '';
|
|
447
|
+
if (!machineId)
|
|
448
|
+
throw bad('A `machine_id` is required.', 'machine_id');
|
|
449
|
+
if ((b.token === undefined) === (b.aws === undefined))
|
|
450
|
+
throw bad('Send `token` (a GitHub Actions, Kubernetes, GCP or OIDC token) or `aws` (a signed GetCallerIdentity request), not both and not neither.', 'token');
|
|
451
|
+
if (b.token !== undefined && (typeof b.token !== 'string' || !b.token || b.token.length > 16_384))
|
|
452
|
+
throw bad('`token` must be a JWT string.', 'token');
|
|
453
|
+
if (b.aws !== undefined && !isObj(b.aws))
|
|
454
|
+
throw bad('`aws` must be an object.', 'aws');
|
|
455
|
+
if (b.policy_id !== undefined && typeof b.policy_id !== 'string')
|
|
456
|
+
throw bad('`policy_id` must be a trust policy id.', 'policy_id');
|
|
457
|
+
// The same answer as a refused token: a caller learns nothing about which machines exist.
|
|
458
|
+
const refused = () => new errors_1.EmulatorError('FORBIDDEN', 'No trust policy of this machine accepts that token.');
|
|
459
|
+
const m = e.db.machines.get(machineId);
|
|
460
|
+
if (!m || m.deleted || m.status !== 'active')
|
|
461
|
+
throw refused();
|
|
462
|
+
const proved = await (0, device_1.provedBindingOf)(c);
|
|
463
|
+
(0, device_1.enforceTokenBinding)(m, proved);
|
|
464
|
+
const found = await match(e, st(e).policies.filter((p) => p.machine_id === m.id), { token: b.token, aws: b.aws }, b.policy_id);
|
|
465
|
+
if (!('verdict' in found))
|
|
466
|
+
throw refused();
|
|
467
|
+
const { policy, verdict } = found;
|
|
468
|
+
const issued = await (0, device_1.issueMachineToken)(c, m, b, {
|
|
469
|
+
proved,
|
|
470
|
+
maxTtlSeconds: policy.max_ttl_seconds,
|
|
471
|
+
extraClaims: { fed: { kind: policy.kind, policy_id: policy.id, sub: verdict.subject } },
|
|
472
|
+
// The signed AWS request is spent only once the token is certain to be issued.
|
|
473
|
+
beforeIssue: () => {
|
|
474
|
+
if (verdict.fingerprint)
|
|
475
|
+
st(e).spentAws.add(verdict.fingerprint);
|
|
476
|
+
},
|
|
477
|
+
});
|
|
478
|
+
policy.last_used_at = e.clock.now();
|
|
479
|
+
return issued;
|
|
480
|
+
}
|
|
481
|
+
//# sourceMappingURL=federation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation.js","sourceRoot":"","sources":["../../src/handlers/federation.ts"],"names":[],"mappings":"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"}
|