@composurecdk/iam 0.6.0 → 0.8.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/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +16 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/{managed-policy-builder.d.ts → commonjs/managed-policy-builder.d.ts} +3 -1
- package/dist/commonjs/managed-policy-builder.d.ts.map +1 -0
- package/dist/commonjs/managed-policy-builder.js +45 -0
- package/dist/commonjs/managed-policy-builder.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/{role-builder.d.ts → commonjs/role-builder.d.ts} +5 -2
- package/dist/commonjs/role-builder.d.ts.map +1 -0
- package/dist/commonjs/role-builder.js +78 -0
- package/dist/commonjs/role-builder.js.map +1 -0
- package/dist/commonjs/role-defaults.d.ts.map +1 -0
- package/dist/commonjs/role-defaults.js +24 -0
- package/dist/commonjs/role-defaults.js.map +1 -0
- package/dist/commonjs/service-role-builder.d.ts.map +1 -0
- package/dist/commonjs/service-role-builder.js +30 -0
- package/dist/commonjs/service-role-builder.js.map +1 -0
- package/dist/commonjs/statement-builder.d.ts.map +1 -0
- package/dist/commonjs/statement-builder.js +158 -0
- package/dist/commonjs/statement-builder.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/managed-policy-builder.d.ts +62 -0
- package/dist/esm/managed-policy-builder.d.ts.map +1 -0
- package/dist/{managed-policy-builder.js → esm/managed-policy-builder.js} +6 -1
- package/dist/esm/managed-policy-builder.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/role-builder.d.ts +113 -0
- package/dist/esm/role-builder.d.ts.map +1 -0
- package/dist/{role-builder.js → esm/role-builder.js} +7 -2
- package/dist/esm/role-builder.js.map +1 -0
- package/dist/esm/role-defaults.d.ts +8 -0
- package/dist/esm/role-defaults.d.ts.map +1 -0
- package/dist/esm/role-defaults.js.map +1 -0
- package/dist/esm/service-role-builder.d.ts +24 -0
- package/dist/esm/service-role-builder.d.ts.map +1 -0
- package/dist/esm/service-role-builder.js.map +1 -0
- package/dist/esm/statement-builder.d.ts +83 -0
- package/dist/esm/statement-builder.d.ts.map +1 -0
- package/dist/esm/statement-builder.js.map +1 -0
- package/package.json +34 -15
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/managed-policy-builder.d.ts.map +0 -1
- package/dist/managed-policy-builder.js.map +0 -1
- package/dist/role-builder.d.ts.map +0 -1
- package/dist/role-builder.js.map +0 -1
- package/dist/role-defaults.d.ts.map +0 -1
- package/dist/role-defaults.js.map +0 -1
- package/dist/service-role-builder.d.ts.map +0 -1
- package/dist/service-role-builder.js.map +0 -1
- package/dist/statement-builder.d.ts.map +0 -1
- package/dist/statement-builder.js.map +0 -1
- /package/dist/{index.d.ts → commonjs/index.d.ts} +0 -0
- /package/dist/{role-defaults.d.ts → commonjs/role-defaults.d.ts} +0 -0
- /package/dist/{service-role-builder.d.ts → commonjs/service-role-builder.d.ts} +0 -0
- /package/dist/{statement-builder.d.ts → commonjs/statement-builder.d.ts} +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{role-defaults.js → esm/role-defaults.js} +0 -0
- /package/dist/{service-role-builder.js → esm/service-role-builder.js} +0 -0
- /package/dist/{statement-builder.js → esm/statement-builder.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WildcardResourceError = exports.StatementBuilder = exports.createStatementBuilder = exports.createServiceRoleBuilder = exports.createManagedPolicyBuilder = exports.ROLE_DEFAULTS = exports.createRoleBuilder = void 0;
|
|
4
|
+
var role_builder_js_1 = require("./role-builder.js");
|
|
5
|
+
Object.defineProperty(exports, "createRoleBuilder", { enumerable: true, get: function () { return role_builder_js_1.createRoleBuilder; } });
|
|
6
|
+
var role_defaults_js_1 = require("./role-defaults.js");
|
|
7
|
+
Object.defineProperty(exports, "ROLE_DEFAULTS", { enumerable: true, get: function () { return role_defaults_js_1.ROLE_DEFAULTS; } });
|
|
8
|
+
var managed_policy_builder_js_1 = require("./managed-policy-builder.js");
|
|
9
|
+
Object.defineProperty(exports, "createManagedPolicyBuilder", { enumerable: true, get: function () { return managed_policy_builder_js_1.createManagedPolicyBuilder; } });
|
|
10
|
+
var service_role_builder_js_1 = require("./service-role-builder.js");
|
|
11
|
+
Object.defineProperty(exports, "createServiceRoleBuilder", { enumerable: true, get: function () { return service_role_builder_js_1.createServiceRoleBuilder; } });
|
|
12
|
+
var statement_builder_js_1 = require("./statement-builder.js");
|
|
13
|
+
Object.defineProperty(exports, "createStatementBuilder", { enumerable: true, get: function () { return statement_builder_js_1.createStatementBuilder; } });
|
|
14
|
+
Object.defineProperty(exports, "StatementBuilder", { enumerable: true, get: function () { return statement_builder_js_1.StatementBuilder; } });
|
|
15
|
+
Object.defineProperty(exports, "WildcardResourceError", { enumerable: true, get: function () { return statement_builder_js_1.WildcardResourceError; } });
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAK2B;AAJzB,oHAAA,iBAAiB,OAAA;AAKnB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AACtB,yEAKqC;AAJnC,uIAAA,0BAA0B,OAAA;AAK5B,qEAAqE;AAA5D,mIAAA,wBAAwB,OAAA;AACjC,+DAIgC;AAH9B,8HAAA,sBAAsB,OAAA;AACtB,wHAAA,gBAAgB,OAAA;AAChB,6HAAA,qBAAqB,OAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ManagedPolicy, type ManagedPolicyProps, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
2
2
|
import type { IConstruct } from "constructs";
|
|
3
|
-
import { type IBuilder, type Lifecycle } from "@composurecdk/core";
|
|
3
|
+
import { COPY_STATE, type IBuilder, type Lifecycle } from "@composurecdk/core";
|
|
4
4
|
import { StatementBuilder } from "./statement-builder.js";
|
|
5
5
|
/**
|
|
6
6
|
* Configuration properties for the customer-managed IAM policy builder.
|
|
@@ -47,6 +47,8 @@ declare class ManagedPolicyBuilder implements Lifecycle<ManagedPolicyBuilderResu
|
|
|
47
47
|
* validation runs at the composition boundary.
|
|
48
48
|
*/
|
|
49
49
|
addStatements(statements: (PolicyStatement | StatementBuilder)[]): this;
|
|
50
|
+
/** @internal — see ADR-0005. */
|
|
51
|
+
[COPY_STATE](target: ManagedPolicyBuilder): void;
|
|
50
52
|
build(scope: IConstruct, id: string): ManagedPolicyBuilderResult;
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-policy-builder.d.ts","sourceRoot":"","sources":["../../src/managed-policy-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAW,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0DAA0D;IAC1D,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;AAE9F,cAAM,oBAAqB,YAAW,SAAS,CAAC,0BAA0B,CAAC;;IACzE,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAM;IAG/C;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,GAAG,IAAI;IAKvE,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAIhD,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,0BAA0B;CAajE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,qBAAqB,CAGlE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createManagedPolicyBuilder = createManagedPolicyBuilder;
|
|
4
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const statement_builder_js_1 = require("./statement-builder.js");
|
|
7
|
+
class ManagedPolicyBuilder {
|
|
8
|
+
props = {};
|
|
9
|
+
#extraStatements = [];
|
|
10
|
+
/**
|
|
11
|
+
* Append policy statements to the managed policy.
|
|
12
|
+
*
|
|
13
|
+
* Accepts either {@link PolicyStatement} or {@link StatementBuilder}.
|
|
14
|
+
* Statement builders are resolved during {@link build} so wildcard-resource
|
|
15
|
+
* validation runs at the composition boundary.
|
|
16
|
+
*/
|
|
17
|
+
addStatements(statements) {
|
|
18
|
+
this.#extraStatements.push(...statements);
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
/** @internal — see ADR-0005. */
|
|
22
|
+
[core_1.COPY_STATE](target) {
|
|
23
|
+
target.#extraStatements.push(...this.#extraStatements);
|
|
24
|
+
}
|
|
25
|
+
build(scope, id) {
|
|
26
|
+
const resolvedExtras = this.#extraStatements.map((s) => s instanceof statement_builder_js_1.StatementBuilder ? s.build() : s);
|
|
27
|
+
const mergedProps = {
|
|
28
|
+
...this.props,
|
|
29
|
+
statements: [...(this.props.statements ?? []), ...resolvedExtras],
|
|
30
|
+
};
|
|
31
|
+
const policy = new aws_iam_1.ManagedPolicy(scope, id, mergedProps);
|
|
32
|
+
return { policy };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new {@link IManagedPolicyBuilder} for configuring an AWS IAM
|
|
37
|
+
* customer-managed policy.
|
|
38
|
+
*
|
|
39
|
+
* @returns A fluent builder for a customer-managed policy.
|
|
40
|
+
*/
|
|
41
|
+
function createManagedPolicyBuilder() {
|
|
42
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::IAM::ManagedPolicy has no Tags property
|
|
43
|
+
return (0, core_1.Builder)(ManagedPolicyBuilder);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=managed-policy-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-policy-builder.js","sourceRoot":"","sources":["../../src/managed-policy-builder.ts"],"names":[],"mappings":";;AAqFA,gEAGC;AAxFD,iDAA8F;AAE9F,6CAAwF;AACxF,iEAA0D;AAwC1D,MAAM,oBAAoB;IACxB,KAAK,GAAuC,EAAE,CAAC;IACtC,gBAAgB,GAA2C,EAAE,CAAC;IAEvE;;;;;;OAMG;IACH,aAAa,CAAC,UAAkD;QAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,iBAAU,CAAC,CAAC,MAA4B;QACvC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,CAAC,YAAY,uCAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;QAEF,MAAM,WAAW,GAAuB;YACtC,GAAG,IAAI,CAAC,KAAK;YACb,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC;SAClE,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,uBAAa,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAgB,0BAA0B;IACxC,+GAA+G;IAC/G,OAAO,IAAA,cAAO,EAAkD,oBAAoB,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type IManagedPolicy, PolicyDocument, PolicyStatement, Role, type RoleProps } from "aws-cdk-lib/aws-iam";
|
|
2
2
|
import type { IConstruct } from "constructs";
|
|
3
|
-
import {
|
|
3
|
+
import { COPY_STATE, type Lifecycle, type Resolvable } from "@composurecdk/core";
|
|
4
|
+
import { type ITaggedBuilder } from "@composurecdk/cloudformation";
|
|
4
5
|
import { StatementBuilder } from "./statement-builder.js";
|
|
5
6
|
/**
|
|
6
7
|
* Configuration properties for the IAM role builder.
|
|
@@ -74,7 +75,7 @@ export interface RoleBuilderResult {
|
|
|
74
75
|
* ]);
|
|
75
76
|
* ```
|
|
76
77
|
*/
|
|
77
|
-
export type IRoleBuilder =
|
|
78
|
+
export type IRoleBuilder = ITaggedBuilder<RoleBuilderProps, RoleBuilder>;
|
|
78
79
|
declare class RoleBuilder implements Lifecycle<RoleBuilderResult> {
|
|
79
80
|
#private;
|
|
80
81
|
props: Partial<RoleBuilderProps>;
|
|
@@ -90,6 +91,8 @@ declare class RoleBuilder implements Lifecycle<RoleBuilderResult> {
|
|
|
90
91
|
* rather than at configuration time).
|
|
91
92
|
*/
|
|
92
93
|
addInlinePolicyStatements(name: string, statements: (PolicyStatement | StatementBuilder)[]): this;
|
|
94
|
+
/** @internal — see ADR-0005. */
|
|
95
|
+
[COPY_STATE](target: RoleBuilder): void;
|
|
93
96
|
build(scope: IConstruct, id: string, context?: Record<string, object>): RoleBuilderResult;
|
|
94
97
|
}
|
|
95
98
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-builder.d.ts","sourceRoot":"","sources":["../../src/role-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EACd,eAAe,EACf,IAAI,EACJ,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC9E;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;CAClD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,IAAI,CAAC;IAEX;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AAOzE,cAAM,WAAY,YAAW,SAAS,CAAC,iBAAiB,CAAC;;IACvD,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAM;IAGtC;;;;;;;;;;OAUG;IACH,yBAAyB,CACvB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,GACjD,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIvC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,iBAAiB;CA8C9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAEhD"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRoleBuilder = createRoleBuilder;
|
|
4
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
5
|
+
const core_1 = require("@composurecdk/core");
|
|
6
|
+
const cloudformation_1 = require("@composurecdk/cloudformation");
|
|
7
|
+
const role_defaults_js_1 = require("./role-defaults.js");
|
|
8
|
+
const statement_builder_js_1 = require("./statement-builder.js");
|
|
9
|
+
class RoleBuilder {
|
|
10
|
+
props = {};
|
|
11
|
+
#inlinePolicies = [];
|
|
12
|
+
/**
|
|
13
|
+
* Append an inline policy to the role, embedded in the underlying
|
|
14
|
+
* `AWS::IAM::Role` resource's `Policies` array. The policy name becomes
|
|
15
|
+
* the key under which the resulting {@link PolicyDocument} appears in
|
|
16
|
+
* {@link RoleBuilderResult.inlinePolicies}.
|
|
17
|
+
*
|
|
18
|
+
* Accepts either {@link PolicyStatement} instances or
|
|
19
|
+
* {@link StatementBuilder}s (which are built lazily during {@link build}
|
|
20
|
+
* so that wildcard-resource validation runs at the composition boundary
|
|
21
|
+
* rather than at configuration time).
|
|
22
|
+
*/
|
|
23
|
+
addInlinePolicyStatements(name, statements) {
|
|
24
|
+
this.#inlinePolicies.push({ name, statements });
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
/** @internal — see ADR-0005. */
|
|
28
|
+
[core_1.COPY_STATE](target) {
|
|
29
|
+
target.#inlinePolicies.push(...this.#inlinePolicies);
|
|
30
|
+
}
|
|
31
|
+
build(scope, id, context = {}) {
|
|
32
|
+
const { permissionsBoundary, assumedBy, inlinePolicies: propsInlinePolicies, ...rest } = this.props;
|
|
33
|
+
if (!assumedBy) {
|
|
34
|
+
throw new Error(`RoleBuilder "${id}": assumedBy(...) must be called before build(). ` +
|
|
35
|
+
`An IAM role requires a trust policy principal.`);
|
|
36
|
+
}
|
|
37
|
+
const resolvedBoundary = permissionsBoundary
|
|
38
|
+
? (0, core_1.resolve)(permissionsBoundary, context)
|
|
39
|
+
: undefined;
|
|
40
|
+
const addedInlinePolicies = {};
|
|
41
|
+
for (const entry of this.#inlinePolicies) {
|
|
42
|
+
const resolvedStatements = entry.statements.map((s) => s instanceof statement_builder_js_1.StatementBuilder ? s.build() : s);
|
|
43
|
+
addedInlinePolicies[entry.name] = new aws_iam_1.PolicyDocument({ statements: resolvedStatements });
|
|
44
|
+
}
|
|
45
|
+
const mergedInlinePolicies = {
|
|
46
|
+
...(propsInlinePolicies ?? {}),
|
|
47
|
+
...addedInlinePolicies,
|
|
48
|
+
};
|
|
49
|
+
const mergedProps = {
|
|
50
|
+
...role_defaults_js_1.ROLE_DEFAULTS,
|
|
51
|
+
...rest,
|
|
52
|
+
assumedBy,
|
|
53
|
+
...(Object.keys(mergedInlinePolicies).length > 0
|
|
54
|
+
? { inlinePolicies: mergedInlinePolicies }
|
|
55
|
+
: {}),
|
|
56
|
+
...(resolvedBoundary ? { permissionsBoundary: resolvedBoundary } : {}),
|
|
57
|
+
};
|
|
58
|
+
const role = new aws_iam_1.Role(scope, id, mergedProps);
|
|
59
|
+
return { role, inlinePolicies: addedInlinePolicies };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates a new {@link IRoleBuilder} for configuring an AWS IAM role.
|
|
64
|
+
*
|
|
65
|
+
* @returns A fluent builder for an AWS IAM role.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* const role = createRoleBuilder()
|
|
70
|
+
* .assumedBy(new ServicePrincipal("lambda.amazonaws.com"))
|
|
71
|
+
* .description("Lambda execution role")
|
|
72
|
+
* .build(stack, "LambdaRole");
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
function createRoleBuilder() {
|
|
76
|
+
return (0, cloudformation_1.taggedBuilder)(RoleBuilder);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=role-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-builder.js","sourceRoot":"","sources":["../../src/role-builder.ts"],"names":[],"mappings":";;AAwLA,8CAEC;AA1LD,iDAM6B;AAE7B,6CAA0F;AAC1F,iEAAkF;AAClF,yDAAmD;AACnD,iEAA0D;AAoF1D,MAAM,WAAW;IACf,KAAK,GAA8B,EAAE,CAAC;IAC7B,eAAe,GAAwB,EAAE,CAAC;IAEnD;;;;;;;;;;OAUG;IACH,yBAAyB,CACvB,IAAY,EACZ,UAAkD;QAElD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,iBAAU,CAAC,CAAC,MAAmB;QAC9B,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,UAAkC,EAAE;QACvE,MAAM,EACJ,mBAAmB,EACnB,SAAS,EACT,cAAc,EAAE,mBAAmB,EACnC,GAAG,IAAI,EACR,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gBAAgB,EAAE,mDAAmD;gBACnE,gDAAgD,CACnD,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAG,mBAAmB;YAC1C,CAAC,CAAC,IAAA,cAAO,EAAC,mBAAmB,EAAE,OAAO,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,mBAAmB,GAAmC,EAAE,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,kBAAkB,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpD,CAAC,YAAY,uCAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;YACF,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,wBAAc,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,oBAAoB,GAAmC;YAC3D,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC9B,GAAG,mBAAmB;SACvB,CAAC;QAEF,MAAM,WAAW,GAAc;YAC7B,GAAG,gCAAa;YAChB,GAAG,IAAI;YACP,SAAS;YACT,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC9C,CAAC,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,cAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAE9C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACvD,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,IAAA,8BAAa,EAAgC,WAAW,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-defaults.d.ts","sourceRoot":"","sources":["../../src/role-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,SAAS,CAa5C,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ROLE_DEFAULTS = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
/**
|
|
6
|
+
* Secure, AWS-recommended defaults applied to every IAM role built with
|
|
7
|
+
* {@link createRoleBuilder}. Each property can be individually overridden
|
|
8
|
+
* via the builder's fluent API.
|
|
9
|
+
*/
|
|
10
|
+
exports.ROLE_DEFAULTS = {
|
|
11
|
+
/**
|
|
12
|
+
* Cap the session duration to one hour by default.
|
|
13
|
+
*
|
|
14
|
+
* Short-lived credentials reduce the blast radius of leaked or misused
|
|
15
|
+
* role sessions. Callers that genuinely need longer sessions (for
|
|
16
|
+
* example, long-running batch jobs that assume the role once) should
|
|
17
|
+
* override via {@link IRoleBuilder.maxSessionDuration}.
|
|
18
|
+
*
|
|
19
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_permissions_define_guardrails.html
|
|
20
|
+
* @see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html
|
|
21
|
+
*/
|
|
22
|
+
maxSessionDuration: aws_cdk_lib_1.Duration.hours(1),
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=role-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-defaults.js","sourceRoot":"","sources":["../../src/role-defaults.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AAGvC;;;;GAIG;AACU,QAAA,aAAa,GAAuB;IAC/C;;;;;;;;;;OAUG;IACH,kBAAkB,EAAE,sBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;CACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-role-builder.d.ts","sourceRoot":"","sources":["../../src/service-role-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,YAAY,CAE/E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createServiceRoleBuilder = createServiceRoleBuilder;
|
|
4
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
5
|
+
const role_builder_js_1 = require("./role-builder.js");
|
|
6
|
+
/**
|
|
7
|
+
* Creates a pre-configured {@link IRoleBuilder} whose trust policy allows
|
|
8
|
+
* the given AWS service principal to assume the role.
|
|
9
|
+
*
|
|
10
|
+
* Thin sugar over {@link createRoleBuilder} for the most common role shape:
|
|
11
|
+
* a service-assumable role (Lambda, EC2, Budgets, etc.) with no extra
|
|
12
|
+
* trust-policy conditions. Any property set by the caller afterwards
|
|
13
|
+
* (including `assumedBy`) still wins, because the underlying builder
|
|
14
|
+
* simply records the last value written.
|
|
15
|
+
*
|
|
16
|
+
* @param servicePrincipal - The service identifier, e.g.
|
|
17
|
+
* `"lambda.amazonaws.com"` or `"budgets.amazonaws.com"`.
|
|
18
|
+
* @returns A role builder with `assumedBy` preset to the given service.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* const role = createServiceRoleBuilder("lambda.amazonaws.com")
|
|
23
|
+
* .description("Execution role for StopEC2 Lambda")
|
|
24
|
+
* .addInlinePolicyStatements("StopEC2", [ ... ]);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
function createServiceRoleBuilder(servicePrincipal) {
|
|
28
|
+
return (0, role_builder_js_1.createRoleBuilder)().assumedBy(new aws_iam_1.ServicePrincipal(servicePrincipal));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=service-role-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-role-builder.js","sourceRoot":"","sources":["../../src/service-role-builder.ts"],"names":[],"mappings":";;AAwBA,4DAEC;AA1BD,iDAAuD;AACvD,uDAAyE;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,wBAAwB,CAAC,gBAAwB;IAC/D,OAAO,IAAA,mCAAiB,GAAE,CAAC,SAAS,CAAC,IAAI,0BAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-builder.d.ts","sourceRoot":"","sources":["../../src/statement-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,UAAU,EACf,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,GAAG,CAAC,EAAE,MAAM;CAOzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,gBAAgB;;IAY3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAKZ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKpC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAK1C,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAK7C,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAKrE;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,KAAK,UAAO,GAAG,IAAI;IAK1C;;;;;OAKG;IACH,KAAK,IAAI,eAAe;CAuBzB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StatementBuilder = exports.WildcardResourceError = void 0;
|
|
4
|
+
exports.createStatementBuilder = createStatementBuilder;
|
|
5
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
6
|
+
/**
|
|
7
|
+
* Thrown when a {@link StatementBuilder} is built with an `Allow` effect and
|
|
8
|
+
* an unrestricted resource (`"*"`) without the caller having explicitly
|
|
9
|
+
* opted in via {@link StatementBuilder.allowWildcardResources}.
|
|
10
|
+
*
|
|
11
|
+
* Wildcard-resource allow statements grant the widest possible permission
|
|
12
|
+
* surface and should be an intentional choice, not an accident.
|
|
13
|
+
*
|
|
14
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/permissions-management.html
|
|
15
|
+
*/
|
|
16
|
+
class WildcardResourceError extends Error {
|
|
17
|
+
constructor(sid) {
|
|
18
|
+
super(`PolicyStatement${sid ? ` "${sid}"` : ""} has Effect=Allow with a wildcard resource ("*"). ` +
|
|
19
|
+
`Scope the resources or call allowWildcardResources(true) to opt in explicitly.`);
|
|
20
|
+
this.name = "WildcardResourceError";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.WildcardResourceError = WildcardResourceError;
|
|
24
|
+
/**
|
|
25
|
+
* Fluent wrapper around the CDK {@link PolicyStatement}.
|
|
26
|
+
*
|
|
27
|
+
* Unlike other ComposureCDK builders this one is **not** a
|
|
28
|
+
* {@link Lifecycle} — a policy statement is inline data attached to a Role,
|
|
29
|
+
* ManagedPolicy, or resource policy rather than a standalone CDK construct,
|
|
30
|
+
* so there is nothing to attach to a scope.
|
|
31
|
+
*
|
|
32
|
+
* The builder exists to:
|
|
33
|
+
* - centralise least-privilege validation (wildcard-resource guard,
|
|
34
|
+
* {@link WildcardResourceError}),
|
|
35
|
+
* - give every consumer (Role, ManagedPolicy, SNS TopicPolicy, future
|
|
36
|
+
* SQS/S3 bucket policies) one fluent API,
|
|
37
|
+
* - remain interchangeable with raw {@link PolicyStatement} instances via
|
|
38
|
+
* {@link StatementBuilder.build}.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const stmt = createStatementBuilder()
|
|
43
|
+
* .sid("StopDevInstances")
|
|
44
|
+
* .allow()
|
|
45
|
+
* .actions(["ec2:StopInstances", "ec2:DescribeInstances"])
|
|
46
|
+
* .resources(["*"])
|
|
47
|
+
* .allowWildcardResources(true)
|
|
48
|
+
* .build();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
class StatementBuilder {
|
|
52
|
+
#sid;
|
|
53
|
+
#effect = aws_iam_1.Effect.ALLOW;
|
|
54
|
+
#actions = [];
|
|
55
|
+
#notActions = [];
|
|
56
|
+
#resources = [];
|
|
57
|
+
#notResources = [];
|
|
58
|
+
#principals = [];
|
|
59
|
+
#notPrincipals = [];
|
|
60
|
+
#conditions;
|
|
61
|
+
#allowWildcardResources = false;
|
|
62
|
+
sid(sid) {
|
|
63
|
+
this.#sid = sid;
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
allow() {
|
|
67
|
+
this.#effect = aws_iam_1.Effect.ALLOW;
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
deny() {
|
|
71
|
+
this.#effect = aws_iam_1.Effect.DENY;
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
effect(effect) {
|
|
75
|
+
this.#effect = effect;
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
actions(actions) {
|
|
79
|
+
this.#actions = [...actions];
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
notActions(actions) {
|
|
83
|
+
this.#notActions = [...actions];
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
resources(resources) {
|
|
87
|
+
this.#resources = [...resources];
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
notResources(resources) {
|
|
91
|
+
this.#notResources = [...resources];
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
principals(principals) {
|
|
95
|
+
this.#principals = [...principals];
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
notPrincipals(principals) {
|
|
99
|
+
this.#notPrincipals = [...principals];
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
conditions(conditions) {
|
|
103
|
+
this.#conditions = { ...conditions };
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Opt in to Effect=Allow statements with wildcard resources (`"*"`).
|
|
108
|
+
*
|
|
109
|
+
* The builder rejects wildcard resources by default to surface
|
|
110
|
+
* least-privilege violations; call this to acknowledge that the
|
|
111
|
+
* statement genuinely needs unrestricted scope (for example actions
|
|
112
|
+
* such as `ec2:DescribeInstances` that do not support resource-level
|
|
113
|
+
* permissions).
|
|
114
|
+
*
|
|
115
|
+
* @see https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_actions-resources-contextkeys.html
|
|
116
|
+
*/
|
|
117
|
+
allowWildcardResources(allow = true) {
|
|
118
|
+
this.#allowWildcardResources = allow;
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Construct and return a {@link PolicyStatement} from the configured state.
|
|
123
|
+
*
|
|
124
|
+
* @throws {WildcardResourceError} when the statement is an Allow with a
|
|
125
|
+
* wildcard resource and wildcard resources have not been opted in to.
|
|
126
|
+
*/
|
|
127
|
+
build() {
|
|
128
|
+
if (this.#effect === aws_iam_1.Effect.ALLOW &&
|
|
129
|
+
!this.#allowWildcardResources &&
|
|
130
|
+
this.#resources.some((r) => r === "*")) {
|
|
131
|
+
throw new WildcardResourceError(this.#sid);
|
|
132
|
+
}
|
|
133
|
+
const props = {
|
|
134
|
+
sid: this.#sid,
|
|
135
|
+
effect: this.#effect,
|
|
136
|
+
actions: this.#actions.length > 0 ? this.#actions : undefined,
|
|
137
|
+
notActions: this.#notActions.length > 0 ? this.#notActions : undefined,
|
|
138
|
+
resources: this.#resources.length > 0 ? this.#resources : undefined,
|
|
139
|
+
notResources: this.#notResources.length > 0 ? this.#notResources : undefined,
|
|
140
|
+
principals: this.#principals.length > 0 ? this.#principals : undefined,
|
|
141
|
+
notPrincipals: this.#notPrincipals.length > 0 ? this.#notPrincipals : undefined,
|
|
142
|
+
conditions: this.#conditions,
|
|
143
|
+
};
|
|
144
|
+
return new aws_iam_1.PolicyStatement(props);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.StatementBuilder = StatementBuilder;
|
|
148
|
+
/**
|
|
149
|
+
* Creates a new {@link StatementBuilder} for configuring an IAM
|
|
150
|
+
* {@link PolicyStatement} with least-privilege guardrails.
|
|
151
|
+
*
|
|
152
|
+
* @returns A fluent builder that produces a {@link PolicyStatement} when
|
|
153
|
+
* {@link StatementBuilder.build} is called.
|
|
154
|
+
*/
|
|
155
|
+
function createStatementBuilder() {
|
|
156
|
+
return new StatementBuilder();
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=statement-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-builder.js","sourceRoot":"","sources":["../../src/statement-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createRoleBuilder, type IRoleBuilder, type RoleBuilderProps, type RoleBuilderResult, } from "./role-builder.js";
|
|
2
|
+
export { ROLE_DEFAULTS } from "./role-defaults.js";
|
|
3
|
+
export { createManagedPolicyBuilder, type IManagedPolicyBuilder, type ManagedPolicyBuilderProps, type ManagedPolicyBuilderResult, } from "./managed-policy-builder.js";
|
|
4
|
+
export { createServiceRoleBuilder } from "./service-role-builder.js";
|
|
5
|
+
export { createStatementBuilder, StatementBuilder, WildcardResourceError, } from "./statement-builder.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAIlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,0BAA0B,GAI3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ManagedPolicy, type ManagedPolicyProps, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
2
|
+
import type { IConstruct } from "constructs";
|
|
3
|
+
import { COPY_STATE, type IBuilder, type Lifecycle } from "@composurecdk/core";
|
|
4
|
+
import { StatementBuilder } from "./statement-builder.js";
|
|
5
|
+
/**
|
|
6
|
+
* Configuration properties for the customer-managed IAM policy builder.
|
|
7
|
+
*
|
|
8
|
+
* Extends the CDK {@link ManagedPolicyProps} unchanged — the builder adds
|
|
9
|
+
* an {@link IManagedPolicyBuilder.addStatements | addStatements} method that
|
|
10
|
+
* accepts either {@link PolicyStatement} or {@link StatementBuilder}.
|
|
11
|
+
*/
|
|
12
|
+
export type ManagedPolicyBuilderProps = ManagedPolicyProps;
|
|
13
|
+
/**
|
|
14
|
+
* The build output of an {@link IManagedPolicyBuilder}.
|
|
15
|
+
*/
|
|
16
|
+
export interface ManagedPolicyBuilderResult {
|
|
17
|
+
/** The customer-managed policy created by the builder. */
|
|
18
|
+
policy: ManagedPolicy;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A fluent builder for configuring and creating an AWS IAM
|
|
22
|
+
* customer-managed policy.
|
|
23
|
+
*
|
|
24
|
+
* @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.ManagedPolicy.html
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const boundary = createManagedPolicyBuilder()
|
|
29
|
+
* .managedPolicyName("ops-boundary")
|
|
30
|
+
* .addStatements([
|
|
31
|
+
* createStatementBuilder()
|
|
32
|
+
* .allow()
|
|
33
|
+
* .actions(["s3:GetObject"])
|
|
34
|
+
* .resources(["arn:aws:s3:::my-bucket/*"]),
|
|
35
|
+
* ]);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export type IManagedPolicyBuilder = IBuilder<ManagedPolicyBuilderProps, ManagedPolicyBuilder>;
|
|
39
|
+
declare class ManagedPolicyBuilder implements Lifecycle<ManagedPolicyBuilderResult> {
|
|
40
|
+
#private;
|
|
41
|
+
props: Partial<ManagedPolicyBuilderProps>;
|
|
42
|
+
/**
|
|
43
|
+
* Append policy statements to the managed policy.
|
|
44
|
+
*
|
|
45
|
+
* Accepts either {@link PolicyStatement} or {@link StatementBuilder}.
|
|
46
|
+
* Statement builders are resolved during {@link build} so wildcard-resource
|
|
47
|
+
* validation runs at the composition boundary.
|
|
48
|
+
*/
|
|
49
|
+
addStatements(statements: (PolicyStatement | StatementBuilder)[]): this;
|
|
50
|
+
/** @internal — see ADR-0005. */
|
|
51
|
+
[COPY_STATE](target: ManagedPolicyBuilder): void;
|
|
52
|
+
build(scope: IConstruct, id: string): ManagedPolicyBuilderResult;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a new {@link IManagedPolicyBuilder} for configuring an AWS IAM
|
|
56
|
+
* customer-managed policy.
|
|
57
|
+
*
|
|
58
|
+
* @returns A fluent builder for a customer-managed policy.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createManagedPolicyBuilder(): IManagedPolicyBuilder;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=managed-policy-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-policy-builder.d.ts","sourceRoot":"","sources":["../../src/managed-policy-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAW,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0DAA0D;IAC1D,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;AAE9F,cAAM,oBAAqB,YAAW,SAAS,CAAC,0BAA0B,CAAC;;IACzE,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAM;IAG/C;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,GAAG,IAAI;IAKvE,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAIhD,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,0BAA0B;CAajE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,qBAAqB,CAGlE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ManagedPolicy } from "aws-cdk-lib/aws-iam";
|
|
2
|
-
import { Builder } from "@composurecdk/core";
|
|
2
|
+
import { Builder, COPY_STATE } from "@composurecdk/core";
|
|
3
3
|
import { StatementBuilder } from "./statement-builder.js";
|
|
4
4
|
class ManagedPolicyBuilder {
|
|
5
5
|
props = {};
|
|
@@ -15,6 +15,10 @@ class ManagedPolicyBuilder {
|
|
|
15
15
|
this.#extraStatements.push(...statements);
|
|
16
16
|
return this;
|
|
17
17
|
}
|
|
18
|
+
/** @internal — see ADR-0005. */
|
|
19
|
+
[COPY_STATE](target) {
|
|
20
|
+
target.#extraStatements.push(...this.#extraStatements);
|
|
21
|
+
}
|
|
18
22
|
build(scope, id) {
|
|
19
23
|
const resolvedExtras = this.#extraStatements.map((s) => s instanceof StatementBuilder ? s.build() : s);
|
|
20
24
|
const mergedProps = {
|
|
@@ -32,6 +36,7 @@ class ManagedPolicyBuilder {
|
|
|
32
36
|
* @returns A fluent builder for a customer-managed policy.
|
|
33
37
|
*/
|
|
34
38
|
export function createManagedPolicyBuilder() {
|
|
39
|
+
// eslint-disable-next-line composurecdk/builder-must-be-tagged -- AWS::IAM::ManagedPolicy has no Tags property
|
|
35
40
|
return Builder(ManagedPolicyBuilder);
|
|
36
41
|
}
|
|
37
42
|
//# sourceMappingURL=managed-policy-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-policy-builder.js","sourceRoot":"","sources":["../../src/managed-policy-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4C,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,OAAO,EAAE,UAAU,EAAiC,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAwC1D,MAAM,oBAAoB;IACxB,KAAK,GAAuC,EAAE,CAAC;IACtC,gBAAgB,GAA2C,EAAE,CAAC;IAEvE;;;;;;OAMG;IACH,aAAa,CAAC,UAAkD;QAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAA4B;QACvC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,CAAC,YAAY,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;QAEF,MAAM,WAAW,GAAuB;YACtC,GAAG,IAAI,CAAC,KAAK;YACb,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC;SAClE,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B;IACxC,+GAA+G;IAC/G,OAAO,OAAO,CAAkD,oBAAoB,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { type IManagedPolicy, PolicyDocument, PolicyStatement, Role, type RoleProps } from "aws-cdk-lib/aws-iam";
|
|
2
|
+
import type { IConstruct } from "constructs";
|
|
3
|
+
import { COPY_STATE, type Lifecycle, type Resolvable } from "@composurecdk/core";
|
|
4
|
+
import { type ITaggedBuilder } from "@composurecdk/cloudformation";
|
|
5
|
+
import { StatementBuilder } from "./statement-builder.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration properties for the IAM role builder.
|
|
8
|
+
*
|
|
9
|
+
* Extends the CDK {@link RoleProps} with builder-specific options for
|
|
10
|
+
* cross-component wiring: `permissionsBoundary` accepts a {@link Resolvable}
|
|
11
|
+
* so boundary policies built by sibling components can be referenced at
|
|
12
|
+
* configuration time.
|
|
13
|
+
*/
|
|
14
|
+
export interface RoleBuilderProps extends Omit<RoleProps, "permissionsBoundary"> {
|
|
15
|
+
/**
|
|
16
|
+
* A permissions boundary that caps the maximum permissions this role
|
|
17
|
+
* can ever grant, regardless of inline or managed policies attached.
|
|
18
|
+
*
|
|
19
|
+
* Accepts a concrete {@link IManagedPolicy} or a {@link Resolvable} for
|
|
20
|
+
* cross-component wiring (e.g. `ref("boundary", r => r.policy)`).
|
|
21
|
+
*
|
|
22
|
+
* @see https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html
|
|
23
|
+
*/
|
|
24
|
+
permissionsBoundary?: Resolvable<IManagedPolicy>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The build output of an {@link IRoleBuilder}.
|
|
28
|
+
*
|
|
29
|
+
* Exposes every CDK construct the builder creates so consumers can reference,
|
|
30
|
+
* extend, or attach additional policies to them.
|
|
31
|
+
*/
|
|
32
|
+
export interface RoleBuilderResult {
|
|
33
|
+
/** The IAM role construct created by the builder. */
|
|
34
|
+
role: Role;
|
|
35
|
+
/**
|
|
36
|
+
* Inline {@link PolicyDocument}s created for each
|
|
37
|
+
* {@link IRoleBuilder.addInlinePolicyStatements} call, keyed by the
|
|
38
|
+
* policy name supplied to the call.
|
|
39
|
+
*
|
|
40
|
+
* The documents are embedded in the underlying `AWS::IAM::Role`
|
|
41
|
+
* resource via the native `Policies` array — no separate
|
|
42
|
+
* `AWS::IAM::Policy` resources are created.
|
|
43
|
+
*
|
|
44
|
+
* Inline policies supplied directly via the native `inlinePolicies`
|
|
45
|
+
* prop on {@link RoleProps} do not appear in this map.
|
|
46
|
+
*/
|
|
47
|
+
inlinePolicies: Record<string, PolicyDocument>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A fluent builder for configuring and creating an AWS IAM role.
|
|
51
|
+
*
|
|
52
|
+
* Each configuration property from the CDK {@link RoleProps} is exposed as
|
|
53
|
+
* an overloaded method: call with a value to set it, or with no arguments
|
|
54
|
+
* to read the current value.
|
|
55
|
+
*
|
|
56
|
+
* The builder implements {@link Lifecycle}, so it can be used directly as a
|
|
57
|
+
* component in a {@link compose | composed system}. When built it creates
|
|
58
|
+
* an IAM role with well-architected defaults ({@link ROLE_DEFAULTS}) and
|
|
59
|
+
* returns a {@link RoleBuilderResult}.
|
|
60
|
+
*
|
|
61
|
+
* @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_iam.Role.html
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* const role = createRoleBuilder()
|
|
66
|
+
* .assumedBy(new ServicePrincipal("lambda.amazonaws.com"))
|
|
67
|
+
* .description("Execution role for the budget remediation Lambda")
|
|
68
|
+
* .addInlinePolicyStatements("StopEC2", [
|
|
69
|
+
* createStatementBuilder()
|
|
70
|
+
* .allow()
|
|
71
|
+
* .actions(["ec2:StopInstances", "ec2:DescribeInstances"])
|
|
72
|
+
* .resources(["*"])
|
|
73
|
+
* .allowWildcardResources(true)
|
|
74
|
+
* .build(),
|
|
75
|
+
* ]);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export type IRoleBuilder = ITaggedBuilder<RoleBuilderProps, RoleBuilder>;
|
|
79
|
+
declare class RoleBuilder implements Lifecycle<RoleBuilderResult> {
|
|
80
|
+
#private;
|
|
81
|
+
props: Partial<RoleBuilderProps>;
|
|
82
|
+
/**
|
|
83
|
+
* Append an inline policy to the role, embedded in the underlying
|
|
84
|
+
* `AWS::IAM::Role` resource's `Policies` array. The policy name becomes
|
|
85
|
+
* the key under which the resulting {@link PolicyDocument} appears in
|
|
86
|
+
* {@link RoleBuilderResult.inlinePolicies}.
|
|
87
|
+
*
|
|
88
|
+
* Accepts either {@link PolicyStatement} instances or
|
|
89
|
+
* {@link StatementBuilder}s (which are built lazily during {@link build}
|
|
90
|
+
* so that wildcard-resource validation runs at the composition boundary
|
|
91
|
+
* rather than at configuration time).
|
|
92
|
+
*/
|
|
93
|
+
addInlinePolicyStatements(name: string, statements: (PolicyStatement | StatementBuilder)[]): this;
|
|
94
|
+
/** @internal — see ADR-0005. */
|
|
95
|
+
[COPY_STATE](target: RoleBuilder): void;
|
|
96
|
+
build(scope: IConstruct, id: string, context?: Record<string, object>): RoleBuilderResult;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Creates a new {@link IRoleBuilder} for configuring an AWS IAM role.
|
|
100
|
+
*
|
|
101
|
+
* @returns A fluent builder for an AWS IAM role.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* const role = createRoleBuilder()
|
|
106
|
+
* .assumedBy(new ServicePrincipal("lambda.amazonaws.com"))
|
|
107
|
+
* .description("Lambda execution role")
|
|
108
|
+
* .build(stack, "LambdaRole");
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function createRoleBuilder(): IRoleBuilder;
|
|
112
|
+
export {};
|
|
113
|
+
//# sourceMappingURL=role-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-builder.d.ts","sourceRoot":"","sources":["../../src/role-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EACd,eAAe,EACf,IAAI,EACJ,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAW,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,8BAA8B,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC9E;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;CAClD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,IAAI,CAAC;IAEX;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AAOzE,cAAM,WAAY,YAAW,SAAS,CAAC,iBAAiB,CAAC;;IACvD,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAM;IAGtC;;;;;;;;;;OAUG;IACH,yBAAyB,CACvB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,GACjD,IAAI;IAKP,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIvC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,iBAAiB;CA8C9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAEhD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PolicyDocument, Role, } from "aws-cdk-lib/aws-iam";
|
|
2
|
-
import {
|
|
2
|
+
import { COPY_STATE, resolve } from "@composurecdk/core";
|
|
3
|
+
import { taggedBuilder } from "@composurecdk/cloudformation";
|
|
3
4
|
import { ROLE_DEFAULTS } from "./role-defaults.js";
|
|
4
5
|
import { StatementBuilder } from "./statement-builder.js";
|
|
5
6
|
class RoleBuilder {
|
|
@@ -20,6 +21,10 @@ class RoleBuilder {
|
|
|
20
21
|
this.#inlinePolicies.push({ name, statements });
|
|
21
22
|
return this;
|
|
22
23
|
}
|
|
24
|
+
/** @internal — see ADR-0005. */
|
|
25
|
+
[COPY_STATE](target) {
|
|
26
|
+
target.#inlinePolicies.push(...this.#inlinePolicies);
|
|
27
|
+
}
|
|
23
28
|
build(scope, id, context = {}) {
|
|
24
29
|
const { permissionsBoundary, assumedBy, inlinePolicies: propsInlinePolicies, ...rest } = this.props;
|
|
25
30
|
if (!assumedBy) {
|
|
@@ -65,6 +70,6 @@ class RoleBuilder {
|
|
|
65
70
|
* ```
|
|
66
71
|
*/
|
|
67
72
|
export function createRoleBuilder() {
|
|
68
|
-
return
|
|
73
|
+
return taggedBuilder(RoleBuilder);
|
|
69
74
|
}
|
|
70
75
|
//# sourceMappingURL=role-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-builder.js","sourceRoot":"","sources":["../../src/role-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEd,IAAI,GAEL,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAkB,OAAO,EAAmB,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAuB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAoF1D,MAAM,WAAW;IACf,KAAK,GAA8B,EAAE,CAAC;IAC7B,eAAe,GAAwB,EAAE,CAAC;IAEnD;;;;;;;;;;OAUG;IACH,yBAAyB,CACvB,IAAY,EACZ,UAAkD;QAElD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,CAAC,UAAU,CAAC,CAAC,MAAmB;QAC9B,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,UAAkC,EAAE;QACvE,MAAM,EACJ,mBAAmB,EACnB,SAAS,EACT,cAAc,EAAE,mBAAmB,EACnC,GAAG,IAAI,EACR,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gBAAgB,EAAE,mDAAmD;gBACnE,gDAAgD,CACnD,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAG,mBAAmB;YAC1C,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,mBAAmB,GAAmC,EAAE,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,kBAAkB,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpD,CAAC,YAAY,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;YACF,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,oBAAoB,GAAmC;YAC3D,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC9B,GAAG,mBAAmB;SACvB,CAAC;QAEF,MAAM,WAAW,GAAc;YAC7B,GAAG,aAAa;YAChB,GAAG,IAAI;YACP,SAAS;YACT,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC9C,CAAC,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAE9C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACvD,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,aAAa,CAAgC,WAAW,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RoleProps } from "aws-cdk-lib/aws-iam";
|
|
2
|
+
/**
|
|
3
|
+
* Secure, AWS-recommended defaults applied to every IAM role built with
|
|
4
|
+
* {@link createRoleBuilder}. Each property can be individually overridden
|
|
5
|
+
* via the builder's fluent API.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ROLE_DEFAULTS: Partial<RoleProps>;
|
|
8
|
+
//# sourceMappingURL=role-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-defaults.d.ts","sourceRoot":"","sources":["../../src/role-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,SAAS,CAa5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-defaults.js","sourceRoot":"","sources":["../../src/role-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAuB;IAC/C;;;;;;;;;;OAUG;IACH,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;CACtC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type IRoleBuilder } from "./role-builder.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a pre-configured {@link IRoleBuilder} whose trust policy allows
|
|
4
|
+
* the given AWS service principal to assume the role.
|
|
5
|
+
*
|
|
6
|
+
* Thin sugar over {@link createRoleBuilder} for the most common role shape:
|
|
7
|
+
* a service-assumable role (Lambda, EC2, Budgets, etc.) with no extra
|
|
8
|
+
* trust-policy conditions. Any property set by the caller afterwards
|
|
9
|
+
* (including `assumedBy`) still wins, because the underlying builder
|
|
10
|
+
* simply records the last value written.
|
|
11
|
+
*
|
|
12
|
+
* @param servicePrincipal - The service identifier, e.g.
|
|
13
|
+
* `"lambda.amazonaws.com"` or `"budgets.amazonaws.com"`.
|
|
14
|
+
* @returns A role builder with `assumedBy` preset to the given service.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const role = createServiceRoleBuilder("lambda.amazonaws.com")
|
|
19
|
+
* .description("Execution role for StopEC2 Lambda")
|
|
20
|
+
* .addInlinePolicyStatements("StopEC2", [ ... ]);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function createServiceRoleBuilder(servicePrincipal: string): IRoleBuilder;
|
|
24
|
+
//# sourceMappingURL=service-role-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-role-builder.d.ts","sourceRoot":"","sources":["../../src/service-role-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,YAAY,CAE/E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-role-builder.js","sourceRoot":"","sources":["../../src/service-role-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,wBAAwB,CAAC,gBAAwB;IAC/D,OAAO,iBAAiB,EAAE,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Effect, type IPrincipal, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
2
|
+
/**
|
|
3
|
+
* Thrown when a {@link StatementBuilder} is built with an `Allow` effect and
|
|
4
|
+
* an unrestricted resource (`"*"`) without the caller having explicitly
|
|
5
|
+
* opted in via {@link StatementBuilder.allowWildcardResources}.
|
|
6
|
+
*
|
|
7
|
+
* Wildcard-resource allow statements grant the widest possible permission
|
|
8
|
+
* surface and should be an intentional choice, not an accident.
|
|
9
|
+
*
|
|
10
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/permissions-management.html
|
|
11
|
+
*/
|
|
12
|
+
export declare class WildcardResourceError extends Error {
|
|
13
|
+
constructor(sid?: string);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Fluent wrapper around the CDK {@link PolicyStatement}.
|
|
17
|
+
*
|
|
18
|
+
* Unlike other ComposureCDK builders this one is **not** a
|
|
19
|
+
* {@link Lifecycle} — a policy statement is inline data attached to a Role,
|
|
20
|
+
* ManagedPolicy, or resource policy rather than a standalone CDK construct,
|
|
21
|
+
* so there is nothing to attach to a scope.
|
|
22
|
+
*
|
|
23
|
+
* The builder exists to:
|
|
24
|
+
* - centralise least-privilege validation (wildcard-resource guard,
|
|
25
|
+
* {@link WildcardResourceError}),
|
|
26
|
+
* - give every consumer (Role, ManagedPolicy, SNS TopicPolicy, future
|
|
27
|
+
* SQS/S3 bucket policies) one fluent API,
|
|
28
|
+
* - remain interchangeable with raw {@link PolicyStatement} instances via
|
|
29
|
+
* {@link StatementBuilder.build}.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const stmt = createStatementBuilder()
|
|
34
|
+
* .sid("StopDevInstances")
|
|
35
|
+
* .allow()
|
|
36
|
+
* .actions(["ec2:StopInstances", "ec2:DescribeInstances"])
|
|
37
|
+
* .resources(["*"])
|
|
38
|
+
* .allowWildcardResources(true)
|
|
39
|
+
* .build();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class StatementBuilder {
|
|
43
|
+
#private;
|
|
44
|
+
sid(sid: string): this;
|
|
45
|
+
allow(): this;
|
|
46
|
+
deny(): this;
|
|
47
|
+
effect(effect: Effect): this;
|
|
48
|
+
actions(actions: string[]): this;
|
|
49
|
+
notActions(actions: string[]): this;
|
|
50
|
+
resources(resources: string[]): this;
|
|
51
|
+
notResources(resources: string[]): this;
|
|
52
|
+
principals(principals: IPrincipal[]): this;
|
|
53
|
+
notPrincipals(principals: IPrincipal[]): this;
|
|
54
|
+
conditions(conditions: Record<string, Record<string, unknown>>): this;
|
|
55
|
+
/**
|
|
56
|
+
* Opt in to Effect=Allow statements with wildcard resources (`"*"`).
|
|
57
|
+
*
|
|
58
|
+
* The builder rejects wildcard resources by default to surface
|
|
59
|
+
* least-privilege violations; call this to acknowledge that the
|
|
60
|
+
* statement genuinely needs unrestricted scope (for example actions
|
|
61
|
+
* such as `ec2:DescribeInstances` that do not support resource-level
|
|
62
|
+
* permissions).
|
|
63
|
+
*
|
|
64
|
+
* @see https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_actions-resources-contextkeys.html
|
|
65
|
+
*/
|
|
66
|
+
allowWildcardResources(allow?: boolean): this;
|
|
67
|
+
/**
|
|
68
|
+
* Construct and return a {@link PolicyStatement} from the configured state.
|
|
69
|
+
*
|
|
70
|
+
* @throws {WildcardResourceError} when the statement is an Allow with a
|
|
71
|
+
* wildcard resource and wildcard resources have not been opted in to.
|
|
72
|
+
*/
|
|
73
|
+
build(): PolicyStatement;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Creates a new {@link StatementBuilder} for configuring an IAM
|
|
77
|
+
* {@link PolicyStatement} with least-privilege guardrails.
|
|
78
|
+
*
|
|
79
|
+
* @returns A fluent builder that produces a {@link PolicyStatement} when
|
|
80
|
+
* {@link StatementBuilder.build} is called.
|
|
81
|
+
*/
|
|
82
|
+
export declare function createStatementBuilder(): StatementBuilder;
|
|
83
|
+
//# sourceMappingURL=statement-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-builder.d.ts","sourceRoot":"","sources":["../../src/statement-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,UAAU,EACf,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,GAAG,CAAC,EAAE,MAAM;CAOzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,gBAAgB;;IAY3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAKZ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKpC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAK1C,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAK7C,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAKrE;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,KAAK,UAAO,GAAG,IAAI;IAK1C;;;;;OAKG;IACH,KAAK,IAAI,eAAe;CAuBzB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-builder.js","sourceRoot":"","sources":["../../src/statement-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@composurecdk/iam",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Composable IAM role, policy, and statement builders with well-architected defaults",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/laazyj/composureCDK",
|
|
8
8
|
"directory": "packages/iam"
|
|
9
9
|
},
|
|
10
|
-
"main": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"exports": {
|
|
13
|
-
".": {
|
|
14
|
-
"import": "./dist/index.js",
|
|
15
|
-
"types": "./dist/index.d.ts"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
10
|
"files": [
|
|
19
11
|
"dist",
|
|
20
12
|
"README.md",
|
|
21
13
|
"LICENSE"
|
|
22
14
|
],
|
|
23
15
|
"scripts": {
|
|
24
|
-
"clean": "rm -rf dist",
|
|
25
|
-
"build": "
|
|
16
|
+
"clean": "rm -rf dist .tshy .tshy-build",
|
|
17
|
+
"build": "tshy",
|
|
26
18
|
"typecheck": "tsc --noEmit",
|
|
19
|
+
"check:exports": "attw --pack . --profile node16 && publint",
|
|
27
20
|
"test": "vitest run --passWithNoTests",
|
|
28
21
|
"test:watch": "vitest"
|
|
29
22
|
},
|
|
@@ -34,16 +27,42 @@
|
|
|
34
27
|
"access": "public"
|
|
35
28
|
},
|
|
36
29
|
"type": "module",
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=20"
|
|
32
|
+
},
|
|
33
|
+
"tshy": {
|
|
34
|
+
"exports": {
|
|
35
|
+
"./package.json": "./package.json",
|
|
36
|
+
".": "./src/index.ts"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
37
39
|
"peerDependencies": {
|
|
38
|
-
"@composurecdk/
|
|
40
|
+
"@composurecdk/cloudformation": "^0.8.0",
|
|
41
|
+
"@composurecdk/core": "^0.8.0",
|
|
39
42
|
"aws-cdk-lib": "^2.0.0",
|
|
40
43
|
"constructs": "^10.0.0"
|
|
41
44
|
},
|
|
42
45
|
"devDependencies": {
|
|
43
|
-
"@types/node": "^25.6.
|
|
44
|
-
"aws-cdk-lib": "^2.
|
|
46
|
+
"@types/node": "^25.6.2",
|
|
47
|
+
"aws-cdk-lib": "^2.253.1",
|
|
45
48
|
"constructs": "^10.6.0",
|
|
46
49
|
"typescript": "^6.0.3",
|
|
47
50
|
"vitest": "^4.1.4"
|
|
48
|
-
}
|
|
51
|
+
},
|
|
52
|
+
"exports": {
|
|
53
|
+
"./package.json": "./package.json",
|
|
54
|
+
".": {
|
|
55
|
+
"import": {
|
|
56
|
+
"types": "./dist/esm/index.d.ts",
|
|
57
|
+
"default": "./dist/esm/index.js"
|
|
58
|
+
},
|
|
59
|
+
"require": {
|
|
60
|
+
"types": "./dist/commonjs/index.d.ts",
|
|
61
|
+
"default": "./dist/commonjs/index.js"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"main": "./dist/commonjs/index.js",
|
|
66
|
+
"types": "./dist/commonjs/index.d.ts",
|
|
67
|
+
"module": "./dist/esm/index.js"
|
|
49
68
|
}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAIlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,0BAA0B,GAI3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"managed-policy-builder.d.ts","sourceRoot":"","sources":["../src/managed-policy-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAW,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0DAA0D;IAC1D,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;AAE9F,cAAM,oBAAqB,YAAW,SAAS,CAAC,0BAA0B,CAAC;;IACzE,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAM;IAG/C;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,GAAG,IAAI;IAKvE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,0BAA0B;CAajE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,qBAAqB,CAElE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"managed-policy-builder.js","sourceRoot":"","sources":["../src/managed-policy-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4C,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAAE,OAAO,EAAiC,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAuC1D,MAAM,oBAAoB;IACxB,KAAK,GAAuC,EAAE,CAAC;IACtC,gBAAgB,GAA2C,EAAE,CAAC;IAEvE;;;;;;OAMG;IACH,aAAa,CAAC,UAAkD;QAC9D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,CAAC,YAAY,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;QAEF,MAAM,WAAW,GAAuB;YACtC,GAAG,IAAI,CAAC,KAAK;YACb,UAAU,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC;SAClE,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,OAAO,CAAkD,oBAAoB,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"role-builder.d.ts","sourceRoot":"","sources":["../src/role-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EACd,eAAe,EACf,IAAI,EACJ,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC9E;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;CAClD;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,IAAI,CAAC;IAEX;;;;;;;;;;;OAWG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AAOnE,cAAM,WAAY,YAAW,SAAS,CAAC,iBAAiB,CAAC;;IACvD,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAM;IAGtC;;;;;;;;;;OAUG;IACH,yBAAyB,CACvB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,GACjD,IAAI;IAKP,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,iBAAiB;CA8C9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAEhD"}
|
package/dist/role-builder.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"role-builder.js","sourceRoot":"","sources":["../src/role-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEd,IAAI,GAEL,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,OAAO,EAGP,OAAO,GAER,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAoF1D,MAAM,WAAW;IACf,KAAK,GAA8B,EAAE,CAAC;IAC7B,eAAe,GAAwB,EAAE,CAAC;IAEnD;;;;;;;;;;OAUG;IACH,yBAAyB,CACvB,IAAY,EACZ,UAAkD;QAElD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAiB,EAAE,EAAU,EAAE,UAAkC,EAAE;QACvE,MAAM,EACJ,mBAAmB,EACnB,SAAS,EACT,cAAc,EAAE,mBAAmB,EACnC,GAAG,IAAI,EACR,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,gBAAgB,EAAE,mDAAmD;gBACnE,gDAAgD,CACnD,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAG,mBAAmB;YAC1C,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,mBAAmB,GAAmC,EAAE,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,kBAAkB,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpD,CAAC,YAAY,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC9C,CAAC;YACF,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,oBAAoB,GAAmC;YAC3D,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC9B,GAAG,mBAAmB;SACvB,CAAC;QAEF,MAAM,WAAW,GAAc;YAC7B,GAAG,aAAa;YAChB,GAAG,IAAI;YACP,SAAS;YACT,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC9C,CAAC,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;QAE9C,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC;IACvD,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAgC,WAAW,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"role-defaults.d.ts","sourceRoot":"","sources":["../src/role-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,SAAS,CAa5C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"role-defaults.js","sourceRoot":"","sources":["../src/role-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAuB;IAC/C;;;;;;;;;;OAUG;IACH,kBAAkB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;CACtC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service-role-builder.d.ts","sourceRoot":"","sources":["../src/service-role-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,CAAC,gBAAgB,EAAE,MAAM,GAAG,YAAY,CAE/E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service-role-builder.js","sourceRoot":"","sources":["../src/service-role-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,wBAAwB,CAAC,gBAAwB;IAC/D,OAAO,iBAAiB,EAAE,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"statement-builder.d.ts","sourceRoot":"","sources":["../src/statement-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,UAAU,EACf,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,GAAG,CAAC,EAAE,MAAM;CAOzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,gBAAgB;;IAY3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IAKZ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKpC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAK1C,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAK7C,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI;IAKrE;;;;;;;;;;OAUG;IACH,sBAAsB,CAAC,KAAK,UAAO,GAAG,IAAI;IAK1C;;;;;OAKG;IACH,KAAK,IAAI,eAAe;CAuBzB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"statement-builder.js","sourceRoot":"","sources":["../src/statement-builder.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|