@pepperize/cdk-organizations
Version:
Manage AWS organizations, organizational units (OU), accounts and service control policies (SCP).
68 lines • 10.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccountProvider = void 0;
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
const is_complete_handler_function_1 = require("./is-complete-handler-function");
const on_event_handler_function_1 = require("./on-event-handler-function");
/**
* Creates a custom resource provider to asynchronously create Accounts in AWS organization. <strong>Account deletion is currently not supported!</strong>
*
* @see https://docs.aws.amazon.com/cdk/api/v1/docs/custom-resources-readme.html#provider-framework
*/
class AccountProvider extends aws_cdk_lib_1.NestedStack {
/**
* Retrieve AccountProvider as stack singleton resource.
*
* @see https://github.com/aws/aws-cdk/issues/5023
*/
static getOrCreate(scope) {
const stack = aws_cdk_lib_1.Stack.of(scope);
const id = "cdk-organizations.AccountProvider";
const existing = stack.node.tryFindChild(id);
return existing || new AccountProvider(stack, id, {});
}
constructor(scope, id, props) {
super(scope, id, props);
const organizationsRegion = process.env.CDK_AWS_PARTITION === "aws-cn" ? "cn-northwest-1" : "us-east-1";
this.onEventHandler = new on_event_handler_function_1.OnEventHandlerFunction(this, "OnEventHandlerFunction", {
environment: {
ORGANIZATIONS_ENDPOINT_REGION: organizationsRegion,
},
timeout: aws_cdk_lib_1.Duration.minutes(10),
initialPolicy: [
new aws_iam_1.PolicyStatement({
actions: ["organizations:CreateAccount", "organizations:ListAccounts"],
resources: ["*"],
}),
],
});
this.isCompleteHandler = new is_complete_handler_function_1.IsCompleteHandlerFunction(this, "IsCompleteHandlerFunction", {
environment: {
ORGANIZATIONS_ENDPOINT_REGION: organizationsRegion,
},
timeout: aws_cdk_lib_1.Duration.minutes(1),
initialPolicy: [
new aws_iam_1.PolicyStatement({
actions: [
"organizations:DescribeCreateAccountStatus",
"organizations:ListAccounts",
"organizations:DescribeAccount",
"organizations:ListParents",
"organizations:ListRoots",
"organizations:MoveAccount",
],
resources: ["*"],
}),
],
});
this.provider = new custom_resources_1.Provider(this, "Provider", {
onEventHandler: this.onEventHandler,
isCompleteHandler: this.isCompleteHandler,
queryInterval: aws_cdk_lib_1.Duration.seconds(5),
});
}
}
exports.AccountProvider = AccountProvider;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2NvdW50LXByb3ZpZGVyL2FjY291bnQtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTZFO0FBQzdFLGlEQUFzRDtBQUV0RCxtRUFBd0Q7QUFFeEQsaUZBQTJFO0FBQzNFLDJFQUFxRTtBQUdyRTs7OztHQUlHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHlCQUFXO0lBQzlDOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sRUFBRSxHQUFHLG1DQUFtQyxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE9BQVEsUUFBNEIsSUFBSSxJQUFJLGVBQWUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFvQkQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBRXhHLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxrREFBc0IsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDL0UsV0FBVyxFQUFFO2dCQUNYLDZCQUE2QixFQUFFLG1CQUFtQjthQUNuRDtZQUNELE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsYUFBYSxFQUFFO2dCQUNiLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsNkJBQTZCLEVBQUUsNEJBQTRCLENBQUM7b0JBQ3RFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDakIsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksd0RBQXlCLENBQUMsSUFBSSxFQUFFLDJCQUEyQixFQUFFO1lBQ3hGLFdBQVcsRUFBRTtnQkFDWCw2QkFBNkIsRUFBRSxtQkFBbUI7YUFDbkQ7WUFDRCxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLGFBQWEsRUFBRTtnQkFDYixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCwyQ0FBMkM7d0JBQzNDLDRCQUE0Qjt3QkFDNUIsK0JBQStCO3dCQUMvQiwyQkFBMkI7d0JBQzNCLHlCQUF5Qjt3QkFDekIsMkJBQTJCO3FCQUM1QjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7aUJBQ2pCLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDN0MsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsYUFBYSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNuQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUEzRUQsMENBMkVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIE5lc3RlZFN0YWNrLCBOZXN0ZWRTdGFja1Byb3BzLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uIH0gZnJvbSBcIi4vaXMtY29tcGxldGUtaGFuZGxlci1mdW5jdGlvblwiO1xuaW1wb3J0IHsgT25FdmVudEhhbmRsZXJGdW5jdGlvbiB9IGZyb20gXCIuL29uLWV2ZW50LWhhbmRsZXItZnVuY3Rpb25cIjtcbmV4cG9ydCBpbnRlcmZhY2UgQWNjb3VudFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBOZXN0ZWRTdGFja1Byb3BzIHt9XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlciB0byBhc3luY2hyb25vdXNseSBjcmVhdGUgQWNjb3VudHMgaW4gQVdTIG9yZ2FuaXphdGlvbi4gPHN0cm9uZz5BY2NvdW50IGRlbGV0aW9uIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkITwvc3Ryb25nPlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjEvZG9jcy9jdXN0b20tcmVzb3VyY2VzLXJlYWRtZS5odG1sI3Byb3ZpZGVyLWZyYW1ld29ya1xuICovXG5leHBvcnQgY2xhc3MgQWNjb3VudFByb3ZpZGVyIGV4dGVuZHMgTmVzdGVkU3RhY2sge1xuICAvKipcbiAgICogUmV0cmlldmUgQWNjb3VudFByb3ZpZGVyIGFzIHN0YWNrIHNpbmdsZXRvbiByZXNvdXJjZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzUwMjNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0T3JDcmVhdGUoc2NvcGU6IENvbnN0cnVjdCk6IEFjY291bnRQcm92aWRlciB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgaWQgPSBcImNkay1vcmdhbml6YXRpb25zLkFjY291bnRQcm92aWRlclwiO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoaWQpO1xuICAgIHJldHVybiAoZXhpc3RpbmcgYXMgQWNjb3VudFByb3ZpZGVyKSB8fCBuZXcgQWNjb3VudFByb3ZpZGVyKHN0YWNrLCBpZCwge30pO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFjY291bnQgYW5kIHJldHVybnMgdGhlIENyZWF0ZUFjY291bnRTdGF0dXMgSUQgb24gQ3JlYXRlLiBQYXNzZXMgdGhlIFBoeXNpY2FsUmVzb3VyY2VJZCBvbiBVcGRhdGUgdGhyb3VnaC4gRmFpbHMgb24gRGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvT3JnYW5pemF0aW9ucy5odG1sI2NyZWF0ZUFjY291bnQtcHJvcGVydHlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbkV2ZW50SGFuZGxlcjogRnVuY3Rpb247XG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIENyZWF0ZUFjY291bnRTdGF0dXMgYW5kIHJldHVybnMgdGhlIGNvbXBsZXRpb25zIHN0YXR1cy4gRmFpbHMgb24gRGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvT3JnYW5pemF0aW9ucy5odG1sI2Rlc2NyaWJlQ3JlYXRlQWNjb3VudFN0YXR1cy1wcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzQ29tcGxldGVIYW5kbGVyOiBGdW5jdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBhc3luY2hyb251b3MgcHJvdmlkZXIgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhbiBBY2NvdW50LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YxL2RvY3MvY3VzdG9tLXJlc291cmNlcy1yZWFkbWUuaHRtbCNhc3luY2hyb25vdXMtcHJvdmlkZXJzLWlzY29tcGxldGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm92aWRlcjogUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFjY291bnRQcm92aWRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBvcmdhbml6YXRpb25zUmVnaW9uID0gcHJvY2Vzcy5lbnYuQ0RLX0FXU19QQVJUSVRJT04gPT09IFwiYXdzLWNuXCIgPyBcImNuLW5vcnRod2VzdC0xXCIgOiBcInVzLWVhc3QtMVwiO1xuXG4gICAgdGhpcy5vbkV2ZW50SGFuZGxlciA9IG5ldyBPbkV2ZW50SGFuZGxlckZ1bmN0aW9uKHRoaXMsIFwiT25FdmVudEhhbmRsZXJGdW5jdGlvblwiLCB7XG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBPUkdBTklaQVRJT05TX0VORFBPSU5UX1JFR0lPTjogb3JnYW5pemF0aW9uc1JlZ2lvbixcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICAgIGluaXRpYWxQb2xpY3k6IFtcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1wib3JnYW5pemF0aW9uczpDcmVhdGVBY2NvdW50XCIsIFwib3JnYW5pemF0aW9uczpMaXN0QWNjb3VudHNcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmlzQ29tcGxldGVIYW5kbGVyID0gbmV3IElzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24odGhpcywgXCJJc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uXCIsIHtcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIE9SR0FOSVpBVElPTlNfRU5EUE9JTlRfUkVHSU9OOiBvcmdhbml6YXRpb25zUmVnaW9uLFxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBpbml0aWFsUG9saWN5OiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwib3JnYW5pemF0aW9uczpEZXNjcmliZUNyZWF0ZUFjY291bnRTdGF0dXNcIixcbiAgICAgICAgICAgIFwib3JnYW5pemF0aW9uczpMaXN0QWNjb3VudHNcIixcbiAgICAgICAgICAgIFwib3JnYW5pemF0aW9uczpEZXNjcmliZUFjY291bnRcIixcbiAgICAgICAgICAgIFwib3JnYW5pemF0aW9uczpMaXN0UGFyZW50c1wiLFxuICAgICAgICAgICAgXCJvcmdhbml6YXRpb25zOkxpc3RSb290c1wiLFxuICAgICAgICAgICAgXCJvcmdhbml6YXRpb25zOk1vdmVBY2NvdW50XCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgXCJQcm92aWRlclwiLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogdGhpcy5vbkV2ZW50SGFuZGxlcixcbiAgICAgIGlzQ29tcGxldGVIYW5kbGVyOiB0aGlzLmlzQ29tcGxldGVIYW5kbGVyLFxuICAgICAgcXVlcnlJbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICB9KTtcbiAgfVxufVxuIl19