IBM Cloud Docs
管理账户中的用户

管理账户中的用户

使用IBM Cloud® Identity and Access Management(IAM)来管理账户中的用户。 您可以邀请用户、取消邀请、从账户中删除用户或更新用户的IBMid。

所有用户必须接受邀请才能成为新账户的活跃用户。 有关更多信息,请参阅 取消或重新发送待发邀请

准备工作

邀请用户加入帐户

要邀请用户并管理未回复的邀请,您必须至少拥有以下访问权限之一。 只有用户可以邀请他人。 如果使用服务 ID 进行身份验证,则无法邀请新用户使用该账户。

  • 帐户所有者
  • 具有对用户管理帐户管理服务的编辑者角色或更高角色的 IAM 访问策略
  • 管理用户经典基础设施权限,用于添加用户

根据您的访问级别,您可以邀请新用户并为其分配全部或仅部分访问类型。

在使用 Terraform 邀请用户之前,请确保已完成以下步骤:

  • 安装 Terraform CLI 并为 Terraform 配置IBM Cloud提供商插件。提供商插件。 更多信息,请参阅 IBM Cloud®上的 Terraform 入门 教程。 该插件抽象了用于完成此任务的IBM CloudAPI。用于完成此任务的 API。
  • 创建一个名为 main.tf 的Terraform配置文件。 在此文件中,您可以使用HashiCorp配置语言定义资源。 更多信息,请参阅 Terraform 文档

从帐户中除去用户

只有账户所有者和拥有正确访问权限的用户才能删除其他人。 如果使用服务 ID 进行身份验证,则无法从账户中删除用户。 从账户中删除用户需要以下权限:

  • 分配了管理员角色的用户管理账户管理服务的身份和访问管理(IAM)策略。
  • 如果您的帐户中有经典基础设施,则用户必须拥有用户管理帐户管理服务的 IAM 策略,并具有管理员角色,且在经典基础设施用户层级中是用户的祖先,并具有管理用户经典基础设施权限。

更改用户的 IBMid

要更改IBMid,替换 ID 必须已经存在。 如果不确定新的IBMid是否存在,用户可以访问 "我的IBM,然后单击 "创建IBMid"。 如果您输入的电子邮件地址与联合身份提供商IdP)域相对应,IBMid会将您重定向到该IdP's登录页面。 使用联合IdP首次登录IBM®会触发创建一个新的IBMid。 否则,请按照步骤创建 ID。 使用的电子邮件地址将成为用户新的替代IBMid。

在控制台中邀请用户

要邀请用户,请完成以下步骤:

  1. 在 IBM Cloud 控制台中,点击管理 > 访问(IAM ),然后选择用户

  2. 单击邀请用户

  3. 指定用户的电子邮件地址。 如果是使用单个邀请来邀请多个用户,那么将为所有用户分配相同的访问权。 您可以根据受邀用户的域来限制账户成员资格。 这样,只有来自特定域的用户才能被邀请使用账户。

    更多信息,请参阅 限制账户邀请的用户域

  4. 添加所管理的一个或多个访问权选项。 必须至少分配一个访问权选项。 对于未添加和配置的任何访问权选项,都会分配缺省值无访问权。 根据您有权管理的选项,可以分配以下类型的访问权:

    • 将用户添加到访问组。 对于您希望用户所属的每个访问组,单击添加
    • 为用户手动分配访问权。 展开该部分,分配单独的IAM访问策略或经典基础设施权限。
      • 选择经典基础架构,然后从三个许可权集内进行选择。
      • 选择一组服务,如所有启用身份和访问的服务、所有账户管理服务所有 IAM 账户管理服务,或某一特定服务。 接下来,您可以选择访问整个账户或仅访问一个资源组。 然后,选择适用的所有角色。 要查看每个角色对应哪些操作,请点击每个角色旁边的数字。 有些服务支持使用高级操作符,以允许访问符合特定命名约定的资源。 更多信息,请参阅 使用通配符策略分配访问权限
      • 选择帐户管理,接着从所有帐户管理服务选项中进行选择或选择特定服务。 然后,选择适用的所有角色。
  5. 选择添加以将访问权分配保存到邀请。

  6. 添加所有必需的访问权分配后,单击邀请

您可以取消对 “用户”页面 状态栏中显示为“处理中”或“待处理”的任何用户的邀请。 如果被邀请用户未收到邀请,那么可以向处于“暂挂”状态的任何用户重新发送邀请。 只有在用户接受邀请后,才能添加更多策略和权限。

添加仅使用 VPN 的用户

