Chilkat Online Tools

GetFindings PureBasic Example

Amazon GuardDuty

IncludeFile "CkJsonObject.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkAuthAws.pb"

Procedure ChilkatExample()

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success.i

    authAws.i = CkAuthAws::ckCreate()
    If authAws.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkAuthAws::setCkAccessKey(authAws, "AWS_ACCESS_KEY")
    CkAuthAws::setCkSecretKey(authAws, "AWS_SECRET_KEY")

    ; Don't forget to change the region to your particular region. (Also make the same change in the call to Connect below.)
    CkAuthAws::setCkRegion(authAws, "us-west-2")
    CkAuthAws::setCkServiceName(authAws, "guardduty")
    ; SetAuthAws causes Chilkat to automatically add the following headers: Authorization, X-Amz-Date
    CkRest::ckSetAuthAws(rest,authAws)

    ; URL: https://guardduty.us-west-2.amazonaws.com/
    ; Use the same region as specified above.
    success = CkRest::ckConnect(rest,"guardduty.us-west-2.amazonaws.com",443,1,1)
    If success <> 1
        Debug "ConnectFailReason: " + Str(CkRest::ckConnectFailReason(rest))
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        ProcedureReturn
    EndIf

    ; The following code creates the JSON request body.
    ; The JSON created by this code is shown below.

    ; Use this online tool to generate code from sample JSON:
    ; Generate Code to Create JSON

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateString(json,"findingIds[0]","string")
    CkJsonObject::ckUpdateString(json,"sortCriteria.attributeName","string")
    CkJsonObject::ckUpdateString(json,"sortCriteria.orderBy","string")

    ; The JSON request body created by the above code:

    ; {
    ;   "findingIds": [
    ;     "string"
    ;   ],
    ;   "sortCriteria": {
    ;     "attributeName": "string",
    ;     "orderBy": "string"
    ;   }
    ; }

    CkRest::ckAddHeader(rest,"Content-Type","application/x-amz-json-1.1")
    CkRest::ckAddHeader(rest,"X-Amz-Target","GetFindings")

    sbRequestBody.i = CkStringBuilder::ckCreate()
    If sbRequestBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckEmitSb(json,sbRequestBody)
    sbResponseBody.i = CkStringBuilder::ckCreate()
    If sbResponseBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkRest::ckFullRequestSb(rest,"POST","/detector/{detectorId}/findings/get",sbRequestBody,sbResponseBody)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkJsonObject::ckDispose(json)
        CkStringBuilder::ckDispose(sbRequestBody)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    respStatusCode.i = CkRest::ckResponseStatusCode(rest)
    Debug "response status code = " + Str(respStatusCode)
    If respStatusCode <> 200
        Debug "Response Header:"
        Debug CkRest::ckResponseHeader(rest)
        Debug "Response Body:"
        Debug CkStringBuilder::ckGetAsString(sbResponseBody)
        CkRest::ckDispose(rest)
        CkAuthAws::ckDispose(authAws)
        CkJsonObject::ckDispose(json)
        CkStringBuilder::ckDispose(sbRequestBody)
        CkStringBuilder::ckDispose(sbResponseBody)
        ProcedureReturn
    EndIf

    jResp.i = CkJsonObject::ckCreate()
    If jResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoadSb(jResp,sbResponseBody)

    ; The following code parses the JSON response.
    ; A sample JSON response is shown below the sample code.

    ; Use this online tool to generate parsing code from sample JSON:
    ; Generate Parsing Code from JSON

    accountId.s
    arn.s
    confidence.i
    createdAt.s
    description.s
    id.s
    partition.s
    region.s
    AccessKeyId.s
    PrincipalId.s
    UserName.s
    UserType.s
    Arn.s
    CreatedAt.i
    Name.s
    Status.s
    VpcId.s
    AvailabilityZone.s
    IamInstanceProfileArn.s
    Id.s
    ImageDescription.s
    ImageId.s
    InstanceId.s
    InstanceState.s
    InstanceType.s
    LaunchTime.s
    OutpostArn.s
    Platform.s
    Uid.s
    Username.s
    HostNetwork.i
    KubernetesWorkloadDetailsName.s
    Namespace.s
    v_Type.s
    KubernetesWorkloadDetailsUid.s
    ResourceType.s
    schemaVersion.s
    ActionType.s
    Api.s
    CallerType.s
    Domain.s
    ErrorCode.s
    AccountId.s
    Affiliated.i
    CityName.s
    CountryCode.s
    CountryName.s
    Lat.i
    Lon.i
    IpAddressV4.s
    v_Asn.s
    AsnOrg.s
    Isp.s
    Org.s
    ServiceName.s
    UserAgent.s
    DnsRequestActionDomain.s
    Parameters.s
    CityCityName.s
    CountryCountryCode.s
    CountryCountryName.s
    GeoLocationLat.i
    GeoLocationLon.i
    RemoteIpDetailsIpAddressV4.s
    OrganizationAsn.s
    OrganizationAsnOrg.s
    OrganizationIsp.s
    OrganizationOrg.s
    RequestUri.s
    StatusCode.i
    KubernetesApiCallActionUserAgent.s
    Verb.s
    Blocked.i
    ConnectionDirection.s
    LocalIpDetailsIpAddressV4.s
    Port.i
    PortName.s
    Protocol.s
    RemotePortDetailsPort.i
    RemotePortDetailsPortName.s
    PortProbeActionBlocked.i
    Archived.i
    Count.i
    DetectorId.s
    EventFirstSeen.s
    EventLastSeen.s
    ResourceRole.s
    serviceServiceName.s
    UserFeedback.s
    severity.i
    title.s
    v_type.s
    updatedAt.s
    j.i
    count_j.i
    key.s
    value.s
    networkInterfaceId.s
    privateDnsName.s
    privateIpAddress.s
    publicDnsName.s
    publicIp.s
    subnetId.s
    vpcId.s
    k.i
    count_k.i
    strVal.s
    groupId.s
    groupName.s
    code.s
    productType.s
    containerRuntime.s
    image.s
    imagePrefix.s
    name.s
    Privileged.i
    mountPath.s
    Path.s
    createdAt_int.i
    EncryptionType.s
    KmsMasterKeyArn.s
    ownerId.s
    EffectivePermission.s
    BlockPublicAcls.i
    BlockPublicPolicy.i
    IgnorePublicAcls.i
    RestrictPublicBuckets.i
    AllowsPublicReadAccess.i
    AllowsPublicWriteAccess.i
    BlockPublicAccessBlockPublicAcls.i
    BlockPublicAccessBlockPublicPolicy.i
    BlockPublicAccessIgnorePublicAcls.i
    BlockPublicAccessRestrictPublicBuckets.i
    BucketPolicyAllowsPublicReadAccess.i
    BucketPolicyAllowsPublicWriteAccess.i
    localIpDetailsIpAddressV4.s
    localPortDetailsPort.i
    localPortDetailsPortName.s
    remoteIpDetailsIpAddressV4.s
    threatListName.s

    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(jResp,"findings")
    While i < count_i
        CkJsonObject::setCkI(jResp, i)
        accountId = CkJsonObject::ckStringOf(jResp,"findings[i].accountId")
        arn = CkJsonObject::ckStringOf(jResp,"findings[i].arn")
        confidence = CkJsonObject::ckIntOf(jResp,"findings[i].confidence")
        createdAt = CkJsonObject::ckStringOf(jResp,"findings[i].createdAt")
        description = CkJsonObject::ckStringOf(jResp,"findings[i].description")
        id = CkJsonObject::ckStringOf(jResp,"findings[i].id")
        partition = CkJsonObject::ckStringOf(jResp,"findings[i].partition")
        region = CkJsonObject::ckStringOf(jResp,"findings[i].region")
        AccessKeyId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.accessKeyDetails.accessKeyId")
        PrincipalId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.accessKeyDetails.principalId")
        UserName = CkJsonObject::ckStringOf(jResp,"findings[i].resource.accessKeyDetails.userName")
        UserType = CkJsonObject::ckStringOf(jResp,"findings[i].resource.accessKeyDetails.userType")
        Arn = CkJsonObject::ckStringOf(jResp,"findings[i].resource.eksClusterDetails.arn")
        CreatedAt = CkJsonObject::ckIntOf(jResp,"findings[i].resource.eksClusterDetails.createdAt")
        Name = CkJsonObject::ckStringOf(jResp,"findings[i].resource.eksClusterDetails.name")
        Status = CkJsonObject::ckStringOf(jResp,"findings[i].resource.eksClusterDetails.status")
        VpcId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.eksClusterDetails.vpcId")
        AvailabilityZone = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.availabilityZone")
        IamInstanceProfileArn = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.iamInstanceProfile.arn")
        Id = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.iamInstanceProfile.id")
        ImageDescription = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.imageDescription")
        ImageId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.imageId")
        InstanceId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.instanceId")
        InstanceState = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.instanceState")
        InstanceType = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.instanceType")
        LaunchTime = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.launchTime")
        OutpostArn = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.outpostArn")
        Platform = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.platform")
        Uid = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesUserDetails.uid")
        Username = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesUserDetails.username")
        HostNetwork = CkJsonObject::ckIntOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.hostNetwork")
        KubernetesWorkloadDetailsName = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.name")
        Namespace = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.namespace")
        v_Type = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.type")
        KubernetesWorkloadDetailsUid = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.uid")
        ResourceType = CkJsonObject::ckStringOf(jResp,"findings[i].resource.resourceType")
        schemaVersion = CkJsonObject::ckStringOf(jResp,"findings[i].schemaVersion")
        ActionType = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.actionType")
        Api = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.api")
        CallerType = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.callerType")
        Domain = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.domainDetails.domain")
        ErrorCode = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.errorCode")
        AccountId = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteAccountDetails.accountId")
        Affiliated = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.awsApiCallAction.remoteAccountDetails.affiliated")
        CityName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.city.cityName")
        CountryCode = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.country.countryCode")
        CountryName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.country.countryName")
        Lat = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.geoLocation.lat")
        Lon = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.geoLocation.lon")
        IpAddressV4 = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.ipAddressV4")
        v_Asn = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.organization.asn")
        AsnOrg = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.organization.asnOrg")
        Isp = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.organization.isp")
        Org = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.remoteIpDetails.organization.org")
        ServiceName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.serviceName")
        UserAgent = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.awsApiCallAction.userAgent")
        DnsRequestActionDomain = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.dnsRequestAction.domain")
        Parameters = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.parameters")
        CityCityName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.city.cityName")
        CountryCountryCode = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.country.countryCode")
        CountryCountryName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.country.countryName")
        GeoLocationLat = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.geoLocation.lat")
        GeoLocationLon = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.geoLocation.lon")
        RemoteIpDetailsIpAddressV4 = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.ipAddressV4")
        OrganizationAsn = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.organization.asn")
        OrganizationAsnOrg = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.organization.asnOrg")
        OrganizationIsp = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.organization.isp")
        OrganizationOrg = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.remoteIpDetails.organization.org")
        RequestUri = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.requestUri")
        StatusCode = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.kubernetesApiCallAction.statusCode")
        KubernetesApiCallActionUserAgent = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.userAgent")
        Verb = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.verb")
        Blocked = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.networkConnectionAction.blocked")
        ConnectionDirection = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.connectionDirection")
        LocalIpDetailsIpAddressV4 = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.localIpDetails.ipAddressV4")
        Port = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.networkConnectionAction.localPortDetails.port")
        PortName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.localPortDetails.portName")
        Protocol = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.protocol")
        CityCityName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.city.cityName")
        CountryCountryCode = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.country.countryCode")
        CountryCountryName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.country.countryName")
        GeoLocationLat = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.geoLocation.lat")
        GeoLocationLon = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.geoLocation.lon")
        RemoteIpDetailsIpAddressV4 = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.ipAddressV4")
        OrganizationAsn = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.organization.asn")
        OrganizationAsnOrg = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.organization.asnOrg")
        OrganizationIsp = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.organization.isp")
        OrganizationOrg = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remoteIpDetails.organization.org")
        RemotePortDetailsPort = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.networkConnectionAction.remotePortDetails.port")
        RemotePortDetailsPortName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.networkConnectionAction.remotePortDetails.portName")
        PortProbeActionBlocked = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.portProbeAction.blocked")
        Archived = CkJsonObject::ckIntOf(jResp,"findings[i].service.archived")
        Count = CkJsonObject::ckIntOf(jResp,"findings[i].service.count")
        DetectorId = CkJsonObject::ckStringOf(jResp,"findings[i].service.detectorId")
        EventFirstSeen = CkJsonObject::ckStringOf(jResp,"findings[i].service.eventFirstSeen")
        EventLastSeen = CkJsonObject::ckStringOf(jResp,"findings[i].service.eventLastSeen")
        ResourceRole = CkJsonObject::ckStringOf(jResp,"findings[i].service.resourceRole")
        serviceServiceName = CkJsonObject::ckStringOf(jResp,"findings[i].service.serviceName")
        UserFeedback = CkJsonObject::ckStringOf(jResp,"findings[i].service.userFeedback")
        severity = CkJsonObject::ckIntOf(jResp,"findings[i].severity")
        title = CkJsonObject::ckStringOf(jResp,"findings[i].title")
        v_type = CkJsonObject::ckStringOf(jResp,"findings[i].type")
        updatedAt = CkJsonObject::ckStringOf(jResp,"findings[i].updatedAt")
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.eksClusterDetails.tags")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            key = CkJsonObject::ckStringOf(jResp,"findings[i].resource.eksClusterDetails.tags[j].key")
            value = CkJsonObject::ckStringOf(jResp,"findings[i].resource.eksClusterDetails.tags[j].value")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.instanceDetails.networkInterfaces")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            networkInterfaceId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].networkInterfaceId")
            privateDnsName = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].privateDnsName")
            privateIpAddress = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].privateIpAddress")
            publicDnsName = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].publicDnsName")
            publicIp = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].publicIp")
            subnetId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].subnetId")
            vpcId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].vpcId")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].ipv6Addresses")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                strVal = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].ipv6Addresses[k]")
                k = k + 1
            Wend
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].privateIpAddresses")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                privateDnsName = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].privateIpAddresses[k].privateDnsName")
                privateIpAddress = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].privateIpAddresses[k].privateIpAddress")
                k = k + 1
            Wend
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].securityGroups")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                groupId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].securityGroups[k].groupId")
                groupName = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.networkInterfaces[j].securityGroups[k].groupName")
                k = k + 1
            Wend
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.instanceDetails.productCodes")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            code = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.productCodes[j].code")
            productType = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.productCodes[j].productType")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.instanceDetails.tags")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            key = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.tags[j].key")
            value = CkJsonObject::ckStringOf(jResp,"findings[i].resource.instanceDetails.tags[j].value")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.kubernetesDetails.kubernetesUserDetails.groups")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesUserDetails.groups[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            containerRuntime = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].containerRuntime")
            id = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].id")
            image = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].image")
            imagePrefix = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].imagePrefix")
            name = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].name")
            Privileged = CkJsonObject::ckIntOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].securityContext.privileged")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].volumeMounts")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                mountPath = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].volumeMounts[k].mountPath")
                name = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.containers[j].volumeMounts[k].name")
                k = k + 1
            Wend
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.volumes")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            Path = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.volumes[j].hostPath.path")
            name = CkJsonObject::ckStringOf(jResp,"findings[i].resource.kubernetesDetails.kubernetesWorkloadDetails.volumes[j].name")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.s3BucketDetails")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            arn = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].arn")
            createdAt_int = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].createdAt")
            EncryptionType = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].defaultServerSideEncryption.encryptionType")
            KmsMasterKeyArn = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].defaultServerSideEncryption.kmsMasterKeyArn")
            name = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].name")
            ownerId = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].owner.id")
            EffectivePermission = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.effectivePermission")
            BlockPublicAcls = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.accountLevelPermissions.blockPublicAccess.blockPublicAcls")
            BlockPublicPolicy = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.accountLevelPermissions.blockPublicAccess.blockPublicPolicy")
            IgnorePublicAcls = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.accountLevelPermissions.blockPublicAccess.ignorePublicAcls")
            RestrictPublicBuckets = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.accountLevelPermissions.blockPublicAccess.restrictPublicBuckets")
            AllowsPublicReadAccess = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.accessControlList.allowsPublicReadAccess")
            AllowsPublicWriteAccess = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.accessControlList.allowsPublicWriteAccess")
            BlockPublicAccessBlockPublicAcls = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.blockPublicAccess.blockPublicAcls")
            BlockPublicAccessBlockPublicPolicy = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.blockPublicAccess.blockPublicPolicy")
            BlockPublicAccessIgnorePublicAcls = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.blockPublicAccess.ignorePublicAcls")
            BlockPublicAccessRestrictPublicBuckets = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.blockPublicAccess.restrictPublicBuckets")
            BucketPolicyAllowsPublicReadAccess = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.bucketPolicy.allowsPublicReadAccess")
            BucketPolicyAllowsPublicWriteAccess = CkJsonObject::ckIntOf(jResp,"findings[i].resource.s3BucketDetails[j].publicAccess.permissionConfiguration.bucketLevelPermissions.bucketPolicy.allowsPublicWriteAccess")
            v_type = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].type")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"findings[i].resource.s3BucketDetails[j].tags")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                key = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].tags[k].key")
                value = CkJsonObject::ckStringOf(jResp,"findings[i].resource.s3BucketDetails[j].tags[k].value")
                k = k + 1
            Wend
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].service.action.kubernetesApiCallAction.sourceIps")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            strVal = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.kubernetesApiCallAction.sourceIps[j]")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].service.action.portProbeAction.portProbeDetails")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            localIpDetailsIpAddressV4 = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].localIpDetails.ipAddressV4")
            localPortDetailsPort = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].localPortDetails.port")
            localPortDetailsPortName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].localPortDetails.portName")
            CityCityName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.city.cityName")
            CountryCountryCode = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.country.countryCode")
            CountryCountryName = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.country.countryName")
            GeoLocationLat = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.geoLocation.lat")
            GeoLocationLon = CkJsonObject::ckIntOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.geoLocation.lon")
            remoteIpDetailsIpAddressV4 = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.ipAddressV4")
            OrganizationAsn = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.organization.asn")
            OrganizationAsnOrg = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.organization.asnOrg")
            OrganizationIsp = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.organization.isp")
            OrganizationOrg = CkJsonObject::ckStringOf(jResp,"findings[i].service.action.portProbeAction.portProbeDetails[j].remoteIpDetails.organization.org")
            j = j + 1
        Wend
        j = 0
        count_j = CkJsonObject::ckSizeOfArray(jResp,"findings[i].service.evidence.threatIntelligenceDetails")
        While j < count_j
            CkJsonObject::setCkJ(jResp, j)
            threatListName = CkJsonObject::ckStringOf(jResp,"findings[i].service.evidence.threatIntelligenceDetails[j].threatListName")
            k = 0
            count_k = CkJsonObject::ckSizeOfArray(jResp,"findings[i].service.evidence.threatIntelligenceDetails[j].threatNames")
            While k < count_k
                CkJsonObject::setCkK(jResp, k)
                strVal = CkJsonObject::ckStringOf(jResp,"findings[i].service.evidence.threatIntelligenceDetails[j].threatNames[k]")
                k = k + 1
            Wend
            j = j + 1
        Wend
        i = i + 1
    Wend

    ; A sample JSON response body parsed by the above code:

    ; {
    ;   "findings": [
    ;     {
    ;       "accountId": "string",
    ;       "arn": "string",
    ;       "confidence": number,
    ;       "createdAt": "string",
    ;       "description": "string",
    ;       "id": "string",
    ;       "partition": "string",
    ;       "region": "string",
    ;       "resource": {
    ;         "accessKeyDetails": {
    ;           "accessKeyId": "string",
    ;           "principalId": "string",
    ;           "userName": "string",
    ;           "userType": "string"
    ;         },
    ;         "eksClusterDetails": {
    ;           "arn": "string",
    ;           "createdAt": number,
    ;           "name": "string",
    ;           "status": "string",
    ;           "tags": [
    ;             {
    ;               "key": "string",
    ;               "value": "string"
    ;             }
    ;           ],
    ;           "vpcId": "string"
    ;         },
    ;         "instanceDetails": {
    ;           "availabilityZone": "string",
    ;           "iamInstanceProfile": {
    ;             "arn": "string",
    ;             "id": "string"
    ;           },
    ;           "imageDescription": "string",
    ;           "imageId": "string",
    ;           "instanceId": "string",
    ;           "instanceState": "string",
    ;           "instanceType": "string",
    ;           "launchTime": "string",
    ;           "networkInterfaces": [
    ;             {
    ;               "ipv6Addresses": [
    ;                 "string"
    ;               ],
    ;               "networkInterfaceId": "string",
    ;               "privateDnsName": "string",
    ;               "privateIpAddress": "string",
    ;               "privateIpAddresses": [
    ;                 {
    ;                   "privateDnsName": "string",
    ;                   "privateIpAddress": "string"
    ;                 }
    ;               ],
    ;               "publicDnsName": "string",
    ;               "publicIp": "string",
    ;               "securityGroups": [
    ;                 {
    ;                   "groupId": "string",
    ;                   "groupName": "string"
    ;                 }
    ;               ],
    ;               "subnetId": "string",
    ;               "vpcId": "string"
    ;             }
    ;           ],
    ;           "outpostArn": "string",
    ;           "platform": "string",
    ;           "productCodes": [
    ;             {
    ;               "code": "string",
    ;               "productType": "string"
    ;             }
    ;           ],
    ;           "tags": [
    ;             {
    ;               "key": "string",
    ;               "value": "string"
    ;             }
    ;           ]
    ;         },
    ;         "kubernetesDetails": {
    ;           "kubernetesUserDetails": {
    ;             "groups": [
    ;               "string"
    ;             ],
    ;             "uid": "string",
    ;             "username": "string"
    ;           },
    ;           "kubernetesWorkloadDetails": {
    ;             "containers": [
    ;               {
    ;                 "containerRuntime": "string",
    ;                 "id": "string",
    ;                 "image": "string",
    ;                 "imagePrefix": "string",
    ;                 "name": "string",
    ;                 "securityContext": {
    ;                   "privileged": boolean
    ;                 },
    ;                 "volumeMounts": [
    ;                   {
    ;                     "mountPath": "string",
    ;                     "name": "string"
    ;                   }
    ;                 ]
    ;               }
    ;             ],
    ;             "hostNetwork": boolean,
    ;             "name": "string",
    ;             "namespace": "string",
    ;             "type": "string",
    ;             "uid": "string",
    ;             "volumes": [
    ;               {
    ;                 "hostPath": {
    ;                   "path": "string"
    ;                 },
    ;                 "name": "string"
    ;               }
    ;             ]
    ;           }
    ;         },
    ;         "resourceType": "string",
    ;         "s3BucketDetails": [
    ;           {
    ;             "arn": "string",
    ;             "createdAt": number,
    ;             "defaultServerSideEncryption": {
    ;               "encryptionType": "string",
    ;               "kmsMasterKeyArn": "string"
    ;             },
    ;             "name": "string",
    ;             "owner": {
    ;               "id": "string"
    ;             },
    ;             "publicAccess": {
    ;               "effectivePermission": "string",
    ;               "permissionConfiguration": {
    ;                 "accountLevelPermissions": {
    ;                   "blockPublicAccess": {
    ;                     "blockPublicAcls": boolean,
    ;                     "blockPublicPolicy": boolean,
    ;                     "ignorePublicAcls": boolean,
    ;                     "restrictPublicBuckets": boolean
    ;                   }
    ;                 },
    ;                 "bucketLevelPermissions": {
    ;                   "accessControlList": {
    ;                     "allowsPublicReadAccess": boolean,
    ;                     "allowsPublicWriteAccess": boolean
    ;                   },
    ;                   "blockPublicAccess": {
    ;                     "blockPublicAcls": boolean,
    ;                     "blockPublicPolicy": boolean,
    ;                     "ignorePublicAcls": boolean,
    ;                     "restrictPublicBuckets": boolean
    ;                   },
    ;                   "bucketPolicy": {
    ;                     "allowsPublicReadAccess": boolean,
    ;                     "allowsPublicWriteAccess": boolean
    ;                   }
    ;                 }
    ;               }
    ;             },
    ;             "tags": [
    ;               {
    ;                 "key": "string",
    ;                 "value": "string"
    ;               }
    ;             ],
    ;             "type": "string"
    ;           }
    ;         ]
    ;       },
    ;       "schemaVersion": "string",
    ;       "service": {
    ;         "action": {
    ;           "actionType": "string",
    ;           "awsApiCallAction": {
    ;             "api": "string",
    ;             "callerType": "string",
    ;             "domainDetails": {
    ;               "domain": "string"
    ;             },
    ;             "errorCode": "string",
    ;             "remoteAccountDetails": {
    ;               "accountId": "string",
    ;               "affiliated": boolean
    ;             },
    ;             "remoteIpDetails": {
    ;               "city": {
    ;                 "cityName": "string"
    ;               },
    ;               "country": {
    ;                 "countryCode": "string",
    ;                 "countryName": "string"
    ;               },
    ;               "geoLocation": {
    ;                 "lat": number,
    ;                 "lon": number
    ;               },
    ;               "ipAddressV4": "string",
    ;               "organization": {
    ;                 "asn": "string",
    ;                 "asnOrg": "string",
    ;                 "isp": "string",
    ;                 "org": "string"
    ;               }
    ;             },
    ;             "serviceName": "string",
    ;             "userAgent": "string"
    ;           },
    ;           "dnsRequestAction": {
    ;             "domain": "string"
    ;           },
    ;           "kubernetesApiCallAction": {
    ;             "parameters": "string",
    ;             "remoteIpDetails": {
    ;               "city": {
    ;                 "cityName": "string"
    ;               },
    ;               "country": {
    ;                 "countryCode": "string",
    ;                 "countryName": "string"
    ;               },
    ;               "geoLocation": {
    ;                 "lat": number,
    ;                 "lon": number
    ;               },
    ;               "ipAddressV4": "string",
    ;               "organization": {
    ;                 "asn": "string",
    ;                 "asnOrg": "string",
    ;                 "isp": "string",
    ;                 "org": "string"
    ;               }
    ;             },
    ;             "requestUri": "string",
    ;             "sourceIps": [
    ;               "string"
    ;             ],
    ;             "statusCode": number,
    ;             "userAgent": "string",
    ;             "verb": "string"
    ;           },
    ;           "networkConnectionAction": {
    ;             "blocked": boolean,
    ;             "connectionDirection": "string",
    ;             "localIpDetails": {
    ;               "ipAddressV4": "string"
    ;             },
    ;             "localPortDetails": {
    ;               "port": number,
    ;               "portName": "string"
    ;             },
    ;             "protocol": "string",
    ;             "remoteIpDetails": {
    ;               "city": {
    ;                 "cityName": "string"
    ;               },
    ;               "country": {
    ;                 "countryCode": "string",
    ;                 "countryName": "string"
    ;               },
    ;               "geoLocation": {
    ;                 "lat": number,
    ;                 "lon": number
    ;               },
    ;               "ipAddressV4": "string",
    ;               "organization": {
    ;                 "asn": "string",
    ;                 "asnOrg": "string",
    ;                 "isp": "string",
    ;                 "org": "string"
    ;               }
    ;             },
    ;             "remotePortDetails": {
    ;               "port": number,
    ;               "portName": "string"
    ;             }
    ;           },
    ;           "portProbeAction": {
    ;             "blocked": boolean,
    ;             "portProbeDetails": [
    ;               {
    ;                 "localIpDetails": {
    ;                   "ipAddressV4": "string"
    ;                 },
    ;                 "localPortDetails": {
    ;                   "port": number,
    ;                   "portName": "string"
    ;                 },
    ;                 "remoteIpDetails": {
    ;                   "city": {
    ;                     "cityName": "string"
    ;                   },
    ;                   "country": {
    ;                     "countryCode": "string",
    ;                     "countryName": "string"
    ;                   },
    ;                   "geoLocation": {
    ;                     "lat": number,
    ;                     "lon": number
    ;                   },
    ;                   "ipAddressV4": "string",
    ;                   "organization": {
    ;                     "asn": "string",
    ;                     "asnOrg": "string",
    ;                     "isp": "string",
    ;                     "org": "string"
    ;                   }
    ;                 }
    ;               }
    ;             ]
    ;           }
    ;         },
    ;         "archived": boolean,
    ;         "count": number,
    ;         "detectorId": "string",
    ;         "eventFirstSeen": "string",
    ;         "eventLastSeen": "string",
    ;         "evidence": {
    ;           "threatIntelligenceDetails": [
    ;             {
    ;               "threatListName": "string",
    ;               "threatNames": [
    ;                 "string"
    ;               ]
    ;             }
    ;           ]
    ;         },
    ;         "resourceRole": "string",
    ;         "serviceName": "string",
    ;         "userFeedback": "string"
    ;       },
    ;       "severity": number,
    ;       "title": "string",
    ;       "type": "string",
    ;       "updatedAt": "string"
    ;     }
    ;   ]
    ; }


    CkRest::ckDispose(rest)
    CkAuthAws::ckDispose(authAws)
    CkJsonObject::ckDispose(json)
    CkStringBuilder::ckDispose(sbRequestBody)
    CkStringBuilder::ckDispose(sbResponseBody)
    CkJsonObject::ckDispose(jResp)


    ProcedureReturn
EndProcedure