카탈로그에 대한 액세스 지정

계정 소유자는 수행 중인 태스크에 따라 사용자 특정 카탈로그 관리 액세스 권한을 지정합니다. 액세스 권한 지정 프로세스를 간소화하기 위해 액세스 그룹을 사용하여 사용자 세트를 단일 엔티티로 구성할 수 있습니다. 이렇게 하면 한 번에 단일 정책을 그룹에 지정한 다음 필요에 따라 그룹에서 사용자를 추가하거나 제거할 수 있습니다.

추가 세부사항은 IBM Cloud에서 액세스 관리를 참조하십시오.

콘솔에서 액세스 그룹 설정

액세스 그룹 작성 및 특정 IAM 정책을 각각에 지정하는 방법에 대한 자세한 내용은 다음 절을 참조하십시오.

콘솔에서의 관리자 액세스 권한

계정 레벨 필터를 IBM Cloud 카탈로그에 설정하려면 관리자 액세스 권한이 필요합니다.

  1. IBM Cloud 계정에 로그인하십시오.
  2. IBM Cloud 콘솔에서 관리 > 액세스(IAM) > 액세스 그룹으로 이동하십시오.
  3. 작성을 클릭하십시오.
  4. 그룹 이름으로 private-catalog-admins를 입력하고 작성을 클릭하십시오.
  5. 액세스 > 액세스 할당을 클릭합니다.
  6. 서비스 목록에서 카탈로그 관리를 선택하십시오.
  7. 사용자가 액세스할 카탈로그를 선택하십시오.
  8. 플랫폼 액세스 섹션에서 관리자 역할을 선택하십시오.
  9. 추가 > 지정을 클릭하십시오.

콘솔에서의 편집자 액세스 권한

편집자 액세스는 개인 카탈로그 작성, 개인 카탈로그 레벨에서 필터 설정, 개인 카탈로그에 소프트웨어 추가, 소프트웨어 업데이트, 더 이상 사용되지 않음 및 복원에 필요합니다.

  1. 액세스 그룹으로 이동하여 작성을 클릭하십시오.
  2. 그룹 이름으로 private-catalog-editors를 입력하고 작성을 클릭하십시오.
  3. 액세스 > 액세스 할당을 클릭합니다.
  4. 서비스 목록에서 카탈로그 관리를 선택하십시오.
  5. 사용자가 액세스할 카탈로그를 선택하십시오.
  6. 플랫폼 액세스 섹션에서 편집자 역할을 선택하십시오.
  7. 추가 를 클릭하십시오.
  8. 서비스 목록에서 Kubernetes Service를 선택하십시오.
  9. 클러스터를 선택한 다음 관리자(Administrator)관리자(Manager) 역할을 선택하십시오.
  10. 추가 를 클릭하십시오.
  11. 서비스 목록에서 Schematics를 선택하십시오.
  12. 관리자(Manager) 역할을 선택하십시오.
  13. 추가 > 지정을 클릭하십시오.

콘솔에서의 뷰어 액세스 권한

뷰어 액세스는 개인 카탈로그, 필터링된 IBM Cloud 카탈로그 및 필터 설정을 보는 데 필요합니다.

  1. 액세스 그룹으로 이동하여 작성을 클릭하십시오.
  2. 그룹 이름으로 private-catalog-viewers를 입력하고 작성을 클릭하십시오.
  3. 액세스 > 액세스 할당을 클릭합니다.
  4. 서비스 목록에서 카탈로그 관리를 선택하십시오.
  5. 사용자가 액세스할 카탈로그를 선택하십시오.
  6. 플랫폼 액세스 섹션에서 뷰어 역할을 선택하십시오.
  7. 추가 > 지정을 클릭하십시오.

또한 개인 카탈로그가 지정된 리소스 그룹에 대한 뷰어 액세스 권한이 있어야 합니다. 개인 카탈로그를 작성하는 단계를 완료할 때 개인 카탈로그를 리소스 그룹에 지정할 수 있습니다. 자세한 정보는 모든 계정 사용자에 대한 IBM Cloud 카탈로그 사용자 정의를 참조하십시오.

