Sebbene questa domanda richieda una forma molto stretta e concreta, sono più interessato alle basi concettuali di giustificare un approccio, e di come posso applicarlo al prossimo problema.
Configurazione
Sto scrivendo uno strumento che accetta un elenco di account AWS e facoltativamente, per ciascun account, una lista nera di bucket S3. Gli strumenti passano e fanno cose per ogni account, ma ignorano i bucket nella lista nera.
Lo strumento accetta una configurazione come input:
{
"accounts": [
"aws.account.1",
"my.other.account",
"aws.account.6"
],
"accountSpecificBlacklists": {
"aws.account.6": ["my.sqs.enqueue.bucket.high.volume", "my.sqs.audits"],
"my.other.account": ["sqs.log.testing"]
},
"globalBlacklistRegex": "^(critical|restricted|confidential)\..{0,}$",
"deliveryBucket": "sqs.food.barred",
"otherParam": "scrubbedValue"
}
La domanda
L'elenco di accounts
sopra potrebbe essere una lista come mostrato, o una coppia key:val
, con i valori che sono la lista nera associata. Lo strumento verrà quindi informato degli account su cui operare ruotando i tasti della coppia key:val
.
per es.
"accountsToBlacklist": {
"aws.account.1": [],
"my.other.account": ["sqs.log.testing"],
"aws.account.6": ["my.sqs.enqueue.bucket.high.volume", "my.sqs.audits"]
}
Inizialmente avevo configurato il modello di dati in quel modo, ma nel caso in cui non ci siano blacklist, finisce per essere un po 'di keys
con liste vuote come valori. Sembrava che l'approccio key:val
avesse inquinato il modello dei dati, ma non riuscivo a capire perché.