Skip to content

Commit 4fef697

Browse files
authored
enh: configure AWS account password policy (#287)
1 parent b452901 commit 4fef697

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

terraform/layer1-aws/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
|------|------|
3535
| [aws_cloudtrail.main](https://registry.terraform.io/providers/aws/4.10.0/docs/resources/cloudtrail) | resource |
3636
| [aws_ebs_encryption_by_default.this](https://registry.terraform.io/providers/aws/4.10.0/docs/resources/ebs_encryption_by_default) | resource |
37+
| [aws_iam_account_password_policy.default](https://registry.terraform.io/providers/aws/4.10.0/docs/resources/iam_account_password_policy) | resource |
3738
| [aws_kms_key.eks](https://registry.terraform.io/providers/aws/4.10.0/docs/resources/kms_key) | resource |
3839
| [aws_s3_bucket.cloudtrail](https://registry.terraform.io/providers/aws/4.10.0/docs/resources/s3_bucket) | resource |
3940
| [aws_s3_bucket_acl.cloudtrail](https://registry.terraform.io/providers/aws/4.10.0/docs/resources/s3_bucket_acl) | resource |
@@ -59,6 +60,7 @@
5960
|------|-------------|------|---------|:--------:|
6061
| <a name="input_allowed_account_ids"></a> [allowed\_account\_ids](#input\_allowed\_account\_ids) | List of allowed AWS account IDs | `list` | `[]` | no |
6162
| <a name="input_allowed_ips"></a> [allowed\_ips](#input\_allowed\_ips) | IP addresses allowed to connect to private resources | `list(any)` | `[]` | no |
63+
| <a name="input_aws_account_password_policy"></a> [aws\_account\_password\_policy](#input\_aws\_account\_password\_policy) | n/a | `any` | <pre>{<br> "allow_users_to_change_password": true,<br> "create": true,<br> "hard_expiry": true,<br> "max_password_age": "90",<br> "minimum_password_length": "14",<br> "password_reuse_prevention": "10",<br> "require_lowercase_characters": true,<br> "require_numbers": true,<br> "require_symbols": true,<br> "require_uppercase_characters": true<br>}</pre> | no |
6264
| <a name="input_aws_cis_benchmark_alerts"></a> [aws\_cis\_benchmark\_alerts](#input\_aws\_cis\_benchmark\_alerts) | AWS CIS Benchmark alerts configuration | `any` | <pre>{<br> "email": "[email protected]",<br> "enabled": "false",<br> "rules": {<br> "aws_config_changes_enabled": true,<br> "cloudtrail_configuration_changes_enabled": true,<br> "console_login_failed_enabled": true,<br> "consolelogin_without_mfa_enabled": true,<br> "iam_policy_changes_enabled": true,<br> "kms_cmk_delete_or_disable_enabled": true,<br> "nacl_changes_enabled": true,<br> "network_gateway_changes_enabled": true,<br> "organization_changes_enabled": true,<br> "parameter_store_actions_enabled": true,<br> "route_table_changes_enabled": true,<br> "s3_bucket_policy_changes_enabled": true,<br> "secrets_manager_actions_enabled": true,<br> "security_group_changes_enabled": true,<br> "unauthorized_api_calls_enabled": true,<br> "usage_of_root_account_enabled": true,<br> "vpc_changes_enabled": true<br> }<br>}</pre> | no |
6365
| <a name="input_az_count"></a> [az\_count](#input\_az\_count) | Count of avaiablity zones, min 2 | `number` | `3` | no |
6466
| <a name="input_cidr"></a> [cidr](#input\_cidr) | Default CIDR block for VPC | `string` | `"10.0.0.0/16"` | no |

terraform/layer1-aws/aws-iam.tf

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
resource "aws_iam_account_password_policy" "default" {
2+
count = var.aws_account_password_policy.create ? 1 : 0
3+
4+
minimum_password_length = var.aws_account_password_policy.minimum_password_length
5+
password_reuse_prevention = var.aws_account_password_policy.password_reuse_prevention
6+
require_lowercase_characters = var.aws_account_password_policy.require_lowercase_characters
7+
require_numbers = var.aws_account_password_policy.require_numbers
8+
require_uppercase_characters = var.aws_account_password_policy.require_uppercase_characters
9+
require_symbols = var.aws_account_password_policy.require_symbols
10+
allow_users_to_change_password = var.aws_account_password_policy.allow_users_to_change_password
11+
max_password_age = var.aws_account_password_policy.max_password_age
12+
}
13+
114
module "vpc_cni_irsa" {
215
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
316
version = "4.14.0"

terraform/layer1-aws/variables.tf

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,22 @@ variable "allowed_account_ids" {
55
default = []
66
}
77

8+
variable "aws_account_password_policy" {
9+
type = any
10+
default = {
11+
create = true
12+
minimum_password_length = "14" # Minimum length to require for user passwords
13+
password_reuse_prevention = "10" # The number of previous passwords that users are prevented from reusing
14+
require_lowercase_characters = true # If true, password must contain at least 1 lowercase symbol
15+
require_numbers = true # If true, password must contain at least 1 number symbol
16+
require_uppercase_characters = true # If true, password must contain at least 1 uppercase symbol
17+
require_symbols = true # If true, password must contain at least 1 special symbol
18+
allow_users_to_change_password = true # Whether to allow users to change their own password
19+
max_password_age = "90" # How many days user's password is valid
20+
hard_expiry = false # Don't allow users to set a new password after their password has expired
21+
}
22+
}
23+
824
variable "name" {
925
description = "Project name, required to create unique resource names"
1026
}

0 commit comments

Comments
 (0)