保存時の暗号化が無効な Elasticsearch ドメイン

Elasticsearch の保存インデックスと関連データを暗号化し、別途保存したコピーも保護してください。

説明

Elasticsearch ドメインの保存時の暗号化は、インデックス、アプリケーションデータ、自動スナップショットなどを KMS キーで保護します。検索データに運用ログや顧客情報が含まれる場合、この保護は重要です。暗号化しても検索 API を通じて許可されたアクセスは防げないため、認証とアクセスポリシーも必要です。

想定される影響

保存時の暗号化を使わないと、保存データを不正に取得された際の漏えいリスクが高まります。組織の保存データ保護要件を満たせない場合もあります。

対処方法

対応するエンジンバージョンとインスタンスタイプで、EncryptionAtRestOptions.Enabled: true と適切な KmsKeyId を指定してください。既存の Elasticsearch ドメインで暗号化を有効にするには、バージョン 6.7 以降などのサービスの更新条件を満たす必要があります。変更と復旧の計画を確認し、実際の暗号化状態を検証してください。

一度有効にした保存時の暗号化は無効にできません。また、使用中のキーを無効化・削除するとデータにアクセスできなくなるおそれがあります。必要なキー権限を維持し、手動スナップショットの保存先と外部へ出力したログも別途保護してください。

例

暗号化とインスタンスタイプに対応する Elasticsearch バージョンを入力します。変更後は、承認された実際の KMS キー ID または ARN も指定します。アクセスポリシーとネットワークの設定は別途必要であり、この設定だけでドメイン全体のセキュリティを確保できるわけではありません。

変更前

yaml
Parameters:
  ElasticsearchVersion:
    Type: String
Resources:
  ElasticsearchDomain:
    Type: AWS::Elasticsearch::Domain
    Properties:
      DomainName: test
      ElasticsearchVersion: !Ref ElasticsearchVersion
      ElasticsearchClusterConfig:
        InstanceType: t3.small.elasticsearch
      EncryptionAtRestOptions:
        Enabled: false
      EBSOptions:
        EBSEnabled: true
        VolumeSize: 20
        VolumeType: gp2

変更後

yaml
Parameters:
  ElasticsearchVersion:
    Type: String
  EncryptionKeyId:
    Type: String
Resources:
  ElasticsearchDomain:
    Type: AWS::Elasticsearch::Domain
    Properties:
      DomainName: test
      ElasticsearchVersion: !Ref ElasticsearchVersion
      ElasticsearchClusterConfig:
        InstanceType: t3.small.elasticsearch
      EncryptionAtRestOptions:
        Enabled: true
        KmsKeyId: !Ref EncryptionKeyId
      EBSOptions:
        EBSEnabled: true
        VolumeSize: 20
        VolumeType: gp2

参考資料