AAF Installation Guide

DRAFT - THIS GUIDE IS A WORK IN PROGRESS

This documentation will help you to up and run AAF service from the docker image

 

Step 1:

-----------

git clone https://gerrit.onap.org/r/aaf/authz

Build

Note:  use ONAP maven repo settings.xml file

 

$ cd authz

$ mvn clean install -DskipTests

 

Note: we are working on Test cases and some of them are failing during build phase. Use ONAP maven repo settings.xml file 

Build Docker Image

$ cd authz-service

$ mvn clean install docker:build

Note: This process will create the authz-service docker image, and pull openjdk:8-jdk as part of the build

Step 2:

-----------

Make sure you have installed Docker & Docker Compose on your VM / Server ( Linux/Windows)

We have written a docker-compose file which will bind AAF service & Cassandra DB  and loads data to Cassandra DB.

Path to docker- compose folder

$ cd src/main/resources/docker-compose

Check  read & write permissions for docker-compose folder

$ chmod +x *.sh

To start AAF service use the following command. Which will up AAF & Cassandra docker instances.

$ docker-compose up -d

at this point AAF & Cassandra Images will be downloaded and containers will start and service will be up.

Note: ecomp.cql is the default data  template which will be loaded into Cassandra container. Which contains default namespaces,roles,permissions and APPID to test AAF service.

To check running containers 

$ docker ps

 

To check container logs with docker logs <container-name/ID>

For example, to use the container Id of the attos/aaf container in the screenshot above:

$ docker logs 91e6c35286b1

To access files inside the container

$ docker exec -it dockercompose_aaf_container_1 bash

AAF files are located in the following folder    : /opt

  • /opt/app/aaf/authz-service/2.0.15/etc

  • /opt/app/aaf/authz-service/2.0.15/lib


 

to find authz-service logs find them in the following folders:

 logs

_LOG_DIR_

 

Step 3:  access the cassandra command line from bash

---------------------------------------------------

docker exec -it dockercompose_cassandra_container_1 bash

1.cqlsh -u root -p root    

2.use authz;   ( to use keyspace)

3.describe tables;   ( to list all the tables)

3.select * from ns;     ( to check name spaces ,perm,roles etc)

 

To come out from bash & container

quit

exit

 

Step 4:  AAF Command line to  create & grant permissions

 ---------------------------------------------------

Get into the aaf container

1.docker exec -it dockercompose_aaf_container_1 bash

2.cd opt/app/aaf/authz-service/

3. sh runaafcli.sh –c

aaf_id :   dgl@openecomp.org

pass:        ecomp_admin

 

At this point you get access to AAF command line

aafcli> ns list name org.openecomp       

will give you the details of namespace org.openecomp

 

To get list of permission types of the user

>> perm list user dgl@openecomp.org

 

Create and grant permissions

>> perm create org.openecomp.dmaapBC.mr.topic :topic.org.openecomp.dmaapBC.mytopic1 pub org.openecomp.dmaapBC.admin org.openecomp.dmaapBC.access

 

>> perm create org.openecomp.dmaapBC.mr.topic :topic.org.openecomp.dmaapBC.mytopic1 sub org.openecomp.dmaapBC.admin org.openecomp.dmaapBC.access



AAF Command Line

 

AAF commands are broken into 4 major categories:

  • ns - commands dealing with a namespace

  • perm - commands dealing with permissions

  • role - commands dealing with roles

  • user - commands dealing with users

If you know you want to do something namespace related, type "ns" and hit return; you will be given a list of all the subcommands to "ns", along with the syntax of each.

 

