Gerenciando Identificações

É possível anexar e desanexar tags em um recurso ou ID de serviço por meio do console, da CLI ou da API. Para anexar ou desanexar uma tag em um recurso ou ID de serviço, os usuários devem receber a permissão apropriada. Para obter mais informações, veja Concedendo aos usuários acesso a recursos de tag.

Um recurso pode ter no máximo 1.000 tags de usuário, 1.000 tags de serviço e 250 tags de acesso.

Anexando e removendo tags em um recurso no console

  1. No console IBM Cloud®, clique no ícone do menu de navegação ícone do menu de navegação > Resource list para visualizar a lista de recursos.

  2. Localize o recurso específico na lista.

  3. Para anexar uma tag ao recurso, clique no ícone Ações Ícone de Ações > Incluir tags.

  4. Insira o nome da tag e clique em Salvar.

  5. Para desanexar a tag do recurso, clique no ícone Editar Editar ícone ao lado da tag na sua lista de recursos.

    Ao remover uma tag de gerenciamento de acesso de um recurso, todas as políticas de acesso associadas também são removidas desse recurso.

Anexando tags a um recurso usando a CLI

Efetue login na CLI do IBM Cloud® e selecione sua conta para executar o comando apropriado da CLI.

Para anexar uma tag a um recurso, use o comando ibmcloud resource tag-attach. Os valores permitidos para tag-type são user para tags de usuário e access para tags de gerenciamento de acesso. O valor padrão é user. O exemplo a seguir mostra como anexar uma tag de usuário chamada MyTag a um recurso chamado MyResource:

ibmcloud resource tag-attach --tag-names MyTag --resource-name  'MyResource'

Um exemplo para anexar uma tag de gerenciamento de acesso chamada project:myproject a um recurso denominado MyResource:

ibmcloud resource tag-attach --tag-names project:myproject --resource-name  'MyResource' --tag-type access

Atualização das tags key:value de um recurso usando a CLI

Efetue login na CLI do IBM Cloud® e selecione sua conta para executar o comando apropriado da CLI.

Se você gerenciar as tags no formato ' key:value, poderá atualizar o ' value atomicamente, sem primeiro desanexar o ' key:old-value e anexar o novo ' key:new-value.

Para atualizar o valor de uma tag no formato ' key:value, use o comando ' ibmcloud resource tag-attach com a opção ' --update. Os valores permitidos para tag-type são user para tags de usuário e access para tags de gerenciamento de acesso. O valor padrão é user. O exemplo a seguir mostra como atualizar para " production o valor da tag de usuário " env em um recurso chamado " MyResource:

ibmcloud resource tag-attach --tag-names 'env:production' --resource-name 'MyResource' --update

Adicione a opção " tag-type ao comando anterior para atualizar uma tag de gerenciamento de acesso:

ibmcloud resource tag-attach --tag-names 'env:production' --resource-name 'MyResource' --update --tag-type access

Substituição de todas as tags de um recurso por um novo conjunto de tags usando a CLI

Efetue login na CLI do IBM Cloud® e selecione sua conta para executar o comando apropriado da CLI.

A operação attach resulta na adição de tags a um recurso, além do que ele já pode ter. Há casos em que você precisa substituir as tags existentes que estão anexadas a um recurso por um novo conjunto.

Para substituir todas as tags do recurso por um novo conjunto de tags, use o comando ' ibmcloud resource tag-attach com a opção ' --replace. Os valores permitidos para tag-type são user para tags de usuário e access para tags de gerenciamento de acesso. O valor padrão é user. O exemplo a seguir mostra como definir as tags ' tag1, ' tag2 e ' tag3 em um recurso chamado ' MyResource e remover todas as tags que ele já possa ter:

ibmcloud resource tag-attach --tag-names 'tag1,tag2,tag3' --resource-name 'MyResource' --replace

Adicione a opção " tag-type ao comando anterior para definir as tags de gerenciamento de acesso. Por exemplo, para substituir todas as tags de gerenciamento de acesso pelo ' compliance:hipaa:

ibmcloud resource tag-attach --tag-names 'compliance:hipaa' --resource-name 'MyResource' --replace --tag-type access

Removendo tags de um recurso usando a CLI

