
Небольшой lambda-скрипт, который отключает ключи доступа старше заданного количества дней.

AWS Key Disabler — это Lambda-функция, которая отключает ключи доступа пользователей IAM AWS по истечении заданного времени, чтобы снизить риски, связанные со старыми ключами доступа.



report_to в файле конфигурации сборки /grunt/package.json.Для работы этого скрипта требуются следующие компоненты:
Также предполагается, что у вас есть учетная запись AWS с включенным SES, т.е. подтвержденным доменом и отключенным режимом песочницы.
Эти инструкции для OSX. На Windows и других *nix возможны отличия.
/gruntnpm install/grunt/package.json
aws_account_number равным вашему идентификатору учетной записи AWS, который можно найти на https://portal.aws.amazon.com/gp/aws/manageYourAccountfirst_warning и last_warning — возраст ключа в днях, при котором отправляется предупреждение. Эти пределы инициируют отправку электронного письма на report_toexpiry — возраст в днях, по истечении которого ключ считается истекшим. По достижении этого возраста ключ отключается, и на report_to отправляется уведомление об этом измененииserviceaccount — имя учетной записи пользователя, который скрипт должен игнорироватьexclusiongroup — имя группы, назначенной пользователям, которых скрипт должен игнорироватьВыполните Lambda-функцию по имени AccessKeyRotation, записав вывод сканирования в файл scan.report.log:
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
Используйте jq для отображения содержимого scan.report.log в консоли:
jq '.' scan.report.log
{
"reportdate": "2016-06-26 10:37:24.071091",
"users": [
{
"username": "TestS3User",
"userid": "1",
"keys": [
{
"age": 72,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************Q3GA1"
},
{
"age": 12,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************F3AA2"
}
]
},
{
"username": "BlahUser22",
"userid": "2",
"keys": []
},
{
"username": "LambdaFake1",
"userid": "3",
"keys": [
{
"age": 23,
"changed": false,
"state": "key is due to expire in 1 week (7 days)",
"accesskeyid": "**************DFG12"
},
{
"age": 296,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************4ZASD"
}
]
},
{
"username": "apiuser49",
"userid": "4",
"keys": [
{
"age": 30,
"changed": true,
"state": "key is now EXPIRED! Changing key to INACTIVE state",
"accesskeyid": "**************ER2E2"
},
{
"age": 107,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************AWQ4K"
}
]
},
{
"username": "UserEMRKinesis",
"userid": "5",
"keys": [
{
"age": 30,
"changed": false,
"state": "key is now EXPIRED! Changing key to INACTIVE state",
"accesskeyid": "**************MGB41A"
}
]
},
{
"username": "CDN-Drupal",
"userid": "6",
"keys": [
{
"age": 10,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************ZDSQ5A"
},
{
"age": 5,
"changed": false,
"state": "key is still young",
"accesskeyid": "**************E3ODA"
}
]
},
{
"username": "ChocDonutUser1",
"userid": "7",
"keys": [
{
"age": 59,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************CSA123"
}
]
},
{
"username": "ChocDonut2",
"userid": "8",
"keys": [
{
"age": 60,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************FDGD2"
}
]
},
{
"username": "[email protected]",
"userid": "9",
"keys": [
{
"age": 45,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************BLQ5GJ"
},
{
"age": 71,
"changed": false,
"state": "key is already in an INACTIVE state",
"accesskeyid": "**************GJFF53"
}
]
}
]
}
key_disabler.keystates.<state>.messagekey_disabler.mask_accesskey_length. Ключи доступа имеют длину 20 символов.Этот скрипт предоставляется как есть. Мы рады ответить на вопросы по мере возможности, но не можем давать никаких обещаний.
Если что-то не работает, убедитесь, что:
После успешного развертывания Lambda-функции можно выполнить следующие команды:
aws lambda list-functionsopenssl dgst -binary -sha256 ..\Releases\AccessKeyRotationPackage.1.0.18.zip | openssl base64aws lambda invoke --function-name AccessKeyRotation report.log --region us-east-1jq '.' report.logjq '.users[] | select(.username=="johndoe")' report.logjq '.' report.log | grep age | cut -d':' -f2 | sort -njq 'def maximal_by(f): (map(f) | max) as $mx | .[] | select(f == $mx); .users | maximal_by(.keys[].age)' report.logjq 'def minimal_by(f): (map(f) | min) as $mn | .[] | select(f == $mn); .users | minimal_by(.keys[].age)' report.logsend_completion_report в True, чтобы включить отправку электронной почты через SESreport_to — адрес электронной почты, на который вы хотите получать отчеты об удаленииreport_from — адрес электронной почты, который будет использоваться в качестве адреса отправителя для отчетов об удалении. Обратите внимание, что домен для этого адреса должен быть подтвержден в AWS SES.deployment_region — регион, поддерживающий Lambda.email_region — регион, поддерживающий SES. Также убедитесь, что в регионе отключен режим песочницы SES.
aws iam get-user для проверки соединения/grunt выполните grunt bumpup && grunt deployLambda, чтобы увеличить номер версии и выполнить сборку/развертывание Lambda-функции в выбранном регионе