Output of "Help"
AAF Command Line Tool --------------------- ------------------------------------------------------------------------------ perm create <type> <instance> <action> [role[,role]* (to Grant to)] delete <type> <instance> <action> <grant|ungrant> <type> <instance> <action> <role[,role]*> rename <type> <instance> <action> <new type> <new instance> <new action> list user <name> name <root perm name> activity <type> ------------------------------------------------------------------------------ role <create|delete> <name> user <add|del> <role> <id[,id]*> list user <id> name <role> activity <name> ------------------------------------------------------------------------------ user role <add|del> <user> <role[,role]*> cred <add|del|reset> <id> [password (not required for del)] delegate <add|upd|del> <from> [to REQ A&U] [until (YYYY-MM-DD) REQ A] list role <role> perm <type> <instance> <action> delegates <user|delegate> <id> approvals <user|approver|ticket> <value> activity <user> ------------------------------------------------------------------------------ ns create <name> <responsible (id[,id]*)> [admin (id[,id]*)] delete <name> admin <add|del> <name> <id[,id]*> responsible <add|del> <name> <id[,id]*> list name <ns> activity <name> ------------------------------------------------------------------------------
Detailed Help
AAF Command Line Tool ------------------------------------------------------------------------------ perm create <type> <instance> <action> [role[,role]* (to Grant to)] ------------------------------------------------------------------------------ Create a Permission with: type - A Namespace qualified identifier identifying the kind of resource to be protected instance - A name that distinguishes a particular instance of resource action - What kind of action is allowed role(s) - Perms granted to these Comma separated Role(s) Nonexistent role(s) will be created, if in same namespace Note: Instance and Action can be a an '*' (enter \\* on Unix Shell) APIs: POST authz/perm application/PermRequest+json;version=2.0 ------------------------------------------------------------------------------ perm delete <type> <instance> <action> ------------------------------------------------------------------------------ Delete a Permission with type,instance and action see Create for definitions APIs: DELETE authz/perm application/PermKey+json;version=2.0 ------------------------------------------------------------------------------ perm <grant|ungrant> <type> <instance> <action> <role[,role]*> ------------------------------------------------------------------------------ Grant a Permission to a Role or Roles OR Ungrant a Permission from a Role or Roles: see Create for definitions of type,instance and action APIs: POST authz/role/<role>/perm application/PermKey+json;version=2.0 DELETE authz/role/<role>/perm application/PermKey+json;version=2.0 ------------------------------------------------------------------------------ perm rename <type> <instance> <action> <new type> <new instance> <new action> ------------------------------------------------------------------------------ Rename a Permission from: <type> <instance> <action> to: <new type> <new instance> <new action> Namespace must be the same in <type> and <new type> see Create for definitions of type,instance and action APIs: PUT authz/perm/<type>/<instance>/<action> ... application/PermRequest+json;version=2.0 ------------------------------------------------------------------------------ perm list user <name> ------------------------------------------------------------------------------ List Permissions by User APIs: GET authz/perms/user/<user id> application/Perms+json;version=2.0 ------------------------------------------------------------------------------ perm list name <root perm name> ------------------------------------------------------------------------------ List Child Permissions APIs: GET authz/perms/<parent type> application/Perms+json;version=2.0 ------------------------------------------------------------------------------ perm list activity <type> ------------------------------------------------------------------------------ List Activity of Permission APIs: GET authz/hist/perm/<type> application/History+json;version=2.0 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ role <create|delete> <name> ------------------------------------------------------------------------------ Create OR Delete a Role name - Name of Role to create APIs: POST authz/role application/RoleRequest+json;version=2.0 DELETE authz/role application/RoleRequest+json;version=2.0 ------------------------------------------------------------------------------ role user <add|del> <role> <id[,id]*> ------------------------------------------------------------------------------ Add OR Delete a User to/from a Role role - Name of Role to create id(s) - ID or IDs to add to the Role Note: this is the same as "user role add..." except allows assignment of role to multiple userss APIs: POST authz/userRole application/UserRoleRequest+json;version=2.0 DELETE authz/userRole/<user>/<role> application/Void+json;version=2.0 ------------------------------------------------------------------------------ role list user <id> ------------------------------------------------------------------------------ List Roles for User APIs: GET authz/roles/user/<user> application/Roles+json;version=2.0 ------------------------------------------------------------------------------ role list name <role> ------------------------------------------------------------------------------ List Roles for Role APIs: GET authz/roles/<role> application/Roles+json;version=2.0 ------------------------------------------------------------------------------ role list activity <name> ------------------------------------------------------------------------------ List Activity of Role APIs: GET authz/hist/role/<role> application/History+json;version=2.0 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ user role <add|del> <user> <role[,role]*> ------------------------------------------------------------------------------ Add OR Delete a User to/from a Role user - ID of User role(s) - Role or Roles to which to add the User Note: this is the same as "role user add..." except allows assignment of user to multiple roles APIs: POST authz/userRole application/UserRoleRequest+json;version=2.0 DELETE authz/userRole/<user>/<role> application/Void+json;version=2.0 ------------------------------------------------------------------------------ user cred <add|del|reset> <id> [password (not required for del)] ------------------------------------------------------------------------------ Add, Delete or Reset Credential id - the ID to create/delete/reset within AAF password - Company Policy compliant Password (not required for Delete) The Domain can be related to any Namespace you have access to * The Domain is in reverse order of Namespace, i.e. NS of com.att.myapp can create user of XY1234@myapp.att.com *NOTE: com.att.csp is a reserved Domain for Global Sign On Delegates can be listed by the User or by the Delegate APIs: POST authn/cred application/CredRequest+json;version=2.0 DELETE authn/cred application/CredRequest+json;version=2.0 PUT authn/cred application/CredRequest+json;version=2.0 ------------------------------------------------------------------------------ user delegate <add|upd|del> <from> [to REQ A&U] [until (YYYY-MM-DD) REQ A] ------------------------------------------------------------------------------ Add, Update or Delete Delegate A Delegate is a person who will temporarily cover the Approval and Ownership questions on behalf of the person Responsible. fromID - the person who is the Responsible person of record toID - the person who will be delegated (required for Add/Update) until - the end date for this delegation APIs: POST /authz/delegate application/DelgRequest+json;version=2.0 DELETE /authz/delegate application/DelgRequest+json;version=2.0 PUT /authz/delegate application/DelgRequest+json;version=2.0 ------------------------------------------------------------------------------ user list role <role> ------------------------------------------------------------------------------ List Users for Role This report lists the users associated to Roles. role - the Role name APIs: GET authz/users/role/<role> application/Users+json;version=2.0 ------------------------------------------------------------------------------ user list perm <type> <instance> <action> ------------------------------------------------------------------------------ List Users for Permission This report lists the users associated to Permissions. Since Users are associated to Roles, and Roles have Permissions, this report accomodates all these linkages. The URL must contain the Permission's type,instance and action, and may include "*"s (type in as \\*). See Perm Create Documentation for definitions. APIs: GET authz/users/perm/<type>/<instance>/<action> ... application/Users+json;version=2.0 ------------------------------------------------------------------------------ user list delegates <user|delegate> <id> ------------------------------------------------------------------------------ List Delegates Delegates are those people temporarily assigned to cover the responsibility of Approving, etc, while the actual Responsible Party is absent. Typically, this is for Vacation, or Business Travel. Delegates can be listed by the User or by the Delegate APIs: GET authz/delegates/user/<id> application/Delgs+json;version=2.0 GET authz/delegates/delegate/<id> application/Delgs+json;version=2.0 ------------------------------------------------------------------------------ user list approvals <user|approver|ticket> <value> ------------------------------------------------------------------------------ List Approvals Approvals are used when the Requestor does not have the rights to perform the action required. Approvers are those listed as responsible for Namespace associated with the request, and those required by the Company by Policy. This may be, for instance the supervisor of the requestor Delegates can be listed by User, Approver or Ticket. APIs: GET authz/approval/user/<value> application/Approvals+json;version=2.0 GET authz/approval/approver/<value> application/Approvals+json;version=2.0 GET authz/approval/ticket/<value> application/Approvals+json;version=2.0 ------------------------------------------------------------------------------ user list activity <user> ------------------------------------------------------------------------------ List Activity of User APIs: GET authz/hist/user/<user> application/History+json;version=2.0 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ ns create <name> <responsible (id[,id]*)> [admin (id[,id]*)] ------------------------------------------------------------------------------ Create a Namespace name - Namespaces are dot-delimited, ex com.att.myapp and must be created with parent credentials. Ex: to create com.att.myapp, you must be admin for com.att or com responsible - This is the person(s) who receives Notifications and approves Requests regarding this Namespace. Companies have Policies as to who may take on this responsibility admin - These are the people who are allowed to make changes on the Namespace, including creating Roles, Permissions and Credentials APIs: POST authz/ns application/NsRequest+json;version=2.0 ------------------------------------------------------------------------------ ns delete <name> ------------------------------------------------------------------------------ Delete a Namespace Namespaces cannot normally be deleted when there are still credentials associated with them. These can be deleted automatically by setting "force" property. i.e. set force=true (note force is unset after first use) Permissions and Roles are not deleted when the Namespace is. Roles and Permissions are retained, but assigned to the Parent Namespace. Similarly, Namespaces can be created even though there are Roles/Perms with that name. They are simply reassigned to the Child Namespace APIs: DELETE authz/ns/<ns>[?force=true] application/Void+json;version=2.0 ------------------------------------------------------------------------------ ns admin <add|del> <name> <id[,id]*> ------------------------------------------------------------------------------ Add or Delete Administrator to/from Namespace name - Name of Namespace id - Credential of Person(s) to be Administrator aafcli will call API on each ID presented. APIs: POST authz/ns/<ns>/admin/<id> application/Void+json;version=2.0 DELETE authz/ns/<ns>/admin/<id> application/Void+json;version=2.0 ------------------------------------------------------------------------------ ns responsible <add|del> <name> <id[,id]*> ------------------------------------------------------------------------------ Add or Delete Responsible person to/from Namespace Responsible persons receive Notifications and approve Requests regarding this Namespace. Companies have Policies as to who may take on this responsibility name - Name of Namespace id - Credential of Person(s) to be made responsible aafcli will call API on each ID presented. APIs: POST authz/ns/<ns>/responsible/<id> application/Void+json;version=2.0 DELETE authz/ns/<ns>/responsible/<id> application/Void+json;version=2.0 ------------------------------------------------------------------------------ ns list name <ns> ------------------------------------------------------------------------------ List Namespaces by Name APIs: GET authz/nss/<ns> application/Nss+json;version=2.0 Indirectly uses: GET authz/roles/ns/<ns> application/Roles+json;version=2.0 GET authz/perms/ns/<ns> application/Perms+json;version=2.0 ------------------------------------------------------------------------------ ns list activity <name> ------------------------------------------------------------------------------ List Activity of Namespace APIs: GET authz/hist/ns/<ns> application/History+json;version=2.0 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------