Para remover uma tag de um recurso, use o comando ibmcloud resource tag-detach. Veja a seguir um exemplo de desvinculação de uma tag de usuário chamada MyTag de um recurso chamado MyResource:

ibmcloud resource tag-detach --tag-names MyTag —resource-name 'MyResource'

Você pode usar o curinga ' * para desanexar tags, o que é útil para desanexar tags no formato ' key:value e para desanexar todas as tags. Por exemplo, se você quiser desanexar a tag ' env de ' MyResource, independentemente de seu valor, poderá executar o seguinte comando:

ibmcloud resource tag-detach --tag-names 'env:*' —resource-name 'MyResource'

Para desanexar todas as tags de ' MyResource, você pode usar o seguinte comando:

ibmcloud resource tag-detach --tag-names '*' —resource-name 'MyResource'

Veja a seguir um exemplo de desvinculação de uma tag de gerenciamento de acesso chamada project:myproject de um recurso chamado MyResource:

ibmcloud resource tag-detach --tag-names project:myproject —resource-name 'MyResource' --tag-type access

Para obter mais informações, consulte a referência de comando do ibmcloud resource. Ao remover uma tag de gerenciamento de acesso de um recurso, todas as políticas de acesso associadas também são removidas desse recurso.

Anexando tags a um recurso usando a API

Você pode anexar tags de forma programática chamando a API Global Search and Tagging - Tagging, conforme mostrado nas solicitações de exemplo a seguir. Os valores permitidos para o parâmetro de consulta tag_type são: user para tags de usuário e access para tags de gerenciamento de acesso. O exemplo a seguir mostra como anexar uma tag de gerenciamento de acesso chamada project:myproject a uma instância de serviço.

  1. Localize o identificador exclusivo para seu recurso chamando o comando a seguir:

    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))
    
  2. Extraia o valor do campo CRN da resposta.

       {
       "items": [
         {
           "crn": "crn:v1:bluemix:public:cf:au-syd:a/000af2ea12345aabb1234567801fffab::cf-organization:aaaf4100-0011-2233-1111-11aaffee0011"
         }
       ],
       "limit": 1,
       "search_cursor": "e34535305339jg0rntt39nt3nu5tt9yn3u5ntt329nutt92u4ntt92u4t9u5gt2u5gt92u4n5g982458hg2t45hg9u42rg9t2u49gh285ght28h5t2835th85ht318h4tg9138h4tg91u3hgt931hg45918h34tg18h43hgt31hgt3rng0fnefvodnfvpojdpbojarfdbpojeafrbeafbjeqpnrqngrpqgrhbHNlIiwiY2FuVGFnIjoiZmFsc2UiLCJsdfshfksdhfkshfdkshfdkhkhewrkfehrkhkwhfkwrhkfhrgk3h5k3h45k3hk45hgk3hgk3hfk3h4k3hfkrfh3rkgh3krghk3rgh3kghk3hgk3hgk3rhgdWJsaWM6Y2Y6YXUtwriretoeiroteito4i5ot4i5oyti45ito4tio45ito45io5ogno5iogn5oin5oingoi5o5ngogo4ngo4ngro3jrong3gor3g3gno3jrgo3jrngo3ngro3g32ODQiXX0t"
     }
    
  3. Chame o seguinte comando:

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

Atualização das tags chave:valor de um recurso

Se você gerenciar tags no formato ' key:value, poderá atualizar o valor atomicamente, sem primeiro desanexar o ' key:old-value e anexar o novo ' key:new-value. Para isso, use o parâmetro de consulta booleano ' update. Portanto, para atualizar a tag " env em um recurso para o valor " env:qa_test, basta adicionar o parâmetro de consulta " update=true à sua chamada à API attach. Consulte Pesquisa global e marcação - API de marcação para obter mais informações sobre como usar o parâmetro de consulta " update.

Substituição de todas as tags de um recurso por um novo conjunto de tags

A operação attach resulta na adição de tags a um recurso, além do que ele já pode ter. Há casos em que você precisa substituir as tags existentes que estão anexadas a um recurso por um novo conjunto. Para isso, use o parâmetro de consulta booleano ' replace. Portanto, para substituir todas as tags em um recurso por um novo conjunto de tags, basta adicionar o parâmetro de consulta ' replace=true à sua chamada à API attach. Consulte Pesquisa global e marcação - API de marcação para obter mais informações sobre como usar o parâmetro de consulta " replace.

