These types of resources are supported:
- IAM account alias
- IAM password policy
- IAM user
- IAM user login profile
- IAM group
- IAM role
- IAM policy
- IAM access key
- IAM SSH public key
- Cross-account access. Define IAM roles using iam_assumable_roleoriam_assumable_rolessubmodules in "resource AWS accounts (prod, staging, dev)" and IAM groups and users usingiam-group-with-assumable-roles-policysubmodule in "IAM AWS Account" to setup access controls between accounts. See iam-group-with-assumable-roles-policy example for more details.
- Individual IAM resources (users, roles, policies). See usage snippets and examples listed below.
iam-account:
module "iam_account" {
  source = "terraform-aws-modules/iam/aws//modules/iam-account"
  account_alias = "awesome-company"
  minimum_password_length = 37
  require_numbers         = false
}iam-assumable-role:
module "iam_assumable_role" {
  source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role"
  trusted_role_arns = [
    "arn:aws:iam::307990089504:root",
    "arn:aws:iam::835367859851:user/anton",
  ]
  create_role = true
  role_name         = "custom"
  role_requires_mfa = true
  custom_role_policy_arns = [
    "arn:aws:iam::aws:policy/AmazonCognitoReadOnly",
    "arn:aws:iam::aws:policy/AlexaForBusinessFullAccess",
  ]
}iam-assumable-roles:
module "iam_assumable_roles" {
  source = "terraform-aws-modules/iam/aws//modules/iam-assumable-roles"
  trusted_role_arns = [
    "arn:aws:iam::307990089504:root",
    "arn:aws:iam::835367859851:user/anton",
  ]
  create_admin_role = true
  create_poweruser_role = true
  poweruser_role_name   = "developer"
  create_readonly_role       = true
  readonly_role_requires_mfa = false
}iam-assumable-roles-with-saml:
module "iam_assumable_roles_with_saml" {
  source = "terraform-aws-modules/iam/aws//modules/iam-assumable-roles-with-saml"
  create_admin_role = true
  create_poweruser_role = true
  poweruser_role_name   = "developer"
  create_readonly_role = true
  provider_name = "idp_saml"
  provider_id   = "arn:aws:iam::235367859851:saml-provider/idp_saml"
}iam-user:
module "iam_user" {
  source = "terraform-aws-modules/iam/aws//modules/iam-user"
  name          = "vasya.pupkin"
  force_destroy = true
  pgp_key = "keybase:test"
  password_reset_required = false
}iam-policy:
module "iam_policy" {
  source = "terraform-aws-modules/iam/aws//modules/iam-policy"
  name        = "example"
  path        = "/"
  description = "My example policy"
  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:Describe*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}iam-group-with-assumable-roles-policy:
module "iam_group_with_assumable_roles_policy" {
  source = "terraform-aws-modules/iam/aws//modules/iam-group-with-assumable-roles-policy"
  name = "production-readonly"
  assumable_roles = [
    "arn:aws:iam::835367859855:role/readonly"  # these roles can be created using `iam_assumable_roles` submodule
  ]
  
  group_users = [
    "user1",
    "user2"
  ]
}iam-group-with-policies:
module "iam_group_with_policies" {
  source = "terraform-aws-modules/iam/aws//modules/iam-group-with-policies"
  name = "superadmins"
  group_users = [
    "user1",
    "user2"
  ]
  attach_iam_self_management_policy = true
  custom_group_policy_arns = [
    "arn:aws:iam::aws:policy/AdministratorAccess",
  ]
  custom_group_policies = [
    {
      name   = "AllowS3Listing"
      policy = "${data.aws_iam_policy_document.sample.json}"
    }
  ]
}AWS published IAM Best Practices and this Terraform module was created to help with some of points listed there:
Use iam-user module module to manage IAM users.
Use iam-assumable-roles module to create IAM roles with managed policies to support common tasks (admin, poweruser or readonly).
Use iam-group-with-assumable-roles-policy module to manage IAM groups of users who can assume roles.
Use iam-group-with-policies module to manage IAM groups of users where specified IAM policies are allowed.
Use iam-account module to set password policy for your IAM users.
Terraform can't configure MFA for the user. It is only possible via AWS Console and AWS CLI.
iam-assumable-role, iam-assumable-roles, iam-assumable-roles-with-saml and iam-group-with-assumable-roles-policy modules provide complete set of functionality required for this.
iam-assumable-roles module can be configured to require valid MFA token when different roles are assumed (for example, admin role requires MFA, but readonly - does not).
Use iam-policy module module to manage IAM policy.
- complete - Create all required resources to allow one group of users to assume privileged role, while another group of users can only assume readonly role.
- iam-account - Set AWS account alias and password policy
- iam-assumable-role - Create individual IAM role which can be assumed from specified ARNs (AWS accounts, IAM users, etc)
- iam-assumable-roles - Create several IAM roles which can be assumed from specified ARNs (AWS accounts, IAM users, etc)
- iam-assumable-roles-with-saml - Create several IAM roles which can be assumed by users with a SAML Identity Provider
- iam-group-with-assumable-roles-policy - IAM group with users who are allowed to assume IAM roles in the same or in separate AWS account
- iam-group-with-policies - IAM group with users who are allowed specified IAM policies (eg, "manage their own IAM user")
- iam-group-complete - IAM group with users who are allowed to assume IAM roles in another AWS account and have access to specified IAM policies
- iam-user - Add IAM user, login profile and access keys (with PGP enabled or disabled)
- iam-policy - Create IAM policy
Module managed by Anton Babenko.
Apache 2 Licensed. See LICENSE for full details.