diff --git a/moto/iam/models.py b/moto/iam/models.py index c219c1afc..456dce4aa 100644 --- a/moto/iam/models.py +++ b/moto/iam/models.py @@ -729,6 +729,10 @@ class IAMBackend(BaseBackend): policy = user.get_policy(policy_name) return policy + def list_user_policies(self, user_name): + user = self.get_user(user_name) + return user.policies.keys() + def put_user_policy(self, user_name, policy_name, policy_json): user = self.get_user(user_name) user.put_policy(policy_name, policy_json) diff --git a/moto/iam/responses.py b/moto/iam/responses.py index 0757d7eee..7febb22a7 100644 --- a/moto/iam/responses.py +++ b/moto/iam/responses.py @@ -287,6 +287,12 @@ class IamResponse(BaseResponse): policy_document=policy_document ) + def list_user_policies(self): + user_name = self._get_param('UserName') + policies = iam_backend.list_user_policies(user_name) + template = self.response_template(LIST_USER_POLICIES_TEMPLATE) + return template.render(policies=policies) + def put_user_policy(self): user_name = self._get_param('UserName') policy_name = self._get_param('PolicyName') @@ -854,6 +860,20 @@ GET_USER_POLICY_TEMPLATE = """ """ +LIST_USER_POLICIES_TEMPLATE = """ + + + {% for policy in policies %} + {{ policy }} + {% endfor %} + + + false + + 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE + +""" + CREATE_ACCESS_KEY_TEMPLATE = """ diff --git a/tests/test_iam/test_iam.py b/tests/test_iam/test_iam.py index 1ae892f62..e039f8f61 100644 --- a/tests/test_iam/test_iam.py +++ b/tests/test_iam/test_iam.py @@ -234,6 +234,39 @@ def test_list_users(): user['Arn'].should.equal('arn:aws:iam::123456789012:user/my-user') +@mock_iam() +def test_user_policies(): + policy_name = 'UserManagedPolicy' + policy_document = "{'mypolicy': 'test'}" + user_name = 'my-user' + conn = boto3.client('iam', region_name='us-east-1') + conn.create_user(UserName=user_name) + conn.put_user_policy( + UserName=user_name, + PolicyName=policy_name, + PolicyDocument=policy_document + ) + + policy_doc = conn.get_user_policy( + UserName=user_name, + PolicyName=policy_name + ) + test = policy_document in policy_doc['PolicyDocument'] + test.should.equal(True) + + policies = conn.list_user_policies(UserName=user_name) + len(policies['PolicyNames']).should.equal(1) + policies['PolicyNames'][0].should.equal(policy_name) + + conn.delete_user_policy( + UserName=user_name, + PolicyName=policy_name + ) + + policies = conn.list_user_policies(UserName=user_name) + len(policies['PolicyNames']).should.equal(0) + + @mock_iam_deprecated() def test_create_login_profile(): conn = boto.connect_iam()