

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# を使用して CloudWatch Logs のルックアップテーブルを暗号化する AWS Key Management Service
<a name="encrypt-lookup-tables-kms"></a>

ルックアップテーブルデータは常に CloudWatch Logs で暗号化されます。デフォルトでは、CloudWatch Logs は 256 ビット Advanced Encryption Standard Galois/Counter Mode (AES-GCM) によるサーバー側の暗号化を使用して、保管中のルックアップテーブルデータを暗号化します。別の方法として、この暗号化には AWS Key Management Service を使用できます。その場合、暗号化は AWS KMS キーを使用して行われます。を使用した暗号化 AWS KMS は、ルックアップテーブルの作成時または更新時に、KMS キーをルックアップテーブルに関連付けることで、ルックアップテーブルレベルで有効になります。

**重要**  
CloudWatch Logs は、対称 KMS キーのみをサポートします。非対称キーを使用してルックアップテーブル内のデータを暗号化しないでください。詳細については、「[対称キーと非対称キーの使用](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)」を参照してください。

KMS キーをルックアップテーブルに関連付けると、ルックアップテーブルに保存されているすべてのデータがこのキーを使用して暗号化されます。CloudWatch Logs は、リクエストがあればいつでもこのデータを復号化します。暗号化されたデータがリクエストされた場合、CloudWatch Logs に KMS キーのアクセス許可が必要です。

後でルックアップテーブルから KMS キーの関連付けを解除すると、CloudWatch Logs は CloudWatch Logs のデフォルトの暗号化方法を使用してデータを暗号化します。ただし、関連付けを解除する前にキーが無効または削除されている場合、CloudWatch Logs はそのキーで暗号化されたデータを読み取ることができません。

CloudWatch Logs が AWS KMS を使用してログデータを暗号化する方法の一般的な情報については、「」を参照してください[を使用して CloudWatch Logs のログデータを暗号化する AWS Key Management Service](encrypt-log-data-kms.md)。

## CloudWatch Logs がルックアップテーブル AWS KMS に使用する方法
<a name="encrypt-lookup-tables-how-it-works"></a>

CloudWatch Logs は、エン AWS KMS ベロープ暗号化を使用してルックアップテーブルデータを保護します。KMS キーをルックアップテーブルに関連付けると、CloudWatch Logs は`GenerateDataKey`リクエストを に送信します AWS KMS。 は一意のデータ暗号化キー (DEK) AWS KMS を生成し、プレーンテキストコピーと DEK の暗号化されたコピーの両方を返します。CloudWatch Logs は、プレーンテキスト DEK を使用してルックアップテーブルデータを暗号化し、暗号化された DEK を暗号化されたデータとともに保存します。プレーンテキスト DEK は保存されず、使用後にメモリから破棄されます。

CloudWatch Logs がルックアップテーブルデータを読み取る必要がある場合、暗号化された DEK AWS KMS を使用して に`Decrypt`リクエストを送信します。 は DEK を AWS KMS 復号し、プレーンテキストの DEK を CloudWatch Logs に返し、これを使用してルックアップテーブルデータを復号します。

CloudWatch Logs は、次の暗号化コンテキストを使用してリクエストを行います AWS KMS。

```
{
    "aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name"
}
```

