Python Получение определенных значений JSON из AWS GuardDuty - PullRequest
0 голосов
/ 24 мая 2018

Я написал некоторый код на AWS Lambda и пытаюсь извлечь IP-адреса из результатов GuardDuty.Я получил FindingIds хорошо, но когда я пытаюсь извлечь IP-адрес, я получаю следующую ошибку:

{"errorMessage": "индексы списка должны быть целыми или кусочками, а не str", "errorType ":" TypeError "," stackTrace ": [[[" /var/task/lambda_function.py ", 38," lambda_handler "," print (loadFindings ['Findings'] ['Resource'] ['NetworkInterfaces'] ['PublicIp']) "]]}

Мой полный код ниже:

import json
import boto3
from pprint import pprint # Pretty-print for displaying the JSON nicely.

#pprint(listOfFindings)

def lambda_handler(event, context):
    client = boto3.client('guardduty') # Creating the client.
    Det_ID = '5ab1b6808e98faaabd947a01af9ed970' # Setting the Detect ID for GD.
    response = client.list_findings(DetectorId=Det_ID) # Gathering all findings... Need to filter.
    findings = json.dumps(response) # Dumping the JSON findings
    listOfFindings = json.loads(findings) # Making them into a readable format for Python.
    # print("Here's the IDs!",listOfFindings['FindingIds'],"\n\n\n") # Printing all Finding IDs.

    idPosition=0
    idList = []
    for id in listOfFindings['FindingIds']: # Looping through all the Finding IDs. 
        #print("\n\n\nNumber", x, listOfFindings['FindingIds'][x]) # Prints all the Finding Ids separated.
        idList.append(listOfFindings['FindingIds'][idPosition])
        idPosition+=1

    # print("TEST") - Debugging.
    # print(idList) - Debugging.

    findingsList = []
    position = 0
    for ids in idList:
        # print(idList[position])
        stringFindingId = str(idList[position])
        #stringFindingId = idList[position]
        allFindings = client.get_findings(
            DetectorId=Det_ID,
            FindingIds=[
                stringFindingId,])
        dumpFindings = json.dumps(allFindings)
        loadFindings = json.loads(dumpFindings)
        # findingsList.append(loadFindings)
        print(loadFindings['Findings']['Resource']['NetworkInterfaces']['PublicIp']) # BROKEN HERE
        position += 1

Любая помощь действительно приветствуется!

1 Ответ

0 голосов
/ 24 мая 2018

документы показывают, что значение для 'Findings' является списком словарей.Так что либо просто используйте allFindings['Findings'][0] (если в списке только один элемент), либо зацикливайтесь на allFindings['Findings'].

Кстати, этот код не имеет смысла:

    dumpFindings = json.dumps(allFindings)
    loadFindings = json.loads(dumpFindings)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...