.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0

*********************
HTTPS and AAF Support
*********************

.. contents::
    :depth: 3

The pap, console, pdp-x, brmsgw, and pdp-d components have been migrated from HTTP to HTTPS.  Server certificates were derived from the AAF Root CA.

AAF is supported for externally facing entry points into the Policy subsystem.   These are:

* PDP-D supports AAF for its telemetry and healthcheck APIs.
* PDP-X supports AAF for its external policy APIs. It is currently disabled as some of clients are not AAF-capable, and this is a global setting.
* Console (for Browser Portal redirects) supports AAF when accessed through Portal.

+--------+------+------------+-----+-----+---------------------------------+
| Policy | Role | Remote     |HTTPS| AAF | Notes                           |
+========+======+============+=====+=====+=================================+
| pdp-d  |server| \*         |true |true |Healthcheck and Telemetry APIs   |
+--------+------+------------+-----+-----+---------------------------------+
| pdp-d  |client| aaf        |true |true |Two-way TLS                      |
+--------+------+------------+-----+-----+---------------------------------+
| pdp-d  |client| aai        |true |true |Runtime Control Loop Execution   |
+--------+------+------------+-----+-----+---------------------------------+
| pdp-d  |client| dmaap      |true |false|Runtime Control Loop Execution   |
+--------+------+------------+-----+-----+---------------------------------+
| pdp-d  |client| so         |false|false|Not supported in so              |
+--------+------+------------+-----+-----+---------------------------------+
| pdp-d  |client| vfc        |false|false|Not supported in vfc             |
+--------+------+------------+-----+-----+---------------------------------+
| pdp-x  |server| \*         |true |false|Not all clients are AAF-capable  |
+--------+------+------------+-----+-----+---------------------------------+
| pap    |server| \*         |true |false|Not all clients are AAF-capable  |
+--------+------+------------+-----+-----+---------------------------------+
| console|server| portal     |true |true |Redirected from portal           |
+--------+------+------------+-----+-----+---------------------------------+
| brmsgw |client| dmaap      |true |false|Runtime Control Loop Execution   |
+--------+------+------------+-----+-----+---------------------------------+

AAF Configuration
^^^^^^^^^^^^^^^^^

The default demo ONAP installation comes up bootstrapped with the following AAF data with regards to Policy.

