タグの管理

コンソール、CLI、またはAPIを使用して、リソースまたはサービスIDにタグをアタッチしたりデタッチしたりできます。 リソースIDやサービスIDにタグを付けたり外したりするには、ユーザーに適切な権限が割り当てられている必要があります。 詳しくは、『リソースにタグ付けする権限をユーザーに付与する』を参照してください。

リソースは最大1000のユーザータグ、1000のサービスタグ、250のアクセスタグを持つことができます。

コンソールでのリソースに対するタグの付加と取り外し

  1. IBM Cloud® コンソールから、Navigation Menu アイコン Navigation Menu アイコン > Resource list をクリックして、リソースのリストを表示します。

  2. リストで特定のリソースを見つけます。

  3. リソースにタグを付けるには、アクション・アイコンアクション・アイコン > タグの追加をクリックします。

  4. タグの名前を入力し、**「保存」**をクリックします。

  5. リソースからタグを切り離すには、リソース・リスト内のタグの横にある編集アイコン編集アイコンをクリックします。

    リソースからアクセス管理タグを外すと、関連付けられているアクセス・ポリシーもそのリソースから外れます。

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 形式のタグの値を更新するには、'ibmcloud resource tag-attach コマンドに '--update オプションを付ける。 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 コマンドを実行します。

アタッチ操作は、リソースがすでに持っているタグに加えて、そのリソースにタグを追加することになる。 リソースに付けられている既存のタグを、新しいセットで置き換える必要がある場合があります。

すべてのリソースのタグを新しいタグセットに置き換えるには、「ibmcloud resource tag-attach コマンドに「--replace オプションをつけます。 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 コマンドを使用します。 以下は、 MyResource というリソースから MyTag というユーザータグを切り離す例です:

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'

以下は、 MyResource というリソースから、 project:myproject というアクセス管理タグを切り離す例です:

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

詳しくは、ibmcloud resource コマンドのリファレンスを参照してください。 リソースからアクセス管理タグを外すと、関連付けられているアクセス・ポリシーもそのリソースから外れます。

API を使用したリソースへのタグの付加

以下のサンプル・リクエストに示すように、 Global Search and Tagging - Tagging APIを呼び出すことで、プログラムでタグを付けることができます。 tag_type 照会パラメーターの有効値は、ユーザー・タグの場合は user、アクセス管理タグの場合は access です。 次の例は、 project:myproject というアクセス管理タグをサービスインスタンスに付ける方法を示している。

  1. 以下のコマンドを呼び出して、リソースの固有 ID を見つけます。

    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. 応答から CRN フィールドの値を取り出します。

       {
       "items": [
         {
           "crn": "crn:v1:bluemix:public:cf:au-syd:a/000af2ea12345aabb1234567801fffab::cf-organization:aaaf4100-0011-2233-1111-11aaffee0011"
         }
       ],
       "limit": 1,
       "search_cursor": "e34535305339jg0rntt39nt3nu5tt9yn3u5ntt329nutt92u4ntt92u4t9u5gt2u5gt92u4n5g982458hg2t45hg9u42rg9t2u49gh285ght28h5t2835th85ht318h4tg9138h4tg91u3hgt931hg45918h34tg18h43hgt31hgt3rng0fnefvodnfvpojdpbojarfdbpojeafrbeafbjeqpnrqngrpqgrhbHNlIiwiY2FuVGFnIjoiZmFsc2UiLCJsdfshfksdhfkshfdkshfdkhkhewrkfehrkhkwhfkwrhkfhrgk3h5k3h45k3hk45hgk3hgk3hfk3h4k3hfkrfh3rkgh3krghk3rgh3kghk3hgk3hgk3rhgdWJsaWM6Y2Y6YXUtwriretoeiroteito4i5ot4i5oyti45ito4tio45ito45io5ogno5iogn5oin5oingoi5o5ngogo4ngo4ngro3jrong3gor3g3gno3jrgo3jrngo3ngro3g32ODQiXX0t"
     }
    
  3. 以下のコマンドを呼び出す:

    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 に更新するには、attach API 呼び出しに 'update=true クエリーパラメーターを追加するだけです。 update クエリパラメータの詳細については、グローバル検索とタグ付け - タグ付けAPIを参照してください。

リソースのすべてのタグを新しいタグセットに置き換える

アタッチ操作は、リソースがすでに持っているタグに加えて、そのリソースにタグを追加することになる。 リソースに付けられている既存のタグを、新しいセットで置き換える必要がある場合があります。 そのためには、「replace ブーリアン・クエリー・パラメーターを使用する。 リソースのすべてのタグを新しいタグセットに置き換えるには、attach API呼び出しに'replace=true クエリパラメータを追加すればよい。 replace クエリパラメータの詳細については、グローバル検索とタグ付け - タグ付けAPIを参照してください。

