IBM Cloud Docs
アカウント内のユーザー管理

アカウント内のユーザー管理

あなたのアカウントのユーザーを管理するには、'IBM Cloud®'Identity and Access Management(IAM)を使用してください。 ユーザーを招待したり、招待をキャンセルしたり、アカウントからユーザーを削除したり、ユーザーのIBMidを更新したりすることができます。

新規アカウント内でアクティブ・ユーザーになるには、すべてのユーザーが招待を受け入れる必要があります。 詳細については、 保留中の招待のキャンセルまたは再送信 を参照してください

開始前に

アカウントへのユーザーの招待

ユーザーを招待し、未処理の招待を管理するには、以下のタイプのアクセス権限のうち少なくとも 1 つを持っている必要があります。 ユーザーのみ、その他のユーザーを招待できます。 サービス ID を使用して認証している場合は、新しいユーザーをアカウントに招待できません。

  • アカウント所有者
  • ユーザー管理アカウント管理サービスに対するエディター以上の役割が設定された IAM アクセス・ポリシー。
  • ユーザーを追加するための「ユーザーの管理」クラシック・インフラストラクチャー許可

アクセス・レベルに応じて、新規ユーザーを招待し、すべてまたは一部のタイプのアクセス権限を割り当てることができます。

Terraformを使ってユーザーを招待する前に、以下のことが完了していることを確認してください:

  • Terraform CLIをインストールし、IBM Cloudを設定します。Terraform用のProviderプラグインをインストールします。 詳しくは IBM Cloud®のTerraformを始める のチュートリアルを参照。 このプラグインは、以下のタスクを実行するために使用される IBM Cloud API を抽象化します。
  • main.tfという名前の Terraform 構成ファイルを作成します。 このファイルでは、HashiCorpConfiguration Languageを使用してリソースを定義します。 詳細については 、Terraformのドキュメントを参照してください。

アカウントからのユーザーの削除

他のユーザーを削除できるのは、アカウントの所有者と適切なアクセス権限を持つユーザーのみです。 サービス ID を使用して認証している場合は、ユーザーをアカウントから削除できません。 アカウントからユーザーを削除するには、以下のアクセスが必要です:

  • 管理者ロールが割り当てられている、ユーザー管理アカウント管理サービスの Identity and Access Management (IAM) ポリシー。
  • アカウントにクラシックインフラストラクチャがある場合、ユーザー管理アカウント管理サービスに管理者ロールが割り当てられたIAMポリシーを所有し、クラシックインフラストラクチャユーザー階層で「クラシックインフラストラクチャユーザーの管理」権限が割り当てられたユーザーの祖先でなければなりません。

ユーザーの IBM ID の変更

IBM ID を変更するには、置き換え用の新しい ID が既に存在している必要があります。 新しい IBM ID が存在するかどうか分からない場合は、「My IBM」に移動し、**「IBM ID を作成 (Create an IBMid)」**をクリックします。 フェデレーテッド ID プロバイダー (IdP) ドメインに対応する E メール・アドレスを入力すると、IBM ID により、その IdP のログイン・ページにリダイレクトされます。 フェデレーテッド IdP を使用して IBM® に初めてログインすると、新規 IBM ID の作成がトリガーされます。 それ以外の場合は、ID を作成するための手順に従ってください。 使用される E メール・アドレスが、ユーザーの新しい代替 IBM ID になります。

コンソールでのユーザーの招待

ユーザーを招待するには、以下のステップを実行します。

  1. IBM Cloud コンソールで、「管理」 > 「アクセス (IAM)」 をクリックし、「ユーザー」 を選択します。

  2. ユーザーの招待をクリックします。

  3. ユーザーの E メール・アドレスを指定します。 1 つの招待で複数のユーザーを招待すると、すべてのユーザーに同じアクセス権限が割り当てられます。 招待されたユーザーのドメインに基づいて、アカウントへのメンバーシップを制限できます。 この方法では、特定のドメインのユーザーのみをアカウントに招待できます。

    詳しくは、アカウントへの招待のためのユーザー・ドメインの制限を参照してください。

  4. 管理する 1 つ以上のアクセス・オプションを追加します。 少なくとも 1 つのアクセス・オプションを割り当ててください。 追加と構成が行われなかったアクセス・オプションには、デフォルト値であるアクセス権限なしが割り当てられます。 管理を許可されているオプションに応じて、以下のタイプのアクセス権限を割り当てることができます。

    • アクセス・グループへのユーザーの追加。 ユーザーを所属させるアクセス・グループごとに追加をクリックします。
    • 手動でのユーザーへのアクセス権限の割り当て。 IAMアクセスポリシーまたは従来のインフラストラクチャの権限を個別に割り当てるセクションを展開します。
      • クラシック・インフラストラクチャーを選択し、3 つの許可セットから選択します。
      • All Identity and Access enabled services」、「All Account management services」、「All IAM Account Management services」などのサービスのグループ、または特定のサービスを選択する。 次に、アクセス権限のスコープを、アカウント全体または 1 つのリソース・グループのみに設定できます。 次に、該当するすべての役割を選択します。 各役割にマップされているアクションを表示するには、各役割の横にリストされている番号をクリックします。 一部のサービスでは、特定の命名規則を満たすリソースへのアクセス権限を付与するための拡張演算子の使用がサポートされています。 詳しくは、『ワイルドカード・ポリシーを使用したアクセス権限の割り当て』を参照してください。
      • **「アカウント管理」**を選択し、「すべてのアカウント管理サービス」オプションから選択するか、特定のサービスを選択します。 次に、該当するすべての役割を選択します。
  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 を使用してユーザーを招待するときには、各項目を引用符で囲んだコンマ区切りリストで E メールを入力します。 この例では、ユーザーをアクセス・グループに追加することによりアクセス権限を割り当てます。

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

サービスのグループにアクセスを割り当てることができます。 すべての Identity and Access 対応サービスへのアクセスを割り当てるには、「name 属性に「serviceType 指定し、「valueservice」を使用する。 全アカウント管理サービスへのアクセスを割り当てるには、「name 属性に「serviceType 指定し、「valueplatform_service」を使用する。 アカウント管理サービスのサブセットへのアクセスを割り当てるには IAMアカウント管理サービスすべてに、「name 属性に「service_group_id 指定し、「valueIAM」を使用する。

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 の新規ユーザーは、E メールで受信した招待リンクを使用することでのみ招待を受け入れることができます。

「ユーザー」ページの「状況」列に「処理中」または「保留中」の状態で表示されているすべてのユーザーの招待を取り消すことができます。 招待されたユーザーが招待を受け取らなかった場合、「保留中」状態のユーザーに招待を再送することができます。

  1. 「ユーザー」ページに移動します。
  2. ProcessingまたはPending状態のユーザーの行を見つけます。
  3. アクション・アイコンその他のアクション・アイコンをクリックし、招待の再送または招待のキャンセルを選択します。

コンソールでの招待の受け入れ

招待されたユーザーが既に IBM Cloud のメンバーである場合、その通知内および E メールで招待リンクを受け取ります。 通知ページでは、ユーザーは検索フィールドを使用して招待状を検索したり、 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>"
  }

コンソールを使用してアカウントからユーザーを削除する

アカウントからユーザーを削除すると、そのユーザーはコンソールにログインしたり、このアカウントに切り替えたり、アカウント・リソースにアクセスしたりできなくなります。 ユーザーをアカウントから削除しても、そのユーザーの IBMid は削除されません。

アカウントからユーザーを削除するには、以下の手順を実行します。

  1. IBM Cloud® コンソールで、 「管理」 > 「アクセス (IAM)」 をクリックし、 「ユーザー」 を選択します。
  2. 削除したいユーザーの行で、アクション・アイコンアクション・アイコン > ユーザーの削除をクリックします。

ユーザーによって作成されたリソースはアカウントに残りますが、ユーザーによって作成された IBM Cloud API キーは削除されます。 ユーザーは、自分で作成したリソースを操作するアクセス権限を持たなくなります。 アカウント所有者またはサービスやサービス・インスタンスの管理者は、そのようなリソースの操作を他のユーザーに割り当てたり、リソースをアカウントから削除したりできます。

クラシック・インフラストラクチャー・ユーザーを削除できないというエラー・メッセージを受け取った場合は、ユーザー階層において対象ユーザーの下位に位置するすべてのユーザーに対して、新しい親を割り当てるか、アカウント内で無効にするか、削除を実行してください。 その後、再試行できます。

アカウントからユーザーを削除する代わりに、一時的な時間ベースの条件でアクセスポリシーを割り当てることができます。 この方法では、ユーザはコンソールにログインしてアカウントリストにアカウントを表示することはできますが、ポリシーの開始前やポリシーの終了後にアカウント内のリソースにアクセスすることはできません。 詳細については、一時的な時間ベースの条件を作成する を参照のこと。

CLI を使用したアカウントからのユーザーの削除

アカウントからユーザーを削除するには、以下のコマンドを実行します。

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

コマンドオプションについては、アカウントとユーザーの管理 CLIコマンドを参照してください。

API を使用したアカウントからのユーザーの削除

アカウントからユーザーを削除するには、以下の要求例に示すように User Management 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またはEメールとレルムのいずれかが必要です。 詳細については、ユーザ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を変更する

アカウント所有者はユーザーの IBM ID を更新できます。 現在の IBM ID を置き換えるために使用する新しい IBM ID は、既に存在しているものである必要があります。 置き換えられる IBM ID はアカウントから削除されます。 既存の IBM ID を引き続きアカウントのメンバーにする必要がある場合は、そのユーザーを再度招待してそのユーザーのアクセス権限を再設定する必要があります。

アカウント所有者は自分自身の IBM ID は変更できません。

ユーザーが新しいIBMidが存在することを確認したら、次の手順を実行してユーザーのIBMidを変更します:

  1. IBM Cloud® コンソールで管理 > アクセス (IAM) > ユーザー に移動し、IBMid を更新するユーザーを選択します。
  2. 「詳細」 セクションで、 「更新」 IBMid をクリックします。
  3. 新規 IBM ID を入力し、「更新」 をクリックします。

ユーザーは新しい IBM ID を使用して ibm.com にログインできるようになっており、引き続き以前に使用していた IBM ID に割り当てられたアクセス権限を使用して IBM Cloud アカウントで作業することができます。