Updated on 2024-08-09 GMT+08:00

Introduction

You can use Identity and Access Management (IAM) for fine-grained permissions management of your CPH resources. If your Huawei Cloud account does not need individual IAM users, you can skip this section.

New IAM users do not have any permissions assigned by default. You need to first add them to one or more groups and attach policies or roles to these groups. The users then inherit permissions from the groups and can perform specified operations on cloud services based on the permissions they have been assigned.

You can grant users permissions using roles and policies. Roles are provided by IAM to define service-based permissions that match users' job responsibilities. Policies define API-based permissions for operations on specific resources under certain conditions, allowing for more fine-grained, secure access control of cloud resources.

If you want to allow or deny the access to an API, use policy-based authorization.

An account has all the permissions required to call all APIs, but IAM users must be assigned the required permissions. The permissions required for calling an API are determined by the actions supported by the API. Only users who have been granted permissions allowing the actions can call the API successfully. For example, if an IAM user wants to query ECSs using an API, the user must have been granted permissions that allow the cph:servers:list action.

Supported Actions

CPH provides system-defined policies that can be used in IAM. You can also create custom policies to supplement system-defined policies for more refined access control. Operations supported by policies are specific to APIs. The following are common concepts related to policies:

  • Permissions: statements in a policy that allow or deny certain operations
  • APIs: REST APIs that can be called by a user who has been granted specific permissions
  • Actions: specific operations that are allowed or denied
  • Dependencies: actions which a specific action depends on. When allowing an action for a user, you also need to allow any existing action dependencies for that user.
  • IAM projects/Enterprise projects: the authorization scope of a custom policy. A custom policy can be applied to IAM projects or enterprise projects or both. Policies that contain actions for both IAM and enterprise projects can be used and applied for both IAM and Enterprise Management. CPH does not support Enterprise Project. For details about the differences between IAM and enterprise management, see Differences Between IAM and Enterprise Management.

    √: supported; x: not supported

    Table 1 describes the actions supported by CPH custom policies.

    Table 1 Actions supported by CPH custom policies

    Permission

    API

    Action

    IAM Project

    Enterprise Project

    Creating a cloud phone server

    POST /v2/{project_id}/cloud-phone/servers

    cph:servers:create

    Migrating workloads from a cloud phone server to another server

    POST /v2/{project_id}/cloud-phone/servers/{server_id}/change

    cph:servers:change

    Querying cloud phone servers

    GET /v1/{project_id}/cloud-phone/servers

    cph:servers:list

    Querying details of a cloud phone server

    GET /v1/{project_id}/cloud-phone/servers/{server_id}

    cph:servers:get

    Querying cloud phone server flavors

    GET /v1/{project_id}/cloud-phone/server-models

    cph:system:listServerTypes

    ×

    Renaming a cloud phone server

    PUT /v1/{project_id}/cloud-phone/servers/{server_id}

    cph:servers:updateName

    Changing the flavor of a cloud phone server

    POST /v1/{project_id}/cloud-phone/servers/change-server-model

    cph:servers:changeType

    Batch restarting cloud phone servers

    POST /v1/{project_id}/cloud-phone/servers/batch-restart

    cph:servers:restart

    Pushing a shared storage file

    POST /v1/{project_id}/cloud-phone/phones/share-files

    cph:servers:pushShareFiles

    Querying shared storage files

    GET /v1/{project_id}/cloud-phone/servers/share-files

    cph:servers:getShareFiles

    Deleting shared storage files

    POST /v1/{project_id}/cloud-phone/phones/share-files

    cph:servers:deleteShareFiles

    Pushing a shared application

    POST /v1/{project_id}/cloud-phone/phones/share-apps

    cph:servers:pushShareApps

    Deleting a shared application

    DELETE /v1/{project_id}/cloud-phone/phones/share-apps

    cph:servers:deleteShareApps

    Changing a key pair

    PUT /v1/{project_id}/cloud-phone/servers/open-access

    cph:servers:updateKeypair

    Querying encoding servers

    GET /v1/{project_id}/cloud-phone/encode-servers

    cph:servers:listEncodeServers

    Batch restarting the encoding servers

    POST /v1/{project_id}/cloud-phone/encode-servers/batch-restart

    cph:servers:restartEncodeServers

    Querying the bandwidth used by a cloud phone

    GET /v1/{project_id}/cloud-phone/bandwidths

    cph:bandwidths:list

    ×

    Modifying a shared bandwidth

    PUT /v1/{project_id}/cloud-phone/bandwidths/{band_width_id}

    cph:bandwidths:put

    ×

    Querying cloud phones

    GET /v1/{project_id}/cloud-phone/phones

    cph:phones:list

    Querying details of a cloud phone

    GET /v1/{project_id}/cloud-phone/phones/{phone_id}

    cph:phones:get

    Querying cloud phone flavors

    GET /v1/{project_id}/cloud-phone/phone-models

    cph:system:listPhoneSpecifications

    ×

    Resetting cloud phones

    POST /v1/{project_id}/cloud-phone/phones/batch-reset

    cph:phones:reset

    Restarting cloud phones

    POST /v1/{project_id}/cloud-phone/phones/batch-restart

    cph:phones:restart

    Stopping cloud phones

    POST /v1/{project_id}/cloud-phone/phones/batch-stop

    cph:phones:stop

    Renaming a cloud phone

    PUT /v1/{project_id}/cloud-phone/phones/{phone_id}

    cph:phones:updateName

    Updating cloud phone attributes

    POST /v1/{project_id}/cloud-phone/phones/batch-update-property

    cph:phones:updateProperty

    Exporting data on cloud phones

    POST /v1/{project_id}/cloud-phone/phones/batch-storage

    cph:phones:storage

    Restoring data of cloud phones

    POST /v1/{project_id}/cloud-phone/phones/batch-restore

    cph:phones:restore

    Diverting cloud phone traffic

    POST /v1/{project_id}/cloud-phone/phones-traffic

    cph:phones:createTrafficRoute

    Expanding the disk capacity of cloud phones

    POST /v1/{project_id}/cloud-phone/phones/expand-volume

    cph:phones:expandVolume

    Obtaining information about the cloud phones to be accessed

    POST /v1/{project_id}/cloud-phone/phones/batch-connection

    cph:phones:getConnections

    Asynchronously running the ADB shell commands

    POST /v1/{project_id}/cloud-phone/phones/commands

    cph:phones:execCommands

    Synchronously running the ADB shell commands

    POST /v1/{project_id}/cloud-phone/phones/sync-commands

    cph:phones:execSyncCommands

    Querying the execution status of a task

    GET /v1/{project_id}/cloud-phone/jobs/{job_id}

    cph:jobs:get

    ×

    Querying the execution statuses of all tasks

    GET /v1/{project_id}/cloud-phone/jobs

    cph:jobs:list

    ×

    Batch adding tags

    POST /v1/{project_id}/{resource_type}/{resource_id}/tags/action

    cph:resource:tagResource

    Batch deleting tags

    POST /v1/{project_id}/{resource_type}/{resource_id}/tags/action

    cph:resource:unTagResource

    Querying cloud phone servers by tag

    POST /v1/{project_id}/{resource_type}/resource_instances/action

    cph:resource:listResourcesByTag

    Querying tags of a cloud phone server

    GET /v1/{project_id}/{resource_type}/{resource_id}/tags

    cph:resource:listTagsForResource

    Querying cloud phone server tags in a specified project

    GET /v1/{project_id}/{resource_type}/tags

    cph:resource:listTags

    Querying cloud phone images

    GET /v1/{project_id}/cloud-phone/images

    cph:images:list

    ×

    Deleting a cloud phone image

    DELETE /v1/{project_id}/cloud-phone/images/{image_id}

    cph:images:delete

    ×

    Sharing a cloud phone image

    POST /v1/{project_id}/cloud-phone/images/{image_id}/members

    cph:images:addMembers

    ×

    Querying users with whom you shared a cloud phone image

    GET /v1/{project_id}/cloud-phone/images/{image_id}/members

    cph:images:listMembers

    ×

    Stopping sharing of a cloud phone image

    DELETE /v1/{project_id}/cloud-phone/images/{image_id}/members/{member_id}

    cph:images:deleteMembers

    ×

    Querying AZs

    GET /v1/{project_id}/cloud-phone/availability-zones

    cph:system:listServerTypesSoldOutStatus

    ×

    Querying subnets

    GET /v1/{project_id}/cloud-phone/subnets

    cph:system:listSubnets

    ×

    Querying VPC peering connections

    GET /v1/{project_id}/cloud-phone/peering-routes

    cph:system:listPeerings

    ×

    Deleting a VPC peering connection

    DELETE /v1/{project_id}/cloud-phone/peering-routes

    cph:system:deletePeerings

    ×

    Adding a VPC peering connection

    POST /v1/{project_id}/cloud-phone/peering-routes

    cph:system:createPeerings

    ×

    Exporting details of cloud phones

    GET /v1/{project_id}/cloud-phone/phones/phone-export

    cph:phones:exportDetails

    Creating agencies

    POST /v1/{project_id}/agencies

    cph:system:createAgencies

    ×

    Checking an agency

    GET /v1/{project_id}/agencies

    cph:system:checkAgencies

    ×