diff --git a/moto/iam/responses.py b/moto/iam/responses.py
index 13688869e..6ca49b830 100644
--- a/moto/iam/responses.py
+++ b/moto/iam/responses.py
@@ -20,6 +20,20 @@ class IamResponse(BaseResponse):
template = self.response_template(GENERIC_EMPTY_TEMPLATE)
return template.render(name="DetachRolePolicyResponse")
+ def attach_group_policy(self):
+ policy_arn = self._get_param('PolicyArn')
+ group_name = self._get_param('GroupName')
+ iam_backend.attach_group_policy(policy_arn, group_name)
+ template = self.response_template(ATTACH_GROUP_POLICY_TEMPLATE)
+ return template.render()
+
+ def detach_group_policy(self):
+ policy_arn = self._get_param('PolicyArn')
+ group_name = self._get_param('GroupName')
+ iam_backend.detach_group_policy(policy_arn, group_name)
+ template = self.response_template(DETACH_GROUP_POLICY_TEMPLATE)
+ return template.render()
+
def attach_user_policy(self):
policy_arn = self._get_param('PolicyArn')
user_name = self._get_param('UserName')
@@ -54,6 +68,17 @@ class IamResponse(BaseResponse):
template = self.response_template(LIST_ATTACHED_ROLE_POLICIES_TEMPLATE)
return template.render(policies=policies, marker=marker)
+ def list_attached_group_policies(self):
+ marker = self._get_param('Marker')
+ max_items = self._get_int_param('MaxItems', 100)
+ path_prefix = self._get_param('PathPrefix', '/')
+ group_name = self._get_param('GroupName')
+ policies, marker = iam_backend.list_attached_group_policies(
+ group_name, marker=marker, max_items=max_items,
+ path_prefix=path_prefix)
+ template = self.response_template(LIST_ATTACHED_GROUP_POLICIES_TEMPLATE)
+ return template.render(policies=policies, marker=marker)
+
def list_attached_user_policies(self):
marker = self._get_param('Marker')
max_items = self._get_int_param('MaxItems', 100)
@@ -520,6 +545,18 @@ DETACH_USER_POLICY_TEMPLATE = """
"""
+ATTACH_GROUP_POLICY_TEMPLATE = """
+
+ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
+
+"""
+
+DETACH_GROUP_POLICY_TEMPLATE = """
+
+ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
+
+"""
+
CREATE_POLICY_TEMPLATE = """
@@ -560,6 +597,28 @@ LIST_ATTACHED_ROLE_POLICIES_TEMPLATE = """
"""
+LIST_ATTACHED_GROUP_POLICIES_TEMPLATE = """
+
+ {% if marker is none %}
+ false
+ {% else %}
+ true
+ {{ marker }}
+ {% endif %}
+
+ {% for policy in policies %}
+
+ {{ policy.name }}
+ {{ policy.arn }}
+
+ {% endfor %}
+
+
+
+ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
+
+"""
+
LIST_ATTACHED_USER_POLICIES_TEMPLATE = """
{% if marker is none %}