openapi: 3.0.1
info:
  title: Vulnerability Management API
  description: Vulnerability Management API
  version: 0.1.0
servers:
  - url: 'https://api.pearsoncloudmanagement.com/vulnerabilities'
    description: Production Vulnerability Management Environment
tags:
  - name: AWS Instances
    description: Information about AWS EC2 instances
  - name: AWS Vulnerabilities
    description: Information about AWS EC2 instance vulnerabilities
  - name: AWS Qualys Agent Coverage
    description: Information about Qualys agent coverage of AWS EC2 instances
  - name: Health & Status
    description: Information about health and status of the vulnerability management API
  - name: Authorization
    description: Information about authorization
x-amazon-apigateway-request-validators:
  all:
    validateRequestBody: true
    validateRequestParameters: true
  params-only:
    validateRequestBody: false
    validateRequestParameters: true
paths:
  /authtoken:
    post:
      tags:
        - Authorization
      summary: Create Authorization Token
      description: Create authorization token based on user_group_name and user_group_token.
      operationId: createAuthToken
      requestBody:
        description: Information to create auth token
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                user_group_name:
                  description: safe url base64 encoded user group name text
                  type: string
                  nullable: false
                user_group_token:
                  description: safe url base64 encoded user group token text
                  type: string
                  nullable: false
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  api_access_token:
                    description: API authorization token for subsequent calls
                    type: string
                    nullable: false
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '500':
          description: Server error. Try again.
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementAuthTokenFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
  /healthstatus:
    get:
      tags:
        - Health & Status
      summary: Find health and status
      description: Find health and status
      operationId: findHealthStatus
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: healthy
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: No health and status found
        '500':
          description: Server error.  Try again.
      security:
        - vulnerabilities-auth1:
            - vulnerabilities-ro/read
      x-amazon-apigateway-request-validator: params-only
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementHealthStatusFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
  /aws/instances:
    get:
      tags:
        - AWS Instances
      summary: Find an AWS instances query execution
      description: Find an AWS instances query execution
      operationId: findAwsInstancesQuery
      parameters:
        - name: query_execution_id
          in: query
          description: Unique identifier of an existing query
          schema:
            type: string
            format: uuid
            example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  query_execution_id:
                    type: string
                    format: uuid
                    example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
                  query_execution_status:
                    type: string
                    enum:
                      - QUEUED
                      - RUNNING
                      - SUCCEEDED
                      - FAILED
                      - CANCELLED
                    example: SUCCEEDED
                  query_execution_start:
                    type: string
                    format: date-time
                    nullable: true
                    example: '2017-07-21T17:32:28Z'
                  query_execution_end:
                    type: string
                    format: date-time
                    nullable: true
                    example: '2017-07-21T17:32:58Z'
                  query_results:
                    type: string
                    nullable: true
                    example: 'http://www.someurl.com/2'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: No execution found
        '500':
          description: Server error.  Try again.
      security:
        - vulnerabilities-auth1:
            - vulnerabilities-ro/read
      x-amazon-apigateway-request-validator: params-only
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementQueryFinderFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
    post:
      tags:
        - AWS Instances
      summary: Execute an AWS Instances query
      description: Execute an AWS Instances query
      operationId: executeAwsInstancesQuery
      requestBody:
        description: AWS Instances query fields
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                instances:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - i-01234
                    - i-56789
                    - i-02468
                    - i-13579
                accounts:
                  type: array
                  items:
                    type: string
                  example:
                    - 012345678901
                    - 011235813213
                regions:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - us-east-1
                    - eu-west-1
                app_ids:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - SVC01234
                    - SVC02468
                    - SVC01359
                environments:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - dev
                    - qa
                    - prod
                dcls:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - '1'
                    - dcl2
                instance_states:
                  type: array
                  nullable: true
                  items:
                    type: string
                    enum:
                      - RUNNING
                      - STOPPED
                  example:
                    - RUNNING
                patch_compliance_statuses:
                  type: array
                  nullable: true
                  items:
                    type: string
                    enum:
                      - COMPLIANT
                      - NON_COMPLIANT
                      - UNKNOWN
                  example:
                    - NON_COMPLIANT
                    - UNKNOWN
                qualys_agent_statuses:
                  type: array
                  nullable: true
                  items:
                    type: string
                    enum:
                      - STATUS_ACTIVE
                      - STATUS_INACTIVE
                      - STATUS_NO_AGENT
                  example:
                    - STATUS_INACTIVE
                    - STATUS_NO_AGENT
                first_report_date:
                  type: string
                  nullable: true
                  format: date
                  example: 2020-09-08T00:00:00.000Z
                last_report_date:
                  type: string
                  nullable: true
                  format: date
                  example: 2020-09-08T00:00:00.000Z
                vuln_count:
                  type: integer
                  nullable: true
                  format: int32
                  minimum: 0
                  example: 100
                vuln_count_op:
                  type: string
                  nullable: true
                  enum:
                    - eq
                    - ne
                    - lt
                    - gt
                    - lte
                    - gte
                  example: gt
                critical_count:
                  type: integer
                  nullable: true
                  format: int32
                  minimum: 0
                  example: 10
                critical_count_op:
                  type: string
                  nullable: true
                  enum:
                    - eq
                    - ne
                    - lt
                    - gt
                    - lte
                    - gte
                  example: lt
                high_count:
                  type: integer
                  nullable: true
                  format: int32
                  minimum: 0
                  example: 15
                high_count_op:
                  type: string
                  nullable: true
                  enum:
                    - eq
                    - ne
                    - lt
                    - gt
                    - lte
                    - gte
                  example: lte
                med_count:
                  type: integer
                  nullable: true
                  format: int32
                  minimum: 0
                  example: 0
                med_count_op:
                  type: string
                  nullable: true
                  enum:
                    - eq
                    - ne
                    - lt
                    - gt
                    - lte
                    - gte
                  example: ne
                async:
                  type: boolean
                  nullable: true
                  example: false
      responses:
        '202':
          description: Processing
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      query_execution_id:
                        type: string
                        format: uuid
                        example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
                      query_execution_status:
                        type: string
                        enum:
                          - QUEUED
                          - RUNNING
                          - SUCCEEDED
                          - FAILED
                          - CANCELLED
                        example: SUCCEEDED
                      query_execution_start:
                        type: string
                        format: date-time
                        nullable: true
                        example: '2017-07-21T17:32:28Z'
                      query_execution_end:
                        type: string
                        format: date-time
                        nullable: true
                        example: '2017-07-21T17:32:58Z'
                      query_results:
                        type: string
                        nullable: true
                        example: 'http://www.someurl.com/2'
                  - type: object
                    properties:
                      next_link:
                        type: string
                        example: 'https://<server>/vulnerabilities/aws/instances?query_execution_id=61842b40-305f-479c-a9d8-d1e1cf3cf951'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '500':
          description: Server error.  Try again.
      security:
        - vulnerabilities-auth1:
            - vulnerabilities-ro/read
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementQueryExecutorFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
  /aws/vulnerabilities:
    get:
      tags:
        - AWS Vulnerabilities
      summary: Find an AWS vulnerabilities query execution
      description: Find an AWS vulnerabilities query execution
      operationId: findAwsVulnerabilitiesQuery
      parameters:
        - name: query_execution_id
          in: query
          description: Unique identifier of an existing query
          schema:
            type: string
            format: uuid
            example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  query_execution_id:
                    type: string
                    format: uuid
                    example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
                  query_execution_status:
                    type: string
                    enum:
                      - QUEUED
                      - RUNNING
                      - SUCCEEDED
                      - FAILED
                      - CANCELLED
                    example: SUCCEEDED
                  query_execution_start:
                    type: string
                    format: date-time
                    nullable: true
                    example: '2017-07-21T17:32:28Z'
                  query_execution_end:
                    type: string
                    format: date-time
                    nullable: true
                    example: '2017-07-21T17:32:58Z'
                  query_results:
                    type: string
                    nullable: true
                    example: 'http://www.someurl.com/2'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: No execution found
        '500':
          description: Server error.  Try again.
      security:
        - vulnerabilities-auth1:
            - vulnerabilities-ro/read
      x-amazon-apigateway-request-validator: params-only
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementQueryFinderFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
    post:
      tags:
        - AWS Vulnerabilities
      summary: Execute an AWS Vulnerabilities query
      description: Execute an AWS Vulnerabilities query
      operationId: executeAwsVulnerabilitiesQuery
      requestBody:
        description: AWS Vulnerabilities query fields
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                accounts:
                  type: array
                  items:
                    type: string
                  example:
                    - 012345678901
                    - 011235813213
                regions:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - us-east-1
                    - eu-west-1
                instances:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - i-01234
                    - i-56789
                    - i-02468
                    - i-13579
                app_ids:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - SVC01234
                    - SVC02468
                    - SVC01359
                environments:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - dev
                    - qa
                    - prod
                dcls:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - '1'
                    - dcl2
                instance_states:
                  type: array
                  nullable: true
                  items:
                    type: string
                    enum:
                      - RUNNING
                      - STOPPED
                  example:
                    - RUNNING
                auto_scaling_groups:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - asg-1
                    - asg-2
                private_ips:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - 10.071.811.16
                    - 10.24.391.03
                public_ips:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - 92.84.79.70
                    - 145.190.58.85
                dns:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - ip-92-84-79-70.abc.domain.com
                    - ip-145-190-58-85.abc.domain.com
                ec2_image_ids:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - ami-9c31919943ac7db0
                    - ami-c47c0363
                os:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - Amazon Linux 2018.03
                    - CentOS Linux 7.8.2003
                patch_compliance_statuses:
                  type: array
                  nullable: true
                  items:
                    type: string
                    enum:
                      - COMPLIANT
                      - NON_COMPLIANT
                      - UNKNOWN
                  example:
                    - NON_COMPLIANT
                    - UNKNOWN
                tracking_methods:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - AGENT
                qualys_agent_statuses:
                  type: array
                  nullable: true
                  items:
                    type: string
                    enum:
                      - STATUS_ACTIVE
                      - STATUS_INACTIVE
                      - STATUS_NO_AGENT
                  example:
                    - STATUS_INACTIVE
                    - STATUS_NO_AGENT
                qids:
                  type: array
                  nullable: true
                  items:
                    type: string
                  example:
                    - '916128'
                    - '2227987'
                vulnerability_types:
                  type: array
                  nullable: true
                  items:
                    type: string
                    enum:
                      - Info
                      - Confirmed
                      - Potential
                  example:
                    - Confirmed
                    - Potential
                patchable:
                  type: boolean
                  nullable: true
                  example: true
                cvss:
                  type: integer
                  nullable: true
                  format: int32
                  minimum: 0
                  example: 9.1
                cvss_op:
                  type: string
                  nullable: true
                  enum:
                    - eq
                    - ne
                    - lt
                    - gt
                    - lte
                    - gte
                  example: ne
                pci_flag:
                  type: integer
                  nullable: true
                  format: int32
                  enum:
                    - 0
                    - 1
                  example: 1
                first_found_date:
                  type: string
                  nullable: true
                  format: date
                  example: 2020-09-08T00:00:00.000Z
                last_found_date:
                  type: string
                  nullable: true
                  format: date
                  example: 2020-09-08T00:00:00.000Z
                first_report_date:
                  type: string
                  nullable: true
                  format: date
                  example: 2020-09-08T00:00:00.000Z
                last_report_date:
                  type: string
                  nullable: true
                  format: date
                  example: 2020-09-08T00:00:00.000Z
                async:
                  type: boolean
                  nullable: true
                  example: false
      responses:
        '202':
          description: Processing
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      query_execution_id:
                        type: string
                        format: uuid
                        example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
                      query_execution_status:
                        type: string
                        enum:
                          - QUEUED
                          - RUNNING
                          - SUCCEEDED
                          - FAILED
                          - CANCELLED
                        example: SUCCEEDED
                      query_execution_start:
                        type: string
                        format: date-time
                        nullable: true
                        example: '2017-07-21T17:32:28Z'
                      query_execution_end:
                        type: string
                        format: date-time
                        nullable: true
                        example: '2017-07-21T17:32:58Z'
                      query_results:
                        type: string
                        nullable: true
                        example: 'http://www.someurl.com/2'
                  - type: object
                    properties:
                      next_link:
                        type: string
                        example: 'https://<server>/vulnerabilities/aws/vulnerabilities?query_execution_id=61842b40-305f-479c-a9d8-d1e1cf3cf951'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '500':
          description: Server error.  Try again.
      security:
        - vulnerabilities-auth1:
            - vulnerabilities-ro/read
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementQueryExecutorFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
  /aws/qualys-agent-coverage:
    get:
      tags:
        - AWS Qualys Agent Coverage
      summary: Find an AWS Qualys agent coverage query execution
      description: Find an AWS Qualys agent coverage query execution
      operationId: findAwsQualysAgentCoverageQuery
      parameters:
        - name: query_execution_id
          in: query
          description: Unique identifier of an existing query
          schema:
            type: string
            format: uuid
            example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  query_execution_id:
                    type: string
                    format: uuid
                    example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
                  query_execution_status:
                    type: string
                    enum:
                      - QUEUED
                      - RUNNING
                      - SUCCEEDED
                      - FAILED
                      - CANCELLED
                    example: SUCCEEDED
                  query_execution_start:
                    type: string
                    format: date-time
                    nullable: true
                    example: '2017-07-21T17:32:28Z'
                  query_execution_end:
                    type: string
                    format: date-time
                    nullable: true
                    example: '2017-07-21T17:32:58Z'
                  query_results:
                    type: string
                    nullable: true
                    example: 'http://www.someurl.com/2'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: No execution found
        '500':
          description: Server error.  Try again.
      security:
        - vulnerabilities-auth1:
            - vulnerabilities-ro/read
      x-amazon-apigateway-request-validator: params-only
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementQueryFinderFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
    post:
      tags:
        - AWS Qualys Agent Coverage
      summary: Execute an AWS Qualys Agent Coverage query
      description: Execute an AWS Qualys Agent Coverage query
      operationId: executeAwsQualysAgentCoverageQuery
      requestBody:
        description: AWS Qualys Agent Coverage query fields
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                async:
                  type: boolean
                  nullable: true
                  example: false
      responses:
        '202':
          description: Processing
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      query_execution_id:
                        type: string
                        format: uuid
                        example: 61842b40-305f-479c-a9d8-d1e1cf3cf951
                      query_execution_status:
                        type: string
                        enum:
                          - QUEUED
                          - RUNNING
                          - SUCCEEDED
                          - FAILED
                          - CANCELLED
                        example: SUCCEEDED
                      query_execution_start:
                        type: string
                        format: date-time
                        nullable: true
                        example: '2017-07-21T17:32:28Z'
                      query_execution_end:
                        type: string
                        format: date-time
                        nullable: true
                        example: '2017-07-21T17:32:58Z'
                      query_results:
                        type: string
                        nullable: true
                        example: 'http://www.someurl.com/2'
                  - type: object
                    properties:
                      next_link:
                        type: string
                        example: 'https://<server>/vulnerabilities/aws/qualys-agent-coverage?query_execution_id=61842b40-305f-479c-a9d8-d1e1cf3cf951'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '500':
          description: Server error.  Try again.
      security:
        - vulnerabilities-auth1:
            - vulnerabilities-ro/read
      x-amazon-apigateway-integration:
        type: aws_proxy
        uri: 'arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:VulnerabilityManagementQueryExecutorFunction/invocations'
        httpMethod: POST
        passthroughBehavior: when_no_match
        contentHandling: CONVERT_TO_TEXT
  /:
    get:
      summary: API landing page
      operationId: APILandingPage
      responses:
        '200':
          description: Default 200 response
          headers:
            Content-Type:
              schema:
                type: string
            Access-Control-Allow-Origin:
              schema:
                type: string
            Access-Control-Allow-Methods:
              schema:
                type: string
            Access-Control-Allow-Headers:
              schema:
                type: string
          content: {}
      x-amazon-apigateway-integration:
        responses:
          default:
            statusCode: '200'
            responseParameters:
              method.response.header.Content-Type: '''text/html'''
              method.response.header.Access-Control-Allow-Headers: '''Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token'''
              method.response.header.Access-Control-Allow-Methods: '''*'''
              method.response.header.Access-Control-Allow-Origin: '''*'''
            responseTemplates:
              text/html: |
                <!DOCTYPE html> <html> <head>
                   <meta charset="UTF-8">
                   <title>SLater</title>
                   <meta name="viewport" content="width=device-width, initial-scale=1.0">
                   <script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js" charset="UTF-8"></script>
                   <!-- `SwaggerUIBundle` is now available on the page -->
                   <script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-standalone-preset.js"></script>
                   <script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
                   <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@3/swagger-ui.css" />
                </head> <body>
                  <div id="swagger-ui"></div>
                  <script>
                          window.onload = function() {
                            SwaggerUIBundle({
                              url: "https://downloads.pearsoncloudmanagement.com/vulnerabilities/$context.stage/api/openapi_bundled.yaml",
                              validatorUrl: null,
                              enableCORS: true,
                              dom_id: '#swagger-ui',
                              presets: [
                                SwaggerUIBundle.presets.apis,
                                SwaggerUIStandalonePreset
                              ],
                              plugins: [
                                SwaggerUIBundle.plugins.DownloadUrl
                              ],
                              layout: "StandaloneLayout"
                            })
                          }
                  </script>
                </body> </html>
        requestTemplates:
          application/json: '{"statusCode": 200}'
        passthroughBehavior: when_no_match
        type: mock
components:
  securitySchemes:
    vulnerabilities-auth1:
      type: apiKey
      name: Authorization
      in: header
      x-amazon-apigateway-authtype: cognito_user_pools
      x-amazon-apigateway-authorizer:
        providerARNs:
          - 'Fn::FindInMap':
              - Accounts
              - Ref: 'AWS::AccountId'
              - UserPoolArn
        type: cognito_user_pools
