
Un piccolo script lambda che disabilita le chiavi di accesso più vecchie di un determinato numero di giorni.

Il Disabilitatore di Chiavi AWS è una funzione Lambda che disabilita le chiavi di accesso degli utenti IAM AWS dopo un periodo di tempo prestabilito per ridurre il rischio associato alle chiavi di accesso obsolete.



report_to nel file di configurazione della build /grunt/package.json.Questo script richiede i seguenti componenti per funzionare.
Si presuppone inoltre di disporre di un account AWS con SES abilitato, ovvero dominio verificato e modalità sandbox rimossa.
Queste istruzioni sono per OSX. I risultati possono variare su Windows e altri sistemi *nix.
/gruntnpm install/grunt/package.json
aws_account_number con il tuo ID account AWS trovato su https://portal.aws.amazon.com/gp/aws/manageYourAccountfirst_warning e last_warning all'età in giorni della chiave per attivare un avviso. Questi limiti attivano l'invio di un'email a report_toexpiry all'età in giorni alla quale la chiave scade. A questa età la chiave viene disabilitata e viene inviata un'email a report_to che notifica la modificaserviceaccount al nome utente dell'account che si desidera ignorare nello scriptexclusiongroup al nome di un gruppo assegnato agli utenti che si desidera ignorare nello script.Esegui la funzione lambda per nome, AccessKeyRotation, registrando l'output della scansione in un file chiamato scan.report.log:
aws lambda invoke --function-name AccessKeyRotation scan.report.log --region us-east-1
{
"StatusCode": 200
}
Usa jq per visualizzare il contenuto del file scan.report.log nella 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. Le chiavi di accesso sono lunghe 20 caratteri.Questo script è fornito così com'è. Siamo felici di rispondere alle domande se il tempo lo consente, ma non possiamo garantire nulla.
Se le cose non funzionano, assicurati che:
Una volta che la funzione Lambda è stata distribuita con successo, è possibile eseguire i seguenti comandi:
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 su True per abilitare la consegna delle email tramite SESreport_to all'indirizzo email a cui desideri ricevere i report di eliminazionereport_from all'indirizzo email che desideri utilizzare come mittente per i report di eliminazione. Nota che il dominio deve essere verificato in AWS SES.deployment_region su una regione che supporta Lambda.
10 Imposta email_region sulla regione che supporta SES. Assicurati inoltre che la regione abbia la modalità sandbox SES disabilitata.
aws iam get-user per verificare la connessione/grunt esegui grunt bumpup && grunt deployLambda per incrementare il numero di versione ed eseguire una build/distribuzione della funzione Lambda nella regione selezionata