개인 카탈로그의 리소스 그룹에 대한 뷰어 액세스 권한을 지정하려면 다음 단계를 사용하십시오.

  1. 사용자로 이동하여 사용자를 선택하십시오.
  2. 액세스 > 액세스 권한 할당을 선택합니다.
  3. 서비스 목록에서 모든 ID 및 액세스 사용 서비스를 선택하십시오.
  4. 액세스의 범위를 선택된 속성에 기반한 특정 리소스로 지정하고 개인용 카탈로그 리소스 그룹을 선택하십시오.
  5. 플랫폼 액세스 권한의 경우에는 뷰어 역할을 선택하십시오.
  6. 추가 > 지정을 클릭하십시오.

콘솔의 액세스 그룹에 사용자 추가

액세스 그룹을 설정한 후에 다음 단계를 완료하여 사용자를 그룹에 추가하십시오.

  1. 사용자로 이동하여 사용자 초대를 클릭하십시오.
  2. 사용자의 이메일 주소를 지정하십시오. 한 번의 초대에서 두 명 이상의 사용자를 초대하는 경우에는 모든 사용자에게 동일한 액세스가 지정됩니다.
  3. 이전에 작성한 세 개의 액세스 그룹 중 하나를 선택하고 추가 > 초대를 클릭하십시오.
  4. 다른 액세스 그룹에 사용자를 추가하려면 이 단계를 반복하십시오.

또는, 신뢰할 수 있는 프로파일을 액세스 그룹에 추가하여 사용자에게 액세스 권한을 부여할 수도 있습니다. 자세한 정보는 좋은 신뢰할 수 있는 프로파일 전략의 조건은 무엇입니까?신뢰할 수 있는 프로파일 작성을 참조하십시오.

CLI를 사용하여 액세스 그룹 설정

액세스 권한을 지정하려면 ibmcloud iam user-policy-create 명령을 실행하십시오.

CLI를 사용한 관리자 액세스 권한

관리자에게 액세스 권한을 지정하려면 다음 명령을 실행하십시오.

ibmcloud iam user-policy-create USER_NAME --roles Administrator --service-name globalcatalog-collection

CLI를 사용한 편집자 액세스 권한

편집자에게 액세스 권한을 지정하려면 다음 명령을 실행하십시오.

ibmcloud iam user-policy-create USER_NAME --roles Editor --service-name globalcatalog-collection

CLI를 사용한 뷰어 액세스 권한

뷰어에게 액세스 권한을 지정하려면 다음 명령을 실행하십시오.

ibmcloud iam user-policy-create USER_NAME --roles Viewer --service-name globalcatalog-collection

CLI를 사용하여 액세스 그룹에 사용자 추가

CLI를 사용하여 사용자를 액세스 그룹에 추가하려면 ibmcloud iam access-group-user-add 명령을 실행하십시오.

ibmcloud iam access-group-user-add GROUP_NAME USER_NAME [USER_NAME2...]

예를 들어, 다음 명령은 name@example.com 사용자를 example_group 액세스 그룹에 추가합니다.

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

또는, 신뢰할 수 있는 프로파일을 액세스 그룹에 추가하여 사용자에게 액세스 권한을 부여할 수도 있습니다. 자세한 정보는 좋은 신뢰할 수 있는 프로파일 전략의 조건은 무엇입니까?신뢰할 수 있는 프로파일 작성을 참조하십시오.

API를 사용하여 액세스 그룹 설정

액세스 권한을 지정하려면 다음 예에 표시된 대로 IAM 정책 관리 API를 호출하십시오. role_id 변수를 지정하려는 역할(Viewer, Editor 또는 Administrator)로 대체하십시오.

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 RESOURCE_NAME",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "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("iam_id")
        .value(EXAMPLE_USER_ID)
        .build();

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

PolicyRole policyRoles = new PolicyRole.Builder()
        .roleId("crn:v1:bluemix:public:iam::::role:Viewer")
        .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();

ResourceTag policyResourceTag = new ResourceTag.Builder()
        .name("project")
        .value("prototype")
        .operator("stringEquals")
        .build();

PolicyResource policyResources = new PolicyResource.Builder()
        .addAttributes(accountIdResourceAttribute)
        .addAttributes(serviceNameResourceAttribute)
        .addTags(policyResourceTag)
        .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: 'iam_id',
        value: exampleUserId,
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:iam::::role:Viewer',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: exampleAccountId,
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceType',
  value: 'service',
  operator: 'stringEquals',
};
const policyResourceTag = {
  name: 'project',
  operator: 'stringEquals',
  value: 'prototype',
};
const policyResources = [
  {
    attributes: [accountIdResourceAttribute, serviceNameResourceAttribute],
    tags: [policyResourceTag],
  },
];
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='iam_id', value=example_user_id)])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:iam::::role:Viewer')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
  name='serviceType', value='service')
