
Um pequeno script lambda que desativará chaves de acesso mais antigas que um determinado número de dias.

O desativador de chaves AWS é uma função Lambda que desativa as chaves de acesso do usuário IAM da AWS após um período definido para reduzir o risco associado a chaves de acesso antigas.



report_to no arquivo de configuração de compilação /grunt/package.json.Este script requer os seguintes componentes para funcionar.
Também pressupõe que você tenha uma conta AWS com SES habilitado, ou seja, domínio verificado e modo sandbox removido.
Estas instruções são para OSX. Os resultados podem variar no Windows e outros *nix.
/gruntnpm install/grunt/package.json
aws_account_number com o ID da sua conta AWS encontrado em https://portal.aws.amazon.com/gp/aws/manageYourAccountfirst_warning e last_warning para a idade em dias que a chave deve ter para acionar um aviso. Esses limites disparam um envio de e-mail para report_toexpiry para a idade em dias em que a chave expira. Nessa idade, a chave é desativada e um e-mail é disparado para report_to notificando essa alteraçãoserviceaccount para o nome de usuário da conta que você deseja que o script ignoreexclusiongroup para o nome de um grupo atribuído a usuários que você deseja que o script ignore.Execute a função lambda pelo nome, AccessKeyRotation, registrando a saída da varredura em um arquivo chamado scan.report.log:
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
Use jq para renderizar o conteúdo do scan.report.log no console:
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. As chaves de acesso têm 20 caracteres de comprimento.Este script é fornecido como está. Ficamos felizes em responder perguntas conforme o tempo permitir, mas não podemos dar garantias.
Se as coisas não funcionarem, certifique-se de que:
Uma vez que a Função Lambda tenha sido implantada com sucesso - os seguintes comandos podem ser executados:
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 como True para habilitar a entrega de e-mail via SESreport_to para o endereço de e-mail para o qual você gostaria de receber relatórios de exclusãoreport_from para o endereço de e-mail que você gostaria de usar como endereço do remetente para relatórios de exclusão. Observe que o domínio para isso precisa ser verificado no AWS SES.deployment_region para uma região que suporte Lambda.email_region para a região que suporta SES. Certifique-se também de que a região tenha o modo sandbox do SES desabilitado.
aws iam get-user para verificar a conexão bem-sucedida/grunt execute grunt bumpup && grunt deployLambda para incrementar o número da versão e realizar uma compilação/implantação da função Lambda na região selecionada