IoT: Fix bad account IDs in ARNs (#6930)

This commit is contained in:
Viren Nadkarni 2023-10-20 17:15:17 +05:30 committed by GitHub
parent d222e929aa
commit 8b9c44b515
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -91,15 +91,17 @@ class FakeThingType(BaseModel):
self, self,
thing_type_name: str, thing_type_name: str,
thing_type_properties: Optional[Dict[str, Any]], thing_type_properties: Optional[Dict[str, Any]],
account_id: str,
region_name: str, region_name: str,
): ):
self.account_id = account_id
self.region_name = region_name self.region_name = region_name
self.thing_type_name = thing_type_name self.thing_type_name = thing_type_name
self.thing_type_properties = thing_type_properties self.thing_type_properties = thing_type_properties
self.thing_type_id = str(random.uuid4()) # I don't know the rule of id self.thing_type_id = str(random.uuid4()) # I don't know the rule of id
t = time.time() t = time.time()
self.metadata = {"deprecated": False, "creationDate": int(t * 1000) / 1000.0} self.metadata = {"deprecated": False, "creationDate": int(t * 1000) / 1000.0}
self.arn = f"arn:aws:iot:{self.region_name}:1:thingtype/{thing_type_name}" self.arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:thingtype/{thing_type_name}"
def to_dict(self) -> Dict[str, Any]: def to_dict(self) -> Dict[str, Any]:
return { return {
@ -117,9 +119,11 @@ class FakeThingGroup(BaseModel):
thing_group_name: str, thing_group_name: str,
parent_group_name: str, parent_group_name: str,
thing_group_properties: Dict[str, str], thing_group_properties: Dict[str, str],
account_id: str,
region_name: str, region_name: str,
thing_groups: Dict[str, "FakeThingGroup"], thing_groups: Dict[str, "FakeThingGroup"],
): ):
self.account_id = account_id
self.region_name = region_name self.region_name = region_name
self.thing_group_name = thing_group_name self.thing_group_name = thing_group_name
self.thing_group_id = str(random.uuid4()) # I don't know the rule of id self.thing_group_id = str(random.uuid4()) # I don't know the rule of id
@ -153,7 +157,7 @@ class FakeThingGroup(BaseModel):
} }
] ]
) )
self.arn = f"arn:aws:iot:{self.region_name}:1:thinggroup/{thing_group_name}" self.arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:thinggroup/{thing_group_name}"
self.things: Dict[str, FakeThing] = OrderedDict() self.things: Dict[str, FakeThing] = OrderedDict()
def to_dict(self) -> Dict[str, Any]: def to_dict(self) -> Dict[str, Any]:
@ -345,14 +349,16 @@ class FakeJob(BaseModel):
target_selection: str, target_selection: str,
job_executions_rollout_config: Dict[str, Any], job_executions_rollout_config: Dict[str, Any],
document_parameters: Dict[str, str], document_parameters: Dict[str, str],
account_id: str,
region_name: str, region_name: str,
): ):
if not self._job_id_matcher(self.JOB_ID_REGEX, job_id): if not self._job_id_matcher(self.JOB_ID_REGEX, job_id):
raise InvalidRequestException() raise InvalidRequestException()
self.account_id = account_id
self.region_name = region_name self.region_name = region_name
self.job_id = job_id self.job_id = job_id
self.job_arn = f"arn:aws:iot:{self.region_name}:1:job/{job_id}" self.job_arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:job/{job_id}"
self.targets = targets self.targets = targets
self.document_source = document_source self.document_source = document_source
self.document = document self.document = document
@ -508,8 +514,10 @@ class FakeRule(BaseModel):
error_action: Dict[str, Any], error_action: Dict[str, Any],
sql: str, sql: str,
aws_iot_sql_version: str, aws_iot_sql_version: str,
account_id: str,
region_name: str, region_name: str,
): ):
self.account_id = account_id
self.region_name = region_name self.region_name = region_name
self.rule_name = rule_name self.rule_name = rule_name
self.description = description or "" self.description = description or ""
@ -520,7 +528,7 @@ class FakeRule(BaseModel):
self.error_action = error_action or {} self.error_action = error_action or {}
self.sql = sql self.sql = sql
self.aws_iot_sql_version = aws_iot_sql_version or "2016-03-23" self.aws_iot_sql_version = aws_iot_sql_version or "2016-03-23"
self.arn = f"arn:aws:iot:{self.region_name}:1:rule/{rule_name}" self.arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:rule/{rule_name}"
def to_get_dict(self) -> Dict[str, Any]: def to_get_dict(self) -> Dict[str, Any]:
return { return {
@ -550,6 +558,7 @@ class FakeRule(BaseModel):
class FakeDomainConfiguration(BaseModel): class FakeDomainConfiguration(BaseModel):
def __init__( def __init__(
self, self,
account_id: str,
region_name: str, region_name: str,
domain_configuration_name: str, domain_configuration_name: str,
domain_name: str, domain_name: str,
@ -565,7 +574,7 @@ class FakeDomainConfiguration(BaseModel):
f"operation: Service type {service_type} not recognized." f"operation: Service type {service_type} not recognized."
) )
self.domain_configuration_name = domain_configuration_name self.domain_configuration_name = domain_configuration_name
self.domain_configuration_arn = f"arn:aws:iot:{region_name}:1:domainconfiguration/{domain_configuration_name}/{random.get_random_string(length=5)}" self.domain_configuration_arn = f"arn:aws:iot:{region_name}:{account_id}:domainconfiguration/{domain_configuration_name}/{random.get_random_string(length=5)}"
self.domain_name = domain_name self.domain_name = domain_name
self.server_certificates = [] self.server_certificates = []
if server_certificate_arns: if server_certificate_arns:
@ -721,7 +730,7 @@ class IoTBackend(BaseBackend):
if thing_type_properties is None: if thing_type_properties is None:
thing_type_properties = {} thing_type_properties = {}
thing_type = FakeThingType( thing_type = FakeThingType(
thing_type_name, thing_type_properties, self.region_name thing_type_name, thing_type_properties, self.account_id, self.region_name
) )
self.thing_types[thing_type.arn] = thing_type self.thing_types[thing_type.arn] = thing_type
return thing_type.thing_type_name, thing_type.arn return thing_type.thing_type_name, thing_type.arn
@ -1340,6 +1349,7 @@ class IoTBackend(BaseBackend):
thing_group_name, thing_group_name,
parent_group_name, parent_group_name,
thing_group_properties, thing_group_properties,
self.account_id,
self.region_name, self.region_name,
self.thing_groups, self.thing_groups,
) )
@ -1576,6 +1586,7 @@ class IoTBackend(BaseBackend):
target_selection, target_selection,
job_executions_rollout_config, job_executions_rollout_config,
document_parameters, document_parameters,
self.account_id,
self.region_name, self.region_name,
) )
self.jobs[job_id] = job self.jobs[job_id] = job
@ -1772,6 +1783,7 @@ class IoTBackend(BaseBackend):
created_at=int(time.time()), created_at=int(time.time()),
topic_pattern=topic, topic_pattern=topic,
sql=sql, sql=sql,
account_id=self.account_id,
region_name=self.region_name, region_name=self.region_name,
**kwargs, **kwargs,
) )
@ -1817,6 +1829,7 @@ class IoTBackend(BaseBackend):
].domain_configuration_arn, ].domain_configuration_arn,
) )
self.domain_configurations[domain_configuration_name] = FakeDomainConfiguration( self.domain_configurations[domain_configuration_name] = FakeDomainConfiguration(
self.account_id,
self.region_name, self.region_name,
domain_configuration_name, domain_configuration_name,
domain_name, domain_name,