policy_resource_tag = ResourceTag(
  name='project', value='prototype')
policy_resources = PolicyResource(
  attributes=[account_id_resource_attribute,
        service_name_resource_attribute],
  tags=[policy_resource_tag])

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("iam_id"),
  Value: &exampleUserID,
}
policySubjects := &iampolicymanagementv1.PolicySubject{
  Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
  RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Viewer"),
}
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"),
}
policyResourceTag := &iampolicymanagementv1.ResourceTag{
  Name:     core.StringPtr("project"),
  Value:    core.StringPtr("prototype"),
  Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
  Attributes: []iampolicymanagementv1.ResourceAttribute{
    *accountIDResourceAttribute, *serviceNameResourceAttribute},
  Tags: []iampolicymanagementv1.ResourceTag{*policyResourceTag},
}

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

액세스 예상 응답 설정

{
  "id": "12345678-abcd-1a2b-a1b2-1234567890ab",
  "type": "access",
  "description": "Viewer role access for all instances of SERVICE_NAME in the account.",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "roles": [
    {
      "roles_id": "crn:v1:bluemix:public:iam::::role:Viewer"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT_ID",
          "operator": "stringEquals"
        },
        {
          "name": "serviceName",
          "value": "SERVICE_NAME",
          "operator": "stringEquals"
        }
      ]
    },
    {
      "tags": [
        {
          "name": "project",
          "value": "moonshot",
          "operator": "stringEquals"
        },
        {
          "name": "pipeline",
          "value": "test",
          "operator": "stringEquals"
        }
      ]
    }
  ],
  "href": "https://iam.cloud.ibm.com/v1/policies/12345678-abcd-1a2b-a1b2-1234567890ab",
  "created_at": "2018-08-30T14:09:09.907Z",
  "created_by_id": "USER_ID",
  "last_modified_at": "2018-08-30T14:09:09.907Z",
  "last_modified_by_id": "USER_ID",
  "state": "active"
}
{
  "id": "12345678-abcd-1a2b-a1b2-1234567890ab",
  "type": "access",
  "description": "Viewer role access for all instances of SERVICE_NAME in the account.",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "roles": [
    {
      "roles_id": "crn:v1:bluemix:public:iam::::role:Viewer"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT_ID",
          "operator": "stringEquals"
        },
        {
          "name": "serviceName",
          "value": "SERVICE_NAME",
          "operator": "stringEquals"
        }
      ]
    },
    {
      "tags": [
        {
          "name": "project",
          "value": "moonshot",
          "operator": "stringEquals"
        },
        {
          "name": "pipeline",
          "value": "test",
          "operator": "stringEquals"
        }
      ]
    }
  ],
  "href": "https://iam.cloud.ibm.com/v1/policies/12345678-abcd-1a2b-a1b2-1234567890ab",
  "created_at": "2018-08-30T14:09:09.907Z",
  "created_by_id": "USER_ID",
  "last_modified_at": "2018-08-30T14:09:09.907Z",
  "last_modified_by_id": "USER_ID",
  "state": "active"
}
{
  "id": "12345678-abcd-1a2b-a1b2-1234567890ab",
  "type": "access",
  "description": "Viewer role access for all instances of SERVICE_NAME in the account.",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "roles": [
    {
      "roles_id": "crn:v1:bluemix:public:iam::::role:Viewer"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT_ID",
          "operator": "stringEquals"
        },
        {
          "name": "serviceName",
          "value": "SERVICE_NAME",
          "operator": "stringEquals"
        }
      ]
    },
    {
      "tags": [
        {
          "name": "project",
          "value": "moonshot",
          "operator": "stringEquals"
        },
        {
          "name": "pipeline",
          "value": "test",
          "operator": "stringEquals"
        }
      ]
    }
  ],
  "href": "https://iam.cloud.ibm.com/v1/policies/12345678-abcd-1a2b-a1b2-1234567890ab",
  "created_at": "2018-08-30T14:09:09.907Z",
  "created_by_id": "USER_ID",
  "last_modified_at": "2018-08-30T14:09:09.907Z",
  "last_modified_by_id": "USER_ID",
  "state": "active"
}
{
  "id": "12345678-abcd-1a2b-a1b2-1234567890ab",
  "type": "access",
  "description": "Viewer role access for all instances of SERVICE_NAME in the account.",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "roles": [
    {
      "roles_id": "crn:v1:bluemix:public:iam::::role:Viewer"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT_ID",
          "operator": "stringEquals"
        },
        {
          "name": "serviceName",
          "value": "SERVICE_NAME",
          "operator": "stringEquals"
        }
      ]
    },
    {
      "tags": [
        {
          "name": "project",
          "value": "moonshot",
          "operator": "stringEquals"
        },
        {
          "name": "pipeline",
          "value": "test",
          "operator": "stringEquals"
        }
      ]
    }
  ],
  "href": "https://iam.cloud.ibm.com/v1/policies/12345678-abcd-1a2b-a1b2-1234567890ab",
  "created_at": "2018-08-30T14:09:09.907Z",
  "created_by_id": "USER_ID",
  "last_modified_at": "2018-08-30T14:09:09.907Z",
  "last_modified_by_id": "USER_ID",
  "state": "active"
}
{
  "id": "12345678-abcd-1a2b-a1b2-1234567890ab",
  "type": "access",
  "description": "Viewer role access for all instances of SERVICE_NAME in the account.",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "roles": [
    {
      "roles_id": "crn:v1:bluemix:public:iam::::role:Viewer"
    }
  ],
  "resources": [
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "ACCOUNT_ID",
          "operator": "stringEquals"
        },
        {
          "name": "serviceName",
          "value": "SERVICE_NAME",
          "operator": "stringEquals"
        }
      ]
    },
    {
      "tags": [
        {
          "name": "project",
          "value": "moonshot",
          "operator": "stringEquals"
        },
        {
          "name": "pipeline",
          "value": "test",
          "operator": "stringEquals"
        }
      ]
    }
  ],
  "href": "https://iam.cloud.ibm.com/v1/policies/12345678-abcd-1a2b-a1b2-1234567890ab",
  "created_at": "2018-08-30T14:09:09.907Z",
  "created_by_id": "USER_ID",
  "last_modified_at": "2018-08-30T14:09:09.907Z",
  "last_modified_by_id": "USER_ID",
  "state": "active"
}

