from __future__ import unicode_literals from moto.core.responses import BaseResponse from .models import iam_backend, User class IamResponse(BaseResponse): def attach_role_policy(self): policy_arn = self._get_param('PolicyArn') role_name = self._get_param('RoleName') iam_backend.attach_role_policy(policy_arn, role_name) template = self.response_template(ATTACH_ROLE_POLICY_TEMPLATE) return template.render() def detach_role_policy(self): role_name = self._get_param('RoleName') policy_arn = self._get_param('PolicyArn') iam_backend.detach_role_policy(policy_arn, role_name) 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') iam_backend.attach_user_policy(policy_arn, user_name) template = self.response_template(ATTACH_USER_POLICY_TEMPLATE) return template.render() def detach_user_policy(self): policy_arn = self._get_param('PolicyArn') user_name = self._get_param('UserName') iam_backend.detach_user_policy(policy_arn, user_name) template = self.response_template(DETACH_USER_POLICY_TEMPLATE) return template.render() def create_policy(self): description = self._get_param('Description') path = self._get_param('Path') policy_document = self._get_param('PolicyDocument') policy_name = self._get_param('PolicyName') policy = iam_backend.create_policy( description, path, policy_document, policy_name) template = self.response_template(CREATE_POLICY_TEMPLATE) return template.render(policy=policy) def get_policy(self): policy_arn = self._get_param('PolicyArn') policy = iam_backend.get_policy(policy_arn) template = self.response_template(GET_POLICY_TEMPLATE) return template.render(policy=policy) def list_attached_role_policies(self): marker = self._get_param('Marker') max_items = self._get_int_param('MaxItems', 100) path_prefix = self._get_param('PathPrefix', '/') role_name = self._get_param('RoleName') policies, marker = iam_backend.list_attached_role_policies( role_name, marker=marker, max_items=max_items, path_prefix=path_prefix) 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) path_prefix = self._get_param('PathPrefix', '/') user_name = self._get_param('UserName') policies, marker = iam_backend.list_attached_user_policies( user_name, marker=marker, max_items=max_items, path_prefix=path_prefix) template = self.response_template(LIST_ATTACHED_USER_POLICIES_TEMPLATE) return template.render(policies=policies, marker=marker) def list_policies(self): marker = self._get_param('Marker') max_items = self._get_int_param('MaxItems', 100) only_attached = self._get_bool_param('OnlyAttached', False) path_prefix = self._get_param('PathPrefix', '/') scope = self._get_param('Scope', 'All') policies, marker = iam_backend.list_policies( marker, max_items, only_attached, path_prefix, scope) template = self.response_template(LIST_POLICIES_TEMPLATE) return template.render(policies=policies, marker=marker) def list_entities_for_policy(self): policy_arn = self._get_param('PolicyArn') # Options 'User'|'Role'|'Group'|'LocalManagedPolicy'|'AWSManagedPolicy entity = self._get_param('EntityFilter') path_prefix = self._get_param('PathPrefix') # policy_usage_filter = self._get_param('PolicyUsageFilter') marker = self._get_param('Marker') max_items = self._get_param('MaxItems') entity_roles = [] entity_groups = [] entity_users = [] if entity == 'User': users = iam_backend.list_users(path_prefix, marker, max_items) if users: for user in users: for p in user.managed_policies: if p == policy_arn: entity_users.append(user.name) elif entity == 'Role': roles = iam_backend.list_roles(path_prefix, marker, max_items) if roles: for role in roles: for p in role.managed_policies: if p == policy_arn: entity_roles.append(role.name) elif entity == 'Group': groups = iam_backend.list_groups() if groups: for group in groups: for p in group.managed_policies: if p == policy_arn: entity_groups.append(group.name) elif entity == 'LocalManagedPolicy' or entity == 'AWSManagedPolicy': users = iam_backend.list_users(path_prefix, marker, max_items) if users: for user in users: for p in user.managed_policies: if p == policy_arn: entity_users.append(user.name) roles = iam_backend.list_roles(path_prefix, marker, max_items) if roles: for role in roles: for p in role.managed_policies: if p == policy_arn: entity_roles.append(role.name) groups = iam_backend.list_groups() if groups: for group in groups: for p in group.managed_policies: if p == policy_arn: entity_groups.append(group.name) template = self.response_template(LIST_ENTITIES_FOR_POLICY_TEMPLATE) return template.render(roles=entity_roles, users=entity_users, groups=entity_groups) def create_role(self): role_name = self._get_param('RoleName') path = self._get_param('Path') assume_role_policy_document = self._get_param( 'AssumeRolePolicyDocument') permissions_boundary = self._get_param( 'PermissionsBoundary') role = iam_backend.create_role( role_name, assume_role_policy_document, path, permissions_boundary) template = self.response_template(CREATE_ROLE_TEMPLATE) return template.render(role=role) def get_role(self): role_name = self._get_param('RoleName') role = iam_backend.get_role(role_name) template = self.response_template(GET_ROLE_TEMPLATE) return template.render(role=role) def delete_role(self): role_name = self._get_param('RoleName') iam_backend.delete_role(role_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name="DeleteRoleResponse") def list_role_policies(self): role_name = self._get_param('RoleName') role_policies_names = iam_backend.list_role_policies(role_name) template = self.response_template(LIST_ROLE_POLICIES) return template.render(role_policies=role_policies_names) def put_role_policy(self): role_name = self._get_param('RoleName') policy_name = self._get_param('PolicyName') policy_document = self._get_param('PolicyDocument') iam_backend.put_role_policy(role_name, policy_name, policy_document) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name="PutRolePolicyResponse") def delete_role_policy(self): role_name = self._get_param('RoleName') policy_name = self._get_param('PolicyName') iam_backend.delete_role_policy(role_name, policy_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name="DeleteRolePolicyResponse") def get_role_policy(self): role_name = self._get_param('RoleName') policy_name = self._get_param('PolicyName') policy_name, policy_document = iam_backend.get_role_policy( role_name, policy_name) template = self.response_template(GET_ROLE_POLICY_TEMPLATE) return template.render(role_name=role_name, policy_name=policy_name, policy_document=policy_document) def update_assume_role_policy(self): role_name = self._get_param('RoleName') role = iam_backend.get_role(role_name) role.assume_role_policy_document = self._get_param('PolicyDocument') template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name="UpdateAssumeRolePolicyResponse") def update_role_description(self): role_name = self._get_param('RoleName') description = self._get_param('Description') role = iam_backend.update_role_description(role_name, description) template = self.response_template(UPDATE_ROLE_DESCRIPTION_TEMPLATE) return template.render(role=role) def update_role(self): role_name = self._get_param('RoleName') description = self._get_param('Description') role = iam_backend.update_role(role_name, description) template = self.response_template(UPDATE_ROLE_TEMPLATE) return template.render(role=role) def create_policy_version(self): policy_arn = self._get_param('PolicyArn') policy_document = self._get_param('PolicyDocument') set_as_default = self._get_param('SetAsDefault') policy_version = iam_backend.create_policy_version(policy_arn, policy_document, set_as_default) template = self.response_template(CREATE_POLICY_VERSION_TEMPLATE) return template.render(policy_version=policy_version) def get_policy_version(self): policy_arn = self._get_param('PolicyArn') version_id = self._get_param('VersionId') policy_version = iam_backend.get_policy_version(policy_arn, version_id) template = self.response_template(GET_POLICY_VERSION_TEMPLATE) return template.render(policy_version=policy_version) def list_policy_versions(self): policy_arn = self._get_param('PolicyArn') policy_versions = iam_backend.list_policy_versions(policy_arn) template = self.response_template(LIST_POLICY_VERSIONS_TEMPLATE) return template.render(policy_versions=policy_versions) def delete_policy_version(self): policy_arn = self._get_param('PolicyArn') version_id = self._get_param('VersionId') iam_backend.delete_policy_version(policy_arn, version_id) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='DeletePolicyVersion') def create_instance_profile(self): profile_name = self._get_param('InstanceProfileName') path = self._get_param('Path', '/') profile = iam_backend.create_instance_profile( profile_name, path, role_ids=[]) template = self.response_template(CREATE_INSTANCE_PROFILE_TEMPLATE) return template.render(profile=profile) def get_instance_profile(self): profile_name = self._get_param('InstanceProfileName') profile = iam_backend.get_instance_profile(profile_name) template = self.response_template(GET_INSTANCE_PROFILE_TEMPLATE) return template.render(profile=profile) def add_role_to_instance_profile(self): profile_name = self._get_param('InstanceProfileName') role_name = self._get_param('RoleName') iam_backend.add_role_to_instance_profile(profile_name, role_name) template = self.response_template( ADD_ROLE_TO_INSTANCE_PROFILE_TEMPLATE) return template.render() def remove_role_from_instance_profile(self): profile_name = self._get_param('InstanceProfileName') role_name = self._get_param('RoleName') iam_backend.remove_role_from_instance_profile(profile_name, role_name) template = self.response_template( REMOVE_ROLE_FROM_INSTANCE_PROFILE_TEMPLATE) return template.render() def list_roles(self): roles = iam_backend.get_roles() template = self.response_template(LIST_ROLES_TEMPLATE) return template.render(roles=roles) def list_instance_profiles(self): profiles = iam_backend.get_instance_profiles() template = self.response_template(LIST_INSTANCE_PROFILES_TEMPLATE) return template.render(instance_profiles=profiles) def list_instance_profiles_for_role(self): role_name = self._get_param('RoleName') profiles = iam_backend.get_instance_profiles_for_role( role_name=role_name) template = self.response_template( LIST_INSTANCE_PROFILES_FOR_ROLE_TEMPLATE) return template.render(instance_profiles=profiles) def upload_server_certificate(self): cert_name = self._get_param('ServerCertificateName') cert_body = self._get_param('CertificateBody') path = self._get_param('Path') private_key = self._get_param('PrivateKey') cert_chain = self._get_param('CertificateName') cert = iam_backend.upload_server_cert( cert_name, cert_body, private_key, cert_chain=cert_chain, path=path) template = self.response_template(UPLOAD_CERT_TEMPLATE) return template.render(certificate=cert) def list_server_certificates(self, marker=None): certs = iam_backend.get_all_server_certs(marker=marker) template = self.response_template(LIST_SERVER_CERTIFICATES_TEMPLATE) return template.render(server_certificates=certs) def get_server_certificate(self): cert_name = self._get_param('ServerCertificateName') cert = iam_backend.get_server_certificate(cert_name) template = self.response_template(GET_SERVER_CERTIFICATE_TEMPLATE) return template.render(certificate=cert) def delete_server_certificate(self): cert_name = self._get_param('ServerCertificateName') iam_backend.delete_server_certificate(cert_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name="DeleteServerCertificate") def create_group(self): group_name = self._get_param('GroupName') path = self._get_param('Path', '/') group = iam_backend.create_group(group_name, path) template = self.response_template(CREATE_GROUP_TEMPLATE) return template.render(group=group) def get_group(self): group_name = self._get_param('GroupName') group = iam_backend.get_group(group_name) template = self.response_template(GET_GROUP_TEMPLATE) return template.render(group=group) def list_groups(self): groups = iam_backend.list_groups() template = self.response_template(LIST_GROUPS_TEMPLATE) return template.render(groups=groups) def list_groups_for_user(self): user_name = self._get_param('UserName') groups = iam_backend.get_groups_for_user(user_name) template = self.response_template(LIST_GROUPS_FOR_USER_TEMPLATE) return template.render(groups=groups) def put_group_policy(self): group_name = self._get_param('GroupName') policy_name = self._get_param('PolicyName') policy_document = self._get_param('PolicyDocument') iam_backend.put_group_policy(group_name, policy_name, policy_document) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name="PutGroupPolicyResponse") def list_group_policies(self): group_name = self._get_param('GroupName') marker = self._get_param('Marker') max_items = self._get_param('MaxItems') policies = iam_backend.list_group_policies(group_name, marker=marker, max_items=max_items) template = self.response_template(LIST_GROUP_POLICIES_TEMPLATE) return template.render(name="ListGroupPoliciesResponse", policies=policies, marker=marker) def get_group_policy(self): group_name = self._get_param('GroupName') policy_name = self._get_param('PolicyName') policy_result = iam_backend.get_group_policy(group_name, policy_name) template = self.response_template(GET_GROUP_POLICY_TEMPLATE) return template.render(name="GetGroupPolicyResponse", **policy_result) def create_user(self): user_name = self._get_param('UserName') path = self._get_param('Path') user = iam_backend.create_user(user_name, path) template = self.response_template(USER_TEMPLATE) return template.render(action='Create', user=user) def get_user(self): user_name = self._get_param('UserName') if user_name: user = iam_backend.get_user(user_name) else: user = User(name='default_user') # If no user is specific, IAM returns the current user template = self.response_template(USER_TEMPLATE) return template.render(action='Get', user=user) def list_users(self): path_prefix = self._get_param('PathPrefix') marker = self._get_param('Marker') max_items = self._get_param('MaxItems') users = iam_backend.list_users(path_prefix, marker, max_items) template = self.response_template(LIST_USERS_TEMPLATE) return template.render(action='List', users=users) def update_user(self): user_name = self._get_param('UserName') new_path = self._get_param('NewPath') new_user_name = self._get_param('NewUserName') iam_backend.update_user(user_name, new_path, new_user_name) if new_user_name: user = iam_backend.get_user(new_user_name) else: user = iam_backend.get_user(user_name) template = self.response_template(USER_TEMPLATE) return template.render(action='Update', user=user) def create_login_profile(self): user_name = self._get_param('UserName') password = self._get_param('Password') password = self._get_param('Password') user = iam_backend.create_login_profile(user_name, password) template = self.response_template(CREATE_LOGIN_PROFILE_TEMPLATE) return template.render(user=user) def get_login_profile(self): user_name = self._get_param('UserName') user = iam_backend.get_login_profile(user_name) template = self.response_template(GET_LOGIN_PROFILE_TEMPLATE) return template.render(user=user) def update_login_profile(self): user_name = self._get_param('UserName') password = self._get_param('Password') password_reset_required = self._get_param('PasswordResetRequired') user = iam_backend.update_login_profile(user_name, password, password_reset_required) template = self.response_template(UPDATE_LOGIN_PROFILE_TEMPLATE) return template.render(user=user) def add_user_to_group(self): group_name = self._get_param('GroupName') user_name = self._get_param('UserName') iam_backend.add_user_to_group(group_name, user_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='AddUserToGroup') def remove_user_from_group(self): group_name = self._get_param('GroupName') user_name = self._get_param('UserName') iam_backend.remove_user_from_group(group_name, user_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='RemoveUserFromGroup') def get_user_policy(self): user_name = self._get_param('UserName') policy_name = self._get_param('PolicyName') policy_document = iam_backend.get_user_policy(user_name, policy_name) template = self.response_template(GET_USER_POLICY_TEMPLATE) return template.render( user_name=user_name, policy_name=policy_name, policy_document=policy_document.get('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') policy_document = self._get_param('PolicyDocument') iam_backend.put_user_policy(user_name, policy_name, policy_document) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='PutUserPolicy') def delete_user_policy(self): user_name = self._get_param('UserName') policy_name = self._get_param('PolicyName') iam_backend.delete_user_policy(user_name, policy_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='DeleteUserPolicy') def create_access_key(self): user_name = self._get_param('UserName') key = iam_backend.create_access_key(user_name) template = self.response_template(CREATE_ACCESS_KEY_TEMPLATE) return template.render(key=key) def update_access_key(self): user_name = self._get_param('UserName') access_key_id = self._get_param('AccessKeyId') status = self._get_param('Status') iam_backend.update_access_key(user_name, access_key_id, status) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='UpdateAccessKey') def get_access_key_last_used(self): access_key_id = self._get_param('AccessKeyId') last_used_response = iam_backend.get_access_key_last_used(access_key_id) template = self.response_template(GET_ACCESS_KEY_LAST_USED_TEMPLATE) return template.render(user_name=last_used_response["user_name"], last_used=last_used_response["last_used"]) def list_access_keys(self): user_name = self._get_param('UserName') keys = iam_backend.get_all_access_keys(user_name) template = self.response_template(LIST_ACCESS_KEYS_TEMPLATE) return template.render(user_name=user_name, keys=keys) def delete_access_key(self): user_name = self._get_param('UserName') access_key_id = self._get_param('AccessKeyId') iam_backend.delete_access_key(access_key_id, user_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='DeleteAccessKey') def deactivate_mfa_device(self): user_name = self._get_param('UserName') serial_number = self._get_param('SerialNumber') iam_backend.deactivate_mfa_device(user_name, serial_number) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='DeactivateMFADevice') def enable_mfa_device(self): user_name = self._get_param('UserName') serial_number = self._get_param('SerialNumber') authentication_code_1 = self._get_param('AuthenticationCode1') authentication_code_2 = self._get_param('AuthenticationCode2') iam_backend.enable_mfa_device( user_name, serial_number, authentication_code_1, authentication_code_2 ) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='EnableMFADevice') def list_mfa_devices(self): user_name = self._get_param('UserName') devices = iam_backend.list_mfa_devices(user_name) template = self.response_template(LIST_MFA_DEVICES_TEMPLATE) return template.render(user_name=user_name, devices=devices) def delete_user(self): user_name = self._get_param('UserName') iam_backend.delete_user(user_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='DeleteUser') def delete_login_profile(self): user_name = self._get_param('UserName') iam_backend.delete_login_profile(user_name) template = self.response_template(GENERIC_EMPTY_TEMPLATE) return template.render(name='DeleteLoginProfile') def generate_credential_report(self): if iam_backend.report_generated(): template = self.response_template(CREDENTIAL_REPORT_GENERATED) else: template = self.response_template(CREDENTIAL_REPORT_GENERATING) iam_backend.generate_report() return template.render() def get_credential_report(self): report = iam_backend.get_credential_report() template = self.response_template(CREDENTIAL_REPORT) return template.render(report=report) def list_account_aliases(self): aliases = iam_backend.list_account_aliases() template = self.response_template(LIST_ACCOUNT_ALIASES_TEMPLATE) return template.render(aliases=aliases) def create_account_alias(self): alias = self._get_param('AccountAlias') iam_backend.create_account_alias(alias) template = self.response_template(CREATE_ACCOUNT_ALIAS_TEMPLATE) return template.render() def delete_account_alias(self): alias = self._get_param('AccountAlias') iam_backend.delete_account_alias(alias) template = self.response_template(DELETE_ACCOUNT_ALIAS_TEMPLATE) return template.render() def get_account_authorization_details(self): filter_param = self._get_multi_param('Filter.member') account_details = iam_backend.get_account_authorization_details(filter_param) template = self.response_template(GET_ACCOUNT_AUTHORIZATION_DETAILS_TEMPLATE) return template.render( instance_profiles=account_details['instance_profiles'], policies=account_details['managed_policies'], users=account_details['users'], groups=account_details['groups'], roles=account_details['roles'], get_groups_for_user=iam_backend.get_groups_for_user ) def create_saml_provider(self): saml_provider_name = self._get_param('Name') saml_metadata_document = self._get_param('SAMLMetadataDocument') saml_provider = iam_backend.create_saml_provider(saml_provider_name, saml_metadata_document) template = self.response_template(CREATE_SAML_PROVIDER_TEMPLATE) return template.render(saml_provider=saml_provider) def update_saml_provider(self): saml_provider_arn = self._get_param('SAMLProviderArn') saml_metadata_document = self._get_param('SAMLMetadataDocument') saml_provider = iam_backend.update_saml_provider(saml_provider_arn, saml_metadata_document) template = self.response_template(UPDATE_SAML_PROVIDER_TEMPLATE) return template.render(saml_provider=saml_provider) def delete_saml_provider(self): saml_provider_arn = self._get_param('SAMLProviderArn') iam_backend.delete_saml_provider(saml_provider_arn) template = self.response_template(DELETE_SAML_PROVIDER_TEMPLATE) return template.render() def list_saml_providers(self): saml_providers = iam_backend.list_saml_providers() template = self.response_template(LIST_SAML_PROVIDERS_TEMPLATE) return template.render(saml_providers=saml_providers) def get_saml_provider(self): saml_provider_arn = self._get_param('SAMLProviderArn') saml_provider = iam_backend.get_saml_provider(saml_provider_arn) template = self.response_template(GET_SAML_PROVIDER_TEMPLATE) return template.render(saml_provider=saml_provider) def upload_signing_certificate(self): user_name = self._get_param('UserName') cert_body = self._get_param('CertificateBody') cert = iam_backend.upload_signing_certificate(user_name, cert_body) template = self.response_template(UPLOAD_SIGNING_CERTIFICATE_TEMPLATE) return template.render(cert=cert) def update_signing_certificate(self): user_name = self._get_param('UserName') cert_id = self._get_param('CertificateId') status = self._get_param('Status') iam_backend.update_signing_certificate(user_name, cert_id, status) template = self.response_template(UPDATE_SIGNING_CERTIFICATE_TEMPLATE) return template.render() def delete_signing_certificate(self): user_name = self._get_param('UserName') cert_id = self._get_param('CertificateId') iam_backend.delete_signing_certificate(user_name, cert_id) template = self.response_template(DELETE_SIGNING_CERTIFICATE_TEMPLATE) return template.render() def list_signing_certificates(self): user_name = self._get_param('UserName') certs = iam_backend.list_signing_certificates(user_name) template = self.response_template(LIST_SIGNING_CERTIFICATES_TEMPLATE) return template.render(user_name=user_name, certificates=certs) def list_role_tags(self): role_name = self._get_param('RoleName') marker = self._get_param('Marker') max_items = self._get_param('MaxItems', 100) tags, marker = iam_backend.list_role_tags(role_name, marker, max_items) template = self.response_template(LIST_ROLE_TAG_TEMPLATE) return template.render(tags=tags, marker=marker) def tag_role(self): role_name = self._get_param('RoleName') tags = self._get_multi_param('Tags.member') iam_backend.tag_role(role_name, tags) template = self.response_template(TAG_ROLE_TEMPLATE) return template.render() def untag_role(self): role_name = self._get_param('RoleName') tag_keys = self._get_multi_param('TagKeys.member') iam_backend.untag_role(role_name, tag_keys) template = self.response_template(UNTAG_ROLE_TEMPLATE) return template.render() LIST_ENTITIES_FOR_POLICY_TEMPLATE = """ {% for role in roles %} {{ role }} {% endfor %} {% for group in groups %} {{ group }} {% endfor %} false {% for user in users %} {{ user }} {% endfor %} eb358e22-9d1f-11e4-93eb-190ecEXAMPLE """ ATTACH_ROLE_POLICY_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ DETACH_ROLE_POLICY_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ ATTACH_USER_POLICY_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ DETACH_USER_POLICY_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ ATTACH_GROUP_POLICY_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ DETACH_GROUP_POLICY_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ CREATE_POLICY_TEMPLATE = """ {{ policy.arn }} {{ policy.attachment_count }} {{ policy.created_iso_8601 }} {{ policy.default_version_id }} {{ policy.path }} {{ policy.id }} {{ policy.name }} {{ policy.updated_iso_8601 }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_POLICY_TEMPLATE = """ {{ policy.name }} {{ policy.description }} {{ policy.default_version_id }} {{ policy.id }} {{ policy.path }} {{ policy.arn }} {{ policy.attachment_count }} {{ policy.created_iso_8601 }} {{ policy.updated_iso_8601 }} 684f0917-3d22-11e4-a4a0-cffb9EXAMPLE """ LIST_ATTACHED_ROLE_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_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 %} false {% else %} true {{ marker }} {% endif %} {% for policy in policies %} {{ policy.name }} {{ policy.arn }} {% endfor %} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_POLICIES_TEMPLATE = """ {% if marker is none %} false {% else %} true {{ marker }} {% endif %} {% for policy in policies %} {{ policy.arn }} {{ policy.attachment_count }} {{ policy.created_iso_8601 }} {{ policy.default_version_id }} {{ policy.path }} {{ policy.id }} {{ policy.name }} {{ policy.updated_iso_8601 }} {% endfor %} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GENERIC_EMPTY_TEMPLATE = """<{{ name }}Response> 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ CREATE_INSTANCE_PROFILE_TEMPLATE = """ {{ profile.id }} {{ profile.name }} {{ profile.path }} {{ profile.arn }} {{ profile.created_iso_8601 }} 974142ee-99f1-11e1-a4c3-27EXAMPLE804 """ GET_INSTANCE_PROFILE_TEMPLATE = """ {{ profile.id }} {% for role in profile.roles %} {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% endfor %} {{ profile.name }} {{ profile.path }} {{ profile.arn }} {{ profile.created_iso_8601 }} 37289fda-99f2-11e1-a4c3-27EXAMPLE804 """ CREATE_ROLE_TEMPLATE = """ {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% if role.permissions_boundary %} PermissionsBoundaryPolicy {{ role.permissions_boundary }} {% endif %} 4a93ceee-9966-11e1-b624-b1aEXAMPLE7c """ GET_ROLE_POLICY_TEMPLATE = """ {{ policy_name }} {{ role_name }} {{ policy_document }} 7e7cd8bc-99ef-11e1-a4c3-27EXAMPLE804 """ UPDATE_ROLE_TEMPLATE = """ df37e965-9967-11e1-a4c3-270EXAMPLE04 """ UPDATE_ROLE_DESCRIPTION_TEMPLATE = """ {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% if role.tags %} {% for tag in role.get_tags() %} {{ tag['Key'] }} {{ tag['Value'] }} {% endfor %} {% endif %} df37e965-9967-11e1-a4c3-270EXAMPLE04 """ GET_ROLE_TEMPLATE = """ {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% if role.tags %} {% for tag in role.get_tags() %} {{ tag['Key'] }} {{ tag['Value'] }} {% endfor %} {% endif %} df37e965-9967-11e1-a4c3-270EXAMPLE04 """ ADD_ROLE_TO_INSTANCE_PROFILE_TEMPLATE = """ 12657608-99f2-11e1-a4c3-27EXAMPLE804 """ REMOVE_ROLE_FROM_INSTANCE_PROFILE_TEMPLATE = """ 12657608-99f2-11e1-a4c3-27EXAMPLE804 """ LIST_ROLES_TEMPLATE = """ false {% for role in roles %} {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% if role.permissions_boundary %} PermissionsBoundaryPolicy {{ role.permissions_boundary }} {% endif %} {% endfor %} 20f7279f-99ee-11e1-a4c3-27EXAMPLE804 """ LIST_ROLE_POLICIES = """ {% for policy_name in role_policies %} {{ policy_name }} {% endfor %} false 8c7e1816-99f0-11e1-a4c3-27EXAMPLE804 """ CREATE_POLICY_VERSION_TEMPLATE = """ {{ policy_version.document }} {{ policy_version.version_id }} {{ policy_version.is_default }} {{ policy_version.created_iso_8601 }} 20f7279f-99ee-11e1-a4c3-27EXAMPLE804 """ GET_POLICY_VERSION_TEMPLATE = """ {{ policy_version.document }} {{ policy_version.version_id }} {{ policy_version.is_default }} {{ policy_version.created_iso_8601 }} 20f7279f-99ee-11e1-a4c3-27EXAMPLE804 """ LIST_POLICY_VERSIONS_TEMPLATE = """ false {% for policy_version in policy_versions %} {{ policy_version.document }} {{ policy_version.version_id }} {{ policy_version.is_default }} {{ policy_version.created_iso_8601 }} {% endfor %} 20f7279f-99ee-11e1-a4c3-27EXAMPLE804 """ LIST_INSTANCE_PROFILES_TEMPLATE = """ false {% for instance in instance_profiles %} {{ instance.id }} {% for role in instance.roles %} {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% endfor %} {{ instance.name }} {{ instance.path }} {{ instance.arn }} {{ instance.created_iso_8601 }} {% endfor %} fd74fa8d-99f3-11e1-a4c3-27EXAMPLE804 """ UPLOAD_CERT_TEMPLATE = """ {{ certificate.cert_name }} {% if certificate.path %} {{ certificate.path }} {% endif %} {{ certificate.arn }} 2010-05-08T01:02:03.004Z ASCACKCEVSQ6C2EXAMPLE 2012-05-08T01:02:03.004Z 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_SERVER_CERTIFICATES_TEMPLATE = """ false {% for certificate in server_certificates %} {{ certificate.cert_name }} {% if certificate.path %} {{ certificate.path }} {% endif %} {{ certificate.arn }} 2010-05-08T01:02:03.004Z ASCACKCEVSQ6C2EXAMPLE 2012-05-08T01:02:03.004Z {% endfor %} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_SERVER_CERTIFICATE_TEMPLATE = """ {{ certificate.cert_name }} {% if certificate.path %} {{ certificate.path }} {% endif %} {{ certificate.arn }} 2010-05-08T01:02:03.004Z ASCACKCEVSQ6C2EXAMPLE 2012-05-08T01:02:03.004Z {{ certificate.cert_body }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ CREATE_GROUP_TEMPLATE = """ {{ group.path }} {{ group.name }} {{ group.id }} {{ group.arn }} {{ group.created_iso_8601 }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_GROUP_TEMPLATE = """ {{ group.path }} {{ group.name }} {{ group.id }} {{ group.arn }} {{ group.created_iso_8601 }} {% for user in group.users %} {{ user.path }} {{ user.name }} {{ user.id }} {{ user.arn }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_GROUPS_TEMPLATE = """ {% for group in groups %} {{ group.path }} {{ group.name }} {{ group.id }} {{ group.arn }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_GROUPS_FOR_USER_TEMPLATE = """ {% for group in groups %} {{ group.path }} {{ group.name }} {{ group.id }} {{ group.arn }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_GROUP_POLICIES_TEMPLATE = """ {% if marker is none %} false {% else %} true {{ marker }} {% endif %} {% for policy in policies %} {{ policy }} {% endfor %} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_GROUP_POLICY_TEMPLATE = """ {{ policy_name }} {{ group_name }} {{ policy_document }} 7e7cd8bc-99ef-11e1-a4c3-27EXAMPLE804 """ USER_TEMPLATE = """<{{ action }}UserResponse> <{{ action }}UserResult> {{ user.path }} {{ user.name }} {{ user.id }} {{ user.created_iso_8601 }} {{ user.arn }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_USERS_TEMPLATE = """<{{ action }}UsersResponse> <{{ action }}UsersResult> {% for user in users %} {{ user.id }} {{ user.path }} {{ user.name }} {{ user.created_iso_8601 }} {{ user.arn }} {% endfor %} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ CREATE_LOGIN_PROFILE_TEMPLATE = """ {{ user.name }} {{ user.created_iso_8601 }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_LOGIN_PROFILE_TEMPLATE = """ {{ user.name }} {{ user.created_iso_8601 }} {% if user.password_reset_required %} true {% endif %} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ UPDATE_LOGIN_PROFILE_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_USER_POLICY_TEMPLATE = """ {{ user_name }} {{ policy_name }} {{ policy_document }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_USER_POLICIES_TEMPLATE = """ {% for policy in policies %} {{ policy }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ CREATE_ACCESS_KEY_TEMPLATE = """ {{ key.user_name }} {{ key.access_key_id }} {{ key.status }} {{ key.secret_access_key }} {{ key.created_iso_8601 }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_ACCESS_KEYS_TEMPLATE = """ {{ user_name }} {% for key in keys %} {{ user_name }} {{ key.access_key_id }} {{ key.status }} {{ key.created_iso_8601 }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_ACCESS_KEY_LAST_USED_TEMPLATE = """ {{ user_name }} {{ last_used }} """ CREDENTIAL_REPORT_GENERATING = """ STARTED No report exists. Starting a new report generation task fa788a82-aa8a-11e4-a278-1786c418872b" """ CREDENTIAL_REPORT_GENERATED = """ COMPLETE fa788a82-aa8a-11e4-a278-1786c418872b" """ CREDENTIAL_REPORT = """ {{ report }} 2015-02-02T20:02:02Z text/csv fa788a82-aa8a-11e4-a278-1786c418872b" """ LIST_INSTANCE_PROFILES_FOR_ROLE_TEMPLATE = """ false {% for profile in instance_profiles %} {{ profile.id }} {% for role in profile.roles %} {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% endfor %} {{ profile.name }} {{ profile.path }} {{ profile.arn }} {{ profile.created_iso_8601 }} {% endfor %} 6a8c3992-99f4-11e1-a4c3-27EXAMPLE804 """ LIST_MFA_DEVICES_TEMPLATE = """ {% for device in devices %} {{ user_name }} {{ device.serial_number }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_ACCOUNT_ALIASES_TEMPLATE = """ false {% for alias in aliases %} {{ alias }} {% endfor %} c5a076e9-f1b0-11df-8fbe-45274EXAMPLE """ CREATE_ACCOUNT_ALIAS_TEMPLATE = """ 36b5db08-f1b0-11df-8fbe-45274EXAMPLE """ DELETE_ACCOUNT_ALIAS_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_GROUPS_FOR_USER_TEMPLATE = """ {% for group in groups %} {{ group.path }} {{ group.name }} {{ group.id }} {{ group.arn }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ GET_ACCOUNT_AUTHORIZATION_DETAILS_TEMPLATE = """ false {% for user in users %} {% for group in get_groups_for_user(user.name) %} {{ group.name }} {% endfor %} {% for policy in user.managed_policies %} {{ user.managed_policies[policy].name }} {{ policy }} {% endfor %} {{ user.id }} {{ user.path }} {{ user.name }} {{ user.arn }} {{ user.created_iso_8601 }} {% endfor %} {% for group in groups %} {{ group.id }} {% for policy_arn in group.managed_policies %} {{ group.managed_policies[policy_arn].name }} {{ policy_arn }} {% endfor %} {{ group.name }} {{ group.path }} {{ group.arn }} {{ group.created_iso_8601 }} {% for policy in group.policies %} {{ policy }} {{ group.get_policy(policy) }} {% endfor %} {% endfor %} {% for role in roles %} {% for inline_policy in role.policies %} {{ inline_policy }} {{ role.policies[inline_policy] }} {% endfor %} {% for policy_arn in role.managed_policies %} {{ role.managed_policies[policy_arn].name }} {{ policy_arn }} {% endfor %} {% for tag in role.get_tags() %} {{ tag['Key'] }} {{ tag['Value'] }} {% endfor %} {% for profile in instance_profiles %} {{ profile.id }} {% for role in profile.roles %} {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% endfor %} {{ profile.name }} {{ profile.path }} {{ profile.arn }} {{ profile.created_iso_8601 }} {% endfor %} {{ role.path }} {{ role.arn }} {{ role.name }} {{ role.assume_role_policy_document }} {{ role.created_iso_8601 }} {{ role.id }} {% endfor %} {% for policy in policies %} {{ policy.name }} {{ policy.default_version_id }} {{ policy.id }} {{ policy.path }} {% for policy_version in policy.versions %} {{ policy_version.document }} {{ policy_version.is_default }} {{ policy_version.version_id }} {{ policy_version.created_iso_8601 }} {% endfor %} {{ policy.arn }} 1 {{ policy.created_iso_8601 }} true {{ policy.updated_iso_8601 }} {% endfor %} 92e79ae7-7399-11e4-8c85-4b53eEXAMPLE """ CREATE_SAML_PROVIDER_TEMPLATE = """ {{ saml_provider.arn }} 29f47818-99f5-11e1-a4c3-27EXAMPLE804 """ LIST_SAML_PROVIDERS_TEMPLATE = """ {% for saml_provider in saml_providers %} {{ saml_provider.arn }} 2032-05-09T16:27:11Z 2012-05-09T16:27:03Z {% endfor %} fd74fa8d-99f3-11e1-a4c3-27EXAMPLE804 """ GET_SAML_PROVIDER_TEMPLATE = """ 2012-05-09T16:27:11Z 2015-12-31T21:59:59Z {{ saml_provider.saml_metadata_document }} 29f47818-99f5-11e1-a4c3-27EXAMPLE804 """ DELETE_SAML_PROVIDER_TEMPLATE = """ c749ee7f-99ef-11e1-a4c3-27EXAMPLE804 """ UPDATE_SAML_PROVIDER_TEMPLATE = """ {{ saml_provider.arn }} 29f47818-99f5-11e1-a4c3-27EXAMPLE804 """ UPLOAD_SIGNING_CERTIFICATE_TEMPLATE = """ {{ cert.user_name }} {{ cert.id }} {{ cert.body }} {{ cert.status }} 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ UPDATE_SIGNING_CERTIFICATE_TEMPLATE = """ EXAMPLE8-90ab-cdef-fedc-ba987EXAMPLE """ DELETE_SIGNING_CERTIFICATE_TEMPLATE = """ 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ LIST_SIGNING_CERTIFICATES_TEMPLATE = """ {{ user_name }} {% for cert in certificates %} {{ user_name }} {{ cert.id }} {{ cert.body }} {{ cert.status }} {% endfor %} false 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE """ TAG_ROLE_TEMPLATE = """ EXAMPLE8-90ab-cdef-fedc-ba987EXAMPLE """ LIST_ROLE_TAG_TEMPLATE = """ {{ 'true' if marker else 'false' }} {% if marker %} {{ marker }} {% endif %} {% for tag in tags %} {{ tag['Key'] }} {{ tag['Value'] }} {% endfor %} EXAMPLE8-90ab-cdef-fedc-ba987EXAMPLE """ UNTAG_ROLE_TEMPLATE = """ EXAMPLE8-90ab-cdef-fedc-ba987EXAMPLE """