Class OperatorProvisioningPermissionMatrix
deploy:create target application's CloudFormation template describes (VPC, EFS, ALB,
ECS cluster/service/task definition).
This is a different layer than PermissionMatrix. PermissionMatrix
defines what a deployed app's task role can do at runtime (pull its image, read SSM
parameters, put CloudWatch metrics). This class defines what Manager's role needs to
create and delete that app's infrastructure, because CloudFormation issues those calls under
Manager's identity.
Tiered by the same IAMProfile enum as PermissionMatrix: MINIMAL is
read-only (inventory and troubleshooting; Describe/List actions accept no Tags parameter to
condition on), STANDARD is the full lifecycle for the Fargate + ALB + EFS shape catalog apps
deploy, and EXTENDED adds flow logs and custom network ACLs.
ManagerOperatorIamSupport.deployStatements(SystemContext) currently uses EXTENDED for Manager's task
role because there is no per-user AWS-level distinction yet.
Planned direction: rather than running deploy:create requests directly under
Manager's task role, Manager would assume an operator role with a session policy scoped to the
IAMProfile tier a request needs, using its existing RBAC catalog
(ManagerPolicyCatalog) and sts:AssumeRole support. Users without the
deploy:create capability could then never obtain infrastructure-creation permissions.
This class is intended to remain the single source of truth for those action lists.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Map<IAMProfile, List<String>> FargateRuntimeConfiguration's private-CA fallback (CfnCertificateAuthority/CfnCertificateAuthorityActivation), used when SSL is enabled without a custom domain.static final Map<IAMProfile, List<String>> FargateRuntimeConfiguration's public ACMCertificateL2 construct (SSL with a custom domain, DNS-validated against the app's Route 53 hosted zone).static final Map<IAMProfile, List<String>> static final Map<IAMProfile, List<String>> BackupFactory'sBackupVault/BackupPlan/BackupSelectionL2 constructs --BackupSelectionalso creates its own IAM role, explicitly named (seeBackupFactory#createSelectionRole) soManagerOperatorIamSupport#IAM_ROLE_MANAGE_RESOURCES's-CfcBackupSelectionpattern can match it; that role's own create/manage permissions live there, not here.static final Map<IAMProfile, List<String>> CmsCdnConfiguration/S3WebsiteTopologyConfiguration'sDistributionL2 construct — CDN in front of an app's ALB origin or an S3-hosted static site.static final Map<IAMProfile, List<String>> CognitoAuthenticationFactory/CognitoSamlFactory'sUserPool/UserPoolClient/UserPoolDomainL2 constructs (application-oidc's own identity provider) -- theAwsCustomResourcecalls both classes also make (SAML IdP config, client-secret retrieval) carry their own dedicated, narrowly-scoped IAM policy per AWS CDK's own custom-resource convention, so those don't need anything added here.static final Map<IAMProfile, List<String>> ComplianceFactory/GuardDutyFactory/WafFactory-- deliberately its own dimension, not a fourthIAMProfiletier, since compliance mode is an independent boolean toggle onDeploymentConfig(complianceMode/awsConfigEnabled/guardDutyEnabled), orthogonal to which IAMProfile tier an app's own workload role runs under.static final Map<IAMProfile, List<String>> RdsFactory'sDatabaseInstance/ParameterGroup/SubnetGroupL2 constructs, plus the KMS key and Secrets Manager secret every encrypted instance provisions alongside it -- grouped together, not split into three separate maps, sinceRdsFactoryalways creates the three together for any app whoseDatabaseSpecrequests a database (there is no "RDS without its own secret and key" shape in this codebase to scope more narrowly than that).static final Map<IAMProfile, List<String>> FargateFactory'sCluster/FargateService/FargateTaskDefinitionL2 constructs -- registering and running the task definition, not the workload permissions the running task itself needs (that'sPermissionMatrix).static final Map<IAMProfile, List<String>> Flow logs and custom network ACLs -- not part of VpcFactory's default topology, only relevant for a compliance-driven or hardened network profile.static final Map<IAMProfile, List<String>> Creating the target app'sAWS::Logs::LogGroup.static final Map<IAMProfile, List<String>> AlarmFactory/SecurityMonitoringFactory'sAlarm/Metric/Topicconstructs -- CloudWatch alarms and their SNS notification target, one category since neither is useful without the other here (every alarm this platform creates wires anSnsAction).static final Map<IAMProfile, List<String>> DomainFactory'sHostedZoneL2 construct.static final Map<IAMProfile, List<String>> S3WebsiteTopologyConfiguration'sBucketL2 construct (a static-site origin) — distinct fromManagerOperatorIamSupport's own S3 grants, which are scoped to Manager's own fixed-prefix template/CDK-asset buckets, never an arbitrary bucket a deployed app's own template declares.static final Map<IAMProfile, List<String>> ScalingFactory's Fargate servicescaleOnCpuUtilization/EnableScalingPropsandEc2Factory'sAutoScalingGroup#scaleOnCpuUtilization-- two distinct AWS services (Application Auto Scaling registers the ECS service as a scalable target; EC2 Auto Scaling owns the ASG directly), kept as one category rather than two small ones.static final Map<IAMProfile, List<String>> VpcFactory'sVpcL2 construct: every EC2 networking resource type it can synthesize. -
Method Summary
Modifier and TypeMethodDescriptiongetComputeAndDataPermissions(IAMProfile tier, boolean includeCompliance) SeegetNetworkPermissions(IAMProfile)-- the other half of the same split.The "network" half ofgetRequiredPermissions(IAMProfile, boolean): VPC, EFS, ALB, ACM, ACM PCA, Route 53, CloudFront, and app S3 bucket actions.getRequiredPermissions(IAMProfile tier, boolean includeCompliance) All actions needed at or below the given tier, across every provisioning category, for a single flat action list -- mirrorsPermissionMatrix.getRequiredPermissions(TopologyType, RuntimeType, IAMProfile)' additive-tier shape (STANDARD includes MINIMAL, EXTENDED includes STANDARD).
-
Field Details
-
VPC_PERMISSIONS
VpcFactory'sVpcL2 construct: every EC2 networking resource type it can synthesize. VpcFactory always creates public and private-with-egress subnet pairs across two AZs, so NAT/EIP/route-table actions are at STANDARD.EXTENDED_ONLY_VPC_PERMISSIONSholds the EXTENDED-only actions (flow logs and custom network ACLs, which VpcFactory does not enable by default). -
EXTENDED_ONLY_VPC_PERMISSIONS
-
EFS_PERMISSIONS
-
ALB_PERMISSIONS
-
ACM_PERMISSIONS
FargateRuntimeConfiguration's public ACMCertificateL2 construct (SSL with a custom domain, DNS-validated against the app's Route 53 hosted zone). CloudFormation'sAWS::CertificateManager::Certificatehandler calls these actions with the caller's identity. Grouped with the network category (getNetworkPermissions(IAMProfile)) because the certificate backs the ALB's HTTPS listener. The private-CA fallback (acm-pca:*) is a separate category; seeACM_PCA_PERMISSIONS. -
ROUTE53_PERMISSIONS
DomainFactory'sHostedZoneL2 construct. MINIMAL covers theListHostedZonesByNamelookup inCloudForgeSynthesizer#seedHostedZoneContext(which runs under this operator role) and the read-only callsHostedZone.fromLookupneeds; STANDARD covers the hosted-zone lifecycle forcreateZone=trueand the record sets that point at the app's ALB or CloudFront distribution. -
ACM_PCA_PERMISSIONS
FargateRuntimeConfiguration's private-CA fallback (CfnCertificateAuthority/CfnCertificateAuthorityActivation), used when SSL is enabled without a custom domain. Separate fromACM_PERMISSIONSbecauseacm-pca:*is a distinct action prefix. -
CLOUDFRONT_PERMISSIONS
CmsCdnConfiguration/S3WebsiteTopologyConfiguration'sDistributionL2 construct — CDN in front of an app's ALB origin or an S3-hosted static site. -
S3_APP_BUCKET_PERMISSIONS
S3WebsiteTopologyConfiguration'sBucketL2 construct (a static-site origin) — distinct fromManagerOperatorIamSupport's own S3 grants, which are scoped to Manager's own fixed-prefix template/CDK-asset buckets, never an arbitrary bucket a deployed app's own template declares. -
ECS_PERMISSIONS
FargateFactory'sCluster/FargateService/FargateTaskDefinitionL2 constructs -- registering and running the task definition, not the workload permissions the running task itself needs (that'sPermissionMatrix). -
LOGS_PERMISSIONS
Creating the target app'sAWS::Logs::LogGroup. Separate fromPermissionMatrix.CORE_PERMISSIONS, which covers the deployed app's task role writing to that log group at runtime. -
DATABASE_PERMISSIONS
RdsFactory'sDatabaseInstance/ParameterGroup/SubnetGroupL2 constructs, plus the KMS key and Secrets Manager secret every encrypted instance provisions alongside it -- grouped together, not split into three separate maps, sinceRdsFactoryalways creates the three together for any app whoseDatabaseSpecrequests a database (there is no "RDS without its own secret and key" shape in this codebase to scope more narrowly than that).kms:CreateKey's own tagging step fails with "UnauthorizedTaggingOperation" withoutkms:TagResourcegranted alongside it (seeManagerOperatorIamSupport'siamRoleCreatefor the same CloudFormation error-classification label on a different action -- it denotes any denied create-with-tags call, not a tag-condition mismatch specifically). -
COMPLIANCE_PERMISSIONS
ComplianceFactory/GuardDutyFactory/WafFactory-- deliberately its own dimension, not a fourthIAMProfiletier, since compliance mode is an independent boolean toggle onDeploymentConfig(complianceMode/awsConfigEnabled/guardDutyEnabled), orthogonal to which IAMProfile tier an app's own workload role runs under. AWS Config and GuardDuty are both account-level singletons, and enabling either for the very first time in an account requiresiam:CreateServiceLinkedRolefor that service's own service-linked role -- a step with no equivalent in the VPC/EFS/ALB/ECS categories above, easy to miss because it's only needed exactly once per account, not once per deployment. -
SCALING_PERMISSIONS
ScalingFactory's Fargate servicescaleOnCpuUtilization/EnableScalingPropsandEc2Factory'sAutoScalingGroup#scaleOnCpuUtilization-- two distinct AWS services (Application Auto Scaling registers the ECS service as a scalable target; EC2 Auto Scaling owns the ASG directly), kept as one category rather than two small ones. -
COGNITO_PERMISSIONS
CognitoAuthenticationFactory/CognitoSamlFactory'sUserPool/UserPoolClient/UserPoolDomainL2 constructs (application-oidc's own identity provider) -- theAwsCustomResourcecalls both classes also make (SAML IdP config, client-secret retrieval) carry their own dedicated, narrowly-scoped IAM policy per AWS CDK's own custom-resource convention, so those don't need anything added here. -
MONITORING_PERMISSIONS
AlarmFactory/SecurityMonitoringFactory'sAlarm/Metric/Topicconstructs -- CloudWatch alarms and their SNS notification target, one category since neither is useful without the other here (every alarm this platform creates wires anSnsAction). Distinct fromLOGS_PERMISSIONS: CloudWatch Logs and CloudWatch metrics/alarms are different action prefixes (logs:*vscloudwatch:*) despite sharing a console. -
BACKUP_PERMISSIONS
BackupFactory'sBackupVault/BackupPlan/BackupSelectionL2 constructs --BackupSelectionalso creates its own IAM role, explicitly named (seeBackupFactory#createSelectionRole) soManagerOperatorIamSupport#IAM_ROLE_MANAGE_RESOURCES's-CfcBackupSelectionpattern can match it; that role's own create/manage permissions live there, not here.
-
-
Method Details
-
getRequiredPermissions
All actions needed at or below the given tier, across every provisioning category, for a single flat action list -- mirrorsPermissionMatrix.getRequiredPermissions(TopologyType, RuntimeType, IAMProfile)' additive-tier shape (STANDARD includes MINIMAL, EXTENDED includes STANDARD).includeCompliancepulls inCOMPLIANCE_PERMISSIONSat the same tier, kept as a separate parameter rather than a fourth tier value for the reason documented on that map. -
getNetworkPermissions
The "network" half ofgetRequiredPermissions(IAMProfile, boolean): VPC, EFS, ALB, ACM, ACM PCA, Route 53, CloudFront, and app S3 bucket actions.getComputeAndDataPermissions(IAMProfile, boolean)returns the rest. The list is split by JSON size, not category count, because the full list exceeds a role's combined 10,240-byte inline-policy limit alongside its other policies.ManagerOperatorIamSupportattaches each half as its own customer-managed policy, so each half must stay under the 6,144-byte managed-policy limit. -
getComputeAndDataPermissions
SeegetNetworkPermissions(IAMProfile)-- the other half of the same split.
-