アクセスグループによるアクセス管理の合理化

ユーザー、サービスID、信頼されたプロファイルをアクセスグループに整理し、効率的な権限管理を実現します。 きめ細かなポリシーをグループ全体に一度だけ割り当て、最小特権を大規模に実装する。

アクセス・グループを作成して、ユーザー、サービス ID、およびトラステッド・プロファイルのセットを単一のエンティティーに編成し、アクセス権限の割り当てを容易にすることができます。 個々のユーザーまたはサービス ID に同じアクセス権限を複数回割り当てる代わりに、単一のポリシーをグループに割り当てることができます。

アクセス・グループには、そのグループのメンバーに役割と許可を付与するポリシーが割り当てられます。 アクセス・グループのメンバーには、複数の ID タイプ (ユーザー、サービス ID、およびトラステッド・プロファイルなど) を含めることができます。 メンバーは、アクセス・グループに割り当てられたポリシー、役割、および許可を継承し、個別に割り当てられた役割も保持します。

例えば、請求サービスに対する viewer 役割が割り当てられているユーザーが、カタログ管理サービスに対する publisher 役割を持つアクセス・グループに追加された場合、そのユーザーは、viewer 役割がアクセス・グループ許可に含まれていない場合でも、この役割を保持します。

アクセス権限の割り当てと管理をさらに簡単にするには、ユーザーのグループがアクセスできるリソースのセットを編成するように、リソース・グループをセットアップします。 リソース・グループがセットアップされたら、アカウント内の個々のサービス・インスタンス用にアクセス・ポリシーを作成するのではなく、そのグループ内のすべてのリソースに対するアクセス権限を付与するポリシーを割り当てることができます。

開始前に

新規アクセス・グループの管理または作成を行うには、以下のタイプのアクセス権限を持っている必要があります。

  • アカウント内での IAM アクセス・グループ・アカウント管理サービスに対する管理者またはエディター
  • すべてのアカウント管理サービスに対する管理者またはエディター
  • アカウント所有者であること

さらに、リソースがアクセス・グループ ID であるアクセス・ポリシーを作成することにより、個々のグループを管理するためのアクセス権限を管理者またはエディターに割り当てることができます。 IAM アクセス・グループ・サービスのアクセス・ポリシーおよび役割について詳しくは、IAM アクセスを参照してください。

開始前に

Terraformを使ってアクセスグループを設定する前に、以下のことが完了していることを確認してください:

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

コンソールでのアクセス・グループの作成

アカウント内でアクセス・グループを区別するために、固有の名前を使用する必要があります。 アクセス・グループを作成するには、以下のステップを実行します。

  1. IBM Cloud® コンソールで、「管理」 > **「アクセス (IAM)」をクリックし、「アクセス・グループ」**を選択します。
  2. 「作成」 をクリックします。
  3. アクセス・グループを識別する固有の名前と、オプションで説明を入力し、作成をクリックします。

次に、ユーザー、サービス ID、またはトラステッド・プロファイルを追加して、グループのセットアップに進みます。 ユーザーは手動で追加することも、動的ルールを作成することで追加することもできます。 あるいは、グループ・アクセス権限の割り当てを開始し、後でアクセス・グループに追加するユーザーを決定することもできます。

**「グループの削除 (Remove group)」**オプションを選択してグループを削除することができます。 グループをアカウントから削除すると、すべてのユーザーとサービス ID がグループから削除され、グループに割り当てられたすべてのアクセス権限が削除されます。

CLI を使用したアクセス・グループの作成

CLI を使用してアクセス・グループを作成するには、ibmcloud iam access-group-create コマンドを使用します。

ibmcloud iam access-group-create GROUP_NAME [-d, --description DESCRIPTION]

アカウント内でアクセス・グループを区別するために、固有の名前を使用する必要があります。

API を使用したアクセス・グループの作成

以下のサンプルリクエストに示すように、 IBM Cloud® Identity and Access Management(IAM)Access Groups APIを呼び出すことで、アクセスグループをプログラムで作成できます。 次の例は、アカウント内の管理者用のアクセス・グループを作成します。

