Skip to content

Commit 435da9f

Browse files
authored
Update rule E3703 to validate RoleArns (#3998)
* Create rule E1156 to validate IAM Role Arns * Update rule E3703 to validate RoleArns
1 parent ada3874 commit 435da9f

File tree

372 files changed

+1745
-10
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

372 files changed

+1745
-10
lines changed

docs/format_keyword.md

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ This format validates that the value is a valid list of security group names, wh
3232

3333
This format validates that the value is a valid Amazon Machine Image (AMI), which is a string of the pattern `ami-[0-9a-f]{8}` or `ami-[0-9a-f]{17}`. More info in [docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html)
3434

35+
### AWS::IAM::Role.Arn
36+
37+
This format validates that the value is a valid IAM Role ARN, which is a string of the pattern `^arn:(aws|aws-cn|aws-iso|aws-iso-[a-z]{1}|aws-us-gov):iam::\d{12}:role/.*$`. More info in [docs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)
38+
3539
### AWS::Logs::LogGroup.Name
3640

3741
This format validates that the value is a valid log group name, which is a string of the pattern `^[\.\-_\/#A-Za-z0-9]{1,512}\Z`. More info in [docs](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_LogGroup.html)

scripts/update_schemas_format.py

+25-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,13 @@ def _create_security_group_name(type_name: str, ref: str, resolver: RefResolver)
178178
def _create_patch(value: dict[str, str], ref: str, resolver: RefResolver):
179179
_, resolved = resolver.resolve(ref)
180180
if "$ref" in resolved:
181-
return _create_patch(value, resolved["$ref"], resolver)
181+
patch = _create_patch(value, resolved["$ref"], resolver)
182+
if patch is not None:
183+
return patch
184+
185+
if ref == "#/definitions/Arn":
186+
# way too generic general item
187+
return None
182188

183189
if "items" in resolved:
184190
return Patch(
@@ -270,6 +276,12 @@ def _create_patch(value: dict[str, str], ref: str, resolver: RefResolver):
270276
path="/definitions/NetworkInterface/properties/GroupSet/items",
271277
),
272278
],
279+
"AWS::IAM::Role": [
280+
Patch(
281+
values={"format": "AWS::IAM::Role.Arn"},
282+
path="/properties/Arn",
283+
),
284+
],
273285
}
274286

275287

@@ -377,6 +389,18 @@ def main():
377389
)
378390
)
379391

392+
for path in _descend(
393+
obj, ["RoleArn", "RoleARN", "IAMRoleARN", "IamRoleArn"]
394+
):
395+
if path[-2] == "properties":
396+
resource_patches.append(
397+
_create_patch(
398+
value={"format": "AWS::IAM::Role.Arn"},
399+
ref="#/" + "/".join(path),
400+
resolver=resolver,
401+
)
402+
)
403+
380404
for path in _descend(
381405
obj,
382406
[
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/Action/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/GlueDataCatalog/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleARN/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]

src/cfnlint/data/schemas/patches/extensions/all/aws_appstream_appblockbuilder/format.json

+5
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,10 @@
88
"op": "add",
99
"path": "/definitions/VpcConfig/properties/SecurityGroupIds/items/format",
1010
"value": "AWS::EC2::SecurityGroup.Id"
11+
},
12+
{
13+
"op": "add",
14+
"path": "/properties/IamRoleArn/format",
15+
"value": "AWS::IAM::Role.Arn"
1116
}
1217
]

src/cfnlint/data/schemas/patches/extensions/all/aws_appstream_fleet/format.json

+5
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,10 @@
88
"op": "add",
99
"path": "/definitions/VpcConfig/properties/SecurityGroupIds/items/format",
1010
"value": "AWS::EC2::SecurityGroup.Id"
11+
},
12+
{
13+
"op": "add",
14+
"path": "/properties/IamRoleArn/format",
15+
"value": "AWS::IAM::Role.Arn"
1116
}
1217
]

src/cfnlint/data/schemas/patches/extensions/all/aws_appstream_imagebuilder/format.json

+5
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,10 @@
88
"op": "add",
99
"path": "/definitions/VpcConfig/properties/SecurityGroupIds/items/format",
1010
"value": "AWS::EC2::SecurityGroup.Id"
11+
},
12+
{
13+
"op": "add",
14+
"path": "/properties/IamRoleArn/format",
15+
"value": "AWS::IAM::Role.Arn"
1116
}
1217
]

src/cfnlint/data/schemas/patches/extensions/all/aws_aps_scraper/format.json

+5
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,10 @@
88
"op": "add",
99
"path": "/definitions/Source/properties/EksConfiguration/properties/SecurityGroupIds/format",
1010
"value": "AWS::EC2::SecurityGroup.Ids"
11+
},
12+
{
13+
"op": "add",
14+
"path": "/properties/RoleArn/format",
15+
"value": "AWS::IAM::Role.Arn"
1116
}
1217
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/IamArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
},
7+
{
8+
"op": "add",
9+
"path": "/definitions/IamArn/format",
10+
"value": "AWS::IAM::Role.Arn"
11+
}
12+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/LifecycleHookSpecification/properties/RoleARN/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleARN/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/BackupSelectionResourceType/properties/IamRoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/IamRoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/IamRoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/IamRoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/MembershipProtectedQueryResultConfiguration/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/KinesisStreamConfig/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/ActionDeclaration/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
},
7+
{
8+
"op": "add",
9+
"path": "/definitions/RuleDeclaration/properties/RoleArn/format",
10+
"value": "AWS::IAM::Role.Arn"
11+
},
12+
{
13+
"op": "add",
14+
"path": "/properties/RoleArn/format",
15+
"value": "AWS::IAM::Role.Arn"
16+
}
17+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/CognitoStreams/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
},
7+
{
8+
"op": "add",
9+
"path": "/definitions/PushSync/properties/RoleArn/format",
10+
"value": "AWS::IAM::Role.Arn"
11+
}
12+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/MappingRule/properties/RoleARN/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/AnalyticsConfiguration/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/definitions/OrganizationAggregationSource/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleARN/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]

src/cfnlint/data/schemas/patches/extensions/all/aws_dax_cluster/format.json

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
[
2+
{
3+
"op": "add",
4+
"path": "/properties/IAMRoleARN/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
},
27
{
38
"op": "add",
49
"path": "/properties/SecurityGroupIds/format",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]

src/cfnlint/data/schemas/patches/extensions/all/aws_ec2_enclavecertificateiamroleassociation/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "add",
4+
"path": "/properties/RoleArn/format",
5+
"value": "AWS::IAM::Role.Arn"
6+
}
7+
]

0 commit comments

Comments
 (0)