Removendo tags de um recurso usando a API

Você pode desanexar tags de forma programática chamando a API Global Search and Tagging - Tagging, conforme mostrado nas solicitações de exemplo a seguir. Os valores permitidos para o parâmetro de consulta tag_type são: user para tags de usuário e access para tags de gerenciamento de acesso. O exemplo a seguir mostra como desanexar uma tag de gerenciamento de acesso chamada project:myproject de uma instância de serviço:

  1. Localize o identificador exclusivo para seu recurso chamando o comando a seguir:

    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))
    
  2. Extraia o valor do campo CRN da resposta.

       {
       "items": [
         {
           "crn": "crn:v1:bluemix:public:cf:au-syd:a/000af2ea12345aabb1234567801fffab::cf-organization:aaaf4100-0011-2233-1111-11aaffee0011"
         }
       ],
       "limit": 1,
       "search_cursor": "e34535305339jg0rntt39nt3nu5tt9yn3u5ntt329nutt92u4ntt92u4t9u5gt2u5gt92u4n5g982458hg2t45hg9u42rg9t2u49gh285ght28h5t2835th85ht318h4tg9138h4tg91u3hgt931hg45918h34tg18h43hgt31hgt3rng0fnefvodnfvpojdpbojarfdbpojeafrbeafbjeqpnrqngrpqgrhbHNlIiwiY2FuVGFnIjoiZmFsc2UiLCJsdfshfksdhfkshfdkshfdkhkhewrkfehrkhkwhfkwrhkfhrgk3h5k3h45k3hk45hgk3hgk3hfk3h4k3hfkrfh3rkgh3krghk3rgh3kghk3hgk3hgk3rhgdWJsaWM6Y2Y6YXUtwriretoeiroteito4i5ot4i5oyti45ito4tio45ito45io5ogno5iogn5oin5oingoi5o5ngogo4ngo4ngro3jrong3gor3g3gno3jrgo3jrngo3ngro3g32ODQiXX0t"
     }
    
  3. Chame o seguinte comando:

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

    Ao remover uma tag de gerenciamento de acesso de um recurso, todas as políticas de acesso associadas também são removidas desse recurso.

Remoção de todas as tags e remoção de tags por chave

Você pode usar o curinga ' * para desanexar tags, o que é útil para desanexar tags no formato ' key:value e para desanexar todas as tags. Por exemplo, se você quiser desanexar a tag ' env de um determinado recurso, independentemente de seu valor, poderá executar o seguinte comando:

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"

Se você quiser desanexar todas as tags, basta usar o ' * como tag_name ou como elemento exclusivo na matriz ' tag_names, como no comando a seguir:

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"

Anexando tags a um recurso usando o Terraform

Antes de anexar tags a um recurso usando o Terraform, verifique se você concluiu o seguinte:

  • Instale a CLI do Terraform e configure o IBM Cloud Plug-in do provedor para o Terraform. Para obter mais informações, consulte o tutorial de Introdução ao Terraform em IBM Cloud®. O plug-in abstrai as APIs do IBM Cloud que são usadas para concluir esta tarefa.

  • Crie um arquivo de configuração do Terraform que seja denominado main.tf. Nesse arquivo, você define os recursos usando a HashiCorp Configuration Language. Para obter mais informações, consulte a documentação do Terraform.

Use as etapas a seguir para anexar tags a um recurso usando o Terraform:

  1. Prepare seu arquivo de configuração do Terraform (por exemplo, main.tf) para anexar uma tag de usuário a um recurso existente em nossa conta, seguindo o exemplo documentado em ibm_resource_tag ' {: external}.

  2. Depois de concluir a criação do arquivo de configuração, inicialize a CLI do Terraform. Para obter mais informações, consulte Inicialização de diretórios de trabalho.

    terraform init
    
  3. Provisione os recursos do arquivo " main.tf. Para obter mais informações, consulte Provisionamento de infraestrutura com o Terraform.

    1. Execute " terraform plan para gerar um plano de execução do Terraform para visualizar as ações propostas.

      terraform plan
      
    2. Execute " terraform apply para criar os recursos definidos no plano.

      terraform apply
      

