管理帳戶中的使用者

使用 IBM Cloud® Identity and Access Management (IAM) 管理帳戶中的使用者。 您可以邀請使用者、取消邀請、從帳戶中移除使用者,或更新使用者的 IBMid。

所有使用者都必須接受邀請,才能成為新帳戶內的活躍使用者。 如需詳細資訊,請參閱 取消或重新傳送待定邀請函

開始之前

邀請使用者加入帳戶

若要邀請使用者和管理未完成的邀請,您必須至少擁有下列其中一種存取權限。 只有使用者可以邀請其他人。 如果使用服務 ID 來驗證,就無法邀請新使用者加入帳戶。

  • 帳戶擁有者
  • 使用者管理帳戶管理服務上具有「編輯者」角色或更高角色的 IAM 存取原則
  • 管理使用者」經典基礎架構新增使用者的權限

視您的存取層次而定,您可以邀請新的使用者,並指派所有類型或僅部分類型的存取權。

在使用 Terraform 邀請使用者之前,請確認您已完成下列事項:

  • 安裝 Terraform CLI 並為 Terraform 配置 IBM Cloud Provider 外掛程式。 如需詳細資訊,請參閱 IBM Cloud® 上的 Terraform 入門 教學。 外掛程式抽象出 IBM Cloud API,用來完成這項任務。
  • 建立名為 main.tf 的 Terraform 配置檔案。 在此檔案中,您使用 HashiCorp Configuration Language 定義資源。 如需詳細資訊,請參閱 Terraform 文件

從帳戶移除使用者

只有帳戶所有人和擁有正確存取權限的使用者才能移除其他人。 如果使用服務 ID 來驗證,就無法從帳戶中移除使用者。 從帳戶中移除使用者需要以下存取權限:

  • 使用者管理帳戶管理服務的身分與存取管理 (IAM) 政策,並指定管理員角色。
  • 如果帳戶中有 classic 基礎結構,使用者必須有指定了管理員角色的使用者管理帳戶管理服務 IAM 政策,並且是 classic 基礎結構使用者階層中指定了管理使用者 classic 基礎結構權限的使用者的祖先。

變更使用者的 IBMid

若要變更 IBMid,替換的 ID 必須已經存在。 如果您不確定新的 IBMid 是否存在,使用者可以前往「我的 IBM」,然後按一下「建立 IBMid」。 如果您輸入的電子郵件地址對應聯邦身分提供者 ( IdP ) 網域,IBMid 會將您重定向至該 IdP's 登入頁面。 首次使用聯合 IdP 登入 IBM® 時,會觸發建立新的 IBMid。 否則,請依照步驟建立 ID。 使用的電子郵件地址會成為使用者的新替代 IBMid。

在主控台中邀請使用者

若要邀請使用者,請完成下列步驟:

  1. 在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後選擇使用者
  2. 按一下邀請使用者
  3. 指定使用者的電子郵件位址。 如果您使用單一邀請來邀請多位使用者,則他們都會獲指派相同的存取權。 您可以根據受邀使用者的網域來限制帳戶的會員資格。 這樣,只有來自特定網域的使用者才能被邀請到帳戶。 如需詳細資訊,請參閱 限制帳戶邀請的使用者網域

企業管理帳戶無法自動邀請使用者,必須手動新增。

  1. 新增您管理的一個以上存取選項。 您必須至少指派一個存取選項。 對於您未新增及配置的任何存取選項,會指派預設值:不可存取。 取決於獲授權管理的選項,您可以指派下列類型的存取權:
    • 將使用者新增至存取群組。 對於您希望使用者屬於其中的每一個存取群組,按一下新增
    • 手動指派使用者存取權。 展開該部分以指定個別 IAM 存取政策或傳統基礎結構權限。
      • 選取標準基礎架構,然後從三個許可權集中選擇。
      • 選擇一組服務,例如「所有啟用身分與存取的服務」、「所有帳戶管理服務」和「所有 IAM 帳戶管理服務」,或特定服務。 接下來,您可以設定整個帳戶或單一資源群組的存取範圍。 然後,選取所有套用的角色。 若要檢視映射到每個角色的動作,請按一下每個角色旁邊列出的數字。 有些服務支援使用進階操作員,以授予對符合特定命名慣例的資源的存取權。 如需詳細資訊,請參閱 使用通配符原則指定存取
      • 選取帳戶管理,然後從所有帳戶管理服務選項中選擇,或選取特定服務。 然後,選取所有套用的角色。
  2. 選取新增,將存取指派儲存至邀請。
  3. 在新增所有必要的存取指派之後,請按一下邀請

