使用存取群組簡化存取管理
將使用者、服務 ID 和可信賴的設定檔組織為存取群組,以進行有效率的權限管理。 為整個群組一次指派細粒度的政策,以規模實施最小特權。
建立存取群組可將一組使用者、服務 ID 及受信任的設定檔組織為單一實體,方便您指派存取權限。 您可以為群組指定單一政策,而無需為個別使用者或服務 ID 多次指定相同的存取。
會指派原則給存取群組,將角色和許可權授與該群組的成員。 存取群組的成員可以包含多種身分類型,例如使用者、服務 ID 和可信賴的設定檔。 成員會繼承指派給存取群組的政策、角色和權限,也會保留個別指派給他們的角色。
例如,如果使用者在計費服務上被指派 viewer 角色,而他們被加入到在目錄管理服務上具有 publisher 角色的存取群組中,他們會保留 viewer 角色,即使這並非存取群組權限的一部分。
若要更輕鬆地指派及管理存取權,您可以設定資源群組,來組織您想要一群使用者能存取的一組資源。 設定好資源群組之後,您可以指派一個原則,來提供對該群組內所有資源的存取權,而不是為您帳戶內的個別服務實例建立存取原則。
開始之前
若要管理或建立新的存取群組,您必須具有下列類型的存取權:
- 帳戶中 IAM 存取群組帳戶管理服務的管理員或編輯員
- 所有帳戶管理服務的管理者或編輯者
- 您必須是帳戶所有者
此外,管理者或編輯者可以藉由建立存取原則(其中資源是存取群組 ID)而獲指派存取權來管理個別群組。 如需 IAM 存取群組服務之存取原則及角色的相關資訊,請參閱 IAM 存取。
開始之前
在使用 Terraform 設定存取群組之前,請確認您已完成下列事項:
- 安裝 Terraform CLI 並為 Terraform 配置 IBM Cloud Provider 外掛程式。 如需詳細資訊,請參閱 IBM Cloud® 上的 Terraform 入門 教學。 外掛程式抽象出 IBM Cloud API,用來完成這項任務。
- 建立名為
main.tf的 Terraform 配置檔案。 在此檔案中,您使用 HashiCorp Configuration Language 定義資源。 如需詳細資訊,請參閱 Terraform 文件。
在主控台中建立存取群組
必須使用唯一的名稱來區分帳戶中的存取群組。 若要建立存取群組,請完成下列步驟:
- 在 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)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 建立存取群組:
-
在
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 模組(TIM) for IAM 存取群組 將使用者和服務 ID 分組,簡化存取管理。
-
完成建立組態檔案後,初始化 Terraform CLI。 如需詳細資訊,請參閱 初始化工作目錄。
terraform init -
從
main.tf檔案提供資源。 如需詳細資訊,請參閱 使用 Terraform 佈建基礎結構。-
執行
terraform plan以產生 Terraform 執行計畫,預覽建議的動作。terraform plan -
執行
terraform apply以建立計劃中定義的資源。terraform apply
-
在主控台中指定群組存取權限
在您以使用者和服務 ID 設定群組之後,可以將一般存取原則指派給群組。 請記住,為群組設定的任何原則都會適用於群組內的所有實體。 例如,將存取政策指派給存取群組,可將授予或撤銷存取使用者、服務-ID 或受信任設定檔的能力,委派給該存取群組的管理員。
管理員可存取帳戶中的所有內容,包括撤銷其他具有管理員角色的使用者的存取權限。
使用下列步驟在主控台中指定群組的存取權限:
-
在 IBM Cloud 主控台中,按一下管理 > 存取 (IAM),然後選擇存取群組。
-
對於要指派存取權的群組,選擇動作圖示
,然後按一下指派存取權。
-
您可以僅對您管理的資源指派存取權限。 您必須至少指派一個存取選項。 對於您未新增及配置的任何存取選項,會指派預設值:不可存取。 取決於獲授權管理的選項,您可以指派下列類型的存取權:
- 一組服務,如 所有啟用身分與存取的服務、所有帳戶管理服務 或 所有 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)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))
您可以指派一組服務的存取權。 若要指定 所有啟用身分與存取的服務 的存取權限,請指定 serviceType 為 name 屬性,並使用 value service。 若要指定所有帳戶管理服務的存取權,請指定 serviceType 為 name 屬性,並使用
value platform_service。 若要指定帳戶管理服務子集的存取權所有 IAM 帳戶管理服務,請指定 service_group_id 為 name 屬性,並使用 value IAM。
使用 Terraform 為群組指派存取權限
設定群組後,請使用以下步驟,透過 Terraform 為群組指派存取權限。
-
在
main.tf檔案中建立一個參數。 以下範例透過使用ibm_iam_access_group_policy資源,建立一個 IAM 政策,授予存取群組成員 IAMViewer平台角色至所有啟用 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"
}]
}
]
}
關於 Terraform IBM 模組的更多資訊,請參閱 關於 Terraform IBM 模組。
-
完成建立組態檔案後,初始化 Terraform CLI。 如需詳細資訊,請參閱 初始化工作目錄。
terraform init -
從
main.tf檔案提供資源。 如需詳細資訊,請參閱 使用 Terraform 佈建基礎結構。-
執行
terraform plan以產生 Terraform 執行計畫,預覽建議的動作。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 將使用者
name@example.com加入存取群組example_group。ibmcloud iam access-group-user-add example_group name@example.com使用 ibmcloud iam access-group-service-id-add 指令將服務 ID 新增至存取群組。 以下範例會將服務 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 和可信賴的設定檔。
-
列出帳戶中的使用者、服務 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 執行計畫,預覽建議的動作。terraform plan -
執行
terraform apply以建立計劃中定義的資源。terraform apply
-
您新增到群組的成員可以使用您指派給群組的存取權限等級。