管理标记
您可以通过控制台、CLI 或 API 在资源或服务 ID 上附加或分离标签。 要在资源或服务 ID 上附加或拆卸标签,必须为用户分配相应的权限。 有关更多信息,请参阅授予用户标记资源的访问权。
一个资源最多可拥有 1000 个用户标签、1000 个服务标签和 250 个访问标签。
在控制台中添加和删除资源标签
-
从 "IBM Cloud®控制台,单击导航菜单图标 "
"资源清单,查看资源列表。
-
在列表中找到特定资源。
-
要为资源附加标签,请单击操作图标
>添加标签。
-
输入标签名称,然后单击保存。
-
要将标签从资源中分离出来,请单击资源列表中标签旁边的编辑图标
。
从资源中分离访问管理标记时,任何相关的访问策略也会从该资源中分离。
使用 CLI 为资源附加标记
登录 IBM Cloud®CLI 并选择您的账户以运行相应的 CLI 命令。
使用 "ibmcloud resource tag-attach
命令可将标签附加到资源上。 tag-type
的允许值为:用户标签为“user
,访问管理标签为”access
。
默认值为 user
。 下面的示例展示了如何将名为“MyTag
的用户标记附加到名为”MyResource
的资源上:
ibmcloud resource tag-attach --tag-names MyTag --resource-name 'MyResource'
将名为“project:myproject
的访问管理标记附加到名为”MyResource
的资源的示例:
ibmcloud resource tag-attach --tag-names project:myproject --resource-name 'MyResource' --tag-type access
使用 CLI 更新资源的 key:value 标记
登录 IBM Cloud®CLI 并选择您的账户以运行相应的 CLI 命令。
如果您以“key:value
格式管理标签,则可以原子方式更新”value
,而无需先分离“key:old-value
,再附加新的”key:new-value
。
要更新格式为 "key:value
的标签值,请使用带有 "--update
选项的 "ibmcloud resource tag-attach
命令。 tag-type
的允许值为:用户标签为“user
,访问管理标签为”access
。 默认值为 user
。 下面的示例展示了如何将名为 "MyResource
的资源上 "env
用户标记的值更新为 "production
ibmcloud resource tag-attach --tag-names 'env:production' --resource-name 'MyResource' --update
在上一条命令中添加 "tag-type
选项,更新访问管理标签:
ibmcloud resource tag-attach --tag-names 'env:production' --resource-name 'MyResource' --update --tag-type access
使用 CLI 将资源的所有标记替换为一组新标记
登录 IBM Cloud®CLI 并选择您的账户以运行相应的 CLI 命令。
附加操作的结果是在资源已有标签的基础上再添加标签。 在某些情况下,您需要用一组新的标签替换资源上现有的标签。
To replace all resource's tags with a new set of tags, use the ibmcloud resource tag-attach
command with the --replace
option. tag-type
的允许值为:用户标签为“user
,访问管理标签为”access
。 默认值为 user
。 下面的示例显示了如何在名为“MyResource
的资源上设置标记”tag1
、“tag2
和”tag3
,并移除所有可能已有的标记:
ibmcloud resource tag-attach --tag-names 'tag1,tag2,tag3' --resource-name 'MyResource' --replace
在上一条命令中添加 "tag-type
选项,以设置访问管理标记。 例如,用 "compliance:hipaa
替换所有访问管理标记:
ibmcloud resource tag-attach --tag-names 'compliance:hipaa' --resource-name 'MyResource' --replace --tag-type access
使用 CLI 从资源中删除标记
要从资源中分离标签,请使用 "ibmcloud resource tag-detach
命令。 The following is an example to detach a user tag called MyTag
from a resource named MyResource
:
ibmcloud resource tag-detach --tag-names MyTag —resource-name 'MyResource'
您可以使用通配符“*
来分离标签,这对分离格式为”key:value
的标签和分离所有标签非常有用。 例如,如果要将“env
标记从”MyResource
中分离出来,而不管其值如何,可以运行以下命令:
ibmcloud resource tag-detach --tag-names 'env:*' —resource-name 'MyResource'
要从 "MyResource
中分离所有标记,可以使用以下命令:
ibmcloud resource tag-detach --tag-names '*' —resource-name 'MyResource'
The following is an example to detach an access management tag called project:myproject
from a resource named MyResource
:
ibmcloud resource tag-detach --tag-names project:myproject —resource-name 'MyResource' --tag-type access
更多信息,请参阅 "ibmcloud resource
命令参考。 从资源中分离访问管理标记时,任何相关的访问策略也会从该资源中分离。
使用应用程序接口为资源添加标记
如以下请求示例所示,您可以通过调用 全局搜索和标记 - 标记 API以编程方式附加标记。 The allowed values for the tag_type
query parameter are: user
for user tags and access
for access management tags. 下面的示例显示了如何将名为 "project:myproject
的访问管理标记附加到服务实例上。
-
调用以下命令查找资源的唯一标识符:
curl -v -X POST -k --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: bearer <your IAM token>' -d '{"query": "name:myresource"}' 'https://api.global-search-tagging.cloud.ibm.com/v3/resources/search'
SearchOptions searchOptions = new SearchOptions.Builder() .query("GST-sdk-*") .fields(new java.util.ArrayList<String>(java.util.Arrays.asList("crn"))) .searchCursor(searchCursor) .build(); Response<ScanResult> response = service.search(searchOptions).execute(); ScanResult scanResult = response.getResult(); System.out.println(scanResult);
const params = { query: 'GST-sdk-*', fields: ['crn'], searchCursor: searchCursor, }; globalSearchService.search(params) .then(res => { console.log(JSON.stringify(res.result, null, 2)); }) .catch(err => { console.warn(err) });
response = global_search_service.search(query='GST-sdk-*', fields=['crn']) scan_result = response.get_result() print(json.dumps(scan_result, indent=2))
searchOptions := globalSearchService.NewSearchOptions() searchOptions.SetLimit(10) searchOptions.SetQuery("GST-sdk-*") searchOptions.SetFields([]string{"crn"}) scanResult, response, err := globalSearchService.Search(searchOptions) if err != nil { panic(err) } b, _ := json.MarshalIndent(scanResult, "", " ") fmt.Println(string(b))
-
从响应中提取 CRN 字段的值。
{ "items": [ { "crn": "crn:v1:bluemix:public:cf:au-syd:a/000af2ea12345aabb1234567801fffab::cf-organization:aaaf4100-0011-2233-1111-11aaffee0011" } ], "limit": 1, "search_cursor": "e34535305339jg0rntt39nt3nu5tt9yn3u5ntt329nutt92u4ntt92u4t9u5gt2u5gt92u4n5g982458hg2t45hg9u42rg9t2u49gh285ght28h5t2835th85ht318h4tg9138h4tg91u3hgt931hg45918h34tg18h43hgt31hgt3rng0fnefvodnfvpojdpbojarfdbpojeafrbeafbjeqpnrqngrpqgrhbHNlIiwiY2FuVGFnIjoiZmFsc2UiLCJsdfshfksdhfkshfdkshfdkhkhewrkfehrkhkwhfkwrhkfhrgk3h5k3h45k3hk45hgk3hgk3hfk3h4k3hfkrfh3rkgh3krghk3rgh3kghk3hgk3hgk3rhgdWJsaWM6Y2Y6YXUtwriretoeiroteito4i5ot4i5oyti45ito4tio45ito45io5ogno5iogn5oin5oingoi5o5ngogo4ngo4ngro3jrong3gor3g3gno3jrgo3jrngo3ngro3g32ODQiXX0t" }
-
调用以下命令
curl -X POST -H "Authorization: {iam_token}" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "resources": [{ "resource_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/59bcbfa6ea2f006b4ed7094c1a08dcdd:1a0ec336-f391-4091-a6fb-5e084a4c56f4::" }], "tag_names": ["project:myproject"] }' \ "https://tags.global-search-tagging.cloud.ibm.com/v3/tags/attach?tag_type=access"
Resource resourceModel = new Resource.Builder().resourceId(resourceCRN).build(); AttachTagOptions attachTagOptions = new AttachTagOptions.Builder() .addResources(resourceModel) .addTagNames("project:myproject") .tagType("access") .build(); Response<TagResults> response = service.attachTag(attachTagOptions).execute(); TagResults tagResults = response.getResult(); System.out.println(tagResults.toString());
const resourceModel = { resource_id: resourceCrn, }; const params = { resources: [resourceModel], tagNames: ["project:myproject"], tagType: 'access', }; globalTaggingService.attachTag(params) .then(res => { console.log(JSON.stringify(res.result, null, 2)); }) .catch(err => { console.warn(err) });
resource_model = {'resource_id': resource_crn} tag_results = global_tagging_service.attach_tag( resources=[resource_model], tag_names=['project:myproject'], tag_type='access').get_result() print(json.dumps(tag_results, indent=2))
resourceModel := &globaltaggingv1.Resource{ ResourceID: &resourceCRN, } attachTagOptions := globalTaggingService.NewAttachTagOptions( []globaltaggingv1.Resource{*resourceModel}, ) attachTagOptions.SetTagNames([]string{"project:myproject"}) attachTagOptions.SetTagType("access") tagResults, response, err := globalTaggingService.AttachTag(attachTagOptions) if err != nil { panic(err) } b, _ := json.MarshalIndent(tagResults, "", " ") fmt.Println(string(b))
更新资源的 key:value 标记
如果管理的标签格式为 "key:value
,则可以原子方式更新值,而无需先分离 "key:old-value
,再附加新的 "key:new-value
。 为此,请使用 "update
布尔查询参数。 因此,要将资源上的标记 "env
更新为值 "env:qa_test
,只需在附加
API 调用中添加 "update=true
查询参数即可。 有关使用 "update
查询参数的更多信息,请参阅 全局搜索和标记 - 标记 API。
用一组新标记替换资源的所有标记
附加操作的结果是在资源已有标签的基础上再添加标签。 在某些情况下,您需要用一组新的标签替换资源上现有的标签。 为此,请使用 "replace
布尔查询参数。 因此,要使用一组新标签替换资源上的所有标签,只需在附件 API 调用中添加 "replace=true
查询参数即可。 有关使用 "replace
查询参数的更多信息,请参阅 全局搜索和标记 - 标记 API。
使用应用程序接口从资源中分离标签
如以下请求示例所示,您可以通过调用 全局搜索和标记 - 标记 API以编程方式分离标记。 The allowed values for the tag_type
query parameter are: user
for user tags and access
for access management tags. 下面的示例展示了如何从服务实例中分离名为 "project:myproject
的访问管理标记:
-
调用以下命令查找资源的唯一标识符:
curl -v -X POST -k --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: bearer <your IAM token>' -d '{"query": "name:myresource"}' 'https://api.global-search-tagging.cloud.ibm.com/v3/resources/search'
SearchOptions searchOptions = new SearchOptions.Builder() .query("GST-sdk-*") .fields(new java.util.ArrayList<String>(java.util.Arrays.asList("crn"))) .searchCursor(searchCursor) .build(); Response<ScanResult> response = service.search(searchOptions).execute(); ScanResult scanResult = response.getResult(); System.out.println(scanResult);
const params = { query: 'GST-sdk-*', fields: ['crn'], searchCursor: searchCursor, }; globalSearchService.search(params) .then(res => { console.log(JSON.stringify(res.result, null, 2)); }) .catch(err => { console.warn(err) });
response = global_search_service.search(query='GST-sdk-*', fields=['crn']) scan_result = response.get_result() print(json.dumps(scan_result, indent=2))
searchOptions := globalSearchService.NewSearchOptions() searchOptions.SetLimit(10) searchOptions.SetQuery("GST-sdk-*") searchOptions.SetFields([]string{"crn"}) scanResult, response, err := globalSearchService.Search(searchOptions) if err != nil { panic(err) } b, _ := json.MarshalIndent(scanResult, "", " ") fmt.Println(string(b))
-
从响应中提取 CRN 字段的值。
{ "items": [ { "crn": "crn:v1:bluemix:public:cf:au-syd:a/000af2ea12345aabb1234567801fffab::cf-organization:aaaf4100-0011-2233-1111-11aaffee0011" } ], "limit": 1, "search_cursor": "e34535305339jg0rntt39nt3nu5tt9yn3u5ntt329nutt92u4ntt92u4t9u5gt2u5gt92u4n5g982458hg2t45hg9u42rg9t2u49gh285ght28h5t2835th85ht318h4tg9138h4tg91u3hgt931hg45918h34tg18h43hgt31hgt3rng0fnefvodnfvpojdpbojarfdbpojeafrbeafbjeqpnrqngrpqgrhbHNlIiwiY2FuVGFnIjoiZmFsc2UiLCJsdfshfksdhfkshfdkshfdkhkhewrkfehrkhkwhfkwrhkfhrgk3h5k3h45k3hk45hgk3hgk3hfk3h4k3hfkrfh3rkgh3krghk3rgh3kghk3hgk3hgk3rhgdWJsaWM6Y2Y6YXUtwriretoeiroteito4i5ot4i5oyti45ito4tio45ito45io5ogno5iogn5oin5oingoi5o5ngogo4ngo4ngro3jrong3gor3g3gno3jrgo3jrngo3ngro3g32ODQiXX0t" }
-
调用以下命令
curl -X POST -H "Authorization: {iam_token}" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "resources": [{ "resource_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/59bcbfa6ea2f006b4ed7094c1a08dcdd:1a0ec336-f391-4091-a6fb-5e084a4c56f4::" }], "tag_names": ["project:myproject"] }' \ "https://tags.global-search-tagging.cloud.ibm.com/v3/tags/detach?tag_type=access"
Resource resourceModel = new Resource.Builder().resourceId(resourceCRN).build(); DetachTagOptions detachTagOptions = new DetachTagOptions.Builder() .addResources(resourceModel) .addTagNames("project:myproject") .tagType("access") .build(); Response<TagResults> response = service.detachTag(detachTagOptions).execute(); TagResults tagResults = response.getResult(); System.out.println(tagResults.toString());
const resourceModel = { resource_id: resourceCrn, }; const params = { resources: [resourceModel], tagNames: ["project:myproject"], tagType: 'access', }; globalTaggingService.detachTag(params) .then(res => { console.log(JSON.stringify(res.result, null, 2)); }) .catch(err => { console.warn(err) });
resource_model = {'resource_id': resource_crn} tag_results = global_tagging_service.detach_tag( resources=[resource_model], tag_names=['project:myproject'], tag_type='access').get_result() print(json.dumps(tag_results, indent=2))
resourceModel := &globaltaggingv1.Resource{ ResourceID: &resourceCRN, } detachTagOptions := globalTaggingService.NewDetachTagOptions( []globaltaggingv1.Resource{*resourceModel}, ) detachTagOptions.SetTagNames([]string{"project:myproject"}) detachTagOptions.SetTagType("access") tagResults, response, err := globalTaggingService.DetachTag(detachTagOptions) if err != nil { panic(err) } b, _ := json.MarshalIndent(tagResults, "", " ") fmt.Println(string(b))
从资源中分离访问管理标记时,任何相关的访问策略也会从该资源中分离。
分离所有标签和按键分离标签
您可以使用通配符“*
来分离标签,这对分离格式为”key:value
的标签和分离所有标签非常有用。 例如,如果要从给定资源中分离 "env
标记(无论其值如何),可以运行以下命令:
curl -X POST -H "Authorization: {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{ "resources": [{ "resource_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/59bcbfa6ea2f006b4ed7094c1a08dcdd:1a0ec336-f391-4091-a6fb-5e084a4c56f4::" }], "tag_names": ["env:*"] }' \
"https://tags.global-search-tagging.cloud.ibm.com/v3/tags/detach?tag_type=access"
如果要分离所有标记,只需使用“*
作为标记名,或作为”tag_names
数组中的唯一元素,就像下面的命令一样:
curl -X POST -H "Authorization: {iam_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{ "resources": [{ "resource_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/59bcbfa6ea2f006b4ed7094c1a08dcdd:1a0ec336-f391-4091-a6fb-5e084a4c56f4::" }], "tag_names": ["*"] }' \
"https://tags.global-search-tagging.cloud.ibm.com/v3/tags/detach?tag_type=access"
使用 Terraform 为资源附加标签
在使用 Terraform 为资源附加标记之前,请确保已完成以下步骤:
-
安装 Terraform CLI 并为 Terraform 配置IBM Cloud提供商插件。提供商插件。 更多信息,请参阅 IBM Cloud®上的 Terraform 入门 教程。 该插件抽象了用于完成此任务的IBM CloudAPI。用于完成此任务的 API。
-
创建一个名为
main.tf
的Terraform配置文件。 在此文件中,您可以使用HashiCorp配置语言定义资源。 更多信息,请参阅 Terraform 文档。
使用 Terraform 为资源附加标记的步骤如下:
-
按照 ibm_resource_tag'{: external} 中的示例准备 Terraform 配置文件(如main.tf),将用户标签附加到我们账户中的现有资源上。
-
完成构建配置文件后,初始化 Terraform CLI。 更多信息,请参阅 初始化工作目录。
terraform init
-
提供 "
main.tf
文件中的资源。 如需了解更多信息,请参阅 使用 Terraform 配置基础架构。-
运行 "
terraform plan
生成 Terraform 执行计划,以预览建议的操作。terraform plan
-
运行 "
terraform apply
,创建计划中定义的资源。terraform apply
-
在控制台中为服务 ID 添加标签
要为服务ID添加标签,请完成以下步骤:
- 选择附加访问管理标签或用户标签。
- 如果要附加访问管理标签,必须先创建标签。 更多信息,请参阅 创建标记。
- 如果要附加用户标签,无需创建用户标签即可将其附加到资源或服务 ID 上。 附加标签也会创建标签。
- 转到管理>访问 (IAM)>服务 ID。
- 选择您要标记的服务ID。
- 单击添加标签
。
- 输入标签名称,然后按 Enter。
- 单击保存。
标记服务 ID 后,所有拥有访问管理标记范围内资源的策略都会包含对该服务 ID 的访问。
使用 CLI 为服务 ID 添加标记
The allowed values for the tag_type
query parameter are: user
for user tags and access
for access management tags. 下面的示例显示了如何将名为 project:myproject 的访问管理标记附加到服务 ID 上。 要为服务ID添加标签,请完成以下步骤:
-
选择附加访问管理标签或用户标签。
- 如果要附加访问管理标签,必须先创建标签。 更多信息,请参阅 创建标记。
- 如果要附加用户标签,无需创建用户标签即可将其附加到资源或服务 ID 上。 附加标签也会创建标签。
-
要将标签附加到服务 ID 上,请使用 "
tag-attach
命令。 有关详细信息,请参阅 CLI 命令参考。ibmcloud resource tag-attach --tag-names project:myproject --resource-name 'ServiceIdName' --tag-type access
标记服务 ID 后,所有拥有访问管理标记范围内资源的策略都会包含对该服务 ID 的访问。
使用 API 为服务 ID 添加标签
要为服务ID添加标签,请完成以下步骤:
-
选择附加访问管理标签或用户标签。
- 如果要附加访问管理标签,必须先创建标签。 更多信息,请参阅 创建标记。
- 如果要附加用户标签,无需创建用户标签即可将其附加到资源或服务 ID 上。 附加标签也会创建标签。
-
使用以下命令调用 IAM 身份管理服务,查找服务 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))
-
从响应中提取 "
crn
字段的值。{ "offset": 0, "limit": 1, "first": { "href": "https://iam.cloud.ibm.com/v1/serviceids?account_id=accountId" }, "next": { "href": "https://iam.cloud.ibm.com/v1/serviceids?pagetoken=pageToken" }, "serviceids": { "id": "ServiceId-ee1103f8-e03b-4d02-a977-e540ebdffb16", "iam_id": "iam-ServiceId-ee1103f8-e03b-4d02-a977-e540ebdffb16", "entity_tag": "3-c46d2fd21b701adf7eb67cfd1a498fde", "crn": "crn:v1:bluemix:public:iam-identity::a/100abcde100a41abc100aza678abc0zz::serviceid:ServiceId-ee1103f8-e03b-4d02-a977-e540ebdffb16", "locked": false, "created_at": "2020-10-16T10:36+0000", "modified_at": "2020-10-16T10:36+0000", "account_id": "100abcde100a41abc100aza678abc0zz", "name": "serviceId-test", "description": "serviceId-test", "unique_instance_crns": [] } }
-
要将标记附加到服务 ID 上,请使用以下命令调用 全局搜索和标记 - 标记 API。
用您在上一步中提取的值替换
{SERVICEID_CRN}
。用您在上一步中提取的值替换
(serviceidCRN)
。用您在上一步中提取的值替换
serviceidCrn
。用您在上一步中提取的值替换
serviceid_crn
。用您在上一步中提取的值替换
&serviceidCRN
。curl -X POST --header "Authorization: Bearer {iam_token}" --header "Accept: application/json" --header "Content-Type: application/json" -d '{ "resources": [{ "resource_id": "{SERVICEID_CRN}" }], "tag_names": ["tag_test_1", "tag_test_2"] }' "{base_url}/v3/tags/attach?tag_type=user"
Resource resourceModel = new Resource.Builder().resourceId(serviceidCRN).build(); AttachTagOptions attachTagOptions = new AttachTagOptions.Builder() .addResources(resourceModel) .addTagNames("tag_test_1") .addTagNames("tag_test_2") .build(); Response<TagResults> response = service.attachTag(attachTagOptions).execute(); TagResults tagResults = response.getResult(); System.out.println(tagResults.toString());
const resourceModel = { resource_id: serviceidCrn, }; const params = { resources: [resourceModel], tagNames: ["tag_test_1", "tag_test_2"], tagType: 'user', }; globalTaggingService.attachTag(params) .then(res => { console.log(JSON.stringify(res.result, null, 2)); }) .catch(err => { console.warn(err) });
resource_model = {'resource_id': serviceid_crn} tag_results = global_tagging_service.attach_tag( resources=[resource_model], tag_names=['tag_test_1', 'tag_test_2'], tag_type='user').get_result() print(json.dumps(tag_results, indent=2))
resourceModel := &globaltaggingv1.Resource{ ResourceID: &serviceidCRN, } attachTagOptions := globalTaggingService.NewAttachTagOptions( []globaltaggingv1.Resource{*resourceModel}, ) attachTagOptions.SetTagNames([]string{"tag_test_1", "tag_test_2"}) attachTagOptions.SetTagType("user") tagResults, response, err := globalTaggingService.AttachTag(attachTagOptions) if err != nil { panic(err) } b, _ := json.MarshalIndent(tagResults, "", " ") fmt.Println(string(b))
标记服务 ID 后,所有拥有访问管理标记范围内资源的策略都会包含对该服务 ID 的访问。
在控制台中删除服务 ID 上的标记
要从服务ID中分离标签,请完成以下步骤:
- 转到管理>访问 (IAM)>服务 ID。
- 点击标签栏中的“编辑图标”
。
- 单击要从服务 ID 中分离的标签上的移除图标
。
- 单击保存。
从服务 ID 中分离访问管理标记时,任何作用域为该标记的策略都不再包括对服务 ID 的访问。
使用 CLI 删除服务 ID 上的标记
要卸下服务 ID 上的标签,请使用 "tag-detach
命令。 有关详细信息,请参阅 CLI 命令参考。
ibmcloud resource tag-detach --tag-names project:myproject --resource-id 'ServiceIdName' --tag-type access
从服务 ID 中分离访问管理标记后,该标记作用域内的任何策略都不再包括对服务 ID 的访问。
使用应用程序接口分离服务 ID 上的标记
要从服务ID中分离标签,请完成以下步骤:
-
使用以下命令调用 IAM 身份管理服务,查找服务 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))
-
从响应中提取 "
crn
字段的值。{ "offset": 0, "limit": 1, "first": { "href": "https://iam.cloud.ibm.com/v1/serviceids?account_id=accountId" }, "next": { "href": "https://iam.cloud.ibm.com/v1/serviceids?pagetoken=pageToken" }, "serviceids": { "id": "ServiceId-ee1103f8-e03b-4d02-a977-e540ebdffb16", "iam_id": "iam-ServiceId-ee1103f8-e03b-4d02-a977-e540ebdffb16", "entity_tag": "3-c46d2fd21b701adf7eb67cfd1a498fde", "crn": "crn:v1:bluemix:public:iam-identity::a/100abcde100a41abc100aza678abc0zz::serviceid:ServiceId-ee1103f8-e03b-4d02-a977-e540ebdffb16", "locked": false, "created_at": "2020-10-16T10:36+0000", "modified_at": "2020-10-16T10:36+0000", "account_id": "100abcde100a41abc100aza678abc0zz", "name": "serviceId-test", "description": "serviceId-test", "unique_instance_crns": [] } }
-
要卸下服务 ID 上的标记,请使用以下命令调用 全局搜索和标记 - 标记 API。
用您在上一步中提取的值替换
{SERVICEID_CRN}
。用您在上一步中提取的值替换
(serviceidCRN)
。用您在上一步中提取的值替换
serviceidCrn
。用您在上一步中提取的值替换
serviceid_crn
。用您在上一步中提取的值替换
&serviceidCRN
。curl -X POST --header "Authorization: Bearer {iam_token}" --header "Accept: application/json" --header "Content-Type: application/json" -d '{ "resources": [{ "resource_id": "{SERVICEID_CRN}" }], "tag_names": ["tag_test_1", "tag_test_2"] }' "{base_url}/v3/tags/detach?tag_type=user"
Resource resourceModel = new Resource.Builder().resourceId(serviceidCRN).build(); DetachTagOptions detachTagOptions = new DetachTagOptions.Builder() .addResources(resourceModel) .addTagNames("tag_test_1") .addTagNames("tag_test_2") .tagType("user") .build(); Response<TagResults> response = service.detachTag(detachTagOptions).execute(); TagResults tagResults = response.getResult(); System.out.println(tagResults.toString());
const resourceModel = { resource_id: serviceidCrn, }; const params = { resources: [resourceModel], tagNames: ["tag_test_1", "tag_test_2"], tagType: 'user', }; globalTaggingService.detachTag(params) .then(res => { console.log(JSON.stringify(res.result, null, 2)); }) .catch(err => { console.warn(err) });
resource_model = {'resource_id': serviceid_crn} tag_results = global_tagging_service.detach_tag( resources=[resource_model], tag_names=['tag_test_1', 'tag_test_2'], tag_type='user').get_result() print(json.dumps(tag_results, indent=2))
resourceModel := &globaltaggingv1.Resource{ ResourceID: &serviceidCRN, } detachTagOptions := globalTaggingService.NewDetachTagOptions( []globaltaggingv1.Resource{*resourceModel}, ) detachTagOptions.SetTagNames([]string{"tag_test_1", "tag_test_2"}) detachTagOptions.SetTagType("user") tagResults, response, err := globalTaggingService.DetachTag(detachTagOptions) if err != nil { panic(err) } b, _ := json.MarshalIndent(tagResults, "", " ") fmt.Println(string(b))
从服务 ID 中分离访问管理标记时,任何作用域为该标记的策略都不再包括对服务 ID 的访问。
删除账户中未使用的标记
在删除标签前,必须先将其从所有资源和服务ID中移除。 如果您仍然无法删除它,则可能是因为该标签附加在您无权查看的资源上,或者该资源已被回收。 同一账单账户中的不同用户可以为多个资源和服务ID添加相同的标签。
如果回收的资源阻止了标记的删除,可以完全删除该回收的资源,或者在删除后 7 天内恢复该资源。 并非所有资源都能恢复。 您可以使用IBM Cloud®CLI 管理特定资源的回收过程。CLI 来管理特定资源的回收流程。 更多信息,请参阅 使用资源重新分配。
从账户中删除访问管理标签时,任何相关的 IAM 策略也会随之删除。
在控制台中删除未使用的标记
- 要查看您帐户中的完整标签列表,请前往 IBM Cloud® 控制台中的管理 > 帐户,然后选择标签。
- 单击未使用标签旁边的操作图标
>删除。
使用 CLI 删除未使用的标记
登录 IBM Cloud®CLI 并选择您的账户,运行 "ibmcloud resource tag-delete
命令,只删除一个或全部未使用的标记。
-
下面的示例删除了 "
MyTag
用户标记:ibmcloud resource tag-delete --tag-name MyTag
使用应用程序接口删除未使用的标记
如以下请求示例所示,您可以通过调用 全局搜索和标记 - 标记 API来删除标记。 The allowed values for the tag_type
query parameter are: user
for user tags and access
for access management tags.
删除标记
从账户中删除名为 "project:myproject
的访问管理标记:
curl -X DELETE -H "Authorization: {iam_token}" \
-H "Accept: application/json" \
"https://tags.global-search-tagging.cloud.ibm.com/v3/tags/project:myproject?tag_type=access"
DeleteTagOptions deleteTagOptions = new DeleteTagOptions.Builder()
.tagName("env:example-access-tag")
.tagType("access")
.build();
Response<DeleteTagResults> response = service.deleteTag(deleteTagOptions).execute();
DeleteTagResults deleteTagResults = response.getResult();
System.out.println(deleteTagResults.toString());
const params = {
tagName: 'env:example-access-tag',
tagType: 'access',
};
globalTaggingService.deleteTag(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
delete_tag_results = global_tagging_service.delete_tag(
tag_name='env:example-access-tag',
tag_type='access').get_result()
print(json.dumps(delete_tag_results, indent=2))
deleteTagOptions := globalTaggingService.NewDeleteTagOptions("env:example-access-tag")
deleteTagOptions.SetTagType("access")
deleteTagResults, response, err := globalTaggingService.DeleteTag(deleteTagOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(deleteTagResults, "", " ")
fmt.Println(string(b))
删除所有未使用的标记
删除账户中所有未使用的访问管理标记:
curl -X DELETE -H "Authorization: {iam_token}" \
-H "Accept: application/json" \
"https://tags.global-search-tagging.cloud.ibm.com//v3/tags?tag_type=access"
DeleteTagAllOptions deleteTagAllOptions = new DeleteTagAllOptions.Builder()
.tagType("user")
.build();
Response<DeleteTagsResult> response = service.deleteTagAll(deleteTagAllOptions).execute();
DeleteTagsResult deleteTagsResult = response.getResult();
System.out.println(deleteTagsResult.toString());
const params = {
tagType: 'access',
};
globalTaggingService.deleteTagAll(params)
.then(res => {
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
delete_tags_result = global_tagging_service.delete_tag_all(
tag_type='user').get_result()
print(json.dumps(delete_tags_result, indent=2))
deleteTagAllOptions := globalTaggingService.NewDeleteTagAllOptions()
deleteTagAllOptions.SetTagType("user")
deleteTagsResult, response, err := globalTaggingService.DeleteTagAll(deleteTagAllOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(deleteTagsResult, "", " ")
fmt.Println(string(b))