.. code-block:: bash
   :caption: Bootstrapped AAF configuration

    Basic Permissions:
        org.onap.policy.access         *                        *
        org.onap.policy.access         *                        read
        org.onap.policy.certman        local                    request,ignoreIPs,showpass

    Portal Permissions (for UI purposes, administered by Portal team):
        org.onap.policy.menu           menu_admin               *
        org.onap.policy.menu           menu_ajax                *
        org.onap.policy.menu           menu_concept             *
        org.onap.policy.menu           menu_customer            *
        org.onap.policy.menu           menu_customer_create     *
        org.onap.policy.menu           menu_doclib              *
        org.onap.policy.menu           menu_feedback            *
        org.onap.policy.menu           menu_help                *
        org.onap.policy.menu           menu_home                *
        org.onap.policy.menu           menu_itracker            *
        org.onap.policy.menu           menu_job                 *
        org.onap.policy.menu           menu_job_create          *
        org.onap.policy.menu           menu_job_designer        *
        org.onap.policy.menu           menu_logout              *
        org.onap.policy.menu           menu_map                 *
        org.onap.policy.menu           menu_notes               *
        org.onap.policy.menu           menu_policy              *
        org.onap.policy.menu           menu_process             *
        org.onap.policy.menu           menu_profile             *
        org.onap.policy.menu           menu_profile_create      *
        org.onap.policy.menu           menu_profile_import      *
        org.onap.policy.menu           menu_reports             *
        org.onap.policy.menu           menu_sample              *
        org.onap.policy.menu           menu_tab                 *
        org.onap.policy.menu           menu_task                *
        org.onap.policy.menu           menu_task_search         *
        org.onap.policy.menu           menu_test                *
        org.onap.policy.url            doclib                   *
        org.onap.policy.url            doclib_admin             *
        org.onap.policy.url            login                    *
        org.onap.policy.url            policy_admin             *
        org.onap.policy.url            policy_dashboard         *
        org.onap.policy.url            policy_dictionary        *
        org.onap.policy.url            policy_editor            *
        org.onap.policy.url            policy_pdp               *
        org.onap.policy.url            policy_push              *
        org.onap.policy.url            policy_roles             *
        org.onap.policy.url            view_reports             *

    PDP-D Permissions for Telemetry REST API access:
        org.onap.policy.pdpd.healthcheck               *  get
        org.onap.policy.pdpd.healthcheck.configuration *  get
        org.onap.policy.pdpd.telemetry                 *  delete
        org.onap.policy.pdpd.telemetry                 *  get
        org.onap.policy.pdpd.telemetry                 *  post
        org.onap.policy.pdpd.telemetry                 *  put

    PDP-X Permissions for XACML REST APIs:
        org.onap.policy.pdpx.config                    *                        *
        org.onap.policy.pdpx.createDictionary          *                        *
        org.onap.policy.pdpx.createPolicy              *                        *
        org.onap.policy.pdpx.decision                  *                        *
        org.onap.policy.pdpx.getConfig                 *                        *
        org.onap.policy.pdpx.getConfigByPolicyName     *                        *
        org.onap.policy.pdpx.getDecision               *                        *
        org.onap.policy.pdpx.getDictionary             *                        *
        org.onap.policy.pdpx.getMetrics                *                        *
        org.onap.policy.pdpx.list                      *                        *
        org.onap.policy.pdpx.listConfig                *                        *
        org.onap.policy.pdpx.listPolicy                *                        *
        org.onap.policy.pdpx.policyEngineImport        *                        *
        org.onap.policy.pdpx.pushPolicy                *                        *
        org.onap.policy.pdpx.sendEvent                 *                        *
        org.onap.policy.pdpx.updateDictionary          *                        *
        org.onap.policy.pdpx.updatePolicy              *                        *

    Basic Namespace Admin Roles:
        org.onap.policy.admin
        org.onap.policy.owner
        org.onap.policy.seeCerts

    Portal Roles for UI:
        org.onap.policy.Account_Administrator
        org.onap.policy.Policy_Admin
        org.onap.policy.Policy_Editor
        org.onap.policy.Policy_Guest
        org.onap.policy.Policy_Super_Admin
        org.onap.policy.Policy_Super_Guest
        org.onap.policy.Standard_User
        org.onap.policy.System_Administrator

    PDP-D Roles:
        org.onap.policy.pdpd.admin
        org.onap.policy.pdpd.monitor

    PDP-X Roles:
        org.onap.policy.pdpx.admin
        org.onap.policy.pdpx.monitor

    Users:
        demo@people.osaaf.org
        policy@policy.onap.org


demo@people.osaaf.org and policy@policy.onap.org are properly configured with AAF in n a default ONAP installation.  These are:


.. code-block:: bash
   :caption: Default permissions for demo and policy accounts.

   List Permissions by User[policy@policy.onap.org]
   --------------------------------------------------------------------------------
   PERM Type                      Instance                       Action
   --------------------------------------------------------------------------------
   org.onap.policy.access         *                              *
   org.onap.policy.access         *                              read
   org.onap.policy.certman        local                          request,ignoreIPs,showpass
   org.onap.policy.pdpd.healthcheck *                            get
   org.onap.policy.pdpd.healthcheck.configuration *              get
   org.onap.policy.pdpd.telemetry *                              delete
   org.onap.policy.pdpd.telemetry *                              get
   org.onap.policy.pdpd.telemetry *                              post
   org.onap.policy.pdpd.telemetry *                              put
   org.onap.policy.pdpx.createDictionary *                       *
   org.onap.policy.pdpx.createPolicy *                           *
   org.onap.policy.pdpx.decision  *                              *
   org.onap.policy.pdpx.getConfig *                              *
   org.onap.policy.pdpx.getConfigByPolicyName *                  *
   org.onap.policy.pdpx.getDecision *                            *
   org.onap.policy.pdpx.getDictionary *                          *
   org.onap.policy.pdpx.getMetrics *                             *
   org.onap.policy.pdpx.list      *                              *
   org.onap.policy.pdpx.listConfig *                             *
   org.onap.policy.pdpx.listPolicy *                             *
   org.onap.policy.pdpx.policyEngineImport *                     *
   org.onap.policy.pdpx.pushPolicy         *                     *
   org.onap.policy.pdpx.sendEvent *                              *
   org.onap.policy.pdpx.updateDictionary *                       *
   org.onap.policy.pdpx.updatePolicy *                           *

   List Permissions by User[demo@people.osaaf.org]
   --------------------------------------------------------------------------------
   PERM Type                      Instance                       Action
   --------------------------------------------------------------------------------
   org.onap.policy.access
   org.onap.policy.access         *                              read
   org.onap.policy.menu           menu_admin                     *
   org.onap.policy.menu           menu_ajax                      *
   org.onap.policy.menu           menu_customer                  *
   org.onap.policy.menu           menu_customer_create           *
   org.onap.policy.menu           menu_feedback                  *
   org.onap.policy.menu           menu_help                      *
   org.onap.policy.menu           menu_home                      *
   org.onap.policy.menu           menu_itracker                  *
   org.onap.policy.menu           menu_job                       *
   org.onap.policy.menu           menu_job_create                *
   org.onap.policy.menu           menu_logout                    *
   org.onap.policy.menu           menu_notes                     *
   org.onap.policy.menu           menu_process                   *
   org.onap.policy.menu           menu_profile                   *
   org.onap.policy.menu           menu_profile_create            *
   org.onap.policy.menu           menu_profile_import            *
   org.onap.policy.menu           menu_reports                   *
   org.onap.policy.menu           menu_sample                    *
   org.onap.policy.menu           menu_tab                       *
   org.onap.policy.menu           menu_test                      *
   org.onap.policy.pdpd.healthcheck *                            get
   org.onap.policy.pdpd.healthcheck.configuration *              get
   org.onap.policy.pdpd.telemetry *                              delete
   org.onap.policy.pdpd.telemetry *                              get
   org.onap.policy.pdpd.telemetry *                              post
   org.onap.policy.pdpd.telemetry *                              put
   org.onap.policy.pdpx.config    *                              *
   org.onap.policy.pdpx.createDictionary *                       *
   org.onap.policy.pdpx.createPolicy *                           *
   org.onap.policy.pdpx.decision  *                              *
   org.onap.policy.pdpx.getConfig *                              *
   org.onap.policy.pdpx.getConfigByPolicyName *                  *
   org.onap.policy.pdpx.getDecision *                            *
   org.onap.policy.pdpx.getDictionary *                          *
   org.onap.policy.pdpx.getMetrics *                             *
   org.onap.policy.pdpx.list       *                             *
   org.onap.policy.pdpx.listConfig *                             *
   org.onap.policy.pdpx.listPolicy *                             *
   org.onap.policy.pdpx.policyEngineImport *                     *
   org.onap.policy.pdpx.pushPolicy *                             *
   org.onap.policy.pdpx.sendEvent *                              *
   org.onap.policy.pdpx.updateDictionary *                       *
   org.onap.policy.pdpx.updatePolicy *                           *
   org.onap.policy.url            doclib                         *
   org.onap.policy.url            doclib_admin                   *
   org.onap.policy.url            login                          *

Disabling AAF
^^^^^^^^^^^^^

AAF is enabled by default in PDP-D installations.  Set the AAF installation variable to false to disable it.

+---------------+-------------------------+----------+---------------------------+
| Repository    | Install File            | Variable | Notes                     |
+===============+=========================+==========+===========================+
| policy/docker | config/drools/base.conf | AAF      | Heat Installation         |
+---------------+-------------------------+----------+---------------------------+
| oom           | config/drools/base.conf | AAF      | OOM Installation          |
+---------------+-------------------------+----------+---------------------------+

AAF can also be disabled at runtime within the PDP-D container by modifying the following files.

+----------------------------------------------------+-----------------------------------------+
| File                                               | Property                                |
+====================================================+=========================================+
| $POLICY_HOME/config/policy-engine.properties       | http.server.services.SECURED-CONFIG.aaf |
+----------------------------------------------------+-----------------------------------------+
| $POLICY_HOME/config/feature-healthcheck.properties | http.server.services.HEALTHCHECK.aaf    |
+----------------------------------------------------+-----------------------------------------+

After modifying these files, restart the container with "policy stop; policy start"



End of Document
