管理账户中的用户
使用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。
在控制台中邀请用户
要邀请用户,请完成以下步骤:
-
在 IBM Cloud 控制台中,点击管理 > 访问(IAM ),然后选择用户。
-
单击邀请用户。
-
指定用户的电子邮件地址。 如果是使用单个邀请来邀请多个用户,那么将为所有用户分配相同的访问权。 您可以根据受邀用户的域来限制账户成员资格。 这样,只有来自特定域的用户才能被邀请使用账户。
更多信息,请参阅 限制账户邀请的用户域。
-
添加所管理的一个或多个访问权选项。 必须至少分配一个访问权选项。 对于未添加和配置的任何访问权选项,都会分配缺省值无访问权。 根据您有权管理的选项,可以分配以下类型的访问权:
- 将用户添加到访问组。 对于您希望用户所属的每个访问组,单击添加。
- 为用户手动分配访问权。 展开该部分,分配单独的IAM访问策略或经典基础设施权限。
- 选择经典基础架构,然后从三个许可权集内进行选择。
- 选择一组服务,如所有启用身份和访问的服务、所有账户管理服务和所有 IAM 账户管理服务,或某一特定服务。 接下来,您可以选择访问整个账户或仅访问一个资源组。 然后,选择适用的所有角色。 要查看每个角色对应哪些操作,请点击每个角色旁边的数字。 有些服务支持使用高级操作符,以允许访问符合特定命名约定的资源。 更多信息,请参阅 使用通配符策略分配访问权限。
- 选择帐户管理,接着从所有帐户管理服务选项中进行选择或选择特定服务。 然后,选择适用的所有角色。
-
选择添加以将访问权分配保存到邀请。
-
添加所有必需的访问权分配后,单击邀请。
您可以取消对 “用户”页面 状态栏中显示为“处理中”或“待处理”的任何用户的邀请。 如果被邀请用户未收到邀请,那么可以向处于“暂挂”状态的任何用户重新发送邀请。 只有在用户接受邀请后,才能添加更多策略和权限。
添加仅使用 VPN 的用户
任何拥有以下权限的用户都可以添加纯 VPN 用户:
- 对于经典基础架构,您必须拥有该账户的“管理用户”权限。
- 要访问 IAM,您必须在用户管理账户管理服务中拥有管理员或编辑器角色。
要添加纯 VPN 用户,请使用以下步骤:
- 在“用户”页面上,单击添加仅使用 VPN 的用户。
- 输入用户的个人详细信息。
- 单击保存。
使用 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账户。
- 在 "
main.tf
文件中创建一个参数。 下面的示例使用“ibm_iam_user_invite
资源邀请用户,其中”users
是要邀请的用户电子邮件 ID 列表。
更多信息,请参阅 TerraformIdentity and Access Management(IAM)页面上的参数参考详情。resource "ibm_iam_user_invite" "invite_user" { users = ["test@in.ibm.com"] }
- 提供 "
main.tf
文件中的资源。 如需了解更多信息,请参阅 使用 Terraform 配置基础架构。- 运行 "
terraform plan
生成 Terraform 执行计划,以预览建议的操作。terraform plan
- 运行 "
terraform apply
,创建计划中定义的资源。terraform apply
- 运行 "
取消或重新发送待发邀请
邀请新用户加入账户后,IBM Cloud会要求除仅 VPN 用户外的所有用户接受邀请,成为账户的活跃用户。
邀请 30 天后失效。 IBM Cloud的新用户只能通过电子邮件收到的邀请链接接受邀请。
您可以取消对 “用户”页面 状态栏中显示为“处理中”或“待处理”的任何用户的邀请。 如果被邀请用户未收到邀请,那么可以向处于“暂挂”状态的任何用户重新发送邀请。
- 前往 用户页面。
- 查找处于“
Processing
或”Pending
状态的用户行。 - 点击“行动图标”
,然后选择“重新发送邀请或”取消邀请。
在控制台中接受邀请
如果受邀用户已是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 标识。
要从帐户除去用户,请完成以下步骤:
- 在 IBM Cloud® 控制台中,点击管理 > 访问(IAM ),然后选择用户。
- 在要删除的用户行中,单击操作图标
>删除用户。
用户创建的任何资源都会保留在账户中,但用户创建的任何 "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:
- 转到IBM Cloud®控制台中的“管理”>“访问(IAM)”>“用户”,然后选择要更新其IBMid的用户。
- 在“详细信息”部分,单击“更新IBMid”。
- 输入新的IBMid,然后单击更新。
现在,用户可以使用新的 IMBid 登录 ibmibm.com,并使用分配给以前使用的IBMid 的访问权限继续在IBM Cloud账户中工作。