您可以取消 「使用者」頁面「狀態」欄中顯示為「處理中」或「待定」狀態的任何使用者的邀請。 如果受邀使用者沒有收到邀請,您可以將邀請重新傳送給處於「擱置中」狀態的任何使用者。 只有在使用者接受邀請後,才能新增更多的政策和權限。

新增僅限 VPN 使用者

任何具有下列權限的使用者都可以新增 VPN 專用使用者:

  • 對於傳統基礎結構,您必須擁有帳戶上的管理使用者權限。
  • 若要進行 IAM 存取,您必須在使用者管理帳戶管理服務上擁有 Administrator 或 Editor 的角色。

若要新增僅 VPN 使用者,請使用下列步驟:

  1. 在「使用者」頁面上,按一下新增僅限 VPN 使用者
  2. 輸入使用者的個人資訊詳細資料。
  3. 按一下儲存

使用 CLI 來邀請使用者

若要使用 CLI 邀請使用者,請執行下列指令:

ibmcloud account user-invite USER_EMAIL [--access-groups ACCESS_GROUP_1,ACCESS_GROUP_2...]

透過 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))

您可以指派一組服務的存取權。 若要指派存取已啟用的 All Identity and Access 服務,請指定 serviceTypename 屬性,並使用 value service。 若要指定所有帳戶管理服務的存取權,請指定 serviceTypename 屬性,並使用 value platform_service。 若要指定帳戶管理服務子集的存取權所有 IAM 帳戶管理服務,請指定 service_group_idname 屬性,並使用 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"]
    }
    
    如需詳細資訊,請參閱 Terraform Identity 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. ProcessingPending 狀態中找到使用者的資料列。
  3. 按一下動作圖示更多動作圖示,然後選擇重新傳送邀請取消邀請

在主控台中接受邀請

如果受邀的使用者已經是 IBM Cloud 的會員,他們會在通知和電子郵件中收到邀請連結。 在 通知頁面上,使用者可以使用搜尋欄位找出邀請函,或使用稱為 account 的通知類型進行篩選。 如需詳細資訊,請參閱 管理邀請通知檢視通知

使用 CLI 接受邀請

如果受邀的使用者已經是 IBM Cloud 的會員,他們可以使用 CLI 接受邀請。 在以下 ibmcloud login 命令中,ACCOUNT_ID 是用戶被邀請加入的目標帳戶的 ID。

ibmcloud login -c ACCOUNT_ID --accept

使用 API 接受邀請

如果受邀的使用者已經是 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 ID。

若要從帳戶移除使用者,請完成下列步驟:

  1. 在 IBM Cloud® 主控台中,按一下管理 > 存取 (IAM),然後選擇使用者
  2. 從要移除使用者的資料列中,按一下動作圖示動作圖示 > 移除使用者

使用者建立的任何資源會保留在帳戶中,但使用者建立的任何 IBM Cloud API 金鑰會被移除。 使用者不再有權限使用他們所建立的資源。 帳戶所有者或服務或服務實例的管理員可以指派其他使用者使用資源,或將其從帳戶中刪除。

如果收到無法移除經典基礎結構使用者的錯誤訊息,請確定該使用者階層架構中的任何後繼者都已 指定新的父代在帳戶中停用 或刪除。 然後,您可以再試一次。

除了將使用者從帳戶中移除之外,您還可以為他們指定具有臨時時間條件的存取政策。 這樣,使用者可以登入主控台,並在帳戶清單中檢視帳戶,但無法在政策開始前或政策到期後存取帳戶中的資源。 如需詳細資訊,請參閱 建立以時間為基礎的臨時條件

使用 CLI 從帳戶中移除使用者

若要從帳戶中移除使用者,請執行下列指令:

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

有關指令選項,請參閱 管理帳號和使用者 CLI 指令。

使用 API 從帳戶中移除使用者

若要從帳戶中移除使用者,請呼叫 使用者管理 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。 您用來取代目前 IBMid 的新 IBMid 必須已經存在。 您要替換的 IBMid 會從帳戶中移除。 如果您需要現有的 IBMid 繼續成為帳戶成員,則必須再次邀請該使用者,並重新建立其存取權限。

帳戶所有者無法變更自己的 IBMid。

在使用者確保新的 IBMid 存在後,完成下列步驟變更使用者的 IBMid:

  1. 移至 IBM Cloud® 主控台中的管理 > 存取 (IAM) > 使用者,然後選擇您要更新其 IBMid 的使用者。
  2. 詳細資料部分,按一下更新 IBMid
  3. 輸入新的 IBMid,然後按一下更新

用戶現在可以使用新的 IMBid 登入 ibm.com,並繼續在 IBM Cloud 帳戶中使用分配給先前使用的 IBMid 的存取權限工作。