blob: dde20666e3180a4a39247f4acb9b1b7ac7f40a6c [file] [log] [blame]
sg481nfaf7f2d2017-09-22 17:17:23 +00001.. This work is licensed under a Creative Commons Attribution 4.0 International License.
2.. http://creativecommons.org/licenses/by/4.0
3.. Copyright © 2017 AT&T Intellectual Property. All rights reserved.
4
sg481na9d21082017-09-23 14:26:06 +00005AAF - Application Authorization Framework
sg481nfaf7f2d2017-09-22 17:17:23 +00006==================================================
Instrumental2c458412018-10-24 12:52:03 -05007.. image:: https://bestpractices.coreinfrastructure.org/projects/2303/badge
8 :alt: CII Silver Badge
9 :target: https://bestpractices.coreinfrastructure.org/projects/2303
10
Youssef-Chawki5c121c42018-08-20 12:18:37 +020011.. The purpose of AAF (Application Authorization Framework) is to organize software authorizations so that applications, tools and services can match the access needed to perform job functions.
sg481nfaf7f2d2017-09-22 17:17:23 +000012
13AAF is designed to cover Fine-Grained Authorization, meaning that the Authorizations provided are able to used an Application's detailed authorizations, such as whether a user may be on a particular page, or has access to a particular Pub-SUB topic controlled within the App.
14
15This is a critical function for Cloud environments, as Services need to be able to be installed and running in a very short time, and should not be encumbered with local configurations of Users, Permissions and Passwords.
16
17To be effective during a computer transaction, Security must not only be secure, but very fast. Given that each transaction must be checked and validated for Authorization and Authentication, it is critical that all elements on this path perform optimally.
18
19
Instrumentalbbe71542018-05-25 12:29:38 -050020Sections
21++++++++
sg481nfaf7f2d2017-09-22 17:17:23 +000022
23.. toctree::
Instrumental91a983a2018-05-25 13:27:54 -050024 :maxdepth: 1
Instrumentalbbe71542018-05-25 12:29:38 -050025 :glob:
26
Instrumental91a983a2018-05-25 13:27:54 -050027 sections/architecture/index
28 sections/installation/index
29 sections/configuration/index
Instrumental647c1c32018-07-23 16:35:19 -050030 sections/development/index
Sai Gandham4b6435c2019-02-13 10:59:14 -060031 sections/AAF_in_a_Nutshell
Instrumental91a983a2018-05-25 13:27:54 -050032 sections/logging
33 sections/release-notes
Youssef-Chawki5c121c42018-08-20 12:18:37 +020034
sg481nfaf7f2d2017-09-22 17:17:23 +000035Introduction
36------------
Youssef-Chawki5c121c42018-08-20 12:18:37 +020037AAF acronym stands for Application Authorization Framework and initially it was focused on “Authorization”, but now supports implementations for both Authentication and Authorization. AAF is a set of Client Libraries (CADI Framework) and RESTful Services that support multiple Authentication Protocols and Fine-Grained Authorization.
38The goal of AAF project is to provide consistent authentication, authorization and security to various ONAP components. AAF organizes software authorizations so that applications, tools and services can match the access needed to perform job functions. AAF is designed to cover Fine-Grained Authorization, meaning that the Authorizations provided are able to use an Application's detailed authorizations, such as whether a user may be on a particular page, or has access to a particular Pub-Sub topic controlled within the App. This is a critical function for Cloud environments, as Services need to be able to be installed and running in a very short time, and should not be encumbered with local configurations of Users, Permissions and Passwords. The sister framework CADI (Code Access Data Identity) allows Java Applications to utilize Identity Authentication methods as plugins. Certificate Manager delivers X509 certificates in support of 2 way x509 TLS.
39
40AAF contains some elements of Role Based Authorization, but includes Attribute Based Authorization elements as well.
41
42Entities within AAF
43-------------------
44
45AAF is an IAM that organizes software authorizations so that applications, tools and services can match the access needed to perform job functions. AAF is more than a typical RBAC. There are Roles, to be sure, but the important Architectural Pattern includes separation of Roles and Permissions.
sg481nfaf7f2d2017-09-22 17:17:23 +000046
sg481n2bc35382017-09-23 15:50:15 +000047|image0|
48
Youssef-Chawki5c121c42018-08-20 12:18:37 +020049.. |image0| image:: sections/architecture/images/aaf-permission-mapping.png
50 :height: 200px
51 :width: 500px
52
53A permission is composed of the following attributes:
54
55* Type: core name of the permission
56* Instance: the object that is being interacted
57* Action: What is happening with this object
58
59All roles, permissions identities of a given module in ONAP is covered by a Namespace (e.g. roles, permission and identities for the APP-C modules of ONAP)
60
61The permissions, having a 3 part definition, make AAF also like an ABAC (A=Attribute).
62Roles, Permissions are stored centrally, but segregated by Application (the proverbial Namespace). The Application Creates Permissions that match their code (for the question "Does User have Permission"). Permissions are granted to Roles, to which the User belongs. AAF is not a Policy Engine, where dynamically based Policies are validated against differing kinds of Data Stores. AAF (Application Authorization Framework) is focused on RealTime Authentication and Authorization
63
64Namespace
65^^^^^^^^^
66A Namespace, in AAF, is the ensemble of Roles, Permissions and Identities. Namespaces are known by domain, example com.onap.dcae or com.onap.appc and they are hierarchically managed. A Namespace is assigned to an application and contains one or more roles and one or more permissions. By default, every namespace has an admin role
67
68**People in Namespaces**
69
70Tasks Owner (Responsible) must do:
71
72* Owners receive by email a notification to Approve
73* Owners also receive notifications of time based activities
74
75 * Periodic Revalidation of Users in Roles in Namespace
76 * Periodic Revalidation of Permission in Namespace to Roles
77
78Admins may:
79
80* Create/Delete/Modify Roles in Namespace
81* Add/Remove Users from Roles in Namespace
82* Create/Delete/Modify Permissions in Namespace
83* Grant/Ungrant Permissions in Namespace to any Role in the company (Cross Company Role Grants are possible, but require approvals from both sides).
84
85Only Namespace Admins may manage Roles/Permissions within a Namespace. The Granting process is One-Way. The Namespace Admins must Grant given Permissions to Roles on request.
86
87
88
89
90Object Model
91^^^^^^^^^^^^
92
93|image1|
94
95.. |image1| image:: sections/architecture/images/aaf-hl-object-model.png
sg481n2bc35382017-09-23 15:50:15 +000096 :height: 600px
97 :width: 800px
sg481nfaf7f2d2017-09-22 17:17:23 +000098
Youssef-Chawki5c121c42018-08-20 12:18:37 +020099Resource Owner in ONAP defines permissions:
100
101* He defines and grants permission to roles
102* Get notified by a mail when an Identity with a Role asks to be granted a permission
103
104
sg481nfaf7f2d2017-09-22 17:17:23 +0000105
106Essential Components
107--------------------
108The core component to deliver this Enterprise Access is a RESTful service, with runtime instances registered in a Cloud Directory (DME2) and backed by a resilient Datastore (Cassandra as of release 1.3)
109
110The Data is managed by RESTful API, with Admin functions supplemented by Character Based User interface and certain GUI elements.
111
Youssef-Chawki5c121c42018-08-20 12:18:37 +0200112CADI Framework
113^^^^^^^^^^^^^^
sg481nfaf7f2d2017-09-22 17:17:23 +0000114
Youssef-Chawki5c121c42018-08-20 12:18:37 +0200115CADI is a framework for providing Enterprise Class Authentication and Authorization with minimal configuration to Containers and Standalone Services
116It is in fact a library used by services to:
sg481nfaf7f2d2017-09-22 17:17:23 +0000117
Youssef-Chawki5c121c42018-08-20 12:18:37 +0200118* Authenticate with one or more Authentication Protocols
119* Authorize in a FINE-GRAINED manner using AAF Components
120
121AAF Components RESTful Services
122^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
123
124Service (primary) All the Authorization information, it is accessible by provided Caching Clients and by specialized plugins:
125
126* Locate how to find ANY OR ALL AAF instances across any geographic distribution
127* OAuth 2.0 new component providing Tokens and Introspection
128* GUI Tool to view and manage Authorization Information, and create Credentials
129* Certman Certificate Manger, create and renew X509 with Fine-Grained Identity
130* FS File Server to provide access to distributable elements (like well known certs)
131* Hello - Test your client access (certs, OAuth 2.0, etc.)
132
133Cassandra as global replicating Data Store
134^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
135
136
137How AAF works
138---------------------
139To understand how AAF works, let's describe its workflow through a high level "three tiered web app" use case:
140
141|image2|
142
143.. |image2| image:: sections/architecture/images/aaf-use-case.png
144 :height: 400px
145 :width: 800px
146
147
1481. Browser client goes to GUI using for instance SSO plugin (or Basic Auth)
1492. App goes directly to a Service using x509 or Basic Auth (or other)
1503. CADI Filter coverts credential to “Principal”. If not in cache, AAF is contacted for Permissions protecting GUI with Service ID/Credential (MechID of App/Pass or X.509 Client Cert (preferred)).
1514. AAF does provide User/Password features, or can be delegated to other credential service via Plugin
1525. If information is not in Service Cache, AAF’s DB is contacted using AAF Service ID/Credential.
1536. Client App uses Permission Attributes delivered by AAF/AAF Cache for protecting sensitive data/functions (using J2EE method).
1547. If not in Cache, Client contacts App Service, using App ID/Credential.
1558. CADI Filter converts App ID/Credential to Principal. If not in cache, contacts with AAF (with App ID/Credential) for Permissions of Client.
1569. App protects data based on Client Permissions.
15710. Component contacts next layer using Service ID/Credential.
15811. If ID or Permissions of AppServer are not in Cache, contact AAF using AAF Security Plugin for Cassandra, which uses AAF Java Client.
15912. Cassandra protects Cluster/Keyspace/ColumnFamily w/Permissions.
160
161