Anfragen, die über einen Access Key authentifiziert werden (z.B. aws-cli) sind nach Aktivierung der MFA auch weiterhin ohne MFA möglich. Es ist allerdings möglich auch für diese Anfragen eine Authentifizierung über MFA zu erzwingen.
IAM konfigurieren
Über die Policy einer IAM Gruppe/eines IAM Benutzers kann man den Zugriff nur dann erlauben, wenn der Benutzer mittels MFA authentifiziert wurde.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["*"],
"Resource": ["*"],
"Condition": {"Bool":{"aws:MultiFactorAuthPresent": "true"}}
}]
}
aws-cli verwenden
Mit den oben gemachten Einschränkungen hat ein Benutzer allein mit seinem Access Key keinen Zugriff mehr. Mit seinem Access Key (ID und Secret) und einem MFA-Token kann der Benutzer allerdings temporär einen neuen Access Key ID und ein neues Access Key Secret anfordern. So bekommt der Benutzer dann wieder vollen Zugriff.
Mit folgendem Shell-Script können solche temporären Zugangsdaten erzeugt werden.
#!/bin/bash
# create temporary credentials to use with aws cli and aws sdk js. input params acciunt number, IAM username and MFA token.
# Run with . ./aws-mfa.sh <AWS ACCOUNT NUMBER> <IAM USERNAME> <MFA TOKEN> to export env variables to current shell.
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
unset AWS_SECURITY_TOKEN
CRED=$(aws sts get-session-token --serial-number "arn:aws:iam::$1:mfa/$2" --output text --token-code $3)
AWS_ACCESS_KEY_ID=$(echo $CRED | cut -d ' ' -f 2)
AWS_SECRET_ACCESS_KEY=$(echo $CRED | cut -d ' ' -f 4)
AWS_SESSION_TOKEN=$(echo $CRED | cut -d ' ' -f 5)
AWS_SECURITY_TOKEN=$(echo $CRED | cut -d ' ' -f 5)
export AWS_ACCESS_KEY_ID
export AWS_SECRET_ACCESS_KEY
export AWS_SESSION_TOKEN
export AWS_SECURITY_TOKEN
AWS stellt zu diesem Thema eine vollständige Dokumentation bereit.