API を使用したリソースからのタグの取り外し

以下のサンプルリクエストに示すように、 Global Search and Tagging - Tagging APIを呼び出すことで、プログラムでタグを切り離すことができます。 tag_type 照会パラメーターの有効値は、ユーザー・タグの場合は user、アクセス管理タグの場合は access です。 次の例は、 project:myproject と呼ばれるアクセス管理タグをサービスインスタンスから切り離す方法を示している:

  1. 以下のコマンドを呼び出して、リソースの固有 ID を見つけます。

    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. 応答から CRN フィールドの値を取り出します。

       {
       "items": [
         {
           "crn": "crn:v1:bluemix:public:cf:au-syd:a/000af2ea12345aabb1234567801fffab::cf-organization:aaaf4100-0011-2233-1111-11aaffee0011"
         }
       ],
       "limit": 1,
       "search_cursor": "e34535305339jg0rntt39nt3nu5tt9yn3u5ntt329nutt92u4ntt92u4t9u5gt2u5gt92u4n5g982458hg2t45hg9u42rg9t2u49gh285ght28h5t2835th85ht318h4tg9138h4tg91u3hgt931hg45918h34tg18h43hgt31hgt3rng0fnefvodnfvpojdpbojarfdbpojeafrbeafbjeqpnrqngrpqgrhbHNlIiwiY2FuVGFnIjoiZmFsc2UiLCJsdfshfksdhfkshfdkshfdkhkhewrkfehrkhkwhfkwrhkfhrgk3h5k3h45k3hk45hgk3hgk3hfk3h4k3hfkrfh3rkgh3krghk3rgh3kghk3hgk3hgk3rhgdWJsaWM6Y2Y6YXUtwriretoeiroteito4i5ot4i5oyti45ito4tio45ito45io5ogno5iogn5oin5oingoi5o5ngogo4ngo4ngro3jrong3gor3g3gno3jrgo3jrngo3ngro3g32ODQiXX0t"
     }
    
  3. 以下のコマンドを呼び出す:

    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をインストールし、IBM Cloudを設定します。Terraform用のProviderプラグインをインストールします。 詳しくは IBM Cloud®のTerraformを始める のチュートリアルを参照。 このプラグインは、以下のタスクを実行するために使用される IBM Cloud API を抽象化します。

  • main.tfという名前の Terraform 構成ファイルを作成します。 このファイルでは、HashiCorpConfiguration Languageを使用してリソースを定義します。 詳しくは Terraformのドキュメントを参照。

以下の手順で、Terraformを使ってリソースにタグを付けます:

  1. ibm_resource_tag'{: external} で説明されている例に従って、Terraformの設定ファイル(例えばmain.tf)を用意し、アカウント内の既存のリソースにユーザータグをアタッチします。

  2. 設定ファイルのビルドが終わったら、Terraform CLIを初期化します。 詳しくは、作業ディレクトリの初期化を参照のこと。

    terraform init
    
  3. main.tf ファイルからリソースを供給する。 詳しくは Terraformによるインフラのプロビジョニングを参照してください。

    1. terraform plan 実行してTerraformの実行計画を生成し、提案されたアクションをプレビューする。

      terraform plan
      
    2. terraform apply を実行し、プランで定義されたリソースを作成する。

      terraform apply
      

コンソールでサービスIDにタグを付ける

サービスIDにタグを追加するには、以下の手順を実行します:

  1. アクセス管理タグまたはユーザータグの添付を選択します。
    • アクセス管理タグを付ける場合は、まずタグを作成する必要があります。 詳しくは、タグの作成 をご覧ください。
    • ユーザータグを添付したい場合、リソースやサービスIDに添付するためにユーザータグを作成する必要はありません。 タグを付けると、タグも作成される。
  2. 管理」 >「 アクセス(IAM) 」>「 サービスID 」に進む。
  3. タグを付けたいサービスIDを選択します。
  4. Add tag Edit アイコン をクリックする。
  5. タグの名前を入力し、Enterを押す。
  6. 保存 をクリックします。

サービスIDにタグを付けると、アクセス管理タグにスコープされたリソースを持つすべてのポリシーに、このサービスIDへのアクセスが含まれます。

CLIを使ってサービスIDにタグを付ける

