Repository: aws-cloudformation/cfn-lint

Issue:
E1040 raised when using !GetAtt on Outputs from AWS::ServiceCatalog::CloudFormationProvisionedProduct
### CloudFormation Lint Version

cfn-lint 1.5.1

### What operating system are you using?

Amazon Linux

### Describe the bug

When running this command:
```
pipenv run cfn-lint --template ./test/success/sc-product.yaml
```

on the reproduction template I receive an `E1040` error message:

```
E1040 {'Fn::GetAtt': ['VpcProduct', 'Outputs.VpcId']} that does not match 'AWS::EC2::VPC.Id'
test/success/sc-product.yaml:28:7
```

### Expected behavior

I would think the `!GetAtt VpcProduct.Outputs.VpcId` should be allowed as the value for the `VpcId` property on the `AWS::EC2::VpcEndpoint` resource.  

Would the fix be to add `AWS::ServiceCatalog::CloudFormationProvisionedProduct` resource type to the exclusions like #3346 did?  I could try a PR for that if that's the solution. 

### Reproduction template

```yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Create a VPC from Service Catalog

Parameters:
  VpcName:
    Type: String
    Description: The name of the VPC
  VpcSize:
    Type: String
    Description: Size of the VPC

Resources:
  VpcProduct:
    Type: AWS::ServiceCatalog::CloudFormationProvisionedProduct
    Properties:
      ProductId: "{{resolve:ssm:/org/sfg/servicecatalog/product_ids/vpc:1}}"
      ProvisioningArtifactName: v1.0.0
      ProvisioningParameters:
        - Key: VpcName
          Value: !Ref VpcName
        - Key: VpcSize
          Value: !Ref VpcSize

  DynamoDbEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Sub com.amazonaws.${AWS::Region}.dynamodb
      VpcId: !GetAtt VpcProduct.Outputs.VpcId
      RouteTableIds:
        - !GetAtt VpcProduct.Outputs.PrivateSubnetRouteTable
```


Discussion:
Yea that should fix it.



Patch:
diff --git a/src/cfnlint/rules/functions/GetAttFormat.py b/src/cfnlint/rules/functions/GetAttFormat.py
index a7fd660855..7495b2eb0c 100644
--- a/src/cfnlint/rules/functions/GetAttFormat.py
+++ b/src/cfnlint/rules/functions/GetAttFormat.py
@@ -30,6 +30,7 @@ def __init__(self):
         self._resource_type_exceptions = [
             "AWS::CloudFormation::CustomResource",
             "AWS::CloudFormation::Stack",
+            "AWS::ServiceCatalog::CloudFormationProvisionedProduct",
         ]
 
     def validate(


Test patch:
diff --git a/test/unit/rules/functions/test_getatt_format.py b/test/unit/rules/functions/test_getatt_format.py
index 33e6f7c931..24cc0cf540 100644
--- a/test/unit/rules/functions/test_getatt_format.py
+++ b/test/unit/rules/functions/test_getatt_format.py
@@ -24,6 +24,9 @@ def template():
             "MySecurityGroup": {"Type": "AWS::EC2::SecurityGroup"},
             "MyCustomResource": {"Type": "Custom::CustomResource"},
             "MySubTemplate": {"Type": "AWS::CloudFormation::Stack"},
+            "MyProvisionedProduct": {
+                "Type": "AWS::ServiceCatalog::CloudFormationProvisionedProduct"
+            },
         },
     }
 
@@ -49,6 +52,12 @@ def template():
             {"format": "AWS::EC2::VPC.Id"},
             [],
         ),
+        (
+            "Valid GetAtt to a provisioned product ",
+            ["MyProvisionedProduct", "Outputs.VpcId"],
+            {"format": "AWS::EC2::VPC.Id"},
+            [],
+        ),
         (
             "Valid GetAtt because of exception",
             ["MyBucket", "Arn"],