API를 사용하여 액세스 그룹에 사용자 추가

API를 사용하여 사용자를 액세스 그룹에 추가하려면 다음 예와 같이 IAM 액세스 그룹 API를 호출합니다.

curl -X PUT -H "Authorization: {iam_token}" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"members": [ {"iam_id": "IBMid-user1", "type": "user"}, {"iam_id": "iam-ServiceId-123", "type": "service"} ]}' "{base_url}/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();
AddMembersToAccessGroupOptions addMembersToAccessGroupOptions = new AddMembersToAccessGroupOptions.Builder()
  .accessGroupId(testGroupId)
  .addMembers(member1)
  .addMembers(member2)
  .build();
Response<AddGroupMembersResponse> response = service.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',
};
const params = {
  accessGroupId: testGroupId,
  members: [groupMember1, groupMember2],
};

iamAccessGroupsService.addMembersToAccessGroup(params)
  .then(res => {
    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')
members = [member1, member2]

add_group_members_response = iam_access_groups_service.add_members_to_access_group(
  access_group_id=test_group_id,
  members=members
).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"),
  },
}
addMembersToAccessGroupOptions := iamAccessGroupsService.NewAddMembersToAccessGroupOptions(testGroupID)
addMembersToAccessGroupOptions.SetMembers(groupMembers)
addGroupMembersResponse, response, err := iamAccessGroupsService.AddMembersToAccessGroup(addMembersToAccessGroupOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(addGroupMembersResponse, "", "  ")
fmt.Println(string(b))

또는, 신뢰할 수 있는 프로파일을 액세스 그룹에 추가하여 사용자에게 액세스 권한을 부여할 수도 있습니다. 자세한 정보는 좋은 신뢰할 수 있는 프로파일 전략의 조건은 무엇입니까?신뢰할 수 있는 프로파일 작성을 참조하십시오.

사용자 예상 응답 추가

{
  "members": [
    {
      "iam_id": "$IBM_ID",
      "type": "user",
      "created_at": "2019-01-01T01:01:00Z",
      "created_by_id": "CREATOR_ID",
      "status_code": 200
    },
    {
      "iam_id": "$SERVICE_ID",
      "status_code": 400,
      "trace": "12345678-abcd-1a2b-a1b2-1234567890ab",
      "errors": [
        {
          "code": "error_occurred",
          "message": "The service id is missing or incorrect"
        }
      ]
    }
  ]
}
{
  "members": [
    {
      "iam_id": "$IBM_ID",
      "type": "user",
      "created_at": "2019-01-01T01:01:00Z",
      "created_by_id": "CREATOR_ID",
      "status_code": 200
    },
    {
      "iam_id": "$SERVICE_ID",
      "status_code": 400,
      "trace": "12345678-abcd-1a2b-a1b2-1234567890ab",
      "errors": [
        {
          "code": "error_occurred",
          "message": "The service id is missing or incorrect"
        }
      ]
    }
  ]
}
{
  "members": [
    {
      "iam_id": "$IBM_ID",
      "type": "user",
      "created_at": "2019-01-01T01:01:00Z",
      "created_by_id": "CREATOR_ID",
      "status_code": 200
    },
    {
      "iam_id": "$SERVICE_ID",
      "status_code": 400,
      "trace": "12345678-abcd-1a2b-a1b2-1234567890ab",
      "errors": [
        {
          "code": "error_occurred",
          "message": "The service id is missing or incorrect"
        }
      ]
    }
  ]
}
{
  "members": [
    {
      "iam_id": "$IBM_ID",
      "type": "user",
      "created_at": "2019-01-01T01:01:00Z",
      "created_by_id": "CREATOR_ID",
      "status_code": 200
    },
    {
      "iam_id": "$SERVICE_ID",
      "status_code": 400,
      "trace": "12345678-abcd-1a2b-a1b2-1234567890ab",
      "errors": [
        {
          "code": "error_occurred",
          "message": "The service id is missing or incorrect"
        }
      ]
    }
  ]
}
{
  "members": [
    {
      "iam_id": "$IBM_ID",
      "type": "user",
      "created_at": "2019-01-01T01:01:00Z",
      "created_by_id": "CREATOR_ID",
      "status_code": 200
    },
    {
      "iam_id": "$SERVICE_ID",
      "status_code": 400,
      "trace": "12345678-abcd-1a2b-a1b2-1234567890ab",
      "errors": [
        {
          "code": "error_occurred",
          "message": "The service id is missing or incorrect"
        }
      ]
    }
  ]
}

Terraform을 사용하여 액세스 그룹에 사용자 추가

Terraform을 사용하여 액세스 그룹에 사용자를 추가하기 전에 다음을 완료했는지 확인하십시오.

  • Terraform CLI를 설치하고 Terraform에 대한 IBM Cloud 제공자 플러그인을 구성하십시오. 자세한 정보는 IBM Cloud® 에 대한 튜토리얼을 참조하십시오. 플러그인은 이 태스크를 완료하는 데 사용되는 IBM Cloud API를 요약합니다.
  • 이름이 main.tf인 Terraform 구성 파일을 작성하십시오. 이 파일에서 HashiCorp 구성 언어를 사용하여 자원을 정의합니다. 자세한 내용은 테라폼 문서를 참조하세요.

다음 단계에 따라 액세스 그룹에 사용자를 추가합니다:

  1. Terraform 구성 파일에서 액세스 그룹 작성에 사용한 Terraform 코드를 찾고 액세스 그룹에 지정된 access_group_id를 기록하십시오.

  2. 액세스 그룹에 멤버를 추가하십시오.

    resource "ibm_iam_access_group_members" "accgroupmem" {
    access_group_id = ibm_iam_access_group.accgroup.id
    ibm_ids = ["test@in.ibm.com"]
    }
    

    자세한 내용은 Terraform Identity and Access Management(IAM) 페이지의 인수 참조 세부 정보를 참조하세요.

    또한 Terraform IBM 모듈(TIM)IAM 액세스 그룹 모듈을 사용하여 일관되고 재사용 가능한 구성으로 정책과 함께 액세스 그룹 멤버십을 관리할 수 있습니다.

  3. 구성 파일 빌드를 완료한 후 Terraform CLI를 초기화하십시오. 자세한 정보는 작업 디렉토리 초기화를 참조하십시오.

    terraform init
    
  4. main.tf 파일에서 자원을 프로비저닝하십시오. 자세한 정보는 Terraform을 사용하여 인프라 프로비저닝을 참조하십시오.

    1. terraform plan 를 실행하여 제안된 조치를 미리보기 위한 Terraform 실행 플랜을 생성하십시오.

      terraform plan
      
    2. terraform apply 를 실행하여 계획에 정의된 자원을 작성하십시오.

      terraform apply