tag_type 照会パラメーターの有効値は、ユーザー・タグの場合は user、アクセス管理タグの場合は access です。 次の例は、project:myprojectというアクセス管理タグをサービスIDに添付する方法を示しています。 サービスIDにタグを追加するには、以下の手順を実行します:

  1. アクセス管理タグまたはユーザータグの添付を選択します。

    • アクセス管理タグを付ける場合は、まずタグを作成する必要があります。 詳しくは、タグの作成 をご覧ください。
    • ユーザータグを添付したい場合、リソースやサービスIDに添付するためにユーザータグを作成する必要はありません。 タグを付けると、タグも作成される。
  2. タグをサービスIDに付けるには、「tag-attach コマンドを使用する。 詳細については、 CLIコマンド・リファレンスを 参照してください。

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

サービスIDにタグを付けると、アクセス管理タグにスコープされたリソースを持つすべてのポリシーに、このサービスIDへのアクセスが含まれます。

APIを使ってサービスIDにタグを付ける

サービスIDにタグを追加するには、以下の手順を実行します:

  1. アクセス管理タグまたはユーザータグの添付を選択します。

    • アクセス管理タグを付ける場合は、まずタグを作成する必要があります。 詳しくは、タグの作成 をご覧ください。
    • ユーザータグを添付したい場合、リソースやサービスIDに添付するためにユーザータグを作成する必要はありません。 タグを付けると、タグも作成される。
  2. 以下のコマンドで IAM Identity Services を呼び出して、サービス 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))
    
  3. レスポンスから 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": []
    }
    }
    
  4. サービスIDにタグを付けるには、以下のコマンドで Global Search and Tagging - Tagging 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からタグを取り外すには、以下の手順を実行します:

  1. 管理」 >「 アクセス(IAM) 」>「 サービスID 」に進む。
  2. 編集アイコンをクリックする タグ欄の編集アイコン。
  3. サービスIDから切り離したいタグの「削除アイコンの「アイコン」をクリックします。
  4. 保存 をクリックします。

サービスIDからアクセス管理タグを切り離すと、そのタグにスコープされているポリシーには、サービスIDへのアクセスが含まれなくなります。

ユーザータグを切り離すと、どのリソースにも付けられなくなった場合、自動的にアカウント削除されます。

CLIを使用してサービスIDのタグを切り離す

サービスIDのタグを切り離すには、「tag-detach コマンドを使用する。 詳細については、 CLIコマンド・リファレンスを 参照してください。

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

サービスIDからアクセス管理タグを切り離すと、そのタグがスコープされているポリシーは、そのサービスIDにアクセスしなくなります。

APIを使用してサービスIDのタグを切り離す

サービスIDからタグを取り外すには、以下の手順を実行します:

  1. 以下のコマンドで IAM Identity Services を呼び出して、サービス 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))
    
  2. レスポンスから 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": []
    }
    }
    
  3. サービスIDのタグを取り外すには、以下のコマンドで Global Search and Tagging - Tagging 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へのアクセスが含まれなくなります。

アカウントからの使用されていないタグの削除

user タグはリソースに関連付けられなくなると自動的に削除されるので、手動で削除する必要はありません。 ただし、 access management。

タグを削除する前に、すべてのリソースとサービスIDからタグを削除する必要があります。 それでも削除できない場合は、自分に表示権限がないリソースや再利用処理されたリソースにそのタグが付加されている可能性があります。 同じタグを、同じ課金アカウント内の異なるユーザーが、複数のリソースやサービスIDに付けることができる。

再利用処理されたリソースがタグの削除をブロックしている場合は、再利用処理されたそのリソースを完全に削除できます。あるいは、削除後 7日以内なら復元することも可能です。 すべてのリソースが復元可能とは限りません。 IBM Cloud® CLI を使用して、特定のリソースの再利用のプロセスを管理できます。 詳しくは、リソースの再利用の使用を参照してください。

アカウントからアクセス管理タグを削除すると、関連付けられている IAM ポリシーも一緒に削除されます。

コンソールでの使用されていないタグの削除

  1. アカウント内のすべてのタグのリストを表示するために、IBM Cloud® コンソールで**「管理」** > ** 「アカウント」と進み、「タグ」**を選択します。
  2. 未使用のタグの横にあるアクション・アイコンアクション・アイコン > 削除をクリックします。

CLI による使用されていないタグの削除

IBM Cloud® CLI にログインし、アカウントを選択して、ibmcloud resource tag-delete コマンドを実行します。使用されていない 1 つのタグまたはすべてのタグを削除できます。

  • MyTag ユーザー・タグを削除する例を以下に示します。

    ibmcloud resource tag-delete --tag-name MyTag
    

API による使用されていないタグの削除

タグの削除は、 グローバル検索とタグ付け - タグ付けAPIを呼び出すことで行えます。 tag_type 照会パラメーターの有効値は、ユーザー・タグの場合は user、アクセス管理タグの場合は access です。

タグの削除

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