[新機能] KMSでキーのタグづけがサポートされました

こんにちは、虎塚です。

2月のアップデートで、KMSのカスタマーマスターキーに対するタグづけがサポートされました。ユーザは、カスタマーマスターキーごとにAWS利用料を追跡できるようになりました。

タグを使って、必要な情報をタグりよせましょう。

概要

タグの付与対象

タグをつけられるのは、カスタマーマスターキー、つまりユーザが明示的に作成したキーだけです。AWS内部で生成したキーにも、ユーザがインポートしたキーにも、タグをつけることができます。

一方で、AWSが提供するmanagedなマスターキーには、タグをつけることができません。S3、EBS、RDS、Redshiftなどに格納するデータをサーバサイドで暗号化するために、各リージョンで最初からキーが提供されていて、削除できません。これらのキーには、タグをつけられません。

注意点

単一のカスタマーマスターキーに、同じKeyを持つタグを2つ付けることはできません。付けようとすると、元のタグが上書きされます。

料金や制限

タグ自体に料金はかかりません。また、タグ付与数の上限もないようです。

AWS CLIのKMSタグ関連コマンド

タグの一覧表示 (list-resource-tags)

カスタマーマスターキーを指定して、付与されているタグを一覧表示します。key-idオプションで指定できるのは、KeyIdまたは、キーのARNです。

aws kms list-resource-tags \
  --key-id <KEY_ID_OR_KEY_ARN> \
  --limit <value> \    #option
  --marker <value>    #option

limitオプションは、表示するタグの数を1〜50個に絞るとき、markerオプションは、タグの集合を途中から取得するときに使用します。

タグをつける (tag-resource)

カスタマーマスターキーを指定して、タグを付与します。または、すでに付与されたタグを上書きします。

aws kms tag-resource \
  --key-id <KEY_ID_OR_KEY_ARN> \
  --tags TagKey=string,TagValue=string

他のAWSサービスのタグと同じで、タグはKeyとValueからなります。Valueは空でも構いません。

タグを消す (untag-resource)

カスタマーマスターキーを指定して、特定のタグを削除します。

aws kms untag-resource \
  --key-id <KEY_ID_OR_KEY_ARN>
  --tag-keys  "tag-key1" "tag-key2"

tag-keysオプションの引数には、削除するタグのKeyを指定します。Valueを指定してはいけません。

実際に使ってみる

AWS CLIを使って、KMSのカスタマーマスターキーにタグをつけたり外したりする手順を紹介します。AWS CLIは、次のバージョンを使いました。

  • aws-cli/1.11.78 Python/2.7.10 Darwin/16.5.0 botocore/1.5.41

1. キーエイリアス一覧を取得する

リージョンに存在するキーのエイリアス一覧を取得します。

aws kms list-aliases | jq .
{
  "Aliases": [
    {
      "AliasArn": "arn:aws:kms:ap-northeast-1:123456789012:alias/aws/ebs",
      "AliasName": "alias/aws/ebs",
      "TargetKeyId": "11111111-aaaa-bbbb-cccc-222222222222"
    },
    {
      "AliasArn": "arn:aws:kms:ap-northeast-1:123456789012:alias/aws/rds",
      "AliasName": "alias/aws/rds",
      "TargetKeyId": "33333333-dddd-eeee-ffff-444444444444"
    },
[...]
    {
      "AliasArn": "arn:aws:kms:ap-northeast-1:123456789012:alias/test-kms",
      "AliasName": "alias/test-kms",
      "TargetKeyId": "55555555-0000-1111-2222-666666666666"
    }
  ]
}

AliasNameが"alias/aws/"ではじまるキーは、AWSのmanagedなマスターキーです。これらのキーにタグをつけることはできません。

上の実行例では、AliasName"alias/test-kms"のキーにだけ、タグをつけることができます。今回はこのカスタマーマスターキーに、タグをつけたり外したりします。KeyIdを控えておきます。

