액세스 그룹으로 간소화된 액세스 관리
사용자, 서비스 ID, 신뢰할 수 있는 프로필을 액세스 그룹으로 구성하여 효율적으로 권한을 관리하세요. 세분화된 정책을 전체 그룹에 한 번만 할당하여 최소 권한을 대규모로 구현하세요.
액세스 그룹은 사용자, 서비스 ID 및 신뢰할 수 있는 프로파일 세트를, 액세스 권한을 쉽게 지정할 수 있도록 하는 단일 엔티티로 구성하기 위해 작성될 수 있습니다. 사용자는 개별 사용자 또는 서비스 ID에 대해 동일한 액세스 권한을 여러 번 지정하는 대신 그룹에 하나의 정책을 지정할 수 있습니다.
액세스 그룹에는 해당 그룹의 구성원에게 역할 및 권한을 부여하는 정책이 지정됩니다. 액세스 그룹의 구성원에는 사용자, 서비스 ID 및 신뢰할 수 있는 프로파일과 같은 여러 ID 유형이 포함될 수 있습니다. 구성원은 액세스 그룹에 할당된 정책, 역할 및 권한을 상속하고 개별적으로 할당된 역할도 유지합니다.
예를 들어, 특정 사용자에게 비용 청구 서비스에 대한 viewer 역할이 지정되었으며 이러한 사용자가 카탈로그 관리 서비스에 대한 publisher 역할이 있는 액세스 그룹에 추가되는 경우, 이 사용자는 viewer 역할이 해당 액세스 그룹 권한의 일부가 아니지만 이를 유지합니다.
액세스를 훨씬 더 쉽게 지정하고 관리하기 위해 리소스 그룹을 설정하여 사용자 그룹이 액세스하게 할 리소스 세트를 구성할 수 있습니다. 리소스 그룹이 설정되면 계정 내 개별 서비스 인스턴스에 대한 액세스 정책을 작성하는 대신 이 그룹 내 모든 리소스에 액세스를 제공하는 정책을 지정할 수 있습니다.
시작하기 전에
새 액세스 그룹을 관리하거나 작성하려면 다음 유형의 액세스 권한을 보유하고 있어야 합니다.
- 계정에서 IAM 액세스 그룹 계정 관리 서비스의 관리자 또는 편집자
- 모든 계정 관리 서비스에 대한 관리자 또는 편집자
- 계정 소유자여야 합니다
또한 리소스가 액세스 그룹 ID인 액세스 정책을 작성하여 개별 그룹을 관리하기 위해 관리자 또는 편집자를 지정할 수 있습니다. IAM 액세스 그룹 서비스에 대한 액세스 정책 및 역할에 대한 자세한 정보는 IAM 액세스를 참조하십시오.
시작하기 전에
Terraform을 사용하여 액세스 그룹을 설정하려면 먼저 다음을 완료해야 합니다:
- Terraform CLI를 설치하고 IBM Cloud 제공자 플러그인을 구성합니다. 자세한 내용은 테라폼 시작하기 IBM Cloud® 튜토리얼을 참조하세요. 플러그인은 이 태스크를 완료하는 데 사용되는 IBM Cloud API를 요약합니다.
- 이름이
main.tf인 Terraform 구성 파일을 작성하십시오. 이 파일에서는 HashiCorp 구성 언어를 사용하여 리소스를 정의합니다. 자세한 내용은 테라폼 문서를 참조하세요.
콘솔에서 액세스 그룹 작성
계정의 액세스 그룹을 구별하려면 고유한 이름이 필요합니다. 액세스 그룹을 작성하려면 다음 단계를 완료하십시오.
- IBM Cloud® 콘솔에서 관리 > **액세스(IAM)**를 클릭하고 액세스 그룹을 선택하십시오.
- 작성을 클릭하십시오.
- 액세스 그룹, 선택적 설명을 식별할 고유한 이름을 입력하고 작성을 클릭하십시오.
그 다음에는 사용자, 서비스 ID 또는 신뢰할 수 있는 프로파일을 추가하여 그룹을 계속 설정하십시오. 사용자는 수동으로 추가하거나 동적 규칙 작성을 통해 추가할 수 있습니다. 또는 그룹에 액세스 권한을 지정하기 시작하거나 나중에 액세스 그룹에 추가할 사용자를 결정하십시오.
그룹 제거 옵션을 선택하여 그룹을 삭제할 수 있습니다. 계정에서 그룹을 제거하면 그룹 및 그룹에 지정된 모든 액세스에서 모든 사용자와 서비스 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)액세스 그룹 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을 사용하여 액세스 그룹 작성
테라폼을 사용하여 액세스 그룹을 만들려면 다음 단계를 따르세요:
-
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) 페이지의 인수 참조 세부 정보를 참조하세요.
IAM 액세스 그룹을 위한 Terraform IBM 모듈(TIM) 로 사용자와 서비스 ID를 그룹화하여 액세스 관리를 간소화하세요.
-
구성 파일 빌드를 완료한 후 Terraform CLI를 초기화합니다. 자세한 내용은 작업 디렉터리 초기화를 참조하세요.
terraform init -
main.tf파일에서 리소스를 프로비저닝합니다. 자세한 내용은 Terraform으로 인프라 프로비저닝을 참조하세요.-
terraform plan을 실행하여 테라폼 실행 계획을 생성하여 제안된 작업을 미리 볼 수 있습니다.terraform plan -
terraform apply을 실행하여 플랜에 정의된 리소스를 만듭니다.terraform apply
-
콘솔의 그룹에 대한 액세스 권한 지정
사용자 및 서비스 ID로 그룹을 설정한 후 그룹에 공통 액세스 정책을 지정할 수 있습니다. 그룹에 설정한 정책은 그룹 내 모든 엔티티에 적용됩니다. 예를 들어 액세스 그룹에 액세스 정책을 할당하면 해당 액세스 그룹의 관리자에게 사용자, 서비스 ID 또는 신뢰할 수 있는 프로필에 대한 액세스 권한을 부여하거나 취소할 수 있는 권한이 위임됩니다.
계정의 모든 항목에 대한 관리자 액세스 권한에는 관리자 역할을 가진 다른 사용자의 액세스 권한을 취소할 수 있는 기능이 포함되어 있습니다.
콘솔에서 그룹에 액세스 권한을 할당하려면 다음 단계를 따르세요:
-
IBM Cloud 콘솔에서 관리 > **액세스(IAM)**를 클릭하고 액세스 그룹을 선택하십시오.
-
액세스 권한을 지정할 그룹에 대해 조치 아이콘
를 선택하고 액세스 권한 지정을 클릭하십시오.
-
자신이 관리하는 리소스에 대해서만 액세스 권한을 지정할 수 있습니다. 최소한 하나의 액세스 옵션을 지정해야 합니다. 추가 및 구성하지 않은 액세스 옵션의 경우 기본값인 액세스 없음이 지정됩니다. 관리할 권한이 부여된 옵션에 따라 다음과 같은 유형의 액세스를 지정할 수 있습니다.
- 모든 ID 및 액세스 지원 서비스, 모든 계정 관리 서비스 또는 모든 IAM 계정 관리 서비스와 같은 서비스 그룹입니다.
- 특정 서비스
-
그 다음에는 액세스의 범위를 모든 리소스로 지정하거나 액세스 관리 태그, 위치 또는 리소스 그룹과 같은 선택된 리소스 속성에 기반한 특정 리소스로 지정할 수 있습니다.
-
적용되는 모든 역할을 선택하십시오. 각 역할에 맵핑된 조치를 보려면 각 역할 옆에 나열된 숫자를 클릭하십시오. 일부 서비스에서는 특정 이름 지정 규칙을 충족하는 리소스에 대한 액세스 권한을 부여할 수 있는 고급 연산자의 사용을 지원합니다. 자세한 정보는 와일드카드 정책을 사용한 액세스 권한 지정을 참조하십시오.
-
검토를 클릭하십시오.
-
추가를 클릭하여 정책 요약에 정책 구성을 추가하십시오.
-
지정을 클릭하십시오.
액세스 관리 태그를 사용하여 액세스를 지정할 수도 있습니다. 자세한 정보는 태그를 사용하여 리소스에 대한 액세스 제어를 참조하십시오.
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)정책 관리 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))
서비스 그룹에 액세스 권한을 할당할 수 있습니다. 모든 ID 및 액세스 사용 서비스에 대한 액세스 권한을 할당하려면 name 속성에 serviceType 을 지정하고 value service 을 사용합니다. 모든 계정 관리 서비스에 대한 액세스 권한을 할당하려면 name 속성에 serviceType 을 지정하고 value platform_service 을 사용합니다. 계정 관리 서비스의 하위 집합인 모든 IAM 계정 관리 서비스에 대한 액세스 권한을 할당하려면 name 속성에 service_group_id 을 지정하고 value IAM 을 사용합니다.
Terraform을 사용하여 그룹에 대한 액세스 지정하기
그룹을 설정한 후 다음 단계에 따라 테라폼을 사용하여 그룹에 대한 액세스 권한을 할당하세요.
-
main.tf파일에 인수를 생성합니다. 다음 예제에서는Viewer자원을 사용하여 액세스 그룹의 구성원에게 IAMibm_iam_access_group_policy플랫폼 역할을 모든 IAM 사용 서비스에 부여하는 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 액세스 그룹 모듈을 사용하여 액세스 그룹 및 정책을 대규모로 관리할 수도 있습니다. 다음 예제에서는 모듈을 사용하는 방법을 보여줍니다:
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"
}]
}
]
}
테라폼 IBM 모듈에 대한 자세한 내용은 테라폼 소개 IBM 모듈을 참조하세요.
-
구성 파일 빌드를 완료한 후 Terraform CLI를 초기화합니다. 자세한 내용은 작업 디렉터리 초기화를 참조하세요.
terraform init -
main.tf파일에서 리소스를 프로비저닝합니다. 자세한 내용은 Terraform으로 인프라 프로비저닝을 참조하세요.-
terraform plan을 실행하여 테라폼 실행 계획을 생성하여 제안된 작업을 미리 볼 수 있습니다.terraform plan -
terraform apply을 실행하여 플랜에 정의된 리소스를 만듭니다.terraform apply
-
콘솔에서 액세스 그룹에 구성원 추가하기
회원은 사용자, 서비스 ID, 신뢰할 수 있는 프로필이 될 수 있습니다.
-
IBM Cloud® 콘솔에서 관리 > **액세스(IAM)**를 클릭하고 액세스 그룹을 선택하십시오.
-
생성한 액세스 그룹을 클릭합니다.
-
멤버를 추가합니다.
- 사용자 추가를 클릭하십시오.
- 서비스 ID > 서비스 ID 추가를 클릭합니다.
- 신뢰할 수 있는 프로필 > 신뢰할 수 있는 프로필 추가하기 을 클릭합니다.
회원 추가 버튼이 보이지 않는다면 액세스 권한이 없는 것일 수 있습니다. 액세스 요구 사항을 검토하고 계정 관리자에게 문의하여 액세스 권한을 요청하세요.
-
그룹에 추가하려는 사용자, 서비스 ID 또는 신뢰할 수 있는 프로필을 선택하고 그룹에 추가를 클릭합니다.
그룹에 추가하는 멤버는 그룹에 할당하는 액세스 수준을 사용할 수 있습니다.
CLI를 사용하여 액세스 그룹에 구성원 추가하기
회원은 사용자, 서비스 ID, 신뢰할 수 있는 프로필이 될 수 있습니다. 그룹에 추가하는 멤버는 그룹에 할당하는 액세스 수준을 사용할 수 있습니다.
-
계정의 사용자, 서비스 ID 또는 신뢰할 수 있는 프로필을 가져옵니다. 액세스 그룹에 추가하려는 멤버에 대해 반환되는 세부 정보를 기록해 두세요.
ibmcloud account users [-c, --account-id ACCOUNT_ID]ibmcloud iam service-ids [--uuid]신뢰할 수 있는 모든 프로필을 확인하세요:
ibmcloud iam trusted-profiles [--id | --output FORMAT] [-q, --quiet] -
액세스 그룹에 구성원을 추가합니다:
Ibmcloud iam access-group-user-add 명령을 사용하여 사용자를 액세스 그룹에 추가합니다. 다음 예는 CLI를 사용하여
example_group그룹에 액세스할 수 있도록name@example.com사용자를 추가하는 예제입니다.ibmcloud iam access-group-user-add example_group name@example.comIbmcloud iam access-group-service-id-add 명령을 사용하여 액세스 그룹에 서비스 ID를 추가합니다. 다음 예제에서는 서비스 ID
example-service를 추가하여example_group그룹에 액세스합니다:ibmcloud iam access-group-service-id-add example_group example-serviceIbmcloud 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, 신뢰할 수 있는 프로필이 될 수 있습니다.
-
다음 요청 예시와 같이 계정의 사용자, 서비스 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))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)) -
다음 예제 요청에 표시된 대로 IAM 액세스 그룹 API를 호출하여 액세스 그룹에 구성원을 추가합니다.
회원 유형은
user,service또는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, 신뢰할 수 있는 프로필이 될 수 있습니다.
-
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 액세스 그룹 모듈을 사용하여 그룹 멤버십을 프로그래밍 방식으로 관리하세요. 회원 관리에 대해서는 Terraform IBM 모듈 을 참조하세요.
-
구성 파일 빌드를 완료한 후 Terraform CLI를 초기화합니다. 자세한 내용은 작업 디렉터리 초기화를 참조하세요.
terraform init -
main.tf파일에서 리소스를 프로비저닝합니다. 자세한 내용은 Terraform으로 인프라 프로비저닝을 참조하세요.-
terraform plan을 실행하여 테라폼 실행 계획을 생성하여 제안된 작업을 미리 볼 수 있습니다.terraform plan -
terraform apply을 실행하여 플랜에 정의된 리소스를 만듭니다.terraform apply
-
그룹에 추가하는 멤버는 그룹에 할당하는 액세스 수준을 사용할 수 있습니다.