Enforcement of strong password expiration policy
provider "aws" {
region = "us-west-2"
}
resource "aws_iam_user" "user" {
name = "my_user"
}
resource "aws_iam_user_login_profile" "user_profile" {
user = aws_iam_user.user.name
password_reset_required = true
password_length = 14
}
In the code above, we are defining an AWS IAM user named "my_user" using Terraform. We also define a login profile for this user with the
aws_iam_user_login_profile
resource.
The
password_reset_required
attribute is set to
true
, which means that the user is forced to change their password the next time they sign in.
The
password_length
attribute is set to
14
, which defines the minimum length of the password.
However, the code does not enforce password expiration. This means that the password for the user will not automatically expire after a certain period of time, which is a potential security vulnerability.
Good security practices suggest that credentials should be renewed in 90-day periods. Without a password expiration policy, an attacker who has gained access to a user's credentials could continue to have access indefinitely, as long as the password remains unchanged.
provider "aws" {
region = "us-west-2"
}
resource "aws_iam_user" "user" {
name = "my_user"
}
resource "aws_iam_user_login_profile" "user_profile" {
user = aws_iam_user.user.name
password_reset_required = true
password_length = 14
}
resource "aws_iam_account_password_policy" "strict" {
minimum_password_length = 14
require_lowercase_characters = true
require_numbers = true
require_uppercase_characters = true
require_symbols = true
allow_users_to_change_password = true
max_password_age = 90
password_reuse_prevention = 10
}
The updated code includes a new resource
aws_iam_account_password_policy
which is used to enforce a strict password policy for the AWS account. This policy includes:
-
minimum_password_length
: This sets the minimum password length to 14 characters.
- require_lowercase_characters
: This ensures that the password includes at least one lowercase character.
- require_numbers
: This ensures that the password includes at least one numeric character.
- require_uppercase_characters
: This ensures that the password includes at least one uppercase character.
- require_symbols
: This ensures that the password includes at least one special character.
- allow_users_to_change_password
: This allows users to change their own passwords.
- max_password_age
: This sets the maximum password age to 90 days, enforcing password expiration and requiring users to change their passwords every 90 days.
- password_reuse_prevention
: This prevents users from reusing their last 10 passwords.
This policy aligns with good security practices by enforcing strong passwords and regular password changes.