任何拥有以下权限的用户都可以添加纯 VPN 用户:

  • 对于经典基础架构,您必须拥有该账户的“管理用户”权限。
  • 要访问 IAM,您必须在用户管理账户管理服务中拥有管理员或编辑器角色。

要添加纯 VPN 用户,请使用以下步骤:

  1. 在“用户”页面上,单击添加仅使用 VPN 的用户
  2. 输入用户的个人详细信息。
  3. 单击保存

使用 CLI 邀请用户

要使用CLI邀请用户,请运行以下命令:

ibmcloud account user-invite USER_EMAIL [-o ORG [--org-role ORG_ROLE] [-s SPACE, --space-role SPACE_ROLE]]

通过 CLI,您可以选择不分配访问权限,稍后再分配访问权限。 有关命令参数的更多信息,请参阅 ibmcloud account user-invite

使用 API 邀请用户

您可以使用 API 批量邀请用户。 在单个邀请中包含的所有用户都分配有相同的访问权。 当您使用API邀请用户时,请在逗号分隔的列表中输入电子邮件,每个条目用引号括起来。 本例通过将用户添加到访问组来分配访问权限。

curl -X POST https://user-management.cloud.ibm.com/v2/accounts/987d4cfd77b04e9b9e1a6asdcc861234/users -H 'Authorization: Bearer <IAM_TOKEN>'
  -H 'Content-Type: application/json' -d '{
      "users": [
      {
        "email": "cloud_api_example_member@ibm.com",
        "account_role": "Member"
      }],
      "iam_policy": [{
        "type": "access",
        "roles": [{
          "role_id": "crn:v1:bluemix:public:iam::::role:Viewer"
        }],
        "resources": [{
          "attributes": [{
              "name": "accountId",
              "value": "987d4cfd77b04e9b9e1a6asdcc861234"
            },
            {
              "name": "resourceType",
              "value": "resource-group"
            },
            {
              "name": "resource",
              "value": "2c7449dd871049c29ec3a53853ce123e"
            }
          ]
        }]
      }],
      "access_groups":[
        "AccessGroupId-******-0f54-4d4f-89c2-e5fdc0b9a28c",
        "AccessGroupId-******-3087-4395-a382-a8e8ff9ccc23"
      ]
    }'
InviteUser inviteUserModel = new InviteUser.Builder()
        .email(memberEmail)
        .accountRole("Member")
        .build();
Role roleModel = new Role.Builder()
        .roleId(viewerRoleId)
        .build();
Attribute attributeModel = new Attribute.Builder()
        .name("accountId")
        .value(accountId)
        .build();
Attribute attributeModel2 = new Attribute.Builder()
        .name("resourceGroupId")
        .value("*")
        .build();
Resource resourceModel = new Resource.Builder()
        .addAttributes(attributeModel)
        .addAttributes(attributeModel2)
        .build();
InviteUserIamPolicy inviteUserIamPolicyModel = new InviteUserIamPolicy.Builder()
        .type("access")
        .addRoles(roleModel)
        .addResources(resourceModel)
        .build();
InviteUsersOptions inviteUsersOptions = new InviteUsersOptions.Builder()
        .accountId(accountId)
        .addUsers(inviteUserModel)
        .addIamPolicy(inviteUserIamPolicyModel)
        .addAccessGroups(accessGroupId)
        .build();