2. キーについているタグを確認する

キーに付与されているタグを一覧で表示します。

aws kms list-resource-tags \
  --key-id 55555555-0000-1111-2222-666666666666

実行結果の例を次に示します。

{
    "Truncated": false,
    "Tags": []
}

実行結果が上のような場合、対象のキーにはタグがついていません。

なお、指定したKeyIdを持つキーが存在しないときは、次のようなエラーが表示されます。

An error occurred (NotFoundException) when calling the ListResourceTags operation: Key 'arn:aws:kms:ap-northeast-1:123456789012:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' does not exist

3. キーにタグをつける

キーにタグをつけます。今回は、次のようなタグを付与します。

Key Value
CostCenter AWS-Dev
CreatedBy torazuka
Purpose Test
aws kms tag-resource \
  --key-id 55555555-0000-1111-2222-666666666666 \
  --tags TagKey=CostCenter,TagValue=AWS-Dev,TagKey=CreatedBy,TagValue=torazuka,TagKey=Purpose,TagValue=Test

キーにタグがついたことを確認します。

aws kms list-resource-tags \
  --key-id 55555555-0000-1111-2222-666666666666
{
  "Truncated": false,
  "Tags": [
    {
      "TagKey": "CostCenter",
      "TagValue": "AWS-Dev"
    },
    {
      "TagKey": "CreatedBy",
      "TagValue": "torazuka"
    },
    {
      "TagKey": "Purpose",
      "TagValue": "Test"
    }
  ]
}

ちなみに、誤ってAWS managedなキーを対象にタグをつけようとした場合、権限がなくて実行できないために、次のようなエラーになります。

An error occurred (AccessDeniedException) when calling the TagResource operation: User: arn:aws:iam::123456789012:user/IAM_USER_NAME is not authorized to perform: kms:TagResource on resource: arn:aws:kms:ap-northeast-1:123456789012:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4. タグを上書きする

キーにすでに付与されているタグを、別の値で上書きします。

先ほどと同じtag-resourceコマンドを使いますが、タグのKeyとValueをファイルに外出ししてみましょう。複数のタグが必要なときは、コマンドラインから指定するよりも、JSONファイルで管理したほうが便利です。

既存タグを上書きする内容を次に示します。

[
  {
    "TagKey": "CostCenter",
    "TagValue": "Busi"
  },
  {
    "TagKey": "Purpose",
    "TagValue": "Prod"
  }
]

tagsオプションの引数に上のJSONファイルを指定して、コマンドを実行します。

aws kms tag-resource \
  --key-id 55555555-0000-1111-2222-666666666666 \
  --tags file://key-tags.json

タグが上書きされたことを確認します。

 aws kms list-resource-tags  \
  --key-id 55555555-0000-1111-2222-666666666666
{
  "Truncated": false,
  "Tags": [
    {
      "TagKey": "CostCenter",
      "TagValue": "Busi"
    },
    {
      "TagKey": "CreatedBy",
      "TagValue": "torazuka"
    },
    {
      "TagKey": "Purpose",
      "TagValue": "Prod"
    }
  ]
}

5. キーのタグを消す

キーを指定して、特定のタグを外します。今回は、CreatedByタグとPurposeタグを削除します。

aws kms untag-resource \
  --key-id 55555555-0000-1111-2222-666666666666 \
  --tag-keys  "CreatedBy" "Purpose"

2個のタグが削除され、CostCenterタグだけが残っていることを確認します。

 aws kms list-resource-tags  \
  --key-id 55555555-0000-1111-2222-666666666666
{
  "Truncated": false,
  "Tags": [
    {
      "TagKey": "CostCenter",
      "TagValue": "Busi"
    }
  ]
}

おわりに

今回は、カスタマーマスターキーで新たにサポートされたタグについてご紹介しました。タグがつけられるようになって、KMSがますます便利になりましたね。

それでは、また。