この暗号化コンテキストを IAM ポリシーと AWS KMS キーポリシーで使用して、KMS キーへのアクセスを制御できます。詳細については、「[AWS KMS キーと暗号化コンテキスト](encrypt-log-data-kms.md#encrypt-log-data-kms-policy)」を参照してください。

## 必要な アクセス許可
<a name="encrypt-lookup-tables-permissions"></a>

ルックアップテーブルで AWS KMS 暗号化を使用するには、IAM プリンシパルに KMS キーに対する次の AWS KMS アクセス許可が必要です。
+ `kms:Decrypt`
+ `kms:GenerateDataKey`

アクセス`kms:Decrypt`許可は、CloudWatch Logs がユーザーに代わってデータを復号化できるように、KMS キーで暗号化されたルックアップテーブル`GetLookupTable`で を呼び出すときに必要です。暗号化されたルックアップテーブルで `lookup` コマンドを使用するクエリ`StartQuery`で を呼び出す場合、 キー (ルックアップテーブルの暗号化に使用される KMS キー) にも アクセス`kms:Decrypt`許可が必要です。アクセス`kms:GenerateDataKey`許可は、CloudWatch Logs がルックアップテーブルデータを暗号化するためのデータ暗号化キーを生成できるように、KMS キー`UpdateLookupTable`を使用して `CreateLookupTable`または を呼び出すときに必要です。

さらに、CloudWatch Logs サービスには KMS キーを使用するアクセス許可が必要です。次のセクションで説明するように、KMS キーポリシーにポリシーステートメントを追加して、これらのアクセス許可を付与します。

## ステップ 1: AWS KMS キーを作成する
<a name="encrypt-lookup-tables-create-key"></a>

対称 KMS キーを作成するには、次の [create-key](https://docs.aws.amazon.com/cli/latest/reference/kms/create-key.html) コマンドを使用します。

```
aws kms create-key
```

出力には、キーのキー ID と Amazon リソースネーム (ARN) が含まれます。出力例を次に示します。

```
{
    "KeyMetadata": {
        "Origin": "AWS_KMS",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Description": "",
        "KeyManager": "CUSTOMER",
        "Enabled": true,
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "CreationDate": 1478910250.94,
        "Arn": "arn:aws:kms:us-west-2:123456789012:key/6f815f63-e628-448c-8251-e40cb0d29f59",
        "AWSAccountId": "123456789012",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ]
    }
}
```

キー ARN を記録します。次のステップで必要になります。

## ステップ 2: KMS キーでアクセス許可を設定する
<a name="encrypt-lookup-tables-key-policy"></a>

デフォルトでは、すべての AWS KMS キーはプライベートです。リソースの所有者のみがその CMK を使用してデータを暗号化および復号できます。キーを使用するためのアクセス許可を CloudWatch Logs サービスプリンシパルに付与し、キーを使用するためのアクセス許可を呼び出し元ロールに付与する必要があります。

まず、[get-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/get-key-policy.html) コマンドを使用して、KMS キーのデフォルトポリシーを `policy.json` として保存します。

```
aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json
```

テキストエディタで `policy.json` ファイルを開き、次のステートメントを追加して、CloudWatch Logs サービスプリンシパルにキーを使用するアクセス許可を付与します。この例では、暗号化コンテキストに一致する`Condition`セクションを使用して、キーを特定のルックアップテーブルに制限します。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "logs.region.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name",
            "aws:SourceAccount": "account-id",
            "aws:SourceArn": "arn:aws:logs:region:account-id:lookup-table:lookup-table-name"
        }
    }
}
```

次に、CloudWatch Logs `CreateLookupTable`または `UpdateLookupTable` APIs を呼び出すロールにアクセス許可を追加します。CloudWatch Logs は を使用して`kms:ViaService`、お客様に代わって を AWS KMS 呼び出します。詳細については、「[kms:ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service)」を参照してください。

```
{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::account-id:role/role-name"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "kms:ViaService": [
                "logs.region.amazonaws.com"
            ]
        }
    }
}
```

最後に、次の [put-key-policy](https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html) コマンドを使用して更新されたポリシーを追加します。

```
aws kms put-key-policy --key-id key-id --policy-name default --policy file://policy.json
```

## ステップ 3: KMS キーをルックアップテーブルに関連付ける
<a name="encrypt-lookup-tables-associate"></a>

API を使用して KMS キーを作成するとき、または `CreateLookupTable` API を使用して既存のルックアップテーブルを更新するときに、KMS キーをルックアップテーブルに関連付けることができます`UpdateLookupTable`。どちらの APIs AWSLogsConfigService の一部です。

**作成時に KMS キーをルックアップテーブルに関連付けるには**  
`CreateLookupTable` API を使用して、KMS キーの ARN で `kmsKeyArn`パラメータを指定します。

```
aws logs create-lookup-table \
    --lookup-table-name my-lookup-table \
    --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"
```

**KMS キーを既存のルックアップテーブルに関連付けるには**  
`UpdateLookupTable` API を使用して、KMS キーの ARN で `kmsKeyArn`パラメータを指定します。

```
aws logs update-lookup-table \
    --lookup-table-name my-lookup-table \
    --kms-key-arn "arn:aws:kms:region:account-id:key/key-id"
```

## 考慮事項
<a name="encrypt-lookup-tables-considerations"></a>
+ ルックアップテーブルから KMS キーを関連付けるか関連付けを解除すると、オペレーションが有効になるまでに最大 5 分かかることがあります。
+ 関連付けられたキーへの CloudWatch Logs アクセスを取り消すか、関連付けられた KMS キーを削除すると、CloudWatch Logs の暗号化されたルックアップテーブルデータを取得できなくなります。
+ このトピックの手順を実行するには、、`kms:CreateKey`、`kms:GetKeyPolicy``kms:PutKeyPolicy`、および `CreateLookupTable`または を呼び出すための適切な CloudWatch Logs アクセス許可が必要です`UpdateLookupTable`。