Anexar tags a um ID de serviço no console

Para adicionar uma tag a um ID de serviço, conclua as etapas a seguir:

  1. Escolha anexar uma tag de gerenciamento de acesso ou uma tag de usuário.
    • Se quiser anexar uma tag de gerenciamento de acesso, você deve primeiro criar a tag. Para obter mais informações, consulte Criação de tags.
    • Se quiser anexar uma tag de usuário, não é necessário criar a tag de usuário para anexá-la a recursos ou IDs de serviço. A fixação da etiqueta também a cria.
  2. Vá para Gerenciar > Acesso (IAM) > IDs de serviço.
  3. Selecione o ID do serviço que você deseja marcar.
  4. Clique em Add tag Edit icon.
  5. Digite o nome da tag e pressione Enter.
  6. Clique em Salvar.

Quando você marca uma ID de serviço, todas as políticas que têm recursos com escopo da sua tag de gerenciamento de acesso incluem acesso a essa ID de serviço.

Anexar tags a um ID de serviço usando a CLI

Os valores permitidos para o parâmetro de consulta tag_type são: user para tags de usuário e access para tags de gerenciamento de acesso. O exemplo a seguir mostra como anexar uma tag de gerenciamento de acesso chamada project:myproject a um ID de serviço. Para adicionar uma tag a um ID de serviço, conclua as etapas a seguir:

  1. Escolha anexar uma tag de gerenciamento de acesso ou uma tag de usuário.

    • Se quiser anexar uma tag de gerenciamento de acesso, você deve primeiro criar a tag. Para obter mais informações, consulte Criação de tags.
    • Se quiser anexar uma tag de usuário, não é necessário criar a tag de usuário para anexá-la a recursos ou IDs de serviço. A fixação da etiqueta também a cria.
  2. Para anexar a tag à sua ID de serviço, use o comando ' tag-attach. Para obter mais informações, consulte a referência de comandos da CLI.

    ibmcloud resource tag-attach --tag-names project:myproject --resource-name 'ServiceIdName' --tag-type access
    

Quando você marca uma ID de serviço, todas as políticas que têm recursos com escopo da sua tag de gerenciamento de acesso incluem acesso a essa ID de serviço.

Anexar tags a um ID de serviço usando a API

Para adicionar uma tag a um ID de serviço, conclua as etapas a seguir:

  1. Escolha anexar uma tag de gerenciamento de acesso ou uma tag de usuário.

    • Se quiser anexar uma tag de gerenciamento de acesso, você deve primeiro criar a tag. Para obter mais informações, consulte Criação de tags.
    • Se quiser anexar uma tag de usuário, não é necessário criar a tag de usuário para anexá-la a recursos ou IDs de serviço. A fixação da etiqueta também a cria.
  2. Encontre o identificador exclusivo do seu ID de serviço chamando o IAM Identity Services com o seguinte comando:

    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))
    
  3. Extraia o valor do campo crn da resposta.

       {
    "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": []
    }
    }
    
  4. Para anexar a tag ao seu ID de serviço, chame a API Global Search and Tagging - Tagging com o seguinte comando.

    Substitua {SERVICEID_CRN} pelo valor que você extraiu na etapa anterior.

    Substitua (serviceidCRN) pelo valor que você extraiu na etapa anterior.

    Substitua serviceidCrn pelo valor que você extraiu na etapa anterior.

    Substitua serviceid_crn pelo valor que você extraiu na etapa anterior.

    Substitua &serviceidCRN pelo valor que você extraiu na etapa anterior.

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

Quando você marca uma ID de serviço, todas as políticas que têm recursos com escopo da sua tag de gerenciamento de acesso incluem acesso a essa ID de serviço.

Desvinculação de tags em um ID de serviço no console

Para remover uma tag de uma ID de serviço, conclua as etapas a seguir:

  1. Vá para Gerenciar > Acesso (IAM) > IDs de serviço.
  2. Clique no ícone " Editar e " Editar o ícone na coluna Tags.
  3. Clique no ícone ' Remover ' Remover o ícone na tag que você deseja desvincular da ID do serviço.
  4. Clique em Salvar.

