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")
description = self._get_param("Description")
tags = self._get_multi_param("Tags.member")
max_session_duration = self._get_param("MaxSessionDuration", 3600)
role = iam_backend.create_role(
role_name,
assume_role_policy_document,
path,
permissions_boundary,
description,
tags,
max_session_duration,
)
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")
max_session_duration = self._get_param("MaxSessionDuration", 3600)
role = iam_backend.update_role(role_name, description, max_session_duration)
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 delete_instance_profile(self):
profile_name = self._get_param("InstanceProfileName")
profile = iam_backend.delete_instance_profile(profile_name)
template = self.response_template(DELETE_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_certificate(
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 delete_group(self):
group_name = self._get_param("GroupName")
iam_backend.delete_group(group_name)
template = self.response_template(GENERIC_EMPTY_TEMPLATE)
return template.render(name="DeleteGroup")
def create_user(self):
user_name = self._get_param("UserName")
path = self._get_param("Path")
tags = self._get_multi_param("Tags.member")
user = iam_backend.create_user(user_name, path, tags)
template = self.response_template(USER_TEMPLATE)
return template.render(action="Create", user=user)
def get_user(self):
user_name = self._get_param("UserName")
if not user_name:
access_key_id = self.get_current_user()
user = iam_backend.get_user_from_access_key_id(access_key_id)
if user is None:
user = User("default_user")
else:
user = iam_backend.get_user(user_name)
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")
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 list_user_tags(self):
user_name = self._get_param("UserName")
tags = iam_backend.list_user_tags(user_name)
template = self.response_template(LIST_USER_TAGS_TEMPLATE)
return template.render(user_tags=tags or [])
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")
if not user_name:
access_key_id = self.get_current_user()
access_key = iam_backend.get_access_key_last_used(access_key_id)
user_name = access_key["user_name"]
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")
if not user_name:
access_key = iam_backend.get_access_key_last_used(access_key_id)
user_name = access_key["user_name"]
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")
if not user_name:
access_key_id = self.get_current_user()
access_key = iam_backend.get_access_key_last_used(access_key_id)
user_name = access_key["user_name"]
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")
if not user_name:
access_key = iam_backend.get_access_key_last_used(access_key_id)
user_name = access_key["user_name"]
iam_backend.delete_access_key(access_key_id, user_name)
template = self.response_template(GENERIC_EMPTY_TEMPLATE)
return template.render(name="DeleteAccessKey")
def upload_ssh_public_key(self):
user_name = self._get_param("UserName")
ssh_public_key_body = self._get_param("SSHPublicKeyBody")
key = iam_backend.upload_ssh_public_key(user_name, ssh_public_key_body)
template = self.response_template(UPLOAD_SSH_PUBLIC_KEY_TEMPLATE)
return template.render(key=key)
def get_ssh_public_key(self):
user_name = self._get_param("UserName")
ssh_public_key_id = self._get_param("SSHPublicKeyId")
key = iam_backend.get_ssh_public_key(user_name, ssh_public_key_id)
template = self.response_template(GET_SSH_PUBLIC_KEY_TEMPLATE)
return template.render(key=key)
def list_ssh_public_keys(self):
user_name = self._get_param("UserName")
keys = iam_backend.get_all_ssh_public_keys(user_name)
template = self.response_template(LIST_SSH_PUBLIC_KEYS_TEMPLATE)
return template.render(keys=keys)
def update_ssh_public_key(self):
user_name = self._get_param("UserName")
ssh_public_key_id = self._get_param("SSHPublicKeyId")
status = self._get_param("Status")
iam_backend.update_ssh_public_key(user_name, ssh_public_key_id, status)
template = self.response_template(UPDATE_SSH_PUBLIC_KEY_TEMPLATE)
return template.render()
def delete_ssh_public_key(self):
user_name = self._get_param("UserName")
ssh_public_key_id = self._get_param("SSHPublicKeyId")
iam_backend.delete_ssh_public_key(user_name, ssh_public_key_id)
template = self.response_template(DELETE_SSH_PUBLIC_KEY_TEMPLATE)
return template.render()
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 create_virtual_mfa_device(self):
path = self._get_param("Path")
virtual_mfa_device_name = self._get_param("VirtualMFADeviceName")
virtual_mfa_device = iam_backend.create_virtual_mfa_device(
virtual_mfa_device_name, path
)
template = self.response_template(CREATE_VIRTUAL_MFA_DEVICE_TEMPLATE)
return template.render(device=virtual_mfa_device)
def delete_virtual_mfa_device(self):
serial_number = self._get_param("SerialNumber")
iam_backend.delete_virtual_mfa_device(serial_number)
template = self.response_template(DELETE_VIRTUAL_MFA_DEVICE_TEMPLATE)
return template.render()
def list_virtual_mfa_devices(self):
assignment_status = self._get_param("AssignmentStatus", "Any")
marker = self._get_param("Marker")
max_items = self._get_param("MaxItems", 100)
devices, marker = iam_backend.list_virtual_mfa_devices(
assignment_status, marker, max_items
)
template = self.response_template(LIST_VIRTUAL_MFA_DEVICES_TEMPLATE)
return template.render(devices=devices, marker=marker)
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_policy(self):
policy_arn = self._get_param("PolicyArn")
iam_backend.delete_policy(policy_arn)
template = self.response_template(GENERIC_EMPTY_TEMPLATE)
return template.render(name="DeletePolicy")
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()
def create_open_id_connect_provider(self):
open_id_provider_url = self._get_param("Url")
thumbprint_list = self._get_multi_param("ThumbprintList.member")
client_id_list = self._get_multi_param("ClientIDList.member")
open_id_provider = iam_backend.create_open_id_connect_provider(
open_id_provider_url, thumbprint_list, client_id_list
)
template = self.response_template(CREATE_OPEN_ID_CONNECT_PROVIDER_TEMPLATE)
return template.render(open_id_provider=open_id_provider)
def delete_open_id_connect_provider(self):
open_id_provider_arn = self._get_param("OpenIDConnectProviderArn")
iam_backend.delete_open_id_connect_provider(open_id_provider_arn)
template = self.response_template(DELETE_OPEN_ID_CONNECT_PROVIDER_TEMPLATE)
return template.render()
def get_open_id_connect_provider(self):
open_id_provider_arn = self._get_param("OpenIDConnectProviderArn")
open_id_provider = iam_backend.get_open_id_connect_provider(
open_id_provider_arn
)
template = self.response_template(GET_OPEN_ID_CONNECT_PROVIDER_TEMPLATE)
return template.render(open_id_provider=open_id_provider)
def list_open_id_connect_providers(self):
open_id_provider_arns = iam_backend.list_open_id_connect_providers()
template = self.response_template(LIST_OPEN_ID_CONNECT_PROVIDERS_TEMPLATE)
return template.render(open_id_provider_arns=open_id_provider_arns)
def update_account_password_policy(self):
allow_change_password = self._get_bool_param(
"AllowUsersToChangePassword", False
)
hard_expiry = self._get_bool_param("HardExpiry")
max_password_age = self._get_int_param("MaxPasswordAge")
minimum_password_length = self._get_int_param("MinimumPasswordLength", 6)
password_reuse_prevention = self._get_int_param("PasswordReusePrevention")
require_lowercase_characters = self._get_bool_param(
"RequireLowercaseCharacters", False
)
require_numbers = self._get_bool_param("RequireNumbers", False)
require_symbols = self._get_bool_param("RequireSymbols", False)
require_uppercase_characters = self._get_bool_param(
"RequireUppercaseCharacters", False
)
iam_backend.update_account_password_policy(
allow_change_password,
hard_expiry,
max_password_age,
minimum_password_length,
password_reuse_prevention,
require_lowercase_characters,
require_numbers,
require_symbols,
require_uppercase_characters,
)
template = self.response_template(UPDATE_ACCOUNT_PASSWORD_POLICY_TEMPLATE)
return template.render()
def get_account_password_policy(self):
account_password_policy = iam_backend.get_account_password_policy()
template = self.response_template(GET_ACCOUNT_PASSWORD_POLICY_TEMPLATE)
return template.render(password_policy=account_password_policy)
def delete_account_password_policy(self):
iam_backend.delete_account_password_policy()
template = self.response_template(DELETE_ACCOUNT_PASSWORD_POLICY_TEMPLATE)
return template.render()
def get_account_summary(self):
account_summary = iam_backend.get_account_summary()
template = self.response_template(GET_ACCOUNT_SUMMARY_TEMPLATE)
return template.render(summary_map=account_summary.summary_map)
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
{{ name }}Response>"""
CREATE_INSTANCE_PROFILE_TEMPLATE = """
{{ profile.id }}
{{ profile.name }}
{{ profile.path }}
{{ profile.arn }}
{{ profile.created_iso_8601 }}
974142ee-99f1-11e1-a4c3-27EXAMPLE804
"""
DELETE_INSTANCE_PROFILE_TEMPLATE = """
786dff92-6cfd-4fa4-b1eb-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 }}
{% if role.description %}
{{role.description}}
{% endif %}
{{ role.created_iso_8601 }}
{{ role.id }}
{{ role.max_session_duration }}
{% if role.permissions_boundary %}
PermissionsBoundaryPolicy
{{ role.permissions_boundary }}
{% endif %}
{% if role.tags %}
{% for tag in role.get_tags() %}
{{ tag['Key'] }}
{{ tag['Value'] }}
{% endfor %}
{% 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.description}}
{{ role.created_iso_8601 }}
{{ role.id }}
{{ role.max_session_duration }}
{% 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 }}
{% if role.description %}
{{role.description}}
{% endif %}
{{ role.created_iso_8601 }}
{{ role.id }}
{{ role.max_session_duration }}
{% 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 | lower }}
{{ 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 | lower }}
{{ 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 | lower }}
{{ 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 }}
{{ group.created_iso_8601 }}
{% 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 }}
{{ action }}UserResult>
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
{{ action }}UserResponse>"""
LIST_USERS_TEMPLATE = """<{{ action }}UsersResponse>
<{{ action }}UsersResult>
{% for user in users %}
{{ user.id }}
{{ user.path }}
{{ user.name }}
{{ user.created_iso_8601 }}
{{ user.arn }}
{% endfor %}
{{ action }}UsersResult>
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
{{ action }}UsersResponse>"""
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
"""
LIST_USER_TAGS_TEMPLATE = """
{% for tag in user_tags %}
-
{{ tag.Key }}
{{ tag.Value }}
{% 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 }}
{% if last_used %}
{{ last_used }}
{% endif %}
N/A
N/A
"""
UPLOAD_SSH_PUBLIC_KEY_TEMPLATE = """
{{ key.user_name }}
{{ key.ssh_public_key_body }}
{{ key.ssh_public_key_id }}
{{ key.fingerprint }}
{{ key.status }}
{{ key.uploaded_iso_8601 }}
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
GET_SSH_PUBLIC_KEY_TEMPLATE = """
{{ key.user_name }}
{{ key.ssh_public_key_body }}
{{ key.ssh_public_key_id }}
{{ key.fingerprint }}
{{ key.status }}
{{ key.uploaded_iso_8601 }}
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
LIST_SSH_PUBLIC_KEYS_TEMPLATE = """
{% for key in keys %}
{{ key.user_name }}
{{ key.ssh_public_key_id }}
{{ key.status }}
{{ key.uploaded_iso_8601 }}
{% endfor %}
false
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
UPDATE_SSH_PUBLIC_KEY_TEMPLATE = """
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
DELETE_SSH_PUBLIC_KEY_TEMPLATE = """
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
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
"""
CREATE_VIRTUAL_MFA_DEVICE_TEMPLATE = """
{{ device.serial_number }}
{{ device.base32_string_seed }}
{{ device.qr_code_png }}
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
DELETE_VIRTUAL_MFA_DEVICE_TEMPLATE = """
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
LIST_VIRTUAL_MFA_DEVICES_TEMPLATE = """
{% if marker is none %}
false
{% else %}
true
{{ marker }}
{% endif %}
{% for device in devices %}
{{ device.serial_number }}
{% if device.enable_date %}
{{ device.enabled_iso_8601 }}
{% endif %}
{% if device.user %}
{{ device.user.path }}
{{ device.user.name }}
{{ device.user.id }}
{{ device.user.created_iso_8601 }}
{{ device.user.arn }}
{% endif %}
{% endfor %}
b61ce1b1-0401-11e1-b2f8-2dEXAMPLEbfc
"""
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 }}
{{ group.created_iso_8601 }}
{% 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 }}
{% if user.policies %}
{% for policy in user.policies %}
{{ policy }}
{{ user.policies[policy] }}
{% endfor %}
{% endif %}
{% 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.policies[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.description}}
{{ role.created_iso_8601 }}
{{ role.id }}
{% if role.permissions_boundary %}
PermissionsBoundaryPolicy
{{ role.permissions_boundary }}
{% endif %}
{% 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 | lower }}
{{ 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
"""
CREATE_OPEN_ID_CONNECT_PROVIDER_TEMPLATE = """
{{ open_id_provider.arn }}
f248366a-4f64-11e4-aefa-bfd6aEXAMPLE
"""
DELETE_OPEN_ID_CONNECT_PROVIDER_TEMPLATE = """
b5e49e29-4f64-11e4-aefa-bfd6aEXAMPLE
"""
GET_OPEN_ID_CONNECT_PROVIDER_TEMPLATE = """
{% for thumbprint in open_id_provider.thumbprint_list %}
{{ thumbprint }}
{% endfor %}
{{ open_id_provider.created_iso_8601 }}
{% for client_id in open_id_provider.client_id_list %}
{{ client_id }}
{% endfor %}
{{ open_id_provider.url }}
2c91531b-4f65-11e4-aefa-bfd6aEXAMPLE
"""
LIST_OPEN_ID_CONNECT_PROVIDERS_TEMPLATE = """
{% for open_id_provider_arn in open_id_provider_arns %}
{{ open_id_provider_arn }}
{% endfor %}
de2c0228-4f63-11e4-aefa-bfd6aEXAMPLE
"""
UPDATE_ACCOUNT_PASSWORD_POLICY_TEMPLATE = """
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
GET_ACCOUNT_PASSWORD_POLICY_TEMPLATE = """
{{ password_policy.allow_users_to_change_password | lower }}
{{ password_policy.expire_passwords | lower }}
{% if password_policy.hard_expiry %}
{{ password_policy.hard_expiry | lower }}
{% endif %}
{% if password_policy.max_password_age %}
{{ password_policy.max_password_age }}
{% endif %}
{{ password_policy.minimum_password_length }}
{% if password_policy.password_reuse_prevention %}
{{ password_policy.password_reuse_prevention }}
{% endif %}
{{ password_policy.require_lowercase_characters | lower }}
{{ password_policy.require_numbers | lower }}
{{ password_policy.require_symbols | lower }}
{{ password_policy.require_uppercase_characters | lower }}
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
DELETE_ACCOUNT_PASSWORD_POLICY_TEMPLATE = """
7a62c49f-347e-4fc4-9331-6e8eEXAMPLE
"""
GET_ACCOUNT_SUMMARY_TEMPLATE = """
{% for key, value in summary_map.items() %}
{{ key }}
{{ value }}
{% endfor %}
85cb9b90-ac28-11e4-a88d-97964EXAMPLE
"""