1{
2    "version": "1.0",
3    "parameters": {
4        "Region": {
5            "builtIn": "AWS::Region",
6            "required": false,
7            "documentation": "The AWS region used to dispatch the request.",
8            "type": "String"
9        },
10        "UseFIPS": {
11            "builtIn": "AWS::UseFIPS",
12            "required": true,
13            "default": false,
14            "documentation": "When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.",
15            "type": "Boolean"
16        },
17        "Endpoint": {
18            "builtIn": "SDK::Endpoint",
19            "required": false,
20            "documentation": "Override the endpoint used to send this request",
21            "type": "String"
22        }
23    },
24    "rules": [
25        {
26            "conditions": [
27                {
28                    "fn": "isSet",
29                    "argv": [
30                        {
31                            "ref": "Endpoint"
32                        }
33                    ]
34                }
35            ],
36            "rules": [
37                {
38                    "conditions": [
39                        {
40                            "fn": "booleanEquals",
41                            "argv": [
42                                {
43                                    "ref": "UseFIPS"
44                                },
45                                true
46                            ]
47                        }
48                    ],
49                    "error": "Invalid Configuration: FIPS and custom endpoint are not supported",
50                    "type": "error"
51                },
52                {
53                    "conditions": [],
54                    "endpoint": {
55                        "url": {
56                            "ref": "Endpoint"
57                        },
58                        "properties": {},
59                        "headers": {}
60                    },
61                    "type": "endpoint"
62                }
63            ],
64            "type": "tree"
65        },
66        {
67            "conditions": [
68                {
69                    "fn": "isSet",
70                    "argv": [
71                        {
72                            "ref": "Region"
73                        }
74                    ]
75                }
76            ],
77            "rules": [
78                {
79                    "conditions": [
80                        {
81                            "fn": "aws.partition",
82                            "argv": [
83                                {
84                                    "ref": "Region"
85                                }
86                            ],
87                            "assign": "PartitionResult"
88                        }
89                    ],
90                    "rules": [
91                        {
92                            "conditions": [
93                                {
94                                    "fn": "booleanEquals",
95                                    "argv": [
96                                        true,
97                                        {
98                                            "fn": "getAttr",
99                                            "argv": [
100                                                {
101                                                    "ref": "PartitionResult"
102                                                },
103                                                "supportsDualStack"
104                                            ]
105                                        }
106                                    ]
107                                }
108                            ],
109                            "rules": [
110                                {
111                                    "conditions": [
112                                        {
113                                            "fn": "booleanEquals",
114                                            "argv": [
115                                                {
116                                                    "ref": "UseFIPS"
117                                                },
118                                                true
119                                            ]
120                                        }
121                                    ],
122                                    "rules": [
123                                        {
124                                            "conditions": [
125                                                {
126                                                    "fn": "booleanEquals",
127                                                    "argv": [
128                                                        {
129                                                            "fn": "getAttr",
130                                                            "argv": [
131                                                                {
132                                                                    "ref": "PartitionResult"
133                                                                },
134                                                                "supportsFIPS"
135                                                            ]
136                                                        },
137                                                        true
138                                                    ]
139                                                }
140                                            ],
141                                            "rules": [
142                                                {
143                                                    "conditions": [],
144                                                    "endpoint": {
145                                                        "url": "https://datazone-fips.{Region}.{PartitionResult#dualStackDnsSuffix}",
146                                                        "properties": {},
147                                                        "headers": {}
148                                                    },
149                                                    "type": "endpoint"
150                                                }
151                                            ],
152                                            "type": "tree"
153                                        },
154                                        {
155                                            "conditions": [],
156                                            "error": "FIPS is enabled but this partition does not support FIPS",
157                                            "type": "error"
158                                        }
159                                    ],
160                                    "type": "tree"
161                                },
162                                {
163                                    "conditions": [],
164                                    "endpoint": {
165                                        "url": "https://datazone.{Region}.{PartitionResult#dualStackDnsSuffix}",
166                                        "properties": {},
167                                        "headers": {}
168                                    },
169                                    "type": "endpoint"
170                                }
171                            ],
172                            "type": "tree"
173                        },
174                        {
175                            "conditions": [
176                                {
177                                    "fn": "booleanEquals",
178                                    "argv": [
179                                        {
180                                            "ref": "UseFIPS"
181                                        },
182                                        true
183                                    ]
184                                }
185                            ],
186                            "rules": [
187                                {
188                                    "conditions": [
189                                        {
190                                            "fn": "booleanEquals",
191                                            "argv": [
192                                                {
193                                                    "fn": "getAttr",
194                                                    "argv": [
195                                                        {
196                                                            "ref": "PartitionResult"
197                                                        },
198                                                        "supportsFIPS"
199                                                    ]
200                                                },
201                                                true
202                                            ]
203                                        }
204                                    ],
205                                    "rules": [
206                                        {
207                                            "conditions": [],
208                                            "endpoint": {
209                                                "url": "https://datazone-fips.{Region}.{PartitionResult#dnsSuffix}",
210                                                "properties": {},
211                                                "headers": {}
212                                            },
213                                            "type": "endpoint"
214                                        }
215                                    ],
216                                    "type": "tree"
217                                },
218                                {
219                                    "conditions": [],
220                                    "error": "FIPS is enabled but this partition does not support FIPS",
221                                    "type": "error"
222                                }
223                            ],
224                            "type": "tree"
225                        },
226                        {
227                            "conditions": [],
228                            "endpoint": {
229                                "url": "https://datazone.{Region}.{PartitionResult#dnsSuffix}",
230                                "properties": {},
231                                "headers": {}
232                            },
233                            "type": "endpoint"
234                        }
235                    ],
236                    "type": "tree"
237                }
238            ],
239            "type": "tree"
240        },
241        {
242            "conditions": [],
243            "error": "Invalid Configuration: Missing Region",
244            "type": "error"
245        }
246    ]
247}