Quando você desvincula uma tag de gerenciamento de acesso de um ID de serviço, todas as políticas com escopo para essa tag não incluem mais o acesso ao ID de serviço.

Quando você desvincula uma tag de usuário, ela é automaticamente excluída da conta se não estiver mais vinculada a nenhum recurso.

Desvinculação de tags em uma ID de serviço usando a CLI

Para remover uma tag em sua ID de serviço, use o comando ' tag-detach. Para obter mais informações, consulte a referência de comandos da CLI.

ibmcloud resource tag-detach --tag-names project:myproject --resource-id  'ServiceIdName' --tag-type access

Quando você desvincula uma tag de gerenciamento de acesso de uma ID de serviço, todas as políticas com escopo dessa tag não incluem mais o acesso à ID de serviço.

Desvinculação de tags em um ID de serviço usando a API

Para remover uma tag de uma ID de serviço, conclua as etapas a seguir:

  1. Encontre o identificador exclusivo do seu ID de serviço chamando o IAM Identity Services com o seguinte comando:

    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))
    
  2. Extraia o valor do campo crn da resposta.

       {
    "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": []
    }
    }
    
  3. Para desanexar a tag em seu ID de serviço, chame a API Global Search and Tagging - Tagging com o seguinte comando.

    Substitua {SERVICEID_CRN} pelo valor que você extraiu na etapa anterior.

    Substitua (serviceidCRN) pelo valor que você extraiu na etapa anterior.

    Substitua serviceidCrn pelo valor que você extraiu na etapa anterior.

    Substitua serviceid_crn pelo valor que você extraiu na etapa anterior.

    Substitua &serviceidCRN pelo valor que você extraiu na etapa anterior.

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

Quando você desvincula uma tag de gerenciamento de acesso de um ID de serviço, todas as políticas com escopo para essa tag não incluem mais o acesso ao ID de serviço.

Excluindo tags não usadas da conta

user são excluídas automaticamente quando não estão mais associadas a nenhum recurso, portanto, não é necessário fazer isso manualmente. No entanto, você deve fazer isso para as tags access management.

Antes de excluir uma tag, você deve removê-la de todos os recursos e IDs de serviço. Se ainda não for possível excluir a tag, ela poderá estar anexada a um recurso que você não tem permissão para visualizar ou que foi recuperado. A mesma tag pode ser anexada a vários recursos e IDs de serviço por diferentes usuários na mesma conta de faturamento.

Se um recurso recuperado estiver bloqueando a exclusão da tag, será possível excluí-lo completamente ou restaurá-lo no prazo de sete dias após a exclusão. Nem todos os recursos podem ser restaurados. É possível usar a CLI do IBM Cloud® para gerenciar o processo de recuperação de recursos específicos. Para obter mais informações, consulte Usando as recuperações de recurso.

Ao excluir uma tag de gerenciamento de acesso da conta, todas as políticas associadas do IAM também são excluídas com ela.

Excluindo tags não usadas no console

  1. Para ver a lista completa de tags em sua conta, acesse Gerenciar > Conta no console da IBM Cloud® e selecione Tags.
  2. Clique no ícone Ações Ícone de Ações > Excluir ao lado da tag não utilizada.

Excluindo tags não usadas com a CLI

Efetue login na CLI da IBM Cloud® e selecione sua conta para executar o comando ibmcloud resource tag-delete para exclusão apenas de uma ou todas as tags não usadas.

  • O exemplo a seguir exclui a tag de usuário MyTag:

    ibmcloud resource tag-delete --tag-name MyTag
    

Excluindo tags não usadas com a API

Você pode excluir tags chamando a API Global Search and Tagging - Tagging, conforme mostrado nas solicitações de exemplo a seguir. Os valores permitidos para o parâmetro de consulta tag_type são: user para tags de usuário e access para tags de gerenciamento de acesso.

Excluindo uma tag

Excluindo uma tag de gerenciamento de acesso chamada project:myproject da conta:

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

Excluindo todas as tags não usadas

Excluindo todas as tags de gerenciamento de acesso não usadas da conta:

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