This resource handler manages organizational units of the organization.
Note: To simplify the naming of project packages the Lambda (and it’s package) is called organization unit, but actual AWS resource type which it manages is called organizational unit (different is the organizational word).
lambda-cform-organization-unit Lambda needs following permissions:
organizations:CreateOrganizationalUnit,organizations:DeleteOrganizationalUnit,organizations:DescribeOrganizationalUnit,organizations:ListParents.Additionally you may want to add following policies to it’s role:
arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole (if you want to see CloudWatch logs of resource handler execution);arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess (if you want more detailed tracing, package is built with X-Ray instrumentor).name (required) - stringName of the OU.
parentId (required) - stringID of the parent node in the organization structure (root or another OU).
Note: Changing parent effectively removes the OU and creates new one in new tree location.
Deploy handler exposes entire OrganizationalUnit object.
Note: Custom resource physical ID is set as created organizational unit ID.
OrganizationUnitManagerRole:
Type: "AWS::IAM::Role"
Properties:
AssumeRolePolicyDocument:
Statement:
-
Action: "sts:AssumeRole"
Effect: "Allow"
Principal:
Service:
- "lambda.amazonaws.com"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
Policies:
-
PolicyName: "AllowManagingOrganizations"
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Action:
- "organizations:CreateOrganizationalUnit"
- "organizations:DeleteOrganizationalUnit"
- "organizations:DescribeOrganizationalUnit"
- "organizations:ListParents"
Effect: "Allow"
Resource:
- "*"
OrganizationUnitManager:
Type: "AWS::Lambda::Function"
Properties:
Runtime: "java11"
Code:
# put your source bucket
S3Bucket: "your-bucket"
S3Key: "lambda-cform-organization-unit-1.0.3-standalone.jar"
Handler: "pl.wrzasq.lambda.cform.organization.unit.Handler::handle"
MemorySize: 256
Description: "AWS Organizational Unit manager deployment."
Timeout: 300
TracingConfig:
Mode: "Active"
Role: !GetAtt "OrganizationUnitManagerRole.Arn"
OrganizationUnit:
Type: "AWS::CloudFormation::CustomResource"
Properties:
# reference to deploy function
ServiceToken: !GetAtt "OrganizationUnitManager.Arn"
name: "internal services"
# assume Organization is a resource created by lambda-cform-organization handler
parentId: !GetAtt "Organization.RootId"