curl -X POST -H "Authorization: Bearer {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{ "name": "Managers", "description": "Group for managers" }' \
"{base_url}/groups?account_id={account_id}"
CreateAccessGroupOptions createAccessGroupOptions = new CreateAccessGroupOptions.Builder()
  .accountId(testAccountId)
  .name("Managers")
  .description("Group for managers")
  .build();

Response<Group> response = service.createAccessGroup(createAccessGroupOptions).execute();
Group group = response.getResult();

System.out.println(group);
const params = {
  accountId: testAccountId,
  name: 'Managers',
  description: 'Group for managers'
};

iamAccessGroupsService.createAccessGroup(params)
  .then(res => {
    testGroupId = res.result.id;
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
group = iam_access_groups_service.create_access_group(
  account_id=test_account_id,
  name='Managers',
  description='Group for managers'
).get_result()

print(json.dumps(group, indent=2))
createAccessGroupOptions := iamAccessGroupsService.NewCreateAccessGroupOptions(testAccountID, "Managers")
createAccessGroupOptions.SetDescription("Group for managers")
group, response, err := iamAccessGroupsService.CreateAccessGroup(createAccessGroupOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(group, "", "  ")
fmt.Println(string(b))

アカウント内でアクセス・グループを区別するために、固有の名前を使用する必要があります。

Terraform を使用したアクセス・グループの作成

以下の手順で、Terraformを使ってアクセスグループを作成する:

  1. main.tf ファイルに引数を作成する。 ibm_iam_access_group リソースを使用してアクセス・グループを作成する例を以下に示します。name は、アクセス・グループを識別するための固有の名前です。

    resource "ibm_iam_access_group" "accgrp" {
     name        = "test"
     description = "New access group"
    }
    

    description オプションで、アクセス・グループの説明を記述することもできます。 詳しくは Terraform Identity and Access Management(IAM) ページの引数リファレンスの詳細を参照してください。

Terraform IBM Modules(TIM ) for IAM Access Groupsを使ってユーザーとサービスIDをグループ化し、アクセス管理を合理化します。

  1. 設定ファイルのビルドが終わったら、Terraform CLIを初期化します。 詳しくは、 作業ディレクトリの初期化を参照のこと。

    terraform init
    
  2. main.tf ファイルからリソースをプロビジョニングする。 詳しくは Terraformによるインフラのプロビジョニングを参照してください。

    1. terraform plan を実行してTerraformの実行プランを生成し、提案されたアクションをプレビューする。

      terraform plan
      
    2. terraform apply を実行し、プランで定義されたリソースを作成する。

      terraform apply
      

コンソールでのグループへのアクセス権限の割り当て

ユーザーとサービス ID が含まれるグループをセットアップした後で、共通するアクセス・ポリシーをそのグループに割り当てることができます。 グループ用に設定するポリシーは、そのグループ内のすべてのエンティティーに適用されることを覚えておいてください。 例えば、アクセスポリシーをアクセスグループに割り当てることで、ユーザー、サービスID、または信頼されたプロファイルへのアクセスを許可または取り消す能力を、そのアクセスグループの管理者に委譲することができます。

アカウント内のすべてに対する管理者のアクセス権には、管理者ロールを持つ他のユーザーのアクセス権を剥奪する能力も含まれます。

コンソールでグループにアクセスを割り当てるには、以下の手順を使用します:

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

  2. アクセス権限を割り当てるグループに対して、**「アクション」アイコン 「アクション」アイコンを選択し、「アクセス権限の割り当て」**をクリックします。

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

    • アイデンティティとアクセスを可能にするすべてのサービスアカウント マネジメント・サービスすべてのIAM アカウント管理サービス のようなサービス群。
    • 特定のサービス
  4. 次に、アクセス管理タグ、ロケーション、リソース・グループなどの選択されたリソース属性に基づいて、すべてのリソースまたは特定のリソースにアクセス権限のスコープを設定できます。

  5. 適用するすべての役割を選択します。 各役割にマップされているアクションを表示するには、各役割の横にリストされている番号をクリックします。 一部のサービスでは、特定の命名規則を満たすリソースへのアクセス権限を付与するための拡張演算子の使用がサポートされています。 詳しくは、『ワイルドカード・ポリシーを使用したアクセス権限の割り当て』を参照してください。

  6. **「レビュー」**をクリックします。

  7. 追加をクリックして、ポリシー構成をポリシー・サマリーに追加します。

  8. 割り当て をクリックします。

アクセス管理タグを使用してアクセス権限を割り当てることもできます。 詳しくは、タグを使用したリソースに対するアクセス権限の制御を参照してください。

CLI を使用したグループへのアクセス権限の割り当て

CLI を使用してアクセス・グループ・ポリシーを作成するには、ibmcloud iam access-group-policy-create コマンドを使用します。

ibmcloud iam access-group-policy-create GROUP_NAME {-f, --file @JSON_FILE | --roles ROLE_NAME1,ROLE_NAME2... [--service-name SERVICE_NAME] [--service-instance SERVICE_INSTANCE] [--region REGION] [--resource-type RESOURCE_TYPE] [--resource RESOURCE] [--resource-group-name RESOURCE_GROUP_NAME] [--resource-group-id RESOURCE_GROUP_ID]}

API を使用したグループへのアクセス権限の割り当て

以下のサンプルリクエストに示すように、 IBM Cloud® Identity and Access Management(IAM)Policy Management APIを呼び出すことで、グループへのアクセスをプログラムで割り当てることができます。 次の例は、サービスのインスタンスに対する Editor 役割をアクセス・グループに割り当てます。

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' \
-H 'Authorization: Bearer $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
  "type": "access",
  "description": "Editor role for SERVICE_NAME's RESOURCE_NAME",
  "subjects": [
    {
      "attributes": [
        {
          "name": "access_group_id",
          "value": "exampleAccessGroupId"
        }
      ]
    }'
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:iam::::role:Editor"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceName",
          "value": "$SERVICE_NAME"
        },
        {
          "name": "resource",
          "value": "$RESOURCE_NAME",
          "operator": "stringEquals"
        }
      ]
    }
  ]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
        .name("access_group_id")
        .value(exampleAccessGroupId)
        .build();