Response<InvitedUserList> response = adminService.inviteUsers(inviteUsersOptions).execute();
InvitedUserList invitedUserList = response.getResult();
System.out.println(invitedUserList);
const inviteUserModel = {
  email: memberEmail,
  account_role: 'Member',
};
const roleModel = {
  role_id: viewerRoleId,
};
const attributeModel = {
  name: 'accountId',
  value: accountId,
};
const attributeModel2 = {
  name: 'resourceGroupId',
  value: '*',
};
const resourceModel = {
  attributes: [attributeModel, attributeModel2],
};
const inviteUserIamPolicyModel = {
  type: 'access',
  roles: [roleModel],
  resources: [resourceModel],
};
const params = {
  accountId: accountId,
  users: [inviteUserModel],
  iamPolicy: [inviteUserIamPolicyModel],
  accessGroups: [accessGroupId],
};
userManagementAdminService.inviteUsers(params)
  .then(res => {
    deleteUserId = res.result.resources[0].id;
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
invite_user_model = {
  'email': member_email,
  'account_role': 'Member'
}
role_model = {'role_id': viewer_role_id}
attribute_model = {'name': 'accountId', 'value': account_id}
attribute_model2 = {'name': 'resourceGroupId', 'value': '*'}
resource_model = {'attributes': [attribute_model, attribute_model2]}
invite_user_iam_policy_model = {
  'type': 'access',
  'roles': [role_model],
  'resources': [resource_model]
}
invite_user_response = user_management_admin_service.invite_users(
  account_id=account_id,
  users=[invite_user_model],
  iam_policy=[invite_user_iam_policy_model],
  access_groups=[access_group_id]
).get_result()
print(json.dumps(invite_user_response, indent=2))
inviteUserModel := &usermanagementv1.InviteUser{
  Email:       &memberEmail,
  AccountRole: core.StringPtr("Member"),
}
roleModel := &usermanagementv1.Role{
  RoleID: &viewerRoleID,
}
attributeModel := &usermanagementv1.Attribute{
  Name:  core.StringPtr("accountId"),
  Value: &accountID,
}
attributeModel2 := &usermanagementv1.Attribute{
  Name:  core.StringPtr("resourceGroupId"),
  Value: core.StringPtr("*"),
}
resourceModel := &usermanagementv1.Resource{
  Attributes: []usermanagementv1.Attribute{*attributeModel, *attributeModel2},
}
inviteUserIamPolicyModel := &usermanagementv1.InviteUserIamPolicy{
  Type:      core.StringPtr("access"),
  Roles:     []usermanagementv1.Role{*roleModel},
  Resources: []usermanagementv1.Resource{*resourceModel},
}
inviteUsersOptions := &usermanagementv1.InviteUsersOptions{
  AccountID:    &accountID,
  Users:        []usermanagementv1.InviteUser{*inviteUserModel},
  IamPolicy:    []usermanagementv1.InviteUserIamPolicy{*inviteUserIamPolicyModel},
  AccessGroups: []string{accessGroupID},
}
invitedUserList, response, err := userManagementAdminService.InviteUsers(inviteUsersOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(invitedUserList, "", "  ")
fmt.Println(string(b))

您可以为一组服务分配访问权限。 要分配对所有启用身份和访问的服务的访问权限,请为 "name 属性指定 "serviceType,并使用 "value"service"。 要分配所有账户管理服务的访问权限,请为“name 属性指定”serviceType,并使用 "value"platform_service。 要分配对所有 IAM 帐户管理服务子集的访问权限,请为 "name 属性指定 "service_group_id,并使用 "value"IAM"。

使用 Terraform 邀请用户

您可以使用 Terraform 邀请用户使用IBM Cloud账户。

  1. 在 "main.tf 文件中创建一个参数。 下面的示例使用“ibm_iam_user_invite 资源邀请用户,其中”users 是要邀请的用户电子邮件 ID 列表。
    resource "ibm_iam_user_invite" "invite_user" {
     users = ["test@in.ibm.com"]
    }
    
    更多信息,请参阅 TerraformIdentity and Access Management(IAM)页面上的参数参考详情。
  2. 提供 "main.tf 文件中的资源。 如需了解更多信息,请参阅 使用 Terraform 配置基础架构
    1. 运行 "terraform plan 生成 Terraform 执行计划,以预览建议的操作。
      terraform plan
      
    2. 运行 "terraform apply,创建计划中定义的资源。
      terraform apply
      

取消或重新发送待发邀请

邀请新用户加入账户后,IBM Cloud会要求除仅 VPN 用户外的所有用户接受邀请,成为账户的活跃用户。

邀请 30 天后失效。 IBM Cloud的新用户只能通过电子邮件收到的邀请链接接受邀请。

您可以取消对 “用户”页面 状态栏中显示为“处理中”或“待处理”的任何用户的邀请。 如果被邀请用户未收到邀请,那么可以向处于“暂挂”状态的任何用户重新发送邀请。

  1. 前往 用户页面
  2. 查找处于“Processing 或”Pending 状态的用户行。
  3. 点击“行动图标”更多行动 图标,然后选择“重新发送邀请或”取消邀请

在控制台中接受邀请

如果受邀用户已是IBM Cloud会员,他们会在通知和电子邮件中收到邀请链接。 在 "通知 "页面,用户可以使用搜索栏查找邀请,也可以通过名为 "account 的通知类型进行筛选。 有关更多信息,请参阅 管理邀请通知查看通知

使用 CLI 接受邀请

如果受邀用户已是IBM Cloud成员,则可以使用 CLI 接受邀请。 在下面的“ibmcloud login 命令中,”ACCOUNT_ID 是用户被邀请加入的目标账户的 ID。

ibmcloud login -c ACCOUNT_ID --accept

使用应用程序接口接受邀请

如果受邀用户已是IBM Cloud成员,则可使用 API 接受邀请。 在下面的示例中,“ACCOUNT_ID 是用户受邀加入的目标账户的 ID,而”IAM_TOKEN 属于受邀者。

curl -X POST \
  'https://iam.cloud.ibm.com/v2/users/accept' \
  --header 'Authorization: Bearer <IAM_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "account_id": "<ACCOUNT ID>"
  }

使用控制台从账户中删除用户

当您从账户中删除用户时,该用户将无法再登录控制台、切换到您的账户或访问账户资源。 从帐户中除去用户不会删除改用户的 IBM 标识。

要从帐户除去用户,请完成以下步骤:

  1. 在 IBM Cloud® 控制台中,点击管理 > 访问(IAM ),然后选择用户
  2. 在要删除的用户行中,单击操作图标操作图标>删除用户

用户创建的任何资源都会保留在账户中,但用户创建的任何 "IBM CloudAPI 密钥都会被删除。 用户无法再使用其创建的资源。 账户所有者或服务或服务实例的管理员可以指派其他用户使用资源,或从账户中删除这些用户。

如果您收到一条错误消息,指出无法删除经典基础设施用户,请确保该用户层级中的任何后代 都分配了新的父级在账户中禁用 或删除。 然后,你可以再试一次。

除了从账户中删除用户外,还可以为他们分配一个有临时时间限制条件的访问策略。 这样,用户就可以登录控制台,在账户列表中查看账户,但在策略开始前或过期后无法访问账户中的资源。 更多信息,请参阅 创建基于时间的临时条件

使用 CLI 从账户中删除用户

要从帐户中删除用户,请运行以下命令:

ibmcloud account user-remove USER_ID [-c ACCOUNT_ID] [-f, --force]

有关命令选项,请参阅 管理账户和用户 CLI 命令。

使用应用程序接口从账户中删除用户

要从账户中删除用户,请调用 用户管理 API,如以下示例请求所示。

用用户的 IAM ID 替换变量。 必须使用用户令牌进行授权。 服务 ID 不能从帐户中删除用户。

curl -X DELETE https://user-management.cloud.ibm.com/v2/accounts/987d4cfd77b04e9b9e1a6asdcc861234/users/IBMid-1000000000 -H 'Authorization: Bearer <IAM_TOKEN>' -H 'Content-Type: application/json'
RemoveUserOptions removeUserOptions = new RemoveUserOptions.Builder()
  .accountId(accountId)
  .iamId(deleteUserId)
  .build();
service.removeUser(removeUserOptions).execute();
const params = {
  accountId: accountId,
  iamId: deleteUserId,
};
userManagementAdminService.removeUser(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
response = user_management_admin_service.remove_user(
  account_id=account_id,
  iam_id=delete_user_id,
).get_result()
print(json.dumps(response, indent=2))
removeUserOptions := userManagementService.NewRemoveUserOptions(
  accountID,
  deleteUserID,
)
response, err := userManagementAdminService.RemoveUser(removeUserOptions)
if err != nil {
  panic(err)
}

您还可以通过用户 ID 或电子邮件地址和领域删除用户。 必须输入用户 ID 或电子邮件和区域。 更多信息,请参阅 通过用户 ID 或电子邮件从帐户中删除用户

curl -X DELETE https://user-management.cloud.ibm.com/v2/accounts/987d4cfd77b04e9b9e1a6asdcc861234/users?user_id=user%40ibm.com&email=user.email%40ibm.com&realm=ibmid -H 'Authorization: Bearer <IAM_TOKEN>' -H 'Content-Type: application/json'

使用控制台更改用户的IBMid

作为账户所有者,您可以更新用户的IBMid。 The new IBMid that you use to replace the current IBMid must already exist. 您要替换的IBMid将从账户中删除。 如果需要现有IBMid继续作为账户成员,则必须再次邀请用户并重新建立其访问权限。

账户所有者不能更改自己的IBMid。

用户确认新的IBMid存在后,完成以下步骤更改用户的IBMid:

  1. 转到IBM Cloud®控制台中的“管理”>访问(IAM)”>“用户”,然后选择要更新其IBMid的用户。
  2. 在“详细信息”部分,单击“更新IBMid”。
  3. 输入新的IBMid,然后单击更新

现在,用户可以使用新的 IMBid 登录 ibmibm.com,并使用分配给以前使用的IBMid 的访问权限继续在IBM Cloud账户中工作。