API Key Access and Permissions
Last Modified: 6/8/2021
API Key Access
Developers typically access the API using an API token that is generated for their accounts. This token gives the user all the permissions their roles allow them to have. However there may be circumstances where a token is required that has limited permissions to enable other users/processes to perform specific actions, such as limited use of the CLI, automation in scripts, etc.
To facilitate this, an API Key can be generated with a specific set of permissions and then used to login to the API and generate an appropriate, time-limited, API token. This type of token will expire after 4 hours.
Generating a Limited Access API token
A User can create a limited access API token using mcctl user createuserapikey
. This command requires an organization and at least one set of permissions specified as a Resource and Action, as shown in this example.
# mcctl user createuserapikey org=demoorg description="test" permissions:0.action=view permissions:0.resource=apps
userapikey:
id: e9028a99-xxxx-xxxx-xxxx-56e32275fb8f
apikey: af2705c7-xxxx-xxxx-xxxx-7e0e377ac5a7
The API Key is then used with mcctl login
to generate a token for further API or mcctl
calls.
# mcctl login apikeyid=e9028a99-xxxx-xxxx-xxxx-56e32275fb8f apikey=af2705c7-xxxx-xxxx-xxxx-7e0e377ac5a7
login successful
token saved to /Users/peterg/.mctoken
In this example, the permissions given were for View Apps. This only gives the permissions to use mcctl app show
and the API end point /auth/ctrl/ShowApp
. Any attempt to use other mmctl
commands or API end points will not be allowed.
# mcctl app show region=EU
- key:
organization: demoorg
name: hello-k8
version: "1.0"
imagetype: ImageTypeDocker
accessports: tcp:8888
defaultflavor:
name: m4.small
-- snip --
]
# mcctl appinst show region=EU
Error: Forbidden (403), Forbidden
An API Key can be associated with multiple permission by adding additional resource/action pairs to the createapikey
command and incrementing the index values, e.g
mcctl user createuserapikey org=packet description="Test api key" permissions:0.action=view permissions:0.resource=cloudlets permissions:1.action=view permissions:1.resource=cloudletpools
API Permissions
The permissions specified in the command may give access to multiple related operations, for example, the manage
action typically grants create, delete and update permissions. The table below shows the list of permissions that are available and the associated operations they enable.
NOTE: This is the complete set of permissions. The actual permissions that a user can grant via an API Key will only be a subset of the permissions that their user is allowed. For example, Developer users cannot give other users the users
permissions.
Resource | Action | Permitted Operations |
---|---|---|
alert | view | ShowAlert |
appanalytics | view | ShowAppinstclient |
appinsts | manage | ShowDevicereport |
CreateAppinst | ||
DeleteAppinst | ||
RefreshAppinst | ||
RequestAppinstlatency | ||
UpdateAppinst | ||
appinsts | view | ShowDevicereport |
StreamAppinst | ||
ShowAppinst | ||
ShowOperatorcode | ||
apps | manage | AddAppautoprovpolicy |
RemoveAppautoprovpolicy | ||
CreateApp | ||
DeleteApp | ||
UpdateApp | ||
apps | view | ShowApp |
cloudlets | view | ShowCloudlet |
FindmappingCloudlet | ||
GetCloudletResourceUsage | ||
ShowOperatorcode | ||
ShowTrustpolicy | ||
ShowOperatorcode | ||
StreamCloudlet | ||
clusterinsts | manage | DeleteIdlereservableclusterinsts |
CreateClusterinst | ||
DeleteClusterinst | ||
UpdateClusterinst | ||
clusterinsts | view | ShowOperatorcode |
ShowClusterinst | ||
StreamClusterinst | ||
developerpolicy | manage | AddAutoprovpolicycloudlet |
CreateAutoprovpolicy | ||
CreateAutoscalepolicy | ||
DeleteAutoprovpolicy | ||
DeleteAutoscalepolicy | ||
RmAutoprovpolicycloudlet | ||
UpdateAutoprovpolicy | ||
UpdateAutoscalepolicy | ||
developerpolicy | view | ShowAutoprovpolicy |
ShowAutoscalepolicy | ||
flavors | view | ShowFlavor |
users | manage | AddUser |
CreateUser | ||
DeleteUser | ||
Updateuser | ||
users | show | ShowUser |
ShowUserRole |