cdk-preflight 0.0.174 → 0.0.176
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/.claude/skills/add-preflight-rule/SKILL.md +1 -1
- package/.jsii +375 -172
- package/AGENTS.md +22 -12
- package/API.md +5 -0
- package/README.md +2 -2
- package/docs/rules.md +79 -79
- package/lib/index.d.ts +5 -0
- package/lib/index.js +23 -5
- package/lib/private/enforce.d.ts +25 -0
- package/lib/private/enforce.js +75 -2
- package/lib/rules.generated.d.ts +6 -0
- package/lib/rules.generated.js +638 -81
- package/package.json +2 -2
package/docs/rules.md
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
| `pf-aoss-security-policy-network-body-shape` | AWS::OpenSearchServerless::SecurityPolicy | A network security policy body must be a JSON array without encryption keys | ERROR | none |
|
|
43
43
|
| `pf-apigw-access-log-format-request-id` | AWS::ApiGateway::Stage | Access log format must include a request id variable | ERROR | none |
|
|
44
44
|
| `pf-apigw-api-key-value-length` | AWS::ApiGateway::ApiKey | An API key value is at least 20 characters | ERROR | none |
|
|
45
|
-
| `pf-apigw-authorizer-ttl-range` | AWS::ApiGateway::Authorizer | AuthorizerResultTtlInSeconds tops out at 3600 | ERROR |
|
|
45
|
+
| `pf-apigw-authorizer-ttl-range` | AWS::ApiGateway::Authorizer | AuthorizerResultTtlInSeconds tops out at 3600 | ERROR | retired: engine E3718 covers it from aws-cdk-lib 2.271.0 |
|
|
46
46
|
| `pf-apigw-authorizer-uri-format` | AWS::ApiGateway::Authorizer | An authorizer URI is an API Gateway invocation ARN | ERROR | none |
|
|
47
47
|
| `pf-apigw-cognito-authorizer-provider-arns` | AWS::ApiGateway::Authorizer | COGNITO_USER_POOLS authorizers need ProviderARNs | ERROR | none |
|
|
48
48
|
| `pf-apigw-deployment-no-methods` | AWS::ApiGateway::Deployment | A Deployment needs at least one Method on its REST API | ERROR | none |
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
| `pf-apigw-stage-access-log-firehose-prefix` | AWS::ApiGateway::Stage | An access log delivery stream is named amazon-apigateway-* | ERROR | none |
|
|
77
77
|
| `pf-apigw-stage-cache-ttl-range` | AWS::ApiGateway::Stage | Method setting cache TTL tops out at 3600 seconds | ERROR | none |
|
|
78
78
|
| `pf-apigw-stage-method-setting-http-method` | AWS::ApiGateway::Stage | Method setting HttpMethod is a verb or * | ERROR | none |
|
|
79
|
-
| `pf-apigw-stage-method-setting-resource-path` | AWS::ApiGateway::Stage | Method setting paths start with / and encode slashes as ~1 | ERROR |
|
|
79
|
+
| `pf-apigw-stage-method-setting-resource-path` | AWS::ApiGateway::Stage | Method setting paths start with / and encode slashes as ~1 | ERROR | retired: engine E3723 covers it from aws-cdk-lib 2.271.0 |
|
|
80
80
|
| `pf-apigw-stage-name-charset` | AWS::ApiGateway::Stage | Stage names allow only a-zA-Z0-9_ | ERROR | none |
|
|
81
81
|
| `pf-apigw-stage-variable-name` | AWS::ApiGateway::Stage | Stage variable names allow only word characters | ERROR | none |
|
|
82
82
|
| `pf-apigw-stage-variable-value` | AWS::ApiGateway::Stage | Stage variable values have a restricted character set | ERROR | none |
|
|
@@ -298,10 +298,10 @@
|
|
|
298
298
|
| `pf-aps-ad-alias-max-64` | AWS::APS::AnomalyDetector | An anomaly detector alias is at most 64 characters | ERROR | none |
|
|
299
299
|
| `pf-aps-ad-evaluation-interval-range` | AWS::APS::AnomalyDetector | An anomaly detector evaluation interval is between 30 and 86400 seconds | ERROR | none |
|
|
300
300
|
| `pf-aps-ad-ignore-near-expected-non-negative` | AWS::APS::AnomalyDetector | An ignore-near-expected amount or ratio is not negative | ERROR | none |
|
|
301
|
-
| `pf-aps-ad-ignore-near-expected-not-empty` | AWS::APS::AnomalyDetector | An ignore-near-expected block specifies an amount or a ratio | ERROR |
|
|
301
|
+
| `pf-aps-ad-ignore-near-expected-not-empty` | AWS::APS::AnomalyDetector | An ignore-near-expected block specifies an amount or a ratio | ERROR | retired: engine F3018 covers it from aws-cdk-lib 2.268.0 |
|
|
302
302
|
| `pf-aps-ad-label-key-format` | AWS::APS::AnomalyDetector | An anomaly detector label key is a Prometheus label name | ERROR | none |
|
|
303
303
|
| `pf-aps-ad-label-value-not-empty` | AWS::APS::AnomalyDetector | An anomaly detector label value is not empty | ERROR | none |
|
|
304
|
-
| `pf-aps-ad-missing-data-action-not-empty` | AWS::APS::AnomalyDetector | A missing-data action specifies MarkAsAnomaly or Skip | ERROR |
|
|
304
|
+
| `pf-aps-ad-missing-data-action-not-empty` | AWS::APS::AnomalyDetector | A missing-data action specifies MarkAsAnomaly or Skip | ERROR | retired: engine F3018 covers it from aws-cdk-lib 2.268.0 |
|
|
305
305
|
| `pf-aps-ad-query-aggregation-operator` | AWS::APS::AnomalyDetector | A Random Cut Forest query is wrapped by a supported aggregation operator | ERROR | none |
|
|
306
306
|
| `pf-aps-rgn-data-duration-format` | AWS::APS::RuleGroupsNamespace | Durations in a rules file carry a unit | ERROR | none |
|
|
307
307
|
| `pf-aps-rgn-data-group-name-required` | AWS::APS::RuleGroupsNamespace | A rule group name must not be empty | ERROR | none |
|
|
@@ -785,7 +785,7 @@
|
|
|
785
785
|
| `pf-agentcore-payment-credential-provider-vendor-config` | AWS::BedrockAgentCore::PaymentCredentialProvider | ProviderConfigurationInput must contain the block matching CredentialProviderVendor (CoinbaseCDP / StripePrivy) | ERROR | none |
|
|
786
786
|
| `pf-agentcore-policy-cedar-statement` | AWS::BedrockAgentCore::Policy | A Cedar policy statement must be a permit/forbid clause that constrains the resource and, for permit, carries a condition | ERROR | none |
|
|
787
787
|
| `pf-agentcore-policy-name-unique` | AWS::BedrockAgentCore::Policy | Policy names must be unique within one policy engine | ERROR | none |
|
|
788
|
-
| `pf-agentcore-required-union-empty` | AWS::BedrockAgentCore::Evaluator<br>AWS::BedrockAgentCore::GatewayTarget<br>AWS::BedrockAgentCore::Policy | Required union blocks (EvaluatorConfig, TargetConfiguration, Definition) must not be empty objects | ERROR |
|
|
788
|
+
| `pf-agentcore-required-union-empty` | AWS::BedrockAgentCore::Evaluator<br>AWS::BedrockAgentCore::GatewayTarget<br>AWS::BedrockAgentCore::Policy | Required union blocks (EvaluatorConfig, TargetConfiguration, Definition) must not be empty objects | ERROR | retired: engine F3018 covers it from aws-cdk-lib 2.268.0 |
|
|
789
789
|
| `pf-agentcore-resource-policy-document` | AWS::BedrockAgentCore::ResourcePolicy | A resource policy must be a JSON policy whose statements carry Principal, bedrock-agentcore actions, and exactly one Resource ARN | ERROR | none |
|
|
790
790
|
| `pf-agentcore-runtime-artifact-exactly-one` | AWS::BedrockAgentCore::Runtime | AgentRuntimeArtifact must hold exactly one of ContainerConfiguration or CodeConfiguration | ERROR | none |
|
|
791
791
|
| `pf-agentcore-runtime-code-entrypoint-extension` | AWS::BedrockAgentCore::Runtime | A CodeConfiguration EntryPoint file must match the selected Runtime (.py for PYTHON_*) | ERROR | none |
|
|
@@ -903,7 +903,7 @@
|
|
|
903
903
|
| `pf-cloudfront-trusted-key-groups-excludes-trusted-signers` | AWS::CloudFront::Distribution | TrustedKeyGroups and TrustedSigners cannot both be used on a cache behavior | ERROR | none |
|
|
904
904
|
| `pf-cloudfront-trusted-signers-account-format` | AWS::CloudFront::Distribution | TrustedSigners entries must be self or a 12-digit account id | ERROR | none |
|
|
905
905
|
| `pf-cloudfront-ttl-order` | AWS::CloudFront::Distribution | Cache behavior TTLs must satisfy MinTTL <= DefaultTTL <= MaxTTL | ERROR | none |
|
|
906
|
-
| `pf-cloudfront-viewer-certificate-exactly-one` | AWS::CloudFront::Distribution | ViewerCertificate must name exactly one certificate source | ERROR |
|
|
906
|
+
| `pf-cloudfront-viewer-certificate-exactly-one` | AWS::CloudFront::Distribution | ViewerCertificate must name exactly one certificate source | ERROR | retired: engine F3014 covers it from aws-cdk-lib 2.268.0 |
|
|
907
907
|
| `pf-cloudfront-viewer-certificate-sni-min-protocol` | AWS::CloudFront::Distribution | sni-only requires MinimumProtocolVersion of TLSv1 or higher | ERROR | none |
|
|
908
908
|
| `pf-cloudfront-viewer-certificate-vip-deprecated` | AWS::CloudFront::Distribution | SslSupportMethod vip cannot be used for new distributions | ERROR | none |
|
|
909
909
|
| `pf-cloudfront-viewer-protocol-policy-enum` | AWS::CloudFront::Distribution | ViewerProtocolPolicy must be allow-all, https-only or redirect-to-https | ERROR | pending-engine |
|
|
@@ -1115,36 +1115,36 @@
|
|
|
1115
1115
|
| `pf-cognito-auto-verified-username-consistency` | AWS::Cognito::UserPool | Auto-verifying phone_number requires an SmsConfiguration | ERROR | none |
|
|
1116
1116
|
| `pf-cognito-callback-url-fragment` | AWS::Cognito::UserPoolClient | Callback URLs cannot carry a fragment | ERROR | none |
|
|
1117
1117
|
| `pf-cognito-callback-url-https` | AWS::Cognito::UserPoolClient | Callback URLs must use https (except localhost) | ERROR | none |
|
|
1118
|
-
| `pf-cognito-callback-urls-max` | AWS::Cognito::UserPoolClient | At most 100 callback URLs per client | ERROR |
|
|
1118
|
+
| `pf-cognito-callback-urls-max` | AWS::Cognito::UserPoolClient | At most 100 callback URLs per client | ERROR | retired: engine F3032 covers it from aws-cdk-lib 2.268.0 |
|
|
1119
1119
|
| `pf-cognito-client-credentials-exclusive` | AWS::Cognito::UserPoolClient | client_credentials cannot combine with code or implicit | ERROR | none |
|
|
1120
1120
|
| `pf-cognito-client-credentials-secret` | AWS::Cognito::UserPoolClient | client_credentials needs a client secret | ERROR | none |
|
|
1121
1121
|
| `pf-cognito-client-name` | AWS::Cognito::UserPoolClient | User pool client names allow only word characters, spaces and +=,.@- | ERROR | none |
|
|
1122
1122
|
| `pf-cognito-custom-domain-cert-region` | AWS::Cognito::UserPoolDomain | A custom domain certificate must be in us-east-1 | ERROR | none |
|
|
1123
|
-
| `pf-cognito-custom-domain-fqdn` | AWS::Cognito::UserPoolDomain | A custom domain must be a fully qualified domain name | ERROR |
|
|
1123
|
+
| `pf-cognito-custom-domain-fqdn` | AWS::Cognito::UserPoolDomain | A custom domain must be a fully qualified domain name | ERROR | retired: engine E3031 covers it from aws-cdk-lib 2.271.0 |
|
|
1124
1124
|
| `pf-cognito-custom-email-sender-kms` | AWS::Cognito::UserPool | A custom email sender trigger requires LambdaConfig.KMSKeyID | ERROR | none |
|
|
1125
1125
|
| `pf-cognito-custom-sender-kms-region` | AWS::Cognito::UserPool | The custom sender KMS key must be in the pool region | ERROR | none |
|
|
1126
1126
|
| `pf-cognito-custom-sms-sender-kms` | AWS::Cognito::UserPool | A custom SMS sender trigger requires LambdaConfig.KMSKeyID | ERROR | none |
|
|
1127
1127
|
| `pf-cognito-default-redirect-uri-member` | AWS::Cognito::UserPoolClient | DefaultRedirectURI must be one of the callback URLs | ERROR | none |
|
|
1128
|
-
| `pf-cognito-developer-provider-name-format` | AWS::Cognito::IdentityPool | DeveloperProviderName takes no spaces | ERROR |
|
|
1129
|
-
| `pf-cognito-domain-prefix-format` | AWS::Cognito::UserPoolDomain | A hosted UI domain prefix takes lower-case letters, digits and hyphens | ERROR |
|
|
1130
|
-
| `pf-cognito-domain-prefix-length` | AWS::Cognito::UserPoolDomain | A hosted UI domain prefix is capped at 63 characters | ERROR |
|
|
1128
|
+
| `pf-cognito-developer-provider-name-format` | AWS::Cognito::IdentityPool | DeveloperProviderName takes no spaces | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1129
|
+
| `pf-cognito-domain-prefix-format` | AWS::Cognito::UserPoolDomain | A hosted UI domain prefix takes lower-case letters, digits and hyphens | ERROR | retired: engine E3031 covers it from aws-cdk-lib 2.271.0 |
|
|
1130
|
+
| `pf-cognito-domain-prefix-length` | AWS::Cognito::UserPoolDomain | A hosted UI domain prefix is capped at 63 characters | ERROR | retired: engine E3031, F3033 covers it from aws-cdk-lib 2.268.0 |
|
|
1131
1131
|
| `pf-cognito-domain-reserved-word` | AWS::Cognito::UserPoolDomain | Domain prefixes cannot contain reserved words | ERROR | none |
|
|
1132
1132
|
| `pf-cognito-email-cognito-default-with-sourcearn` | AWS::Cognito::UserPool | COGNITO_DEFAULT email sending takes no SourceArn | ERROR | none |
|
|
1133
1133
|
| `pf-cognito-email-developer-requires-sourcearn` | AWS::Cognito::UserPool | DEVELOPER email sending needs a SES SourceArn | ERROR | none |
|
|
1134
1134
|
| `pf-cognito-email-from-format` | AWS::Cognito::UserPool | EmailConfiguration.From must be an email address | ERROR | none |
|
|
1135
|
-
| `pf-cognito-email-reply-to-format` | AWS::Cognito::UserPool | ReplyToEmailAddress must be an email address | ERROR |
|
|
1135
|
+
| `pf-cognito-email-reply-to-format` | AWS::Cognito::UserPool | ReplyToEmailAddress must be an email address | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1136
1136
|
| `pf-cognito-email-sourcearn-region` | AWS::Cognito::UserPool | The SES SourceArn must be in a Cognito-supported SES region | ERROR | none |
|
|
1137
|
-
| `pf-cognito-email-verification-message-placeholder` | AWS::Cognito::UserPool | EmailVerificationMessage needs the {####} code placeholder | ERROR |
|
|
1137
|
+
| `pf-cognito-email-verification-message-placeholder` | AWS::Cognito::UserPool | EmailVerificationMessage needs the {####} code placeholder | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1138
1138
|
| `pf-cognito-explicit-auth-flows-legacy-mix` | AWS::Cognito::UserPoolClient | Legacy and ALLOW_ auth flow names cannot be mixed | ERROR | none |
|
|
1139
1139
|
| `pf-cognito-group-role-arn-account` | AWS::Cognito::UserPoolGroup | A group role must be in the deploying account | ERROR | none |
|
|
1140
1140
|
| `pf-cognito-identity-pool-provider-name-format` | AWS::Cognito::IdentityPool | A user pool provider name is the full cognito-idp endpoint | ERROR | none |
|
|
1141
1141
|
| `pf-cognito-identity-pool-saml-arn-account` | AWS::Cognito::IdentityPool | SAML provider ARNs must be in the deploying account | ERROR | none |
|
|
1142
1142
|
| `pf-cognito-idp-apple-required-keys` | AWS::Cognito::UserPoolIdentityProvider | Sign in with Apple needs team_id, key_id and private_key | ERROR | none |
|
|
1143
|
-
| `pf-cognito-idp-identifiers-max` | AWS::Cognito::UserPoolIdentityProvider | At most 50 IdP identifiers | ERROR |
|
|
1143
|
+
| `pf-cognito-idp-identifiers-max` | AWS::Cognito::UserPoolIdentityProvider | At most 50 IdP identifiers | ERROR | retired: engine F3032 covers it from aws-cdk-lib 2.268.0 |
|
|
1144
1144
|
| `pf-cognito-idp-oidc-attributes-request-method` | AWS::Cognito::UserPoolIdentityProvider | attributes_request_method is GET or POST | ERROR | none |
|
|
1145
1145
|
| `pf-cognito-idp-oidc-issuer-https` | AWS::Cognito::UserPoolIdentityProvider | The OIDC issuer must be an https URL | ERROR | none |
|
|
1146
1146
|
| `pf-cognito-idp-oidc-required-keys` | AWS::Cognito::UserPoolIdentityProvider | An OIDC provider needs four ProviderDetails keys | ERROR | none |
|
|
1147
|
-
| `pf-cognito-idp-provider-name-length` | AWS::Cognito::UserPoolIdentityProvider | A provider name is capped at 32 characters | ERROR |
|
|
1147
|
+
| `pf-cognito-idp-provider-name-length` | AWS::Cognito::UserPoolIdentityProvider | A provider name is capped at 32 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.268.0 |
|
|
1148
1148
|
| `pf-cognito-idp-saml-metadata-exclusive` | AWS::Cognito::UserPoolIdentityProvider | MetadataURL and MetadataFile are exclusive | ERROR | none |
|
|
1149
1149
|
| `pf-cognito-idp-saml-metadata-required` | AWS::Cognito::UserPoolIdentityProvider | A SAML provider needs MetadataURL or MetadataFile | ERROR | none |
|
|
1150
1150
|
| `pf-cognito-idp-social-provider-name-fixed` | AWS::Cognito::UserPoolIdentityProvider | A social provider name is fixed to its type | ERROR | none |
|
|
@@ -1165,18 +1165,18 @@
|
|
|
1165
1165
|
| `pf-cognito-oauth-callback-required` | AWS::Cognito::UserPoolClient | code and implicit OAuth flows need CallbackURLs | ERROR | none |
|
|
1166
1166
|
| `pf-cognito-oauth-flows-scopes-required` | AWS::Cognito::UserPoolClient | Enabling OAuth requires both AllowedOAuthFlows and AllowedOAuthScopes | ERROR | none |
|
|
1167
1167
|
| `pf-cognito-oauth-scopes-unknown` | AWS::Cognito::UserPoolClient<br>AWS::Cognito::UserPoolResourceServer | OAuth scopes must be standard or come from a resource server | ERROR | none |
|
|
1168
|
-
| `pf-cognito-password-history-size-range` | AWS::Cognito::UserPool | PasswordHistorySize must be between 0 and 24 | ERROR |
|
|
1169
|
-
| `pf-cognito-password-min-length` | AWS::Cognito::UserPool | PasswordPolicy MinimumLength runs 6 to 99 | ERROR |
|
|
1168
|
+
| `pf-cognito-password-history-size-range` | AWS::Cognito::UserPool | PasswordHistorySize must be between 0 and 24 | ERROR | retired: engine F3034 covers it from aws-cdk-lib 2.268.0 |
|
|
1169
|
+
| `pf-cognito-password-min-length` | AWS::Cognito::UserPool | PasswordPolicy MinimumLength runs 6 to 99 | ERROR | retired: engine F3034 covers it from aws-cdk-lib 2.268.0 |
|
|
1170
1170
|
| `pf-cognito-pre-token-generation-config-tier` | AWS::Cognito::UserPool | Pre token generation V2_0 and later need ESSENTIALS or PLUS | ERROR | none |
|
|
1171
1171
|
| `pf-cognito-pre-token-generation-legacy-mix` | AWS::Cognito::UserPool | PreTokenGeneration and PreTokenGenerationConfig must name the same function | ERROR | none |
|
|
1172
1172
|
| `pf-cognito-propagate-context-requires-secret` | AWS::Cognito::UserPoolClient | Propagating user context data requires a client secret | ERROR | none |
|
|
1173
1173
|
| `pf-cognito-read-attributes-exists` | AWS::Cognito::UserPoolClient<br>AWS::Cognito::UserPool | ReadAttributes must name attributes the pool has | ERROR | none |
|
|
1174
1174
|
| `pf-cognito-recovery-admin-only-alone` | AWS::Cognito::UserPool | admin_only cannot be combined with other recovery mechanisms | ERROR | none |
|
|
1175
1175
|
| `pf-cognito-recovery-duplicate` | AWS::Cognito::UserPool | Recovery mechanisms cannot repeat priorities or names | ERROR | none |
|
|
1176
|
-
| `pf-cognito-recovery-mechanisms-max` | AWS::Cognito::UserPool | At most two account recovery mechanisms | ERROR |
|
|
1177
|
-
| `pf-cognito-resource-server-identifier-charset` | AWS::Cognito::UserPoolResourceServer | A resource server identifier takes no spaces | ERROR |
|
|
1178
|
-
| `pf-cognito-resource-server-scope-name-charset` | AWS::Cognito::UserPoolResourceServer | Scope names take no spaces or quotes | ERROR |
|
|
1179
|
-
| `pf-cognito-resource-server-scopes-max` | AWS::Cognito::UserPoolResourceServer | At most 100 scopes per resource server | ERROR |
|
|
1176
|
+
| `pf-cognito-recovery-mechanisms-max` | AWS::Cognito::UserPool | At most two account recovery mechanisms | ERROR | retired: engine F3032, F3034 covers it from aws-cdk-lib 2.268.0 |
|
|
1177
|
+
| `pf-cognito-resource-server-identifier-charset` | AWS::Cognito::UserPoolResourceServer | A resource server identifier takes no spaces | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1178
|
+
| `pf-cognito-resource-server-scope-name-charset` | AWS::Cognito::UserPoolResourceServer | Scope names take no spaces or quotes | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1179
|
+
| `pf-cognito-resource-server-scopes-max` | AWS::Cognito::UserPoolResourceServer | At most 100 scopes per resource server | ERROR | retired: engine F3032 covers it from aws-cdk-lib 2.268.0 |
|
|
1180
1180
|
| `pf-cognito-risk-account-takeover-event-action-enum` | AWS::Cognito::UserPoolRiskConfigurationAttachment | Account takeover actions take four values | ERROR | none |
|
|
1181
1181
|
| `pf-cognito-risk-compromised-event-action-enum` | AWS::Cognito::UserPoolRiskConfigurationAttachment | Compromised credentials action is BLOCK or NO_ACTION | ERROR | none |
|
|
1182
1182
|
| `pf-cognito-risk-compromised-event-filter-enum` | AWS::Cognito::UserPoolRiskConfigurationAttachment | Compromised credentials event filter takes three values | ERROR | none |
|
|
@@ -1191,33 +1191,33 @@
|
|
|
1191
1191
|
| `pf-cognito-role-mappings-rules-required` | AWS::Cognito::IdentityPoolRoleAttachment | A Rules role mapping needs RulesConfiguration | ERROR | none |
|
|
1192
1192
|
| `pf-cognito-role-mappings-token-no-rules` | AWS::Cognito::IdentityPoolRoleAttachment | A Token role mapping takes no RulesConfiguration | ERROR | none |
|
|
1193
1193
|
| `pf-cognito-schema-attr-length-order` | AWS::Cognito::UserPool | Schema attribute MaxLength cannot undercut MinLength | ERROR | none |
|
|
1194
|
-
| `pf-cognito-schema-attr-max` | AWS::Cognito::UserPool | A user pool takes at most 50 custom attributes | ERROR |
|
|
1195
|
-
| `pf-cognito-schema-custom-name-length` | AWS::Cognito::UserPool | A schema attribute name is capped at 20 characters | ERROR |
|
|
1194
|
+
| `pf-cognito-schema-attr-max` | AWS::Cognito::UserPool | A user pool takes at most 50 custom attributes | ERROR | retired: engine F3032 covers it from aws-cdk-lib 2.268.0 |
|
|
1195
|
+
| `pf-cognito-schema-custom-name-length` | AWS::Cognito::UserPool | A schema attribute name is capped at 20 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.268.0 |
|
|
1196
1196
|
| `pf-cognito-schema-custom-required` | AWS::Cognito::UserPool | Custom attributes cannot be required | ERROR | none |
|
|
1197
1197
|
| `pf-cognito-schema-name-duplicate` | AWS::Cognito::UserPool | Schema attribute names must be unique | ERROR | none |
|
|
1198
1198
|
| `pf-cognito-schema-number-min-max-order` | AWS::Cognito::UserPool | Number attribute MinValue must not exceed MaxValue | ERROR | none |
|
|
1199
1199
|
| `pf-cognito-schema-standard-attr-datatype` | AWS::Cognito::UserPool | Standard attributes keep their fixed data type | ERROR | none |
|
|
1200
1200
|
| `pf-cognito-signin-policy-password-required` | AWS::Cognito::UserPool | AllowedFirstAuthFactors must include PASSWORD | ERROR | none |
|
|
1201
1201
|
| `pf-cognito-signin-policy-webauthn-tier` | AWS::Cognito::UserPool | Passwordless sign-in factors need ESSENTIALS or PLUS | ERROR | none |
|
|
1202
|
-
| `pf-cognito-sms-authentication-message-placeholder` | AWS::Cognito::UserPool | SmsAuthenticationMessage needs the {####} code placeholder | ERROR |
|
|
1202
|
+
| `pf-cognito-sms-authentication-message-placeholder` | AWS::Cognito::UserPool | SmsAuthenticationMessage needs the {####} code placeholder | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1203
1203
|
| `pf-cognito-sms-caller-arn-account` | AWS::Cognito::UserPool | The SMS caller role must be in the deploying account | ERROR | none |
|
|
1204
1204
|
| `pf-cognito-sms-configuration-sns-region` | AWS::Cognito::UserPool | SnsRegion must be the region the pool deploys to | ERROR | none |
|
|
1205
|
-
| `pf-cognito-sms-verification-message-placeholder` | AWS::Cognito::UserPool | SmsVerificationMessage needs the {####} code placeholder | ERROR |
|
|
1205
|
+
| `pf-cognito-sms-verification-message-placeholder` | AWS::Cognito::UserPool | SmsVerificationMessage needs the {####} code placeholder | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1206
1206
|
| `pf-cognito-supported-identity-providers-exists` | AWS::Cognito::UserPoolClient<br>AWS::Cognito::UserPoolIdentityProvider | Supported identity providers must exist on the pool | ERROR | none |
|
|
1207
|
-
| `pf-cognito-temporary-password-validity-range` | AWS::Cognito::UserPool | TemporaryPasswordValidityDays must be between 0 and 365 | ERROR |
|
|
1207
|
+
| `pf-cognito-temporary-password-validity-range` | AWS::Cognito::UserPool | TemporaryPasswordValidityDays must be between 0 and 365 | ERROR | retired: engine F3034 covers it from aws-cdk-lib 2.268.0 |
|
|
1208
1208
|
| `pf-cognito-token-expiration-order` | AWS::Cognito::UserPoolClient | Access and id tokens cannot outlive the refresh token | ERROR | none |
|
|
1209
1209
|
| `pf-cognito-token-validity-range` | AWS::Cognito::UserPoolClient | Token validity ranges depend on token type and unit | ERROR | none |
|
|
1210
1210
|
| `pf-cognito-ui-customization-css-properties` | AWS::Cognito::UserPoolUICustomizationAttachment | Hosted UI CSS only styles the -customizable classes | ERROR | none |
|
|
1211
1211
|
| `pf-cognito-ui-customization-requires-domain` | AWS::Cognito::UserPoolUICustomizationAttachment<br>AWS::Cognito::UserPoolDomain | Hosted UI customization requires a domain on the pool | ERROR | none |
|
|
1212
1212
|
| `pf-cognito-unused-account-validity-exclusive` | AWS::Cognito::UserPool | UnusedAccountValidityDays and TemporaryPasswordValidityDays are exclusive | ERROR | none |
|
|
1213
|
-
| `pf-cognito-unused-account-validity-range` | AWS::Cognito::UserPool | UnusedAccountValidityDays must be between 0 and 365 | ERROR |
|
|
1213
|
+
| `pf-cognito-unused-account-validity-range` | AWS::Cognito::UserPool | UnusedAccountValidityDays must be between 0 and 365 | ERROR | retired: engine F3034 covers it from aws-cdk-lib 2.268.0 |
|
|
1214
1214
|
| `pf-cognito-user-attribute-update-requires-auto-verified` | AWS::Cognito::UserPool | Attributes requiring verification before update must be auto-verified | ERROR | none |
|
|
1215
1215
|
| `pf-cognito-user-attribute-update-settings-enum` | AWS::Cognito::UserPool | Only email and phone_number can require verification before update | ERROR | none |
|
|
1216
1216
|
| `pf-cognito-user-pool-name` | AWS::Cognito::UserPool | User pool names allow only word characters, spaces and +=,.@- | ERROR | none |
|
|
1217
|
-
| `pf-cognito-verification-code-placeholder` | AWS::Cognito::UserPool | The verification email needs the {####} code placeholder | ERROR |
|
|
1218
|
-
| `pf-cognito-verification-email-subject-length` | AWS::Cognito::UserPool | The verification email subject is capped at 140 characters | ERROR |
|
|
1219
|
-
| `pf-cognito-verification-link-placeholder` | AWS::Cognito::UserPool | A link verification message needs the {##...##} placeholder | ERROR |
|
|
1220
|
-
| `pf-cognito-verification-sms-placeholder` | AWS::Cognito::UserPool | The verification SMS needs the {####} code placeholder | ERROR |
|
|
1217
|
+
| `pf-cognito-verification-code-placeholder` | AWS::Cognito::UserPool | The verification email needs the {####} code placeholder | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1218
|
+
| `pf-cognito-verification-email-subject-length` | AWS::Cognito::UserPool | The verification email subject is capped at 140 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.268.0 |
|
|
1219
|
+
| `pf-cognito-verification-link-placeholder` | AWS::Cognito::UserPool | A link verification message needs the {##...##} placeholder | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1220
|
+
| `pf-cognito-verification-sms-placeholder` | AWS::Cognito::UserPool | The verification SMS needs the {####} code placeholder | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
1221
1221
|
| `pf-cognito-web-authn-relying-party-format` | AWS::Cognito::UserPool | WebAuthnRelyingPartyID is a bare domain name | ERROR | none |
|
|
1222
1222
|
| `pf-cognito-write-attributes-immutable` | AWS::Cognito::UserPoolClient | Verified-status attributes cannot be written by a client | ERROR | none |
|
|
1223
1223
|
| `pf-config-aggregator-account-source-regions-exclusive` | AWS::Config::ConfigurationAggregator | An account aggregation source takes AllAwsRegions or AwsRegions, not both | ERROR | none |
|
|
@@ -1263,7 +1263,7 @@
|
|
|
1263
1263
|
| `pf-docdbelastic-shard-capacity-enum` | AWS::DocDBElastic::Cluster | ShardCapacity must be one of 2, 4, 8, 16, 32 or 64 vCPUs | ERROR | none |
|
|
1264
1264
|
| `pf-docdbelastic-shard-count-max` | AWS::DocDBElastic::Cluster | ShardCount must not exceed 32 | ERROR | none |
|
|
1265
1265
|
| `pf-docdbelastic-shard-instance-count-max` | AWS::DocDBElastic::Cluster | ShardInstanceCount must not exceed 16 | ERROR | none |
|
|
1266
|
-
| `pf-dynamodb-attribute-definitions-usage` | AWS::DynamoDB::Table | Every AttributeDefinitions entry must be used by a key schema | ERROR |
|
|
1266
|
+
| `pf-dynamodb-attribute-definitions-usage` | AWS::DynamoDB::Table | Every AttributeDefinitions entry must be used by a key schema | ERROR | retired: engine E3039 covers it from aws-cdk-lib 2.268.0 |
|
|
1267
1267
|
| `pf-dynamodb-attribute-type` | AWS::DynamoDB::Table | AttributeType must be S, N or B | ERROR | pending-engine |
|
|
1268
1268
|
| `pf-dynamodb-billing-throughput` | AWS::DynamoDB::Table | ProvisionedThroughput must match BillingMode (required for PROVISIONED, forbidden for PAY_PER_REQUEST) | ERROR | none |
|
|
1269
1269
|
| `pf-dynamodb-contributor-insights-mode` | AWS::DynamoDB::Table | Contributor Insights Mode must be ACCESSED_AND_THROTTLED_KEYS or THROTTLED_KEYS | ERROR | pending-engine |
|
|
@@ -1301,7 +1301,7 @@
|
|
|
1301
1301
|
| `pf-dynamodb-key-schema-shape` | AWS::DynamoDB::Table | KeySchema must be [HASH] or [HASH, RANGE] | ERROR | none |
|
|
1302
1302
|
| `pf-dynamodb-kinesis-precision` | AWS::DynamoDB::Table | Kinesis record timestamp precision is MICROSECOND or MILLISECOND | ERROR | pending-engine |
|
|
1303
1303
|
| `pf-dynamodb-kinesis-stream-region` | AWS::DynamoDB::Table | A Kinesis streaming destination must be in the table's region | ERROR | none |
|
|
1304
|
-
| `pf-dynamodb-lsi-attribute-definitions` | AWS::DynamoDB::Table | LSI key attributes must be defined in AttributeDefinitions | ERROR |
|
|
1304
|
+
| `pf-dynamodb-lsi-attribute-definitions` | AWS::DynamoDB::Table | LSI key attributes must be defined in AttributeDefinitions | ERROR | retired: engine E3039 covers it from aws-cdk-lib 2.268.0 |
|
|
1305
1305
|
| `pf-dynamodb-lsi-count` | AWS::DynamoDB::Table | A table can carry at most 5 local secondary indexes | ERROR | none |
|
|
1306
1306
|
| `pf-dynamodb-lsi-shape` | AWS::DynamoDB::Table | An LSI needs a RANGE key and the table's leading hash key | ERROR | none |
|
|
1307
1307
|
| `pf-dynamodb-ondemand-throughput-billing` | AWS::DynamoDB::Table | OnDemandThroughput belongs to PAY_PER_REQUEST tables only | ERROR | none |
|
|
@@ -1359,7 +1359,7 @@
|
|
|
1359
1359
|
| `pf-ec2-sg-icmp-type-code` | AWS::EC2::SecurityGroupIngress<br>AWS::EC2::SecurityGroupEgress | ICMP type and code must be within -1 to 255 | ERROR | none |
|
|
1360
1360
|
| `pf-ec2-sg-port-range` | AWS::EC2::SecurityGroup<br>AWS::EC2::SecurityGroupIngress<br>AWS::EC2::SecurityGroupEgress | Security group TCP/UDP ports must be within 0-65535 and FromPort <= ToPort | ERROR | none |
|
|
1361
1361
|
| `pf-ec2-sg-rule-description` | AWS::EC2::SecurityGroup<br>AWS::EC2::SecurityGroupIngress<br>AWS::EC2::SecurityGroupEgress | Security group rule descriptions are limited to 255 chars of a restricted ASCII set | ERROR | none |
|
|
1362
|
-
| `pf-ec2-sg-source-exclusive` | AWS::EC2::SecurityGroup<br>AWS::EC2::SecurityGroupIngress<br>AWS::EC2::SecurityGroupEgress | A security group rule takes exactly one source/destination field | ERROR |
|
|
1362
|
+
| `pf-ec2-sg-source-exclusive` | AWS::EC2::SecurityGroup<br>AWS::EC2::SecurityGroupIngress<br>AWS::EC2::SecurityGroupEgress | A security group rule takes exactly one source/destination field | ERROR | retired: engine F3014 covers it from aws-cdk-lib 2.268.0 |
|
|
1363
1363
|
| `pf-ec2-subnet-cidr-size` | AWS::EC2::Subnet | Subnet IPv4 CIDR netmask must be between /16 and /28 | ERROR | none |
|
|
1364
1364
|
| `pf-ec2-subnet-dns64-ipv6` | AWS::EC2::Subnet | EnableDns64 requires the subnet to have an IPv6 CIDR | ERROR | none |
|
|
1365
1365
|
| `pf-ec2-subnet-ipv6-native-cidr` | AWS::EC2::Subnet | An IPv6-only subnet cannot carry IPv4 addressing | ERROR | none |
|
|
@@ -1443,14 +1443,14 @@
|
|
|
1443
1443
|
| `pf-ecs-fargate-inference-accelerator` | AWS::ECS::TaskDefinition | InferenceAccelerators is retired and always rejected | ERROR | none |
|
|
1444
1444
|
| `pf-ecs-fargate-ipc-mode` | AWS::ECS::TaskDefinition | IpcMode is not supported on Fargate | ERROR | none |
|
|
1445
1445
|
| `pf-ecs-fargate-links` | AWS::ECS::TaskDefinition | Links is not supported with NetworkMode awsvpc | ERROR | none |
|
|
1446
|
-
| `pf-ecs-fargate-log-driver-unsupported` | AWS::ECS::TaskDefinition | Fargate supports only a subset of log drivers | ERROR |
|
|
1446
|
+
| `pf-ecs-fargate-log-driver-unsupported` | AWS::ECS::TaskDefinition | Fargate supports only a subset of log drivers | ERROR | retired: engine E3048 covers it from aws-cdk-lib 2.268.0 |
|
|
1447
1447
|
| `pf-ecs-fargate-max-swap` | AWS::ECS::TaskDefinition | LinuxParameters.MaxSwap is not supported on Fargate | ERROR | none |
|
|
1448
|
-
| `pf-ecs-fargate-network-mode` | AWS::ECS::TaskDefinition | Fargate task definitions require NetworkMode 'awsvpc' | ERROR |
|
|
1448
|
+
| `pf-ecs-fargate-network-mode` | AWS::ECS::TaskDefinition | Fargate task definitions require NetworkMode 'awsvpc' | ERROR | retired: engine E3048 covers it from aws-cdk-lib 2.268.0 |
|
|
1449
1449
|
| `pf-ecs-fargate-pid-mode-host` | AWS::ECS::TaskDefinition | PidMode host is not supported on Fargate | ERROR | none |
|
|
1450
|
-
| `pf-ecs-fargate-placement-constraints` | AWS::ECS::TaskDefinition | Task placement constraints are not supported on Fargate | ERROR |
|
|
1450
|
+
| `pf-ecs-fargate-placement-constraints` | AWS::ECS::TaskDefinition | Task placement constraints are not supported on Fargate | ERROR | retired: engine E3048 covers it from aws-cdk-lib 2.268.0 |
|
|
1451
1451
|
| `pf-ecs-fargate-privileged` | AWS::ECS::TaskDefinition | Privileged is not supported on Fargate | ERROR | none |
|
|
1452
1452
|
| `pf-ecs-fargate-shared-memory-size` | AWS::ECS::TaskDefinition | LinuxParameters.SharedMemorySize is not supported on Fargate | ERROR | none |
|
|
1453
|
-
| `pf-ecs-fargate-task-cpu-memory` | AWS::ECS::TaskDefinition | FARGATE compatibility requires task-level Cpu and Memory | ERROR |
|
|
1453
|
+
| `pf-ecs-fargate-task-cpu-memory` | AWS::ECS::TaskDefinition | FARGATE compatibility requires task-level Cpu and Memory | ERROR | retired: engine E3048 covers it from aws-cdk-lib 2.268.0 |
|
|
1454
1454
|
| `pf-ecs-fargate-windows-cpu-under-1vcpu` | AWS::ECS::TaskDefinition | Windows tasks on Fargate need at least 1 vCPU | ERROR | none |
|
|
1455
1455
|
| `pf-ecs-healthcheck-interval-range` | AWS::ECS::TaskDefinition | HealthCheck.Interval must be 5-300 seconds | ERROR | none |
|
|
1456
1456
|
| `pf-ecs-healthcheck-retries-range` | AWS::ECS::TaskDefinition | HealthCheck.Retries must be 1-10 | ERROR | none |
|
|
@@ -1529,7 +1529,7 @@
|
|
|
1529
1529
|
| `pf-eks-accessentry-policy-arn-form` | AWS::EKS::AccessEntry | An access policy ARN is not an IAM policy ARN | ERROR | none |
|
|
1530
1530
|
| `pf-eks-accessentry-policy-arn-partition` | AWS::EKS::AccessEntry | An access policy ARN must name the deploy partition | ERROR | none |
|
|
1531
1531
|
| `pf-eks-accessentry-principal-arn-account` | AWS::EKS::AccessEntry | A node-type access entry principal must live in the deploy account | ERROR | none |
|
|
1532
|
-
| `pf-eks-accessentry-principal-arn-duplicate` | AWS::EKS::AccessEntry | One IAM principal may hold only one access entry per cluster | ERROR |
|
|
1532
|
+
| `pf-eks-accessentry-principal-arn-duplicate` | AWS::EKS::AccessEntry | One IAM principal may hold only one access entry per cluster | ERROR | retired: engine E3019 covers it from aws-cdk-lib 2.268.0 |
|
|
1533
1533
|
| `pf-eks-accessentry-principal-arn-service-linked-role` | AWS::EKS::AccessEntry | An access entry principal cannot be a service-linked role | ERROR | none |
|
|
1534
1534
|
| `pf-eks-accessentry-requires-api-auth-mode` | AWS::EKS::AccessEntry<br>AWS::EKS::Cluster | Access entries need a cluster whose authentication mode includes API | ERROR | none |
|
|
1535
1535
|
| `pf-eks-accessentry-scope-cluster-forbids-namespaces` | AWS::EKS::AccessEntry | A cluster-scoped access policy cannot name namespaces | ERROR | none |
|
|
@@ -1537,7 +1537,7 @@
|
|
|
1537
1537
|
| `pf-eks-accessentry-username-only-standard` | AWS::EKS::AccessEntry | A node-type access entry cannot carry a Username | ERROR | none |
|
|
1538
1538
|
| `pf-eks-accessentry-username-reserved-prefix` | AWS::EKS::AccessEntry | An access entry Username may not start with a prefix EKS reserves | ERROR | none |
|
|
1539
1539
|
| `pf-eks-addon-configuration-values-json` | AWS::EKS::Addon | ConfigurationValues that opens as a JSON object must parse | ERROR | none |
|
|
1540
|
-
| `pf-eks-addon-duplicate-per-cluster` | AWS::EKS::Addon | The same add-on cannot be installed twice on one cluster | ERROR |
|
|
1540
|
+
| `pf-eks-addon-duplicate-per-cluster` | AWS::EKS::Addon | The same add-on cannot be installed twice on one cluster | ERROR | retired: engine E3019 covers it from aws-cdk-lib 2.268.0 |
|
|
1541
1541
|
| `pf-eks-addon-namespace-config-format` | AWS::EKS::Addon | NamespaceConfig.Namespace must be an RFC 1123 DNS label | ERROR | none |
|
|
1542
1542
|
| `pf-eks-addon-service-account-role-account` | AWS::EKS::Addon | An add-on service account role must live in the deploy account | ERROR | none |
|
|
1543
1543
|
| `pf-eks-addon-version-format` | AWS::EKS::Addon | AddonVersion must be of the form vX.Y.Z-eksbuild.N | ERROR | none |
|
|
@@ -1632,7 +1632,7 @@
|
|
|
1632
1632
|
| `pf-elbv2-action-redirect-port-value` | AWS::ElasticLoadBalancingV2::Listener<br>AWS::ElasticLoadBalancingV2::ListenerRule | A redirect port is a port number or #{port} | ERROR | none |
|
|
1633
1633
|
| `pf-elbv2-action-redirect-status-code` | AWS::ElasticLoadBalancingV2::Listener<br>AWS::ElasticLoadBalancingV2::ListenerRule | A redirect answers with HTTP_301 or HTTP_302 | ERROR | none |
|
|
1634
1634
|
| `pf-elbv2-action-session-timeout-range` | AWS::ElasticLoadBalancingV2::Listener<br>AWS::ElasticLoadBalancingV2::ListenerRule | An authentication session lasts between 1 and 604800 seconds | ERROR | none |
|
|
1635
|
-
| `pf-elbv2-alb-subnet-count` | AWS::ElasticLoadBalancingV2::LoadBalancer | Application load balancers need at least two subnets | ERROR |
|
|
1635
|
+
| `pf-elbv2-alb-subnet-count` | AWS::ElasticLoadBalancingV2::LoadBalancer | Application load balancers need at least two subnets | ERROR | retired: engine E3680 covers it from aws-cdk-lib 2.271.0 |
|
|
1636
1636
|
| `pf-elbv2-app-cookie-name` | AWS::ElasticLoadBalancingV2::TargetGroup | app_cookie stickiness requires a cookie name | ERROR | none |
|
|
1637
1637
|
| `pf-elbv2-hc-timeout-interval` | AWS::ElasticLoadBalancingV2::TargetGroup | Health check timeout must be strictly smaller than the interval | ERROR | none |
|
|
1638
1638
|
| `pf-elbv2-lambda-target-protocol` | AWS::ElasticLoadBalancingV2::TargetGroup | Lambda target groups cannot specify Protocol | ERROR | none |
|
|
@@ -1886,7 +1886,7 @@
|
|
|
1886
1886
|
| `pf-glue-classifier-csv-custom-datatype` | AWS::Glue::Classifier | Custom CSV datatypes come from the supported set | ERROR | pending-engine |
|
|
1887
1887
|
| `pf-glue-classifier-csv-custom-datatype-flag` | AWS::Glue::Classifier | ContainsCustomDatatype and CustomDatatypeConfigured travel together | ERROR | none |
|
|
1888
1888
|
| `pf-glue-classifier-csv-quote-symbol` | AWS::Glue::Classifier | The CSV quote symbol differs from the delimiter | ERROR | none |
|
|
1889
|
-
| `pf-glue-classifier-csv-single-char` | AWS::Glue::Classifier | The CSV delimiter and quote symbol are one character each | ERROR |
|
|
1889
|
+
| `pf-glue-classifier-csv-single-char` | AWS::Glue::Classifier | The CSV delimiter and quote symbol are one character each | ERROR | retired: engine F3031, F3033 covers it from aws-cdk-lib 2.268.0 |
|
|
1890
1890
|
| `pf-glue-classifier-grok-pattern-names` | AWS::Glue::Classifier | A grok pattern only names built-in or custom patterns | ERROR | none |
|
|
1891
1891
|
| `pf-glue-classifier-grok-pattern-single-line` | AWS::Glue::Classifier | A grok pattern holds no line break | ERROR | pending-engine |
|
|
1892
1892
|
| `pf-glue-connection-jdbc-credentials` | AWS::Glue::Connection | A JDBC connection needs USERNAME and PASSWORD, or SECRET_ID | ERROR | none |
|
|
@@ -1953,7 +1953,7 @@
|
|
|
1953
1953
|
| `pf-grafana-ws-notification-destinations-enum` | AWS::Grafana::Workspace | NotificationDestinations names SNS | ERROR | pending-engine |
|
|
1954
1954
|
| `pf-grafana-ws-organization-access-requires-ous` | AWS::Grafana::Workspace | Organization-wide account access lists the organizational units | ERROR | none |
|
|
1955
1955
|
| `pf-grafana-ws-saml-idp-metadata-source` | AWS::Grafana::Workspace | A SAML identity provider names exactly one metadata source | ERROR | none |
|
|
1956
|
-
| `pf-iam-identity-policy-no-principal` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Identity policies cannot carry a Principal field | ERROR |
|
|
1956
|
+
| `pf-iam-identity-policy-no-principal` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Identity policies cannot carry a Principal field | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1957
1957
|
| `pf-iam-inline-policy-size` | AWS::IAM::Policy<br>AWS::IAM::RolePolicy<br>AWS::IAM::UserPolicy<br>AWS::IAM::GroupPolicy | Inline policy documents are limited per identity (role 10240 / group 5120 / user 2048 characters) | ERROR | none |
|
|
1958
1958
|
| `pf-iam-instance-profile-single-role` | AWS::IAM::InstanceProfile | An instance profile holds exactly one role | ERROR | none |
|
|
1959
1959
|
| `pf-iam-managed-policy-count` | AWS::IAM::Role<br>AWS::IAM::User<br>AWS::IAM::Group | Managed policies per identity are capped (hard maximums role 25 / user 20 / group 10) | ERROR | none |
|
|
@@ -1964,7 +1964,7 @@
|
|
|
1964
1964
|
| `pf-iam-path-service-role-reserved` | AWS::IAM::Role<br>AWS::IAM::User<br>AWS::IAM::Group<br>AWS::IAM::InstanceProfile<br>AWS::IAM::ManagedPolicy | The /aws-service-role/ path is reserved | ERROR | none |
|
|
1965
1965
|
| `pf-iam-permissions-boundary-policy-arn` | AWS::IAM::Role<br>AWS::IAM::User | A permissions boundary is a policy ARN | ERROR | none |
|
|
1966
1966
|
| `pf-iam-policy-action-format` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Actions must carry a service prefix | ERROR | none |
|
|
1967
|
-
| `pf-iam-policy-action-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Every statement needs an Action or NotAction | ERROR |
|
|
1967
|
+
| `pf-iam-policy-action-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Every statement needs an Action or NotAction | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1968
1968
|
| `pf-iam-policy-action-single-colon` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | An action carries exactly one colon | ERROR | none |
|
|
1969
1969
|
| `pf-iam-policy-action-vendor-wildcard` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | The service prefix of an action takes no wildcard | ERROR | none |
|
|
1970
1970
|
| `pf-iam-policy-arn-partition` | AWS::IAM::Role<br>AWS::IAM::User<br>AWS::IAM::Group | Attached policy ARNs live in the deploy partition | ERROR | none |
|
|
@@ -1974,23 +1974,23 @@
|
|
|
1974
1974
|
| `pf-iam-policy-condition-ip-value` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | IpAddress condition operators need an IP address or CIDR | ERROR | none |
|
|
1975
1975
|
| `pf-iam-policy-condition-null-ifexists` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Null does not take the IfExists suffix | ERROR | none |
|
|
1976
1976
|
| `pf-iam-policy-condition-numeric-value` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Numeric condition operators need a numeric value | ERROR | none |
|
|
1977
|
-
| `pf-iam-policy-condition-operator` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Condition operators come from a closed grammar | ERROR |
|
|
1978
|
-
| `pf-iam-policy-condition-value-type` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Condition values are strings, not nested objects | ERROR |
|
|
1979
|
-
| `pf-iam-policy-duplicate-sid` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Statement IDs must be unique within a policy | ERROR |
|
|
1980
|
-
| `pf-iam-policy-effect-case` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Effect is case-sensitive Allow or Deny | ERROR |
|
|
1981
|
-
| `pf-iam-policy-effect-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Every statement needs an Effect | ERROR |
|
|
1982
|
-
| `pf-iam-policy-exclusive-fields` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Action/NotAction and Resource/NotResource are exclusive pairs | ERROR |
|
|
1977
|
+
| `pf-iam-policy-condition-operator` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Condition operators come from a closed grammar | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1978
|
+
| `pf-iam-policy-condition-value-type` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Condition values are strings, not nested objects | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1979
|
+
| `pf-iam-policy-duplicate-sid` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Statement IDs must be unique within a policy | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1980
|
+
| `pf-iam-policy-effect-case` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Effect is case-sensitive Allow or Deny | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1981
|
+
| `pf-iam-policy-effect-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Every statement needs an Effect | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1982
|
+
| `pf-iam-policy-exclusive-fields` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Action/NotAction and Resource/NotResource are exclusive pairs | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1983
1983
|
| `pf-iam-policy-resource-arn-segments` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | A resource ARN carries six colon-separated segments | ERROR | none |
|
|
1984
|
-
| `pf-iam-policy-resource-format` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Resources must be ARNs or * | ERROR |
|
|
1984
|
+
| `pf-iam-policy-resource-format` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Resources must be ARNs or * | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1985
1985
|
| `pf-iam-policy-resource-global-service-arn` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | S3, IAM and Route 53 ARNs carry no region | ERROR | none |
|
|
1986
1986
|
| `pf-iam-policy-resource-partition` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | Resource ARNs live in the deploy partition | ERROR | none |
|
|
1987
|
-
| `pf-iam-policy-resource-service-wildcard` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | The service segment of a resource ARN takes no wildcard | ERROR |
|
|
1988
|
-
| `pf-iam-policy-sid-format` | AWS::IAM::Role<br>AWS::IAM::User<br>AWS::IAM::Group<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Policy statement Sid must be alphanumeric | ERROR |
|
|
1989
|
-
| `pf-iam-policy-statement-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | A policy document needs a non-empty Statement | ERROR |
|
|
1990
|
-
| `pf-iam-policy-statement-resource-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Identity policy statements need Resource or NotResource | ERROR |
|
|
1991
|
-
| `pf-iam-policy-statement-unknown-field` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | A statement holds only the documented policy elements | ERROR |
|
|
1992
|
-
| `pf-iam-policy-unknown-toplevel-field` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | A policy document holds only Version, Id and Statement | ERROR |
|
|
1993
|
-
| `pf-iam-policy-version` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Policy Version must be 2012-10-17 or 2008-10-17 | ERROR |
|
|
1987
|
+
| `pf-iam-policy-resource-service-wildcard` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | The service segment of a resource ARN takes no wildcard | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1988
|
+
| `pf-iam-policy-sid-format` | AWS::IAM::Role<br>AWS::IAM::User<br>AWS::IAM::Group<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Policy statement Sid must be alphanumeric | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1989
|
+
| `pf-iam-policy-statement-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | A policy document needs a non-empty Statement | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1990
|
+
| `pf-iam-policy-statement-resource-required` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Identity policy statements need Resource or NotResource | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1991
|
+
| `pf-iam-policy-statement-unknown-field` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | A statement holds only the documented policy elements | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1992
|
+
| `pf-iam-policy-unknown-toplevel-field` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy<br>AWS::IAM::User<br>AWS::IAM::Group | A policy document holds only Version, Id and Statement | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1993
|
+
| `pf-iam-policy-version` | AWS::IAM::Role<br>AWS::IAM::Policy<br>AWS::IAM::ManagedPolicy | Policy Version must be 2012-10-17 or 2008-10-17 | ERROR | retired: engine E3510 covers it from aws-cdk-lib 2.268.0 |
|
|
1994
1994
|
| `pf-iam-slr-service-name-format` | AWS::IAM::ServiceLinkedRole | AWSServiceName is a service principal | ERROR | none |
|
|
1995
1995
|
| `pf-iam-trust-policy-action-sts-only` | AWS::IAM::Role | A trust policy allows only the STS AssumeRole family | ERROR | none |
|
|
1996
1996
|
| `pf-iam-trust-policy-aws-principal-format` | AWS::IAM::Role | An AWS principal is an account id or an IAM ARN | ERROR | none |
|
|
@@ -2200,7 +2200,7 @@
|
|
|
2200
2200
|
| `pf-lambda-tenancy-no-function-url` | AWS::Lambda::Function | A tenant-isolated function cannot have a function URL | ERROR | none |
|
|
2201
2201
|
| `pf-lambda-tenancy-no-provisioned-concurrency` | AWS::Lambda::Function | A tenant-isolated function cannot use provisioned concurrency | ERROR | none |
|
|
2202
2202
|
| `pf-lambda-tenancy-no-snapstart` | AWS::Lambda::Function | A tenant-isolated function cannot use SnapStart | ERROR | pending-engine |
|
|
2203
|
-
| `pf-lambda-timeout-max` | AWS::Lambda::Function | Timeout tops out at 900 seconds | ERROR |
|
|
2203
|
+
| `pf-lambda-timeout-max` | AWS::Lambda::Function | Timeout tops out at 900 seconds | ERROR | retired: engine E3717 covers it from aws-cdk-lib 2.271.0 |
|
|
2204
2204
|
| `pf-lambda-tracing-mode-enum` | AWS::Lambda::Function | TracingConfig.Mode takes Active or PassThrough | ERROR | pending-engine |
|
|
2205
2205
|
| `pf-lambda-url-auth-type-enum` | AWS::Lambda::Url | AuthType is AWS_IAM or NONE | ERROR | pending-engine |
|
|
2206
2206
|
| `pf-lambda-url-cors-allow-methods-wildcard-mix` | AWS::Lambda::Url | CORS methods are a wildcard or a list, not both | ERROR | none |
|
|
@@ -2459,7 +2459,7 @@
|
|
|
2459
2459
|
| `pf-pipes-target-parameters` | AWS::Pipes::Pipe | Target parameters must match the target's resource type | ERROR | none |
|
|
2460
2460
|
| `pf-pipes-target-sns-fifo` | AWS::Pipes::Pipe | A FIFO SNS topic cannot be a pipe target | ERROR | none |
|
|
2461
2461
|
| `pf-rds-backtrack` | AWS::RDS::DBCluster | Backtrack only works on aurora-mysql, with a window of at most 259200 seconds | ERROR | none |
|
|
2462
|
-
| `pf-rds-backup-retention-range` | AWS::RDS::DBInstance | BackupRetentionPeriod must be at most 35 days | ERROR |
|
|
2462
|
+
| `pf-rds-backup-retention-range` | AWS::RDS::DBInstance | BackupRetentionPeriod must be at most 35 days | ERROR | retired: engine E3719 covers it from aws-cdk-lib 2.271.0 |
|
|
2463
2463
|
| `pf-rds-backup-window-duration` | AWS::RDS::DBInstance | The backup window must be at least 30 minutes | ERROR | none |
|
|
2464
2464
|
| `pf-rds-backup-window-format` | AWS::RDS::DBInstance | PreferredBackupWindow must be hh24:mi-hh24:mi | ERROR | none |
|
|
2465
2465
|
| `pf-rds-character-set-engine` | AWS::RDS::DBInstance | CharacterSetName is only accepted by Oracle engines | ERROR | none |
|
|
@@ -2564,7 +2564,7 @@
|
|
|
2564
2564
|
| `pf-route53-alias-target-outside-zone` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | An alias into a hosted zone of this template must target a name inside that zone | ERROR | none |
|
|
2565
2565
|
| `pf-route53-apex-cname` | AWS::Route53::RecordSet<br>AWS::Route53::HostedZone | A CNAME record is not permitted at the zone apex | ERROR | none |
|
|
2566
2566
|
| `pf-route53-caa-tag-enum` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A CAA tag must be issue, issuewild or iodef | ERROR | none |
|
|
2567
|
-
| `pf-route53-cidr-collection-id-format` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | CidrRoutingConfig.CollectionId must be a UUID | ERROR |
|
|
2567
|
+
| `pf-route53-cidr-collection-id-format` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | CidrRoutingConfig.CollectionId must be a UUID | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.269.0 |
|
|
2568
2568
|
| `pf-route53-cidr-location-name-format` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup<br>AWS::Route53::CidrCollection | CidrRoutingConfig.LocationName is limited to 16 characters of [0-9A-Za-z_-*] | ERROR | none |
|
|
2569
2569
|
| `pf-route53-cidr-private-zone` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | IP-based routing is not available in a private hosted zone | ERROR | none |
|
|
2570
2570
|
| `pf-route53-cidr-same-collection-in-group` | AWS::Route53::RecordSetGroup | IP-based record sets sharing a name and type must use one CIDR collection | ERROR | none |
|
|
@@ -2591,13 +2591,13 @@
|
|
|
2591
2591
|
| `pf-route53-geolocation-continent-code-enum` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoLocation.ContinentCode must be one of the seven two-letter continent codes | ERROR | none |
|
|
2592
2592
|
| `pf-route53-geolocation-country-code-iso` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoLocation.CountryCode must be an ISO 3166-1 alpha-2 country code | ERROR | none |
|
|
2593
2593
|
| `pf-route53-geolocation-duplicate-location` | AWS::Route53::RecordSetGroup | Two geolocation record sets cannot claim the same location | ERROR | none |
|
|
2594
|
-
| `pf-route53-geolocation-exclusive` | AWS::Route53::RecordSet | GeoLocation cannot specify both ContinentCode and CountryCode | ERROR |
|
|
2594
|
+
| `pf-route53-geolocation-exclusive` | AWS::Route53::RecordSet | GeoLocation cannot specify both ContinentCode and CountryCode | ERROR | retired: engine F3018 covers it from aws-cdk-lib 2.269.0 |
|
|
2595
2595
|
| `pf-route53-geolocation-subdivision-code-value` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoLocation.SubdivisionCode must be a US state or territory code | ERROR | none |
|
|
2596
2596
|
| `pf-route53-geolocation-subdivision-requires-us` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoLocation.SubdivisionCode is only valid with CountryCode US | ERROR | none |
|
|
2597
2597
|
| `pf-route53-geolocation-unsupported-country` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | Four ISO country codes have no Route 53 geolocation coverage | ERROR | none |
|
|
2598
2598
|
| `pf-route53-geoproximity-awsregion-value` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoProximityLocation.AWSRegion must be an existing AWS Region | ERROR | none |
|
|
2599
|
-
| `pf-route53-geoproximity-bias-range` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoProximityLocation.Bias must be -99 to 99 | ERROR |
|
|
2600
|
-
| `pf-route53-geoproximity-exclusive` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoProximityLocation takes exactly one of AWSRegion, LocalZoneGroup or Coordinates | ERROR |
|
|
2599
|
+
| `pf-route53-geoproximity-bias-range` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoProximityLocation.Bias must be -99 to 99 | ERROR | retired: engine F3034 covers it from aws-cdk-lib 2.269.0 |
|
|
2600
|
+
| `pf-route53-geoproximity-exclusive` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoProximityLocation takes exactly one of AWSRegion, LocalZoneGroup or Coordinates | ERROR | retired: engine F3018 covers it from aws-cdk-lib 2.269.0 |
|
|
2601
2601
|
| `pf-route53-geoproximity-localzonegroup-format` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | GeoProximityLocation.LocalZoneGroup must be a Local Zone group name | ERROR | none |
|
|
2602
2602
|
| `pf-route53-geoproximity-max-30-same-name-type` | AWS::Route53::RecordSetGroup | A geoproximity group may hold at most 30 record sets per name and type | ERROR | none |
|
|
2603
2603
|
| `pf-route53-healthcheck-alarm-extended-statistic` | AWS::Route53::HealthCheck<br>AWS::CloudWatch::Alarm | A CloudWatch alarm health check cannot watch an alarm on an extended statistic | ERROR | none |
|
|
@@ -2652,7 +2652,7 @@
|
|
|
2652
2652
|
| `pf-route53-keysigningkey-kms-keyspec` | AWS::Route53::KeySigningKey<br>AWS::KMS::Key | The DNSSEC signing key must be an ECC_NIST_P256 key used for SIGN_VERIFY | ERROR | none |
|
|
2653
2653
|
| `pf-route53-keysigningkey-kmsarn-unique-per-zone` | AWS::Route53::KeySigningKey | Two key signing keys in one hosted zone cannot share a KMS key | ERROR | none |
|
|
2654
2654
|
| `pf-route53-keysigningkey-max-2-per-zone` | AWS::Route53::KeySigningKey | A hosted zone can hold at most two key signing keys | ERROR | none |
|
|
2655
|
-
| `pf-route53-keysigningkey-name-unique-per-zone` | AWS::Route53::KeySigningKey | Two key signing keys in one hosted zone cannot share a name | ERROR |
|
|
2655
|
+
| `pf-route53-keysigningkey-name-unique-per-zone` | AWS::Route53::KeySigningKey | Two key signing keys in one hosted zone cannot share a name | ERROR | retired: engine E3019 covers it from aws-cdk-lib 2.268.0 |
|
|
2656
2656
|
| `pf-route53-keysigningkey-status-enum` | AWS::Route53::KeySigningKey | A key signing key is either ACTIVE or INACTIVE | ERROR | pending-engine |
|
|
2657
2657
|
| `pf-route53-latency-one-record-per-region` | AWS::Route53::RecordSetGroup | A latency group may hold only one record set per Region | ERROR | none |
|
|
2658
2658
|
| `pf-route53-latency-region-enum` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | The latency Region must be an existing AWS Region | ERROR | none |
|
|
@@ -2667,7 +2667,7 @@
|
|
|
2667
2667
|
| `pf-route53-naptr-regexp-replacement-exclusive` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A NAPTR value carries either a regexp or a replacement, never both | ERROR | none |
|
|
2668
2668
|
| `pf-route53-naptr-service-quotes` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | The NAPTR service field must be quoted | ERROR | none |
|
|
2669
2669
|
| `pf-route53-private-zone-health-check-policy` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A record with no routing policy cannot reference a health check | ERROR | none |
|
|
2670
|
-
| `pf-route53-record-comment-length` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | Comment is limited to 256 characters | ERROR |
|
|
2670
|
+
| `pf-route53-record-comment-length` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | Comment is limited to 256 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.269.0 |
|
|
2671
2671
|
| `pf-route53-record-name-charset` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A record name cannot contain a space | ERROR | none |
|
|
2672
2672
|
| `pf-route53-record-name-label-length` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | Each label of a record name is limited to 63 bytes | ERROR | none |
|
|
2673
2673
|
| `pf-route53-record-name-punycode` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A record name must be ASCII (IDNs go in as Punycode) | ERROR | none |
|
|
@@ -2678,10 +2678,10 @@
|
|
|
2678
2678
|
| `pf-route53-record-value-source` | AWS::Route53::RecordSet | A record set needs AliasTarget or the full TTL+ResourceRecords pair | ERROR | none |
|
|
2679
2679
|
| `pf-route53-recordsetgroup-max-1000-elements` | AWS::Route53::RecordSetGroup | One RecordSetGroup may carry at most 1000 ResourceRecords values in total | ERROR | none |
|
|
2680
2680
|
| `pf-route53-recordsetgroup-max-32000-chars` | AWS::Route53::RecordSetGroup | One RecordSetGroup may carry at most 32000 characters of record data | ERROR | none |
|
|
2681
|
-
| `pf-route53-resourcerecord-value-length` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A single ResourceRecords value is limited to 4000 characters | ERROR |
|
|
2681
|
+
| `pf-route53-resourcerecord-value-length` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A single ResourceRecords value is limited to 4000 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.269.0 |
|
|
2682
2682
|
| `pf-route53-resourcerecords-max-400` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | A record set may hold at most 400 ResourceRecords values | ERROR | none |
|
|
2683
2683
|
| `pf-route53-routing-policy-exclusive` | AWS::Route53::RecordSet | A record set can use only one routing policy | ERROR | none |
|
|
2684
|
-
| `pf-route53-set-identifier-length` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | SetIdentifier must be 1-128 characters | ERROR |
|
|
2684
|
+
| `pf-route53-set-identifier-length` | AWS::Route53::RecordSet<br>AWS::Route53::RecordSetGroup | SetIdentifier must be 1-128 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.269.0 |
|
|
2685
2685
|
| `pf-route53-set-identifier-pairing` | AWS::Route53::RecordSet | SetIdentifier and a routing policy must appear together | ERROR | none |
|
|
2686
2686
|
| `pf-route53-set-identifier-unique-in-group` | AWS::Route53::RecordSetGroup | SetIdentifier must be unique among record sets sharing a name and type | ERROR | none |
|
|
2687
2687
|
| `pf-route53-simple-and-policy-same-name-type` | AWS::Route53::RecordSetGroup | A simple record set cannot coexist with a routing-policy record set of the same name and type | ERROR | none |
|
|
@@ -2833,7 +2833,7 @@
|
|
|
2833
2833
|
| `pf-s3-storagelensgroup-object-age-order` | AWS::S3::StorageLensGroup | MatchObjectAge DaysGreaterThan must be smaller than DaysLessThan | ERROR | none |
|
|
2834
2834
|
| `pf-s3-storagelensgroup-object-size-order` | AWS::S3::StorageLensGroup | MatchObjectSize BytesGreaterThan must be smaller than BytesLessThan | ERROR | none |
|
|
2835
2835
|
| `pf-s3-versioning-suspended-with-replication` | AWS::S3::Bucket | A replicating bucket must keep versioning enabled | ERROR | none |
|
|
2836
|
-
| `pf-s3-website-empty-condition` | AWS::S3::Bucket | A RoutingRuleCondition needs a key prefix or an HTTP error code | ERROR |
|
|
2836
|
+
| `pf-s3-website-empty-condition` | AWS::S3::Bucket | A RoutingRuleCondition needs a key prefix or an HTTP error code | ERROR | retired: engine F3017 covers it from aws-cdk-lib 2.268.0 |
|
|
2837
2837
|
| `pf-s3-website-empty-redirect-rule` | AWS::S3::Bucket | A RedirectRule must carry at least one element | ERROR | none |
|
|
2838
2838
|
| `pf-s3-website-redirect-exclusive` | AWS::S3::Bucket | RedirectAllRequestsTo excludes every other website setting | ERROR | none |
|
|
2839
2839
|
| `pf-s3-website-replace-key-exclusive` | AWS::S3::Bucket | ReplaceKeyWith and ReplaceKeyPrefixWith are mutually exclusive | ERROR | none |
|
|
@@ -2873,8 +2873,8 @@
|
|
|
2873
2873
|
| `pf-secretsmanager-secret-name` | AWS::SecretsManager::Secret | A secret Name may only contain ASCII letters, digits and -/_+=.@! (no spaces, colons, hashes or non-ASCII text) | ERROR | none |
|
|
2874
2874
|
| `pf-secretsmanager-secret-string-exclusive` | AWS::SecretsManager::Secret | SecretString and GenerateSecretString cannot both be set on a secret | ERROR | none |
|
|
2875
2875
|
| `pf-secretsmanager-target-attachment` | AWS::SecretsManager::SecretTargetAttachment | SecretTargetAttachment needs a TargetType from the documented list and a secret whose value is a JSON object (SecretString JSON or GenerateSecretString with SecretStringTemplate) | ERROR | none |
|
|
2876
|
-
| `pf-servicediscovery-http-namespace-name-charset` | AWS::ServiceDiscovery::HttpNamespace | An HTTP namespace name must be printable ASCII | ERROR |
|
|
2877
|
-
| `pf-servicediscovery-http-namespace-name-length` | AWS::ServiceDiscovery::HttpNamespace | An HTTP namespace name is limited to 1024 characters | ERROR |
|
|
2876
|
+
| `pf-servicediscovery-http-namespace-name-charset` | AWS::ServiceDiscovery::HttpNamespace | An HTTP namespace name must be printable ASCII | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.269.0 |
|
|
2877
|
+
| `pf-servicediscovery-http-namespace-name-length` | AWS::ServiceDiscovery::HttpNamespace | An HTTP namespace name is limited to 1024 characters | ERROR | retired: engine F3031, F3033 covers it from aws-cdk-lib 2.269.0 |
|
|
2878
2878
|
| `pf-servicediscovery-instance-a-requires-ipv4` | AWS::ServiceDiscovery::Instance | An A record service needs AWS_INSTANCE_IPV4 on every instance | ERROR | none |
|
|
2879
2879
|
| `pf-servicediscovery-instance-aaaa-requires-ipv6` | AWS::ServiceDiscovery::Instance | An AAAA record service needs AWS_INSTANCE_IPV6 on every instance | ERROR | none |
|
|
2880
2880
|
| `pf-servicediscovery-instance-alias-requires-weighted` | AWS::ServiceDiscovery::Instance | An ALIAS instance needs a WEIGHTED service | ERROR | none |
|
|
@@ -2888,18 +2888,18 @@
|
|
|
2888
2888
|
| `pf-servicediscovery-instance-ec2-id-http-namespace-only` | AWS::ServiceDiscovery::Instance | AWS_EC2_INSTANCE_ID only works in an HTTP namespace | ERROR | none |
|
|
2889
2889
|
| `pf-servicediscovery-instance-healthcheck-forbids-nonroutable-ipv4` | AWS::ServiceDiscovery::Instance | A health-checked service rejects a non-routable AWS_INSTANCE_IPV4 | ERROR | none |
|
|
2890
2890
|
| `pf-servicediscovery-instance-healthcheck-requires-port` | AWS::ServiceDiscovery::Instance | An instance of a health-checked service needs AWS_INSTANCE_PORT | ERROR | none |
|
|
2891
|
-
| `pf-servicediscovery-instance-id-length` | AWS::ServiceDiscovery::Instance | An instance id is at most 64 characters | ERROR |
|
|
2892
|
-
| `pf-servicediscovery-instance-id-pattern` | AWS::ServiceDiscovery::Instance | An instance id takes a restricted character set | ERROR |
|
|
2891
|
+
| `pf-servicediscovery-instance-id-length` | AWS::ServiceDiscovery::Instance | An instance id is at most 64 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.271.0 |
|
|
2892
|
+
| `pf-servicediscovery-instance-id-pattern` | AWS::ServiceDiscovery::Instance | An instance id takes a restricted character set | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.271.0 |
|
|
2893
2893
|
| `pf-servicediscovery-instance-init-health-status-enum` | AWS::ServiceDiscovery::Instance | AWS_INIT_HEALTH_STATUS is HEALTHY or UNHEALTHY | ERROR | none |
|
|
2894
2894
|
| `pf-servicediscovery-instance-srv-requires-ip` | AWS::ServiceDiscovery::Instance | An SRV record service needs an IP address on every instance | ERROR | none |
|
|
2895
2895
|
| `pf-servicediscovery-instance-srv-requires-port` | AWS::ServiceDiscovery::Instance | An SRV record service needs AWS_INSTANCE_PORT on every instance | ERROR | none |
|
|
2896
2896
|
| `pf-servicediscovery-instance-unknown-aws-attribute` | AWS::ServiceDiscovery::Instance | The AWS_ attribute prefix is reserved | ERROR | none |
|
|
2897
|
-
| `pf-servicediscovery-namespace-description-length` | AWS::ServiceDiscovery::HttpNamespace<br>AWS::ServiceDiscovery::PublicDnsNamespace<br>AWS::ServiceDiscovery::PrivateDnsNamespace | A namespace description is limited to 1024 characters | ERROR |
|
|
2898
|
-
| `pf-servicediscovery-namespace-soa-ttl-range` | AWS::ServiceDiscovery::PublicDnsNamespace<br>AWS::ServiceDiscovery::PrivateDnsNamespace | The SOA record TTL of a DNS namespace may not exceed 2147483647 | ERROR |
|
|
2899
|
-
| `pf-servicediscovery-private-namespace-name-charset` | AWS::ServiceDiscovery::PrivateDnsNamespace | A private DNS namespace name must be printable ASCII | ERROR |
|
|
2900
|
-
| `pf-servicediscovery-private-namespace-name-length` | AWS::ServiceDiscovery::PrivateDnsNamespace | A private DNS namespace name is limited to 253 characters | ERROR |
|
|
2897
|
+
| `pf-servicediscovery-namespace-description-length` | AWS::ServiceDiscovery::HttpNamespace<br>AWS::ServiceDiscovery::PublicDnsNamespace<br>AWS::ServiceDiscovery::PrivateDnsNamespace | A namespace description is limited to 1024 characters | ERROR | retired: engine F3033 covers it from aws-cdk-lib 2.269.0 |
|
|
2898
|
+
| `pf-servicediscovery-namespace-soa-ttl-range` | AWS::ServiceDiscovery::PublicDnsNamespace<br>AWS::ServiceDiscovery::PrivateDnsNamespace | The SOA record TTL of a DNS namespace may not exceed 2147483647 | ERROR | retired: engine F3034 covers it from aws-cdk-lib 2.268.0 |
|
|
2899
|
+
| `pf-servicediscovery-private-namespace-name-charset` | AWS::ServiceDiscovery::PrivateDnsNamespace | A private DNS namespace name must be printable ASCII | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
2900
|
+
| `pf-servicediscovery-private-namespace-name-length` | AWS::ServiceDiscovery::PrivateDnsNamespace | A private DNS namespace name is limited to 253 characters | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
2901
2901
|
| `pf-servicediscovery-public-namespace-name-length` | AWS::ServiceDiscovery::PublicDnsNamespace | A public DNS namespace name is limited to 253 characters | ERROR | none |
|
|
2902
|
-
| `pf-servicediscovery-public-namespace-name-pattern` | AWS::ServiceDiscovery::PublicDnsNamespace | A public DNS namespace name must be a multi-label DNS domain | ERROR |
|
|
2902
|
+
| `pf-servicediscovery-public-namespace-name-pattern` | AWS::ServiceDiscovery::PublicDnsNamespace | A public DNS namespace name must be a multi-label DNS domain | ERROR | retired: engine F3031 covers it from aws-cdk-lib 2.268.0 |
|
|
2903
2903
|
| `pf-servicediscovery-service-attributes-max-entries` | AWS::ServiceDiscovery::Service | A service may carry at most 30 service attributes | ERROR | cfn-schema |
|
|
2904
2904
|
| `pf-servicediscovery-service-cname-requires-weighted` | AWS::ServiceDiscovery::Service | A CNAME service record requires the WEIGHTED routing policy | ERROR | none |
|
|
2905
2905
|
| `pf-servicediscovery-service-cname-with-healthcheck` | AWS::ServiceDiscovery::Service | A CNAME service cannot carry a Route 53 health check | ERROR | none |
|
|
@@ -3086,7 +3086,7 @@
|
|
|
3086
3086
|
| `pf-wafv2-label-syntax` | AWS::WAFv2::WebACL<br>AWS::WAFv2::RuleGroup | Rule labels and label match keys must follow the label syntax (no reserved words, no empty components, at most 8 components of 128 chars, no labels on rule group references) | ERROR | none |
|
|
3087
3087
|
| `pf-wafv2-logging-destination` | AWS::WAFv2::LoggingConfiguration | Exactly one log destination whose name starts with aws-waf-logs-, in the web ACL account and region | ERROR | none |
|
|
3088
3088
|
| `pf-wafv2-logging-filter-condition` | AWS::WAFv2::LoggingConfiguration | Each logging filter condition is exactly one of ActionCondition / LabelNameCondition | ERROR | none |
|
|
3089
|
-
| `pf-wafv2-logging-unique` | AWS::WAFv2::LoggingConfiguration | One LoggingConfiguration per web ACL in a template | ERROR |
|
|
3089
|
+
| `pf-wafv2-logging-unique` | AWS::WAFv2::LoggingConfiguration | One LoggingConfiguration per web ACL in a template | ERROR | retired: engine E3019 covers it from aws-cdk-lib 2.268.0 |
|
|
3090
3090
|
| `pf-wafv2-managed-rule-group` | AWS::WAFv2::WebACL | Managed rule group statements: known AWS group names, matching and complete ManagedRuleGroupConfigs, consistent overrides and response inspection | ERROR | none |
|
|
3091
3091
|
| `pf-wafv2-metric-name-reserved` | AWS::WAFv2::WebACL<br>AWS::WAFv2::RuleGroup | MetricName Default_Action is reserved | ERROR | none |
|
|
3092
3092
|
| `pf-wafv2-name-unique` | AWS::WAFv2::WebACL<br>AWS::WAFv2::RuleGroup<br>AWS::WAFv2::IPSet<br>AWS::WAFv2::RegexPatternSet | Two WAFv2 entities of the same type, Scope and Name in one template | ERROR | none |
|
package/lib/index.d.ts
CHANGED
|
@@ -29,6 +29,11 @@ export interface PreflightOptions {
|
|
|
29
29
|
* schema violations like `F3034`. This is the workaround for the CDK
|
|
30
30
|
* behavior where all built-in findings are downgraded to warnings.
|
|
31
31
|
*
|
|
32
|
+
* Since the engine's own errors then fail synthesis, bundled rules that the
|
|
33
|
+
* running engine already covers are skipped instead of being reported twice.
|
|
34
|
+
* The same happens with `enforce: false`, and when the app sets the context
|
|
35
|
+
* `@aws-cdk/core:validateAgainstDefaultRules: true`.
|
|
36
|
+
*
|
|
32
37
|
* Only effective in enforce mode (the default).
|
|
33
38
|
*
|
|
34
39
|
* @default false
|
package/lib/index.js
CHANGED
|
@@ -17,7 +17,7 @@ const rules_generated_1 = require("./rules.generated");
|
|
|
17
17
|
* Preflight.apply(app);
|
|
18
18
|
*/
|
|
19
19
|
class Preflight {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.176" };
|
|
21
21
|
/**
|
|
22
22
|
* Register the cdk-preflight rules on an App or Stage.
|
|
23
23
|
*/
|
|
@@ -30,11 +30,20 @@ class Preflight {
|
|
|
30
30
|
if (unknown.length > 0) {
|
|
31
31
|
throw new Error(`cdk-preflight: unknown rule id(s) in exclude: ${unknown.join(', ')}`);
|
|
32
32
|
}
|
|
33
|
+
const enforce = options.enforce ?? true;
|
|
34
|
+
const strict = options.strict ?? false;
|
|
35
|
+
// meta.yaml#supersededBy のルールは、このエンジンが同じ違反を自力で見つける。省くのは
|
|
36
|
+
// 省いても止まり方が変わらないときだけ: observe(どちらも警告)、strict(組み込みの
|
|
37
|
+
// ERROR/FATAL で止まる)、CDK 自身が組み込みを格下げしない設定のとき。既定の enforce では
|
|
38
|
+
// CDK が組み込みの ERROR/FATAL を警告に落とすので、省くと synth が通ってしまう。
|
|
39
|
+
const engineBlocks = !enforce || strict || cdkKeepsDefaultRuleErrors(scope);
|
|
40
|
+
const version = engineBlocks ? (0, enforce_1.engineVersion)() : undefined;
|
|
33
41
|
const selected = rules_generated_1.BUNDLED_RULES
|
|
34
42
|
.filter((r) => (options.includeUpstreamPending ?? true) || r.upstream !== 'pending-engine')
|
|
35
|
-
.filter((r) => !exclude.includes(r.id))
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
.filter((r) => !exclude.includes(r.id))
|
|
44
|
+
.filter((r) => !(0, enforce_1.isSuperseded)(r, version));
|
|
45
|
+
if (enforce) {
|
|
46
|
+
aws_cdk_lib_1.Validations.of(scope).addPlugins(new enforce_1.PreflightEnforcePlugin(selected, strict));
|
|
38
47
|
(0, enforce_1.installEnforceGate)(scope);
|
|
39
48
|
}
|
|
40
49
|
else {
|
|
@@ -50,4 +59,13 @@ class Preflight {
|
|
|
50
59
|
constructor() { }
|
|
51
60
|
}
|
|
52
61
|
exports.Preflight = Preflight;
|
|
53
|
-
|
|
62
|
+
/**
|
|
63
|
+
* CDK が組み込みエンジンの ERROR/FATAL を警告に落とさない設定か。判定は aws-cdk-lib 2.271.0 の
|
|
64
|
+
* synthesis-validation と同じ: context `@aws-cdk/core:validateAgainstDefaultRules` が false 以外で
|
|
65
|
+
* 設定されていて、かつ組み込みの自動登録が `CDK_VALIDATION=false` で止められていないこと。
|
|
66
|
+
*/
|
|
67
|
+
function cdkKeepsDefaultRuleErrors(scope) {
|
|
68
|
+
const raw = scope.node.tryGetContext('@aws-cdk/core:validateAgainstDefaultRules');
|
|
69
|
+
return raw !== undefined && raw !== false && raw !== 'false' && process.env.CDK_VALIDATION !== 'false';
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUFpRDtBQUVqRCwrQ0FBaUk7QUFDakksdURBQWtEO0FBNkRsRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBYSxTQUFTOztJQUNwQjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBaUIsRUFBRSxVQUE0QixFQUFFO1FBQ25FLElBQUksQ0FBQyxtQkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQywrQkFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFDdkMsd0RBQXdEO1FBQ3hELG1EQUFtRDtRQUNuRCwyREFBMkQ7UUFDM0Qsc0RBQXNEO1FBQ3RELE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxJQUFJLE1BQU0sSUFBSSx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RSxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUEsdUJBQWEsR0FBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQUcsK0JBQWE7YUFDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLGdCQUFnQixDQUFDO2FBQzFGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBQSxzQkFBWSxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTVDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWix5QkFBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxnQ0FBc0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvRSxJQUFBLDRCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04seUJBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUEsNkJBQW1CLEVBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE9BQU87UUFDbkIsT0FBTywrQkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxnQkFBdUIsQ0FBQzs7QUF6QzFCLDhCQTBDQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHlCQUF5QixDQUFDLEtBQWlCO0lBQ2xELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDbEYsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUM7QUFDekcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWdlLCBWYWxpZGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGVuZ2luZVZlcnNpb24sIGluc3RhbGxFbmZvcmNlR2F0ZSwgaXNTdXBlcnNlZGVkLCBvYnNlcnZlUGx1Z2luQ2FjaGVkLCBQcmVmbGlnaHRFbmZvcmNlUGx1Z2luIH0gZnJvbSAnLi9wcml2YXRlL2VuZm9yY2UnO1xuaW1wb3J0IHsgQlVORExFRF9SVUxFUyB9IGZyb20gJy4vcnVsZXMuZ2VuZXJhdGVkJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgUHJlZmxpZ2h0LmFwcGx5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVmbGlnaHRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJ1bGUgaWRzIHRvIGRpc2FibGUgKHNlZSBgUHJlZmxpZ2h0LnJ1bGVJZHMoKWAgb3IgZG9jcy9ydWxlcy5tZCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIGJ1bmRsZWQgcnVsZXMgYXJlIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRmFpbCBzeW50aGVzaXMgd2hlbiBhIGJ1bmRsZWQgcnVsZSBpcyB2aW9sYXRlZC5cbiAgICpcbiAgICogSW4gdGhlIGRlZmF1bHQgKGVuZm9yY2UpIG1vZGUsIGNkay1wcmVmbGlnaHQgZXZhbHVhdGVzIGl0cyBydWxlcyB3aXRoIGl0c1xuICAgKiBvd24gdmFsaWRhdGlvbiBwbHVnaW4gYW5kIGEgdmlvbGF0aW9uIG1ha2VzIGBjZGsgc3ludGhgIGZhaWwg4oCUIHRoZSB3aG9sZVxuICAgKiBwb2ludCBvZiBwcmVmbGlnaHQgY2hlY2tzIGlzIHRoYXQgYSB0ZW1wbGF0ZSBrbm93biB0byBmYWlsIGF0IGRlcGxveSB0aW1lXG4gICAqIG5ldmVyIGxlYXZlcyB5b3VyIG1hY2hpbmUuIFNldCBgZW5mb3JjZTogZmFsc2VgIHRvIG9ic2VydmUgZmlyc3Q6IGZpbmRpbmdzXG4gICAqIGFyZSB0aGVuIHJlcG9ydGVkIHRocm91Z2ggdGhlIENESyBidWlsdC1pbiBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0b3IgYW5kXG4gICAqIHN1cmZhY2UgYXMgc3ludGggd2FybmluZ3Mgd2l0aCBjb25zdHJ1Y3QgdHJhY2VzLCB3aGljaCBjYW4gYmUgbXV0ZWQgcGVyXG4gICAqIGZpbmRpbmcgdmlhIGBBY2tub3dsZWRnZSB3aXRoICdDbG91ZEZvcm1hdGlvbi1WYWxpZGF0ZTo6PHJ1bGUtaWQ+J2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbiBlbmZvcmNlIG1vZGUsIGFkZGl0aW9uYWxseSBmYWlsIHN5bnRoZXNpcyBvbiBlcnJvci1jbGFzcyBmaW5kaW5nc1xuICAgKiAoc2V2ZXJpdHkgRVJST1IvRkFUQUwpIG9mIHRoZSBidWlsdC1pbiB2YWxpZGF0aW9uIGVuZ2luZSBpdHNlbGYsIGUuZy5cbiAgICogc2NoZW1hIHZpb2xhdGlvbnMgbGlrZSBgRjMwMzRgLiBUaGlzIGlzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgQ0RLXG4gICAqIGJlaGF2aW9yIHdoZXJlIGFsbCBidWlsdC1pbiBmaW5kaW5ncyBhcmUgZG93bmdyYWRlZCB0byB3YXJuaW5ncy5cbiAgICpcbiAgICogU2luY2UgdGhlIGVuZ2luZSdzIG93biBlcnJvcnMgdGhlbiBmYWlsIHN5bnRoZXNpcywgYnVuZGxlZCBydWxlcyB0aGF0IHRoZVxuICAgKiBydW5uaW5nIGVuZ2luZSBhbHJlYWR5IGNvdmVycyBhcmUgc2tpcHBlZCBpbnN0ZWFkIG9mIGJlaW5nIHJlcG9ydGVkIHR3aWNlLlxuICAgKiBUaGUgc2FtZSBoYXBwZW5zIHdpdGggYGVuZm9yY2U6IGZhbHNlYCwgYW5kIHdoZW4gdGhlIGFwcCBzZXRzIHRoZSBjb250ZXh0XG4gICAqIGBAYXdzLWNkay9jb3JlOnZhbGlkYXRlQWdhaW5zdERlZmF1bHRSdWxlczogdHJ1ZWAuXG4gICAqXG4gICAqIE9ubHkgZWZmZWN0aXZlIGluIGVuZm9yY2UgbW9kZSAodGhlIGRlZmF1bHQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaWN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSBydWxlcyB0aGF0IGFyZSBtYXJrZWQgYHBlbmRpbmctZW5naW5lYCAoY2FuZGlkYXRlcyB0aGF0IGhhdmUgYmVlblxuICAgKiBwcm9wb3NlZCB0byB0aGUgdXBzdHJlYW0gY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUgZW5naW5lIGJ1dCBhcmUgbm90IG1lcmdlZFxuICAgKiB5ZXQpLiBEaXNhYmxlIHRoaXMgaWYgeW91IHJ1biBhIG5ld2VyIGVuZ2luZSB0aGF0IGFscmVhZHkgY292ZXJzIHRoZW0uXG4gICAqXG4gICAqIFJ1bGVzIG1hcmtlZCBgY2ZuLXNjaGVtYWAgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBzd2l0Y2guIENsb3VkRm9ybWF0aW9uJ3NcbiAgICogb3duIHJlZ2lzdHJ5IHNjaGVtYSBkb2VzIHJlamVjdCB0aG9zZSB0ZW1wbGF0ZXMsIGJ1dCBvbmx5IHdpdGggYVxuICAgKiBzdGFjay1sZXZlbCBcIlZhbGlkYXRpb24gZmFpbGVkIHdpdGggMSBlcnJvcihzKVwiIHRoYXQgbmFtZXMgbm8gcHJvcGVydHksIHNvXG4gICAqIHRoZXkga2VlcCBlYXJuaW5nIHRoZWlyIHBsYWNlIGF0IHN5bnRoIHRpbWUgYW5kIG5vIGVuZ2luZSByZWxlYXNlIHJldGlyZXNcbiAgICogdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZVVwc3RyZWFtUGVuZGluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogY2RrLXByZWZsaWdodDogY2F0Y2ggZGVwbG95LXRpbWUgQ2xvdWRGb3JtYXRpb24gZmFpbHVyZXMgYXQgc3ludGggdGltZS5cbiAqXG4gKiBJbmplY3RzIGEgY3VyYXRlZCBSZWdvIHJ1bGUgcGFjayAoY29uc3RyYWludHMgdGhhdCByZXNvdXJjZSBwcm92aWRlciBzY2hlbWFzXG4gKiBkbyBub3QgZXhwcmVzczogZG9jLW9ubHkgdmFsdWUgbGltaXRzLCBjcm9zcy1wcm9wZXJ0eSBhbmQgY3Jvc3MtcmVzb3VyY2VcbiAqIHJ1bGVzKSBpbnRvIHRoZSBBV1MgQ0RLIGJ1aWx0LWluIENsb3VkRm9ybWF0aW9uIHZhbGlkYXRvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogZGVjbGFyZSBjb25zdCBhcHA6IEFwcDtcbiAqIFByZWZsaWdodC5hcHBseShhcHApO1xuICovXG5leHBvcnQgY2xhc3MgUHJlZmxpZ2h0IHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSBjZGstcHJlZmxpZ2h0IHJ1bGVzIG9uIGFuIEFwcCBvciBTdGFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXBwbHkoc2NvcGU6IElDb25zdHJ1Y3QsIG9wdGlvbnM6IFByZWZsaWdodE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGlmICghU3RhZ2UuaXNTdGFnZShzY29wZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2RrLXByZWZsaWdodDogUHJlZmxpZ2h0LmFwcGx5KCkgbXVzdCBiZSBjYWxsZWQgb24gYW4gQXBwIG9yIGEgU3RhZ2UnKTtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZSA9IG9wdGlvbnMuZXhjbHVkZSA/PyBbXTtcbiAgICBjb25zdCB1bmtub3duID0gZXhjbHVkZS5maWx0ZXIoKGlkKSA9PiAhQlVORExFRF9SVUxFUy5zb21lKChyKSA9PiByLmlkID09PSBpZCkpO1xuICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2RrLXByZWZsaWdodDogdW5rbm93biBydWxlIGlkKHMpIGluIGV4Y2x1ZGU6ICR7dW5rbm93bi5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBlbmZvcmNlID0gb3B0aW9ucy5lbmZvcmNlID8/IHRydWU7XG4gICAgY29uc3Qgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3QgPz8gZmFsc2U7XG4gICAgLy8gbWV0YS55YW1sI3N1cGVyc2VkZWRCeSDjga7jg6vjg7zjg6vjga/jgIHjgZPjga7jgqjjg7Pjgrjjg7PjgYzlkIzjgZjpgZXlj43jgpLoh6rlipvjgafopovjgaTjgZHjgovjgILnnIHjgY/jga7jga9cbiAgICAvLyDnnIHjgYTjgabjgoLmraLjgb7jgormlrnjgYzlpInjgo/jgonjgarjgYTjgajjgY3jgaDjgZE6IG9ic2VydmXvvIjjganjgaHjgonjgoLorablkYrvvInjgIFzdHJpY3TvvIjntYTjgb/ovrzjgb/jga5cbiAgICAvLyBFUlJPUi9GQVRBTCDjgafmraLjgb7jgovvvInjgIFDREsg6Ieq6Lqr44GM57WE44G/6L6844G/44KS5qC85LiL44GS44GX44Gq44GE6Kit5a6a44Gu44Go44GN44CC5pei5a6a44GuIGVuZm9yY2Ug44Gn44GvXG4gICAgLy8gQ0RLIOOBjOe1hOOBv+i+vOOBv+OBriBFUlJPUi9GQVRBTCDjgpLorablkYrjgavokL3jgajjgZnjga7jgafjgIHnnIHjgY/jgaggc3ludGgg44GM6YCa44Gj44Gm44GX44G+44GG44CCXG4gICAgY29uc3QgZW5naW5lQmxvY2tzID0gIWVuZm9yY2UgfHwgc3RyaWN0IHx8IGNka0tlZXBzRGVmYXVsdFJ1bGVFcnJvcnMoc2NvcGUpO1xuICAgIGNvbnN0IHZlcnNpb24gPSBlbmdpbmVCbG9ja3MgPyBlbmdpbmVWZXJzaW9uKCkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBCVU5ETEVEX1JVTEVTXG4gICAgICAuZmlsdGVyKChyKSA9PiAob3B0aW9ucy5pbmNsdWRlVXBzdHJlYW1QZW5kaW5nID8/IHRydWUpIHx8IHIudXBzdHJlYW0gIT09ICdwZW5kaW5nLWVuZ2luZScpXG4gICAgICAuZmlsdGVyKChyKSA9PiAhZXhjbHVkZS5pbmNsdWRlcyhyLmlkKSlcbiAgICAgIC5maWx0ZXIoKHIpID0+ICFpc1N1cGVyc2VkZWQociwgdmVyc2lvbikpO1xuXG4gICAgaWYgKGVuZm9yY2UpIHtcbiAgICAgIFZhbGlkYXRpb25zLm9mKHNjb3BlKS5hZGRQbHVnaW5zKG5ldyBQcmVmbGlnaHRFbmZvcmNlUGx1Z2luKHNlbGVjdGVkLCBzdHJpY3QpKTtcbiAgICAgIGluc3RhbGxFbmZvcmNlR2F0ZShzY29wZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFZhbGlkYXRpb25zLm9mKHNjb3BlKS5hZGRQbHVnaW5zKG9ic2VydmVQbHVnaW5DYWNoZWQoc2VsZWN0ZWQpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlkcyBvZiBhbGwgYnVuZGxlZCBydWxlcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcnVsZUlkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEJVTkRMRURfUlVMRVMubWFwKChyKSA9PiByLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxufVxuXG4vKipcbiAqIENESyDjgYzntYTjgb/ovrzjgb/jgqjjg7Pjgrjjg7Pjga4gRVJST1IvRkFUQUwg44KS6K2m5ZGK44Gr6JC944Go44GV44Gq44GE6Kit5a6a44GL44CC5Yik5a6a44GvIGF3cy1jZGstbGliIDIuMjcxLjAg44GuXG4gKiBzeW50aGVzaXMtdmFsaWRhdGlvbiDjgajlkIzjgZg6IGNvbnRleHQgYEBhd3MtY2RrL2NvcmU6dmFsaWRhdGVBZ2FpbnN0RGVmYXVsdFJ1bGVzYCDjgYwgZmFsc2Ug5Lul5aSW44GnXG4gKiDoqK3lrprjgZXjgozjgabjgYTjgabjgIHjgYvjgaTntYTjgb/ovrzjgb/jga7oh6rli5XnmbvpjLLjgYwgYENES19WQUxJREFUSU9OPWZhbHNlYCDjgafmraLjgoHjgonjgozjgabjgYTjgarjgYTjgZPjgajjgIJcbiAqL1xuZnVuY3Rpb24gY2RrS2VlcHNEZWZhdWx0UnVsZUVycm9ycyhzY29wZTogSUNvbnN0cnVjdCk6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSBzY29wZS5ub2RlLnRyeUdldENvbnRleHQoJ0Bhd3MtY2RrL2NvcmU6dmFsaWRhdGVBZ2FpbnN0RGVmYXVsdFJ1bGVzJyk7XG4gIHJldHVybiByYXcgIT09IHVuZGVmaW5lZCAmJiByYXcgIT09IGZhbHNlICYmIHJhdyAhPT0gJ2ZhbHNlJyAmJiBwcm9jZXNzLmVudi5DREtfVkFMSURBVElPTiAhPT0gJ2ZhbHNlJztcbn1cbiJdfQ==
|