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.
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> ------------------------------------------------------------------------------
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 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------