PolicySubject policySubjects = new PolicySubject.Builder()
        .addAttributes(subjectAttribute)
        .build();

PolicyRole policyRoles = new PolicyRole.Builder()
        .roleId("crn:v1:bluemix:public:iam::::role:Editor")
        .build();

ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
        .name("accountId")
        .value(exampleAccountId)
        .operator("stringEquals")
        .build();

ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
        .name("serviceType")
        .value("service")
        .operator("stringEquals")
        .build();

PolicyResource policyResources = new PolicyResource.Builder()
        .addAttributes(accountIdResourceAttribute)
        .addAttributes(serviceNameResourceAttribute)
        .build();

CreatePolicyOptions options = new CreatePolicyOptions.Builder()
        .type("access")
        .subjects(Arrays.asList(policySubjects))
        .roles(Arrays.asList(policyRoles))
        .resources(Arrays.asList(policyResources))
        .build();

Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();

System.out.println(policy);
const policySubjects = [
  {
    attributes: [
      {
        name: 'access_group_id',
        value: exampleAccessGroupId,
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:iam::::role:Editor',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: exampleAccountId,
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceType',
  value: 'service',
  operator: 'stringEquals',
};
const policyResources = [
  {
    attributes: [accountIdResourceAttribute, serviceNameResourceAttribute],
  },
];
const params = {
  type: 'access',
  subjects: policySubjects,
  roles: policyRoles,
  resources: policyResources,
};

iamPolicyManagementService.createPolicy(params)
  .then(res => {
    examplePolicyId = res.result.id;
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
policy_subjects = PolicySubject(
  attributes=[SubjectAttribute(name='access_group_id', value=exampleAccessGroupId)])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:iam::::role:Editor')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
  name='serviceType', value='service')
policy_resources = PolicyResource(
  attributes=[account_id_resource_attribute,
        service_name_resource_attribute])

policy = iam_policy_management_service.create_policy(
  type='access',
  subjects=[policy_subjects],
  roles=[policy_roles],
  resources=[policy_resources]
).get_result()

print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
  Name:  core.StringPtr("access_group_id"),
  Value: &exampleAccessGroupId,
}
policySubjects := &iampolicymanagementv1.PolicySubject{
  Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
  RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Editor"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("accountId"),
  Value:    core.StringPtr(exampleAccountID),
  Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("serviceType"),
  Value:    core.StringPtr("service"),
  Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
  Attributes: []iampolicymanagementv1.ResourceAttribute{
    *accountIDResourceAttribute, *serviceNameResourceAttribute}
}

options := iamPolicyManagementService.NewCreatePolicyOptions(
  "access",
  []iampolicymanagementv1.PolicySubject{*policySubjects},
  []iampolicymanagementv1.PolicyRole{*policyRoles},
  []iampolicymanagementv1.PolicyResource{*policyResources},
)

policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(policy, "", "  ")
fmt.Println(string(b))

サービスのグループにアクセスを割り当てることができます。 All Identity and Access Enabled サービスにアクセスを割り当てるには、 name 属性に serviceType を指定し、 value service. アカウント マネジメント・サービス へのアクセスを割り当てるには、 name 属性に serviceType を指定し、 value platform_service. アカウント管理サービスのサブセットへのアクセスを割り当てるには すべてのIAM アカウント管理サービスname 属性に service_group_id を指定し、 value IAM

Terraform を使用したグループへのアクセス権限の割り当て

グループを設定したら、以下の手順でTerraformを使ってアクセス権を割り当てます。

  1. main.tf ファイルに引数を作成する。 以下の例では、Viewer リソースを使用して、すべての IAM 対応サービスに対するibm_iam_access_group_policy・プラットフォーム役割をアクセス・グループのメンバーに付与する IAM ポリシーを作成しています。 このタスクを実行するためには、アクセス・グループの既存の IAM ID が必要です。

    resource "ibm_iam_access_group" "accgrp" {
     name = "test"
    }
    
    resource "ibm_iam_access_group_policy" "policy" {
     access_group_id = ibm_iam_access_group.accgrp.id
     roles           = ["Viewer"]
    }
    

    詳しくは Terraform Identity and Access Management(IAM) ページの引数リファレンスの詳細を参照してください。

また、 IAM Access Groupsモジュールを使って、アクセスグループとポリシーを大規模に管理することもできる。 次の例は、このモジュールの使い方を示している:

module "access_group" {
  source  = "terraform-ibm-modules/iam-access-group/ibm"
  version = "latest"

  access_group_name        = "my-access-group"
  access_group_description = "Access group for team members"

  policies = [
    {
      roles = ["Viewer"]
      resources = [{
        service = "cloud-object-storage"
      }]
    }
  ]
}

Terraform IBM モジュールについての詳細は、 Terraform IBM モジュールについてを 参照。

  1. 設定ファイルのビルドが終わったら、Terraform CLIを初期化します。 詳しくは、 作業ディレクトリの初期化を参照のこと。

    terraform init
    
  2. main.tf ファイルからリソースをプロビジョニングする。 詳しくは Terraformによるインフラのプロビジョニングを参照してください。

    1. terraform plan を実行してTerraformの実行プランを生成し、提案されたアクションをプレビューする。

      terraform plan
      
    2. terraform apply を実行し、プランで定義されたリソースを作成する。

      terraform apply
      

コンソールでアクセスグループにメンバーを追加する

メンバーには、ユーザー、サービスID、および信頼されたプロファイルを指定できます。

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

  2. 作成したアクセスグループをクリックします。

  3. メンバーを追加する。

    1. **「ユーザーの追加」**をクリックします。
    2. サービスID]>[サービスIDの追加 ]をクリックします。
    3. Trusted profiles(信頼済みプロファイル)]>[Add trusted profiles(信頼済みプロファイルの追加 )]をクリックします。

    メンバーを追加するボタンが表示されない場合は、アクセス権がない可能性があります。 アクセス要件を 確認し、アクセスについてはアカウント管理者にお問い合わせください。

  4. グループに追加したいユーザー、サービスID、または信頼済みプロファイルを選択し、「 グループに追加」をクリックします。

グループに追加したメンバーは、グループに割り当てたアクセス・レベルを使用できます。

CLIを使用したアクセスグループへのメンバーの追加

メンバーには、ユーザー、サービスID、および信頼されたプロファイルを指定できます。 グループに追加したメンバーは、グループに割り当てたアクセス・レベルを使用できます。

  1. アカウント内のユーザー、サービスID、または信頼できるプロファイルを取得します。 アクセスグループに追加するメンバーの詳細が表示されます。

    すべてのユーザーを取得する

    ibmcloud account users [-c, --account-id ACCOUNT_ID]
    

    すべてのサービスIDをリストアップする

    ibmcloud iam service-ids [--uuid]
    

    信頼できるプロフィールをすべて取得する

    ibmcloud iam trusted-profiles [--id | --output FORMAT] [-q, --quiet]
    
  2. アクセスグループにメンバーを追加します:

    アクセスグループにユーザーを追加するには、ibmcloud iam access-group-user-add コマンドを使用します。 以下の例では、CLIを使用して、アクセスグループ example_group にユーザー name@example.com を追加しています。

    ibmcloud iam access-group-user-add example_group name@example.com
    

    アクセスグループにサービス ID を追加するには、ibmcloud iam access-group-service-id-add コマンドを使用します。 次の例では、サービス ID example-service をアクセスグループ example_group に追加しています:

    ibmcloud iam access-group-service-id-add example_group example-service
    

    アクセスグループに信頼済みプロファイルを追加するには、ibmcloud iam access-group-trusted profile-add コマンドを使用します。 次の例では、サービス ID PROFILE_ID をアクセスグループ example_group に追加しています:

    ibmcloud iam access-group-trusted-profile-add GROUP_NAME (PROFILE_NAME | PROFILE_ID) [PROFILE_NAME2 | PROFILE_ID2...] [--output FORMAT] [-q, --quiet]
    

APIを使用したアクセスグループへのメンバーの追加

メンバーには、ユーザー、サービスID、および信頼されたプロファイルを指定できます。

  1. 以下のリクエスト例に示すように、 アカウント内のユーザー、サービスID、または信頼されたプロファイルをリストします。 アクセスグループに追加するメンバーについて返される IBMid、サービス ID または信頼済みプロファイル ID に注意してください。

    リストユーザー

    curl -X GET https://user-management.cloud.ibm.com/v2/accounts/987d4cfd77b04e9b9e1a6asdcc861234/users -H 'Authorization: Bearer <IAM_TOKEN>'
    
    ListUsersOptions listUsersOptions = new ListUsersOptions.Builder()
      .accountId(accountId)
      .build();
    
    UsersPager pager = new UsersPager(userManagementService, listUsersOptions);
    List<UserProfile> allResults = new ArrayList<>();
    while (pager.hasNext()) {
      List<UserProfile> nextPage = pager.getNext();
      allResults.addAll(nextPage);
    }
    
    System.out.println(GsonSingleton.getGson().toJson(allResults));
    
    const params = {
      accountId: accountId,
    };
    
    const allResults = [];
    try {
      const pager = new UserManagementV1.UsersPager(userManagementService, params);
      while (pager.hasNext()) {
        const nextPage = await pager.getNext();
        expect(nextPage).not.toBeNull();
        allResults.push(...nextPage);
      }
      console.log(JSON.stringify(allResults, null, 2));
    } catch (err) {
      console.warn(err);
    }
    
    all_results = []
    pager = UsersPager(
      client=user_management_service,
      account_id=account_id,
    )
    while pager.has_next():
      next_page = pager.get_next()
      assert next_page is not None
      all_results.extend(next_page)
    
    print(json.dumps(all_results, indent=2))
    
    listUsersOptions := &usermanagementv1.ListUsersOptions{
      AccountID: &accountID,
    }
    
    pager, err := userManagementService.NewUsersPager(listUsersOptions)
    if err != nil {
      panic(err)
    }
    
    var allResults []usermanagementv1.UserProfile
    for pager.HasNext() {
      nextPage, err := pager.GetNext()
      if err != nil {
        panic(err)
      }
      allResults = append(allResults, nextPage...)
    }
    b, _ := json.MarshalIndent(allResults, "", "  ")
    fmt.Println(string(b))
    

    サービスIDをリストアップ する:

    curl -X GET 'https://iam.cloud.ibm.com/v1/serviceids?account_id=ACCOUNT_ID&name=My-serviceID' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json'
    
    ListServiceIdsOptions listServiceIdsOptions = new ListServiceIdsOptions.Builder()
        .accountId(accountId)
        .name(serviceIdName)
        .build();
    
    Response<ServiceIdList> response = service.listServiceIds(listServiceIdsOptions).execute();
    ServiceIdList serviceIdList = response.getResult();
    
    System.out.println(serviceIdList);
    
    const params = {
      accountId: accountId,
      name: serviceIdName,
    };
    
    try {
      const res = await iamIdentityService.listServiceIds(params)
      console.log(JSON.stringify(res.result, null, 2));
    } catch (err) {
      console.warn(err);
    }
    
    service_id_list = iam_identity_service.list_service_ids(
      account_id=account_id, name=serviceid_name
    ).get_result()
    
    print(json.dumps(service_id_list, indent=2))
    
    listServiceIdsOptions := iamIdentityService.NewListServiceIdsOptions()
    listServiceIdsOptions.SetAccountID(accountID)
    listServiceIdsOptions.SetName(serviceIDName)
    
    serviceIDList, response, err := iamIdentityService.ListServiceIds(listServiceIdsOptions)
    if err != nil {
      panic(err)
    }
    b, _ := json.MarshalIndent(serviceIDList, "", "  ")
    fmt.Println(string(b))
    

    信頼できるプロフィールをリストアップ します:

    curl -X GET 'https://iam.cloud.ibm.com/v1/profiles?account_id=ACCOUNT_ID' -H 'Authorization: Bearer TOKEN' -H 'Accept: application/json'
    
    ListProfilesOptions listProfilesOptions = new ListProfilesOptions.Builder()
        .accountId(accountId)
        .includeHistory(false)
        .build();
    
    Response<TrustedProfilesList> response = service.listProfiles(listProfilesOptions).execute();
    TrustedProfilesList profiles = response.getResult();
    
    System.out.println(profiles);
    
    const params = {
      accountId: accountId,
      includeHistory: false,
    };
    
    try {
      const res = await iamIdentityService.listProfiles(params);
      console.log(JSON.stringify(res.result, null, 2));
    } catch (err) {
      console.warn(err);
    }
    
    profile_list = iam_identity_service.list_profiles(account_id=account_id, include_history=True).get_result()
    
    print(json.dumps(profile_list, indent=2))
    
    listProfilesOptions := iamIdentityService.NewListProfilesOptions(accountID)
    listProfilesOptions.SetIncludeHistory(false)
    
    trustedProfiles, response, err := iamIdentityService.ListProfiles(listProfilesOptions)
    if err != nil {
      panic(err)
    }
    b, _ := json.MarshalIndent(trustedProfiles, "", "  ")
    fmt.Println(string(b))
    
  2. 以下のリクエスト例に示すように、 IAM Access Groups API を呼び出してメンバーをアクセスグループに追加する。

    メンバーのタイプは、 userservice または profile でなければならない。

    curl -X PUT --location --header "Authorization: Bearer {iam_token}" --header "Accept: application/json" --header "Content-Type: application/json" --data '{ "members": [ { "iam_id": "IBMid-user1", "type": "user" }, { "iam_id": "iam-ServiceId-123", "type": "service" }, { "iam_id": "iam-Profile-123", "type": "profile" } ] }' "{base_url}/v2/groups/{access_group_id}/members"
    
    AddGroupMembersRequestMembersItem member1 = new AddGroupMembersRequestMembersItem.Builder()
      .iamId("IBMid-user1")
      .type("user")
      .build();
    AddGroupMembersRequestMembersItem member2 = new AddGroupMembersRequestMembersItem.Builder()
      .iamId("iam-ServiceId-123")
      .type("service")
      .build();
      AddGroupMembersRequestMembersItem member3 = new AddGroupMembersRequestMembersItem.Builder()
      .iamId(testProfileId)
      .type("profile")
      .build();
    AddMembersToAccessGroupOptions addMembersToAccessGroupOptions = new AddMembersToAccessGroupOptions.Builder()
      .accessGroupId(testGroupId)
      .addMembers(member1)
      .addMembers(member2)
      .addMembers(member3)
      .build();
    Response<AddGroupMembersResponse> response = iamAccessGroupsService.addMembersToAccessGroup(addMembersToAccessGroupOptions).execute();
    AddGroupMembersResponse addGroupMembersResponse = response.getResult();
    
    System.out.println(addGroupMembersResponse);
    
    const groupMember1 = {
      iam_id: 'IBMid-user1',
      type: 'user',
    };
    const groupMember2 = {
      iam_id: 'iam-ServiceId-123',
      type: 'service',
    };
    var groupMember3 = {
      iam_id: profileId,
      type: 'profile',
    }
    
    const params = {
      accessGroupId: testGroupId,
      members: [groupMember1, groupMember2, groupMember3],
    };
    
    try {
      const res = await iamAccessGroupsService.addMembersToAccessGroup(params);
      console.log(JSON.stringify(res.result, null, 2));
    } catch (err) {
      console.warn(err);
    }
    
    member1 = AddGroupMembersRequestMembersItem(iam_id='IBMid-user1', type='user')
    member2 = AddGroupMembersRequestMembersItem(iam_id='iam-ServiceId-123', type='service')
    member3 = AddGroupMembersRequestMembersItem(iam_id=test_profile_id, type='profile')
    members = [member1, member2, member3]
    
    response = iam_access_groups_service.add_members_to_access_group(
      access_group_id=test_group_id,
      members=members,
    )
    add_group_members_response = response.get_result()
    
    print(json.dumps(add_group_members_response, indent=2))
    
    groupMembers := []iamaccessgroupsv2.AddGroupMembersRequestMembersItem{
      iamaccessgroupsv2.AddGroupMembersRequestMembersItem{
        IamID: core.StringPtr("IBMid-user1"),
        Type:  core.StringPtr("user"),
      },
      iamaccessgroupsv2.AddGroupMembersRequestMembersItem{
        IamID: core.StringPtr("iam-ServiceId-123"),
        Type:  core.StringPtr("service"),
      },
      iamaccessgroupsv2.AddGroupMembersRequestMembersItem{
        IamID: core.StringPtr(testProfileID),
        Type:  core.StringPtr("profile"),
      },
    }
    
    addMembersToAccessGroupOptions := iamAccessGroupsService.NewAddMembersToAccessGroupOptions(
      accessGroupIDLink,
    )
    addMembersToAccessGroupOptions.SetMembers(groupMembers)
    
    addGroupMembersResponse, response, err := iamAccessGroupsService.AddMembersToAccessGroup(addMembersToAccessGroupOptions)
    if err != nil {
      panic(err)
    }
    b, _ := json.MarshalIndent(addGroupMembersResponse, "", "  ")
    fmt.Println(string(b))
    

グループに追加したメンバーは、グループに割り当てたアクセス・レベルを使用できます。

Terraformを使ってアクセスグループにメンバーを追加する

メンバーには、ユーザー、サービスID、および信頼されたプロファイルを指定できます。

  1. main.tf ファイルに引数を作成する。 以下の例では、サービスID、信頼済みプロファイル、およびIDが user@ibm.com のユーザーをアクセスグループに追加しています。

    resource "ibm_iam_access_group_members" "accgroupmem" {
      access_group_id = ibm_iam_access_group.accgroup.id
      ibm_ids         = ["user@ibm.com"]
      iam_service_ids = [ibm_iam_service_id.serviceID.id]
      iam_profile_ids = [ibm_iam_trusted_profile.profileID.id]
    }
    

IAM Access Groupsモジュールでグループメンバーシップをプログラムで管理し、ユーザープロビジョニングを自動化。 メンバー管理のための Terraform IBM モジュールを 調べる。

  1. 設定ファイルのビルドが終わったら、Terraform CLIを初期化します。 詳しくは、 作業ディレクトリの初期化を参照のこと。

    terraform init
    
  2. main.tf ファイルからリソースをプロビジョニングする。 詳しくは Terraformによるインフラのプロビジョニングを参照してください。

    1. terraform plan を実行してTerraformの実行プランを生成し、提案されたアクションをプレビューする。

      terraform plan
      
    2. terraform apply を実行し、プランで定義されたリソースを作成する。

      terraform apply
      

グループに追加したメンバーは、グループに割り当てたアクセス・レベルを使用できます。