truemark-cdk-lib 1.25.1 → 1.26.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/aws-directory-service/index.d.ts +1 -0
- package/dist/aws-directory-service/index.js +18 -0
- package/dist/aws-directory-service/lib/directory-group.d.ts +63 -0
- package/dist/aws-directory-service/lib/directory-group.js +98 -0
- package/dist/aws-directory-service/lib/index.d.ts +3 -0
- package/dist/aws-directory-service/lib/index.js +20 -0
- package/dist/aws-directory-service/lib/managed-ad.d.ts +229 -0
- package/dist/aws-directory-service/lib/managed-ad.js +269 -0
- package/dist/aws-directory-service/lib/simple-ad.d.ts +74 -0
- package/dist/aws-directory-service/lib/simple-ad.js +40 -0
- package/dist/aws-patterns-workspaces/index.d.ts +1 -0
- package/dist/aws-patterns-workspaces/index.js +18 -0
- package/dist/aws-patterns-workspaces/lib/index.d.ts +3 -0
- package/dist/aws-patterns-workspaces/lib/index.js +20 -0
- package/dist/aws-patterns-workspaces/lib/workspaces-foundation-stack.d.ts +93 -0
- package/dist/aws-patterns-workspaces/lib/workspaces-foundation-stack.js +100 -0
- package/dist/aws-patterns-workspaces/lib/workspaces-user-stack.d.ts +92 -0
- package/dist/aws-patterns-workspaces/lib/workspaces-user-stack.js +54 -0
- package/dist/aws-ssm-activation/index.d.ts +1 -0
- package/dist/aws-ssm-activation/index.js +18 -0
- package/dist/aws-ssm-activation/lib/index.d.ts +1 -0
- package/dist/aws-ssm-activation/lib/index.js +18 -0
- package/dist/aws-ssm-activation/lib/ssm-hybrid-activation.d.ts +75 -0
- package/dist/aws-ssm-activation/lib/ssm-hybrid-activation.js +206 -0
- package/dist/aws-ssm-patch/index.d.ts +1 -0
- package/dist/aws-ssm-patch/index.js +18 -0
- package/dist/aws-ssm-patch/lib/index.d.ts +2 -0
- package/dist/aws-ssm-patch/lib/index.js +19 -0
- package/dist/aws-ssm-patch/lib/ssm-patch-baseline.d.ts +85 -0
- package/dist/aws-ssm-patch/lib/ssm-patch-baseline.js +61 -0
- package/dist/aws-ssm-patch/lib/ssm-run-shell-script-association.d.ts +84 -0
- package/dist/aws-ssm-patch/lib/ssm-run-shell-script-association.js +52 -0
- package/dist/aws-workspaces/index.d.ts +1 -0
- package/dist/aws-workspaces/index.js +18 -0
- package/dist/aws-workspaces/lib/aws-workspaces-certificate-based-auth-construct.d.ts +37 -0
- package/dist/aws-workspaces/lib/aws-workspaces-certificate-based-auth-construct.js +103 -0
- package/dist/aws-workspaces/lib/aws-workspaces-construct.d.ts +405 -0
- package/dist/aws-workspaces/lib/aws-workspaces-construct.js +512 -0
- package/dist/aws-workspaces/lib/aws-workspaces-directory-registration-construct.d.ts +46 -0
- package/dist/aws-workspaces/lib/aws-workspaces-directory-registration-construct.js +113 -0
- package/dist/aws-workspaces/lib/aws-workspaces-saml-auth-construct.d.ts +50 -0
- package/dist/aws-workspaces/lib/aws-workspaces-saml-auth-construct.js +104 -0
- package/dist/aws-workspaces/lib/aws-workspaces-user-construct.d.ts +91 -0
- package/dist/aws-workspaces/lib/aws-workspaces-user-construct.js +234 -0
- package/dist/aws-workspaces/lib/index.d.ts +5 -0
- package/dist/aws-workspaces/lib/index.js +22 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +7 -2
- package/package.json +19 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib/index';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./lib/index"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzLWRpcmVjdG9yeS1zZXJ2aWNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Construct } from 'constructs';
|
|
2
|
+
import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk';
|
|
3
|
+
/**
|
|
4
|
+
* Active Directory group scope.
|
|
5
|
+
*/
|
|
6
|
+
export type DirectoryGroupScope = 'DomainLocal' | 'Global' | 'Universal' | 'BuiltinLocal';
|
|
7
|
+
/**
|
|
8
|
+
* Active Directory group type.
|
|
9
|
+
*/
|
|
10
|
+
export type DirectoryGroupType = 'Distribution' | 'Security';
|
|
11
|
+
/**
|
|
12
|
+
* Properties for DirectoryGroup.
|
|
13
|
+
*/
|
|
14
|
+
export interface DirectoryGroupProps extends ExtendedConstructProps {
|
|
15
|
+
/**
|
|
16
|
+
* ID of the AWS Managed Microsoft AD directory the group is created in.
|
|
17
|
+
* Pattern: `d-[0-9a-f]{10}`.
|
|
18
|
+
*/
|
|
19
|
+
readonly directoryId: string;
|
|
20
|
+
/**
|
|
21
|
+
* The group's SAMAccountName. Must be unique within the directory and at most
|
|
22
|
+
* 20 characters.
|
|
23
|
+
*/
|
|
24
|
+
readonly groupName: string;
|
|
25
|
+
/**
|
|
26
|
+
* Scope of the group.
|
|
27
|
+
*
|
|
28
|
+
* @default - the directory default ('Global')
|
|
29
|
+
*/
|
|
30
|
+
readonly groupScope?: DirectoryGroupScope;
|
|
31
|
+
/**
|
|
32
|
+
* Type of the group.
|
|
33
|
+
*
|
|
34
|
+
* @default - the directory default ('Security')
|
|
35
|
+
*/
|
|
36
|
+
readonly groupType?: DirectoryGroupType;
|
|
37
|
+
/**
|
|
38
|
+
* SAMAccountNames of users, groups, or computers to add as members of the group.
|
|
39
|
+
* Members must already exist in the directory; this construct does not create them.
|
|
40
|
+
*
|
|
41
|
+
* @default - no members are added
|
|
42
|
+
*/
|
|
43
|
+
readonly members?: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Manages an Active Directory group and its memberships in an AWS Managed
|
|
47
|
+
* Microsoft AD directory using the AWS Directory Service Data API.
|
|
48
|
+
*
|
|
49
|
+
* The Directory Service Data API has no native CloudFormation support, so the
|
|
50
|
+
* group and each membership are managed with custom resources.
|
|
51
|
+
*
|
|
52
|
+
* Note: the custom resource Lambda must have the `DirectoryServiceData` client
|
|
53
|
+
* available in its runtime AWS SDK (Node.js 20+). Directory Service Data write
|
|
54
|
+
* operations are scoped to your organizational unit (OU), Managed Microsoft AD
|
|
55
|
+
* only, and available in the directory's primary Region only.
|
|
56
|
+
*/
|
|
57
|
+
export declare class DirectoryGroup extends ExtendedConstruct {
|
|
58
|
+
/**
|
|
59
|
+
* The SAMAccountName of the managed group.
|
|
60
|
+
*/
|
|
61
|
+
readonly groupName: string;
|
|
62
|
+
constructor(scope: Construct, id: string, props: DirectoryGroupProps);
|
|
63
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DirectoryGroup = void 0;
|
|
4
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
5
|
+
const cr = require("aws-cdk-lib/custom-resources");
|
|
6
|
+
const aws_cdk_1 = require("../../aws-cdk");
|
|
7
|
+
const truemark_1 = require("../../truemark");
|
|
8
|
+
/**
|
|
9
|
+
* Manages an Active Directory group and its memberships in an AWS Managed
|
|
10
|
+
* Microsoft AD directory using the AWS Directory Service Data API.
|
|
11
|
+
*
|
|
12
|
+
* The Directory Service Data API has no native CloudFormation support, so the
|
|
13
|
+
* group and each membership are managed with custom resources.
|
|
14
|
+
*
|
|
15
|
+
* Note: the custom resource Lambda must have the `DirectoryServiceData` client
|
|
16
|
+
* available in its runtime AWS SDK (Node.js 20+). Directory Service Data write
|
|
17
|
+
* operations are scoped to your organizational unit (OU), Managed Microsoft AD
|
|
18
|
+
* only, and available in the directory's primary Region only.
|
|
19
|
+
*/
|
|
20
|
+
class DirectoryGroup extends aws_cdk_1.ExtendedConstruct {
|
|
21
|
+
constructor(scope, id, props) {
|
|
22
|
+
var _a;
|
|
23
|
+
super(scope, id, {
|
|
24
|
+
standardTags: aws_cdk_1.StandardTags.merge(props.standardTags, truemark_1.LibStandardTags),
|
|
25
|
+
});
|
|
26
|
+
this.groupName = props.groupName;
|
|
27
|
+
const group = new cr.AwsCustomResource(this, 'Group', {
|
|
28
|
+
onCreate: {
|
|
29
|
+
service: 'DirectoryServiceData',
|
|
30
|
+
action: 'CreateGroup',
|
|
31
|
+
parameters: {
|
|
32
|
+
DirectoryId: props.directoryId,
|
|
33
|
+
SAMAccountName: props.groupName,
|
|
34
|
+
...(props.groupScope ? { GroupScope: props.groupScope } : {}),
|
|
35
|
+
...(props.groupType ? { GroupType: props.groupType } : {}),
|
|
36
|
+
},
|
|
37
|
+
physicalResourceId: cr.PhysicalResourceId.of(`${props.directoryId}/${props.groupName}`),
|
|
38
|
+
// ConflictException: the group already exists — treat as a no-op.
|
|
39
|
+
ignoreErrorCodesMatching: 'ConflictException',
|
|
40
|
+
},
|
|
41
|
+
onDelete: {
|
|
42
|
+
service: 'DirectoryServiceData',
|
|
43
|
+
action: 'DeleteGroup',
|
|
44
|
+
parameters: {
|
|
45
|
+
DirectoryId: props.directoryId,
|
|
46
|
+
SAMAccountName: props.groupName,
|
|
47
|
+
},
|
|
48
|
+
// ResourceNotFoundException / AccessDeniedException: group already gone or
|
|
49
|
+
// outside our OU — safe to ignore so stack teardown is not blocked.
|
|
50
|
+
ignoreErrorCodesMatching: 'ResourceNotFoundException|AccessDeniedException',
|
|
51
|
+
},
|
|
52
|
+
policy: cr.AwsCustomResourcePolicy.fromStatements([
|
|
53
|
+
new iam.PolicyStatement({
|
|
54
|
+
effect: iam.Effect.ALLOW,
|
|
55
|
+
actions: ['ds-data:CreateGroup', 'ds-data:DeleteGroup'],
|
|
56
|
+
resources: ['*'],
|
|
57
|
+
}),
|
|
58
|
+
]),
|
|
59
|
+
});
|
|
60
|
+
for (const member of (_a = props.members) !== null && _a !== void 0 ? _a : []) {
|
|
61
|
+
const membership = new cr.AwsCustomResource(this, `Member${member}`, {
|
|
62
|
+
onCreate: {
|
|
63
|
+
service: 'DirectoryServiceData',
|
|
64
|
+
action: 'AddGroupMember',
|
|
65
|
+
parameters: {
|
|
66
|
+
DirectoryId: props.directoryId,
|
|
67
|
+
GroupName: props.groupName,
|
|
68
|
+
MemberName: member,
|
|
69
|
+
},
|
|
70
|
+
physicalResourceId: cr.PhysicalResourceId.of(`${props.directoryId}/${props.groupName}/${member}`),
|
|
71
|
+
// ConflictException: member already in the group — treat as a no-op.
|
|
72
|
+
ignoreErrorCodesMatching: 'ConflictException',
|
|
73
|
+
},
|
|
74
|
+
onDelete: {
|
|
75
|
+
service: 'DirectoryServiceData',
|
|
76
|
+
action: 'RemoveGroupMember',
|
|
77
|
+
parameters: {
|
|
78
|
+
DirectoryId: props.directoryId,
|
|
79
|
+
GroupName: props.groupName,
|
|
80
|
+
MemberName: member,
|
|
81
|
+
},
|
|
82
|
+
ignoreErrorCodesMatching: 'ResourceNotFoundException|AccessDeniedException',
|
|
83
|
+
},
|
|
84
|
+
policy: cr.AwsCustomResourcePolicy.fromStatements([
|
|
85
|
+
new iam.PolicyStatement({
|
|
86
|
+
effect: iam.Effect.ALLOW,
|
|
87
|
+
actions: ['ds-data:AddGroupMember', 'ds-data:RemoveGroupMember'],
|
|
88
|
+
resources: ['*'],
|
|
89
|
+
}),
|
|
90
|
+
]),
|
|
91
|
+
});
|
|
92
|
+
// The group must exist before members can be added.
|
|
93
|
+
membership.node.addDependency(group);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.DirectoryGroup = DirectoryGroup;
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0b3J5LWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy1kaXJlY3Rvcnktc2VydmljZS9saWIvZGlyZWN0b3J5LWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUEyQztBQUMzQyxtREFBbUQ7QUFFbkQsMkNBSXVCO0FBQ3ZCLDZDQUErQztBQXVEL0M7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLGNBQWUsU0FBUSwyQkFBaUI7SUFNbkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjs7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsc0JBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSwwQkFBZSxDQUFDO1NBQ3RFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUVqQyxNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ3BELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsc0JBQXNCO2dCQUMvQixNQUFNLEVBQUUsYUFBYTtnQkFDckIsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxTQUFTO29CQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzNELEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDekQ7Z0JBQ0Qsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDMUMsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FDMUM7Z0JBQ0Qsa0VBQWtFO2dCQUNsRSx3QkFBd0IsRUFBRSxtQkFBbUI7YUFDOUM7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLHNCQUFzQjtnQkFDL0IsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLFVBQVUsRUFBRTtvQkFDVixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUztpQkFDaEM7Z0JBQ0QsMkVBQTJFO2dCQUMzRSxvRUFBb0U7Z0JBQ3BFLHdCQUF3QixFQUN0QixpREFBaUQ7YUFDcEQ7WUFDRCxNQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDaEQsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO29CQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUN4QixPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQztvQkFDdkQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNqQixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxNQUFNLElBQUksTUFBQSxLQUFLLENBQUMsT0FBTyxtQ0FBSSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxNQUFNLEVBQUUsRUFBRTtnQkFDbkUsUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLE1BQU0sRUFBRSxnQkFBZ0I7b0JBQ3hCLFVBQVUsRUFBRTt3QkFDVixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7d0JBQzlCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUzt3QkFDMUIsVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQzFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUNwRDtvQkFDRCxxRUFBcUU7b0JBQ3JFLHdCQUF3QixFQUFFLG1CQUFtQjtpQkFDOUM7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLE1BQU0sRUFBRSxtQkFBbUI7b0JBQzNCLFVBQVUsRUFBRTt3QkFDVixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7d0JBQzlCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUzt3QkFDMUIsVUFBVSxFQUFFLE1BQU07cUJBQ25CO29CQUNELHdCQUF3QixFQUN0QixpREFBaUQ7aUJBQ3BEO2dCQUNELE1BQU0sRUFBRSxFQUFFLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDO29CQUNoRCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7d0JBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7d0JBQ3hCLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixFQUFFLDJCQUEyQixDQUFDO3dCQUNoRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7cUJBQ2pCLENBQUM7aUJBQ0gsQ0FBQzthQUNILENBQUMsQ0FBQztZQUNILG9EQUFvRDtZQUNwRCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBekZELHdDQXlGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGNyIGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxuICBTdGFuZGFyZFRhZ3MsXG59IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHtMaWJTdGFuZGFyZFRhZ3N9IGZyb20gJy4uLy4uL3RydWVtYXJrJztcblxuLyoqXG4gKiBBY3RpdmUgRGlyZWN0b3J5IGdyb3VwIHNjb3BlLlxuICovXG5leHBvcnQgdHlwZSBEaXJlY3RvcnlHcm91cFNjb3BlID1cbiAgfCAnRG9tYWluTG9jYWwnXG4gIHwgJ0dsb2JhbCdcbiAgfCAnVW5pdmVyc2FsJ1xuICB8ICdCdWlsdGluTG9jYWwnO1xuXG4vKipcbiAqIEFjdGl2ZSBEaXJlY3RvcnkgZ3JvdXAgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgRGlyZWN0b3J5R3JvdXBUeXBlID0gJ0Rpc3RyaWJ1dGlvbicgfCAnU2VjdXJpdHknO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIERpcmVjdG9yeUdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdG9yeUdyb3VwUHJvcHMgZXh0ZW5kcyBFeHRlbmRlZENvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIElEIG9mIHRoZSBBV1MgTWFuYWdlZCBNaWNyb3NvZnQgQUQgZGlyZWN0b3J5IHRoZSBncm91cCBpcyBjcmVhdGVkIGluLlxuICAgKiBQYXR0ZXJuOiBgZC1bMC05YS1mXXsxMH1gLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlyZWN0b3J5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdyb3VwJ3MgU0FNQWNjb3VudE5hbWUuIE11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZGlyZWN0b3J5IGFuZCBhdCBtb3N0XG4gICAqIDIwIGNoYXJhY3RlcnMuXG4gICAqL1xuICByZWFkb25seSBncm91cE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogU2NvcGUgb2YgdGhlIGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkaXJlY3RvcnkgZGVmYXVsdCAoJ0dsb2JhbCcpXG4gICAqL1xuICByZWFkb25seSBncm91cFNjb3BlPzogRGlyZWN0b3J5R3JvdXBTY29wZTtcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGRpcmVjdG9yeSBkZWZhdWx0ICgnU2VjdXJpdHknKVxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXBUeXBlPzogRGlyZWN0b3J5R3JvdXBUeXBlO1xuXG4gIC8qKlxuICAgKiBTQU1BY2NvdW50TmFtZXMgb2YgdXNlcnMsIGdyb3Vwcywgb3IgY29tcHV0ZXJzIHRvIGFkZCBhcyBtZW1iZXJzIG9mIHRoZSBncm91cC5cbiAgICogTWVtYmVycyBtdXN0IGFscmVhZHkgZXhpc3QgaW4gdGhlIGRpcmVjdG9yeTsgdGhpcyBjb25zdHJ1Y3QgZG9lcyBub3QgY3JlYXRlIHRoZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbWVtYmVycyBhcmUgYWRkZWRcbiAgICovXG4gIHJlYWRvbmx5IG1lbWJlcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGFuIEFjdGl2ZSBEaXJlY3RvcnkgZ3JvdXAgYW5kIGl0cyBtZW1iZXJzaGlwcyBpbiBhbiBBV1MgTWFuYWdlZFxuICogTWljcm9zb2Z0IEFEIGRpcmVjdG9yeSB1c2luZyB0aGUgQVdTIERpcmVjdG9yeSBTZXJ2aWNlIERhdGEgQVBJLlxuICpcbiAqIFRoZSBEaXJlY3RvcnkgU2VydmljZSBEYXRhIEFQSSBoYXMgbm8gbmF0aXZlIENsb3VkRm9ybWF0aW9uIHN1cHBvcnQsIHNvIHRoZVxuICogZ3JvdXAgYW5kIGVhY2ggbWVtYmVyc2hpcCBhcmUgbWFuYWdlZCB3aXRoIGN1c3RvbSByZXNvdXJjZXMuXG4gKlxuICogTm90ZTogdGhlIGN1c3RvbSByZXNvdXJjZSBMYW1iZGEgbXVzdCBoYXZlIHRoZSBgRGlyZWN0b3J5U2VydmljZURhdGFgIGNsaWVudFxuICogYXZhaWxhYmxlIGluIGl0cyBydW50aW1lIEFXUyBTREsgKE5vZGUuanMgMjArKS4gRGlyZWN0b3J5IFNlcnZpY2UgRGF0YSB3cml0ZVxuICogb3BlcmF0aW9ucyBhcmUgc2NvcGVkIHRvIHlvdXIgb3JnYW5pemF0aW9uYWwgdW5pdCAoT1UpLCBNYW5hZ2VkIE1pY3Jvc29mdCBBRFxuICogb25seSwgYW5kIGF2YWlsYWJsZSBpbiB0aGUgZGlyZWN0b3J5J3MgcHJpbWFyeSBSZWdpb24gb25seS5cbiAqL1xuZXhwb3J0IGNsYXNzIERpcmVjdG9yeUdyb3VwIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIFNBTUFjY291bnROYW1lIG9mIHRoZSBtYW5hZ2VkIGdyb3VwLlxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERpcmVjdG9yeUdyb3VwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHN0YW5kYXJkVGFnczogU3RhbmRhcmRUYWdzLm1lcmdlKHByb3BzLnN0YW5kYXJkVGFncywgTGliU3RhbmRhcmRUYWdzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuZ3JvdXBOYW1lID0gcHJvcHMuZ3JvdXBOYW1lO1xuXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgY3IuQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0dyb3VwJywge1xuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogJ0RpcmVjdG9yeVNlcnZpY2VEYXRhJyxcbiAgICAgICAgYWN0aW9uOiAnQ3JlYXRlR3JvdXAnLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgRGlyZWN0b3J5SWQ6IHByb3BzLmRpcmVjdG9yeUlkLFxuICAgICAgICAgIFNBTUFjY291bnROYW1lOiBwcm9wcy5ncm91cE5hbWUsXG4gICAgICAgICAgLi4uKHByb3BzLmdyb3VwU2NvcGUgPyB7R3JvdXBTY29wZTogcHJvcHMuZ3JvdXBTY29wZX0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb3BzLmdyb3VwVHlwZSA/IHtHcm91cFR5cGU6IHByb3BzLmdyb3VwVHlwZX0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3IuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIGAke3Byb3BzLmRpcmVjdG9yeUlkfS8ke3Byb3BzLmdyb3VwTmFtZX1gLFxuICAgICAgICApLFxuICAgICAgICAvLyBDb25mbGljdEV4Y2VwdGlvbjogdGhlIGdyb3VwIGFscmVhZHkgZXhpc3RzIOKAlCB0cmVhdCBhcyBhIG5vLW9wLlxuICAgICAgICBpZ25vcmVFcnJvckNvZGVzTWF0Y2hpbmc6ICdDb25mbGljdEV4Y2VwdGlvbicsXG4gICAgICB9LFxuICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgc2VydmljZTogJ0RpcmVjdG9yeVNlcnZpY2VEYXRhJyxcbiAgICAgICAgYWN0aW9uOiAnRGVsZXRlR3JvdXAnLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgRGlyZWN0b3J5SWQ6IHByb3BzLmRpcmVjdG9yeUlkLFxuICAgICAgICAgIFNBTUFjY291bnROYW1lOiBwcm9wcy5ncm91cE5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gLyBBY2Nlc3NEZW5pZWRFeGNlcHRpb246IGdyb3VwIGFscmVhZHkgZ29uZSBvclxuICAgICAgICAvLyBvdXRzaWRlIG91ciBPVSDigJQgc2FmZSB0byBpZ25vcmUgc28gc3RhY2sgdGVhcmRvd24gaXMgbm90IGJsb2NrZWQuXG4gICAgICAgIGlnbm9yZUVycm9yQ29kZXNNYXRjaGluZzpcbiAgICAgICAgICAnUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbnxBY2Nlc3NEZW5pZWRFeGNlcHRpb24nLFxuICAgICAgfSxcbiAgICAgIHBvbGljeTogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnZHMtZGF0YTpDcmVhdGVHcm91cCcsICdkcy1kYXRhOkRlbGV0ZUdyb3VwJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSksXG4gICAgICBdKSxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHByb3BzLm1lbWJlcnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IG1lbWJlcnNoaXAgPSBuZXcgY3IuQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgYE1lbWJlciR7bWVtYmVyfWAsIHtcbiAgICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiAnRGlyZWN0b3J5U2VydmljZURhdGEnLFxuICAgICAgICAgIGFjdGlvbjogJ0FkZEdyb3VwTWVtYmVyJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBEaXJlY3RvcnlJZDogcHJvcHMuZGlyZWN0b3J5SWQsXG4gICAgICAgICAgICBHcm91cE5hbWU6IHByb3BzLmdyb3VwTmFtZSxcbiAgICAgICAgICAgIE1lbWJlck5hbWU6IG1lbWJlcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3IuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgICAgYCR7cHJvcHMuZGlyZWN0b3J5SWR9LyR7cHJvcHMuZ3JvdXBOYW1lfS8ke21lbWJlcn1gLFxuICAgICAgICAgICksXG4gICAgICAgICAgLy8gQ29uZmxpY3RFeGNlcHRpb246IG1lbWJlciBhbHJlYWR5IGluIHRoZSBncm91cCDigJQgdHJlYXQgYXMgYSBuby1vcC5cbiAgICAgICAgICBpZ25vcmVFcnJvckNvZGVzTWF0Y2hpbmc6ICdDb25mbGljdEV4Y2VwdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgICAgc2VydmljZTogJ0RpcmVjdG9yeVNlcnZpY2VEYXRhJyxcbiAgICAgICAgICBhY3Rpb246ICdSZW1vdmVHcm91cE1lbWJlcicsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgRGlyZWN0b3J5SWQ6IHByb3BzLmRpcmVjdG9yeUlkLFxuICAgICAgICAgICAgR3JvdXBOYW1lOiBwcm9wcy5ncm91cE5hbWUsXG4gICAgICAgICAgICBNZW1iZXJOYW1lOiBtZW1iZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZ25vcmVFcnJvckNvZGVzTWF0Y2hpbmc6XG4gICAgICAgICAgICAnUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbnxBY2Nlc3NEZW5pZWRFeGNlcHRpb24nLFxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3k6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICBhY3Rpb25zOiBbJ2RzLWRhdGE6QWRkR3JvdXBNZW1iZXInLCAnZHMtZGF0YTpSZW1vdmVHcm91cE1lbWJlciddLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICB9KTtcbiAgICAgIC8vIFRoZSBncm91cCBtdXN0IGV4aXN0IGJlZm9yZSBtZW1iZXJzIGNhbiBiZSBhZGRlZC5cbiAgICAgIG1lbWJlcnNoaXAubm9kZS5hZGREZXBlbmRlbmN5KGdyb3VwKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./directory-group"), exports);
|
|
18
|
+
__exportStar(require("./managed-ad"), exports);
|
|
19
|
+
__exportStar(require("./simple-ad"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzLWRpcmVjdG9yeS1zZXJ2aWNlL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQWtDO0FBQ2xDLCtDQUE2QjtBQUM3Qiw4Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RpcmVjdG9yeS1ncm91cCc7XG5leHBvcnQgKiBmcm9tICcuL21hbmFnZWQtYWQnO1xuZXhwb3J0ICogZnJvbSAnLi9zaW1wbGUtYWQnO1xuIl19
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import type { SecretValue } from 'aws-cdk-lib';
|
|
2
|
+
import { RemovalPolicy } from 'aws-cdk-lib';
|
|
3
|
+
import * as directoryservice from 'aws-cdk-lib/aws-directoryservice';
|
|
4
|
+
import type * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
5
|
+
import * as logs from 'aws-cdk-lib/aws-logs';
|
|
6
|
+
import type { Construct } from 'constructs';
|
|
7
|
+
import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk';
|
|
8
|
+
/**
|
|
9
|
+
* Edition of an AWS Managed Microsoft AD directory.
|
|
10
|
+
*/
|
|
11
|
+
export type ManagedAdEdition = 'Standard' | 'Enterprise';
|
|
12
|
+
/**
|
|
13
|
+
* RADIUS-based MFA configuration for a Managed Microsoft AD directory.
|
|
14
|
+
* Requires a RADIUS server reachable from the directory's VPC.
|
|
15
|
+
*/
|
|
16
|
+
export interface ManagedAdRadiusProps {
|
|
17
|
+
/**
|
|
18
|
+
* IP addresses or DNS names of the RADIUS server(s).
|
|
19
|
+
* Provide two entries for redundancy.
|
|
20
|
+
*/
|
|
21
|
+
readonly radiusServers: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Shared secret between the directory and the RADIUS server.
|
|
24
|
+
* Use SecretValue.secretsManager() or SecretValue.ssmSecure() — do not use unsafePlainText.
|
|
25
|
+
*/
|
|
26
|
+
readonly sharedSecret: SecretValue;
|
|
27
|
+
/**
|
|
28
|
+
* UDP port for RADIUS authentication requests.
|
|
29
|
+
*
|
|
30
|
+
* @default 1812
|
|
31
|
+
*/
|
|
32
|
+
readonly radiusPort?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Timeout in seconds for each RADIUS request. Must be between 1 and 20.
|
|
35
|
+
*
|
|
36
|
+
* @default 20
|
|
37
|
+
*/
|
|
38
|
+
readonly radiusTimeout?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Number of times a RADIUS request is retried after a timeout. Must be between 0 and 10.
|
|
41
|
+
*
|
|
42
|
+
* @default 0
|
|
43
|
+
*/
|
|
44
|
+
readonly radiusRetries?: number;
|
|
45
|
+
/**
|
|
46
|
+
* RADIUS authentication protocol.
|
|
47
|
+
*
|
|
48
|
+
* @default 'MS-CHAPv2'
|
|
49
|
+
*/
|
|
50
|
+
readonly authenticationProtocol?: 'PAP' | 'CHAP' | 'MS-CHAPv1' | 'MS-CHAPv2';
|
|
51
|
+
/**
|
|
52
|
+
* Text label shown to users when prompted for their MFA token.
|
|
53
|
+
*
|
|
54
|
+
* @default 'MFA'
|
|
55
|
+
*/
|
|
56
|
+
readonly displayLabel?: string;
|
|
57
|
+
/**
|
|
58
|
+
* Whether to pass the same username to the RADIUS server as used for directory authentication.
|
|
59
|
+
* Set to false when the RADIUS server expects a different username format.
|
|
60
|
+
*
|
|
61
|
+
* @default false
|
|
62
|
+
*/
|
|
63
|
+
readonly useSameUsername?: boolean;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Single sign-on configuration for a Managed Microsoft AD directory.
|
|
67
|
+
* Enabling SSO allows users to access AWS applications and the directory access
|
|
68
|
+
* URL without re-entering their credentials.
|
|
69
|
+
*/
|
|
70
|
+
export interface ManagedAdSsoProps {
|
|
71
|
+
/**
|
|
72
|
+
* Alias for the directory access URL — produces `https://<alias>.awsapps.com`.
|
|
73
|
+
* Aliases are permanent: once created they cannot be changed or removed for the
|
|
74
|
+
* lifetime of the directory.
|
|
75
|
+
*
|
|
76
|
+
* @default - no alias is created and SSO uses the directory ID URL
|
|
77
|
+
*/
|
|
78
|
+
readonly alias?: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* CloudWatch Logs forwarding configuration for a Managed Microsoft AD directory.
|
|
82
|
+
* Forwards the directory's security event logs to a CloudWatch log group.
|
|
83
|
+
*/
|
|
84
|
+
export interface ManagedAdLogForwardingProps {
|
|
85
|
+
/**
|
|
86
|
+
* Name of the CloudWatch log group that receives directory security logs.
|
|
87
|
+
*
|
|
88
|
+
* @default - an auto-generated name is used
|
|
89
|
+
*/
|
|
90
|
+
readonly logGroupName?: string;
|
|
91
|
+
/**
|
|
92
|
+
* Retention period for the directory log group.
|
|
93
|
+
*
|
|
94
|
+
* @default logs.RetentionDays.ONE_YEAR
|
|
95
|
+
*/
|
|
96
|
+
readonly retention?: logs.RetentionDays;
|
|
97
|
+
/**
|
|
98
|
+
* Removal policy for the log group when the directory is removed.
|
|
99
|
+
*
|
|
100
|
+
* @default RemovalPolicy.RETAIN
|
|
101
|
+
*/
|
|
102
|
+
readonly removalPolicy?: RemovalPolicy;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Cross-account sharing configuration for a Managed Microsoft AD directory.
|
|
106
|
+
* Shares the directory with other AWS accounts so they can launch directory-aware
|
|
107
|
+
* resources (e.g. WorkSpaces) against it.
|
|
108
|
+
*/
|
|
109
|
+
export interface ManagedAdSharingProps {
|
|
110
|
+
/**
|
|
111
|
+
* AWS account IDs the directory is shared with.
|
|
112
|
+
*/
|
|
113
|
+
readonly targetAccountIds: string[];
|
|
114
|
+
/**
|
|
115
|
+
* Sharing method. Use ORGANIZATIONS to share within an AWS Organization without
|
|
116
|
+
* a handshake, or HANDSHAKE to send a sharing request the target must accept.
|
|
117
|
+
*
|
|
118
|
+
* @default 'HANDSHAKE'
|
|
119
|
+
*/
|
|
120
|
+
readonly shareMethod?: 'ORGANIZATIONS' | 'HANDSHAKE';
|
|
121
|
+
/**
|
|
122
|
+
* A directory share message sent to the target accounts (HANDSHAKE only).
|
|
123
|
+
*
|
|
124
|
+
* @default - no message
|
|
125
|
+
*/
|
|
126
|
+
readonly shareNotes?: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Properties for ManagedAd.
|
|
130
|
+
*/
|
|
131
|
+
export interface ManagedAdProps extends ExtendedConstructProps {
|
|
132
|
+
/**
|
|
133
|
+
* Fully qualified domain name for the directory. Example: 'corp.example.com'.
|
|
134
|
+
*/
|
|
135
|
+
readonly domainName: string;
|
|
136
|
+
/**
|
|
137
|
+
* Admin password for the directory. Should come from Secrets Manager.
|
|
138
|
+
* Use SecretValue.secretsManager() — do not use unsafePlainText in production.
|
|
139
|
+
*/
|
|
140
|
+
readonly password: SecretValue;
|
|
141
|
+
/**
|
|
142
|
+
* VPC the directory controllers are deployed into.
|
|
143
|
+
*/
|
|
144
|
+
readonly vpc: ec2.IVpc;
|
|
145
|
+
/**
|
|
146
|
+
* Subnets the directory controllers are placed in. At least two subnets in
|
|
147
|
+
* different Availability Zones are required; only the first two are used.
|
|
148
|
+
*/
|
|
149
|
+
readonly subnets: ec2.ISubnet[];
|
|
150
|
+
/**
|
|
151
|
+
* Short NetBIOS name for the directory. Example: 'CORP'.
|
|
152
|
+
*
|
|
153
|
+
* @default - derived by AWS from the domain name
|
|
154
|
+
*/
|
|
155
|
+
readonly shortName?: string;
|
|
156
|
+
/**
|
|
157
|
+
* Edition of the Managed Microsoft AD.
|
|
158
|
+
*
|
|
159
|
+
* @default 'Standard'
|
|
160
|
+
*/
|
|
161
|
+
readonly edition?: ManagedAdEdition;
|
|
162
|
+
/**
|
|
163
|
+
* RADIUS-based multi-factor authentication configuration.
|
|
164
|
+
*
|
|
165
|
+
* @default - RADIUS MFA is not enabled
|
|
166
|
+
*/
|
|
167
|
+
readonly radius?: ManagedAdRadiusProps;
|
|
168
|
+
/**
|
|
169
|
+
* Single sign-on configuration.
|
|
170
|
+
*
|
|
171
|
+
* @default - SSO is not enabled
|
|
172
|
+
*/
|
|
173
|
+
readonly sso?: ManagedAdSsoProps;
|
|
174
|
+
/**
|
|
175
|
+
* CloudWatch Logs forwarding configuration.
|
|
176
|
+
*
|
|
177
|
+
* @default - directory logs are not forwarded
|
|
178
|
+
*/
|
|
179
|
+
readonly logForwarding?: ManagedAdLogForwardingProps;
|
|
180
|
+
/**
|
|
181
|
+
* Cross-account sharing configuration.
|
|
182
|
+
*
|
|
183
|
+
* @default - the directory is not shared
|
|
184
|
+
*/
|
|
185
|
+
readonly sharing?: ManagedAdSharingProps;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Creates an AWS Managed Microsoft AD directory.
|
|
189
|
+
*
|
|
190
|
+
* Wraps the L1 {@link directoryservice.CfnMicrosoftAD} with TrueMark standard
|
|
191
|
+
* tagging and validation, and layers on optional RADIUS MFA, single sign-on,
|
|
192
|
+
* CloudWatch log forwarding, and cross-account sharing — each implemented with
|
|
193
|
+
* custom resources because they have no native CloudFormation support.
|
|
194
|
+
*
|
|
195
|
+
* The resulting {@link directoryId} can be consumed by directory-aware constructs
|
|
196
|
+
* such as Amazon WorkSpaces.
|
|
197
|
+
*/
|
|
198
|
+
export declare class ManagedAd extends ExtendedConstruct {
|
|
199
|
+
/**
|
|
200
|
+
* The underlying CloudFormation Managed Microsoft AD resource.
|
|
201
|
+
*/
|
|
202
|
+
readonly microsoftAd: directoryservice.CfnMicrosoftAD;
|
|
203
|
+
/**
|
|
204
|
+
* The directory ID, e.g. 'd-xxxxxxxxxx'.
|
|
205
|
+
*/
|
|
206
|
+
readonly directoryId: string;
|
|
207
|
+
/**
|
|
208
|
+
* The CloudWatch log group receiving directory security logs.
|
|
209
|
+
* Only set when logForwarding is configured.
|
|
210
|
+
*/
|
|
211
|
+
readonly logGroup?: logs.ILogGroup;
|
|
212
|
+
constructor(scope: Construct, id: string, props: ManagedAdProps);
|
|
213
|
+
/**
|
|
214
|
+
* Enables RADIUS MFA on the directory via the Directory Service API.
|
|
215
|
+
*/
|
|
216
|
+
private enableRadius;
|
|
217
|
+
/**
|
|
218
|
+
* Enables single sign-on and, if requested, creates the directory access URL alias.
|
|
219
|
+
*/
|
|
220
|
+
private enableSso;
|
|
221
|
+
/**
|
|
222
|
+
* Creates a CloudWatch log group and subscribes the directory's security logs to it.
|
|
223
|
+
*/
|
|
224
|
+
private enableLogForwarding;
|
|
225
|
+
/**
|
|
226
|
+
* Shares the directory with the configured target accounts.
|
|
227
|
+
*/
|
|
228
|
+
private enableSharing;
|
|
229
|
+
}
|