diff --git a/samtranslator/translator/managed_policy_translator.py b/samtranslator/translator/managed_policy_translator.py index 0b5d1f78f0..a4020084af 100644 --- a/samtranslator/translator/managed_policy_translator.py +++ b/samtranslator/translator/managed_policy_translator.py @@ -7,15 +7,19 @@ class ManagedPolicyLoader(object): def __init__(self, iam_client): self._iam_client = iam_client self._policy_map = None + self.max_items = 1000 def load(self): if self._policy_map is None: LOG.info("Loading policies from IAM...") + paginator = self._iam_client.get_paginator("list_policies") # Setting the scope to AWS limits the returned values to only AWS Managed Policies and will # not returned policies owned by any specific account. # http://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicies.html#API_ListPolicies_RequestParameters - page_iterator = paginator.paginate(Scope="AWS") + # Note(jfuss): boto3 PaginationConfig MaxItems does not control the number of items returned from the API + # call. This is actually controlled by PageSize. + page_iterator = paginator.paginate(Scope="AWS", PaginationConfig={"PageSize": self.max_items}) name_to_arn_map = {} for page in page_iterator: diff --git a/tests/translator/test_managed_policies_translator.py b/tests/translator/test_managed_policies_translator.py index 3337af663e..195db3a380 100644 --- a/tests/translator/test_managed_policies_translator.py +++ b/tests/translator/test_managed_policies_translator.py @@ -32,4 +32,4 @@ def test_load(): assert actual == expected iam.get_paginator.assert_called_once_with("list_policies") - paginator.paginate.assert_called_once_with(Scope="AWS") + paginator.paginate.assert_called_once_with(Scope="AWS", PaginationConfig={"PageSize": 1000})