Amazon Web Services ブログ

ネイティブ EBS およびバケットごとの S3 暗号化オプションを使用して、Amazon EMR でデータを保護



データ暗号化は、データセキュリティを強化するための効果的なソリューションです。データを暗号化し、暗号化キーへのアクセスを管理することにより、許可されたユーザーまたはアプリケーションのみが機密データを読み取るようにすることができます。医療や金融などの規制された業界の顧客が Amazon EMR を選択する主な理由の 1 つは、データを安全に保存およびアクセスするための準拠環境を提供するためです。

この投稿では、機密データを処理する EMR クラスターのセキュリティ保護に役立つ 2 つの新しい暗号化オプションの詳細なチュートリアルを提供します。最初のオプションは、EMR クラスターに接続されたボリュームを暗号化するネイティブ EBS 暗号化です。2 番目のオプションは Amazon S3 暗号化で使用すると、Amazon EMR で個々の S3 バケットにさまざまな暗号化モードとカスタマーマスターキー (CMK) を使用できます。

Amazon EMR のローカルディスク暗号化

以前は、保管時の暗号化には Linux Unified Key Setup (LUKS) しか選択できませんでした。今後は、LUKS またはネイティブ EBS 暗号化を使用して、EMR クラスターに接続された EBS ボリュームの暗号化を選択できるようになりました。EBS 暗号化には次の利点があります。

  • エンドツーエンドの暗号化 – Amazon EMR の EBS 暗号化を有効にすると、アプリケーションからの中間ディスク流出やノードと EBS ボリューム間のディスク I/O を含む EBS ボリューム上のすべてのデータが暗号化されます。暗号化された EBS ボリュームのスナップショットも暗号化され、必要に応じてそれらを AWS リージョン間で移動できます。
  • Amazon EMR ルートボリュームの暗号化 – ルートボリュームを暗号化するためにカスタム Amazon Linux イメージを作成する必要はありません。
  • 暗号化の簡単な監査 LUKS 暗号化を使用する場合、EBS ボリュームはインスタンスストアボリュームとともに暗号化されますが、Amazon EC2 API または EC2 コンソールを使用して暗号化ステータスを確認すると、EBS が [暗号化されていない] というステータスが表示されます。API が EMR クラスターを調べてディスクステータスを確認しないのが原因です。監査担当者は、ディスクに暗号化されたコンプライアンスをチェックするためにクラスターに SSH で接続する必要があります。ただし、EBS 暗号化を使用すると、EC2 コンソールまたは EC2 API 呼び出しから暗号化ステータスを確認できます。
  • 透過的な暗号化 – EBS 暗号化は、Amazon EMR で実行されているアプリケーションに対して透過的であり、コードを変更する必要はありません。

Amazon EBS 暗号化は AWS KMS と統合され、データを保護する暗号化キーを提供します。この機能を使用するには、アカウントとリージョンで CMK を使用する必要があります。CMK を使用すると、キーの有効化と無効化、アクセスのコントロール、キーのローテーション、削除など、キーの作成と管理を制御できます。詳細については、カスタマーマスターキーを参照してください。

Amazon EMR で EBS 暗号化を有効にする

Amazon EMR で EBS 暗号化を有効にするには、次の手順を完了してください。

  1. AWS KMS で CMK を作成します。
    これは、AWS KMS コンソール、AWS CLI、または AWS KMS CreateKey API のいずれかを使用して実行できます。EMR クラスターと同じリージョンにキーを作成します。詳細については、キーの作成をご参照ください。
  2. Amazon EMR サービスロールと EC2 インスタンスプロファイルに、ユーザーに代わって CMK を使用する許可を与えます。
    EMR_DefaultRole を使用している場合、次の手順でポリシーを追加します。

    • [AWS KMS コンソール] を開きます。
    • AWS リージョンを選択します。
    • 作成した CMK のキー ID またはエイリアスを選択します。
    • キー詳細ページの [キーユーザー] で、[追加] を選択します。
    • Amazon EMR サービスロールを選択します。デフォルトロールの名前は EMR_DefaultRole です。
    • [添付] を選択します。
    • Amazon EC2 インスタンスプロファイルを選択します。インスタンスプロファイルのデフォルトロールの名前は EMR_EC2_DefaultRole です。
    • [添付] を選択します。
      カスタマイズされたポリシーを使用している場合、次のコードをサービスロールに追加して、Amazon EMR が CMK ARN リソースとともに CMK を作成および使用できるようにします。

      { 
      "Version": "2012-10-17",
      "Statement": [ 
         { 
         "Sid": "EmrDiskEncryptionPolicy",
         "Effect": "Allow",
         "Action": [ 
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:CreateGrant",
            "kms:GenerateDataKeyWithoutPlaintext",
            "kms:DescribeKey" 
            ],
         "Resource": [ 
            " arn:aws:kms:region:account-id:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx " " 
            ] 
         } 
      ] 
      } 

       

  3. Amazon EMR セキュリティ設定テンプレートを作成して設定します。コンソールを使用するか、CLI または SDK を使用して次の手順を実行してください。
    • Amazon EMR コンソールを開きます。
    • [セキュリティ設定] を選択します。
    • [ローカルディスクの暗号化] で、[ローカルディスクの保管時の暗号化を有効にする] を選択します。
    • [キープロバイダータイプ] で、[AWS KMS] を選択します。
    • AWS KMS カスタマーマスターキーの場合、CMK のキー ARN を選択します。この投稿では、キー ARN ebsEncryption_emr_default_role を使用します。
    • [EBS 暗号化で EBS ボリュームを暗号化する] を選択します。

EC2 でデフォルトの暗号化対Amazon EMR EBS 暗号化

EC2 には、デフォルト暗号化と呼ばれる同様の機能があります。この機能を使用すると、リージョンごとに指定する単一の CMK を使用して、アカウント内のすべての EBS ボリュームが例外なく暗号化されます。Amazon EMR の EBS 暗号化を使用すると、EMR クラスターごとに異なる KMS キーを使用して、EBS ボリュームを保護できます。Amazon EMR が提供する EBS 暗号化と EC2 が提供するデフォルトの暗号化の両方を使用できます。

この投稿では、Amazon EMR が提供する EBS 暗号化を先に実行してから、セキュリティ設定で選択した CMK を使用してクラスターに接続された EBS ボリュームを暗号化します。

S3 暗号化

Amazon S3 暗号化は、S3 との間で読み書きされる Amazon EMR File System (EMRFS) オブジェクトでも機能します。サーバー側暗号化 (SSE) モードまたはクライアント側暗号化 (CSE) モードのいずれかを使用して、S3 バケット内のオブジェクトを暗号化できます。次の表は、Amazon EMR で S3 暗号化に使用できるさまざまな暗号化モードをまとめたものです。

暗号化の場所 キーストレージ キー管理
SSE-S3 S3 のサーバー側 S3 S3
SSE-KMS S3 のサーバー側 KMS

エイリアス aws/s3 を使用して Amazon S3 の AWS マネージド CMK を選択するか、カスタム CMK を作成します。

 

CSE-KMS EMR クラスターのクライアント側 KMS あなたが作成したカスタム CMK です。
CSE – カスタム EMR クラスターのクライアント側 あなた あなたの独自のキープロバイダーです。

実行する暗号化の選択は、特定のワークロード要件によって異なります。SSE-S3 は、チェックボックスを選択して S3 オブジェクトの暗号化を Amazon S3 に完全に委任できる最も簡単なオプションです。SSE-KMS または CSE-KMS は、ポリシーを使用して KMS で CMK をきめ細かく制御できる優れたオプションです。AWS KMS では、AWS CloudTrail がキーアクセスとキー管理の API 呼び出しを記録するため、いつ、どこで、誰がカスタマーマネージドキー (CMK) を使用したかを確認できます。これらのログは、キーの完全な監査機能を提供します。詳細については、Amazon S3 での EMRFS データの保管時の暗号化を参照してください。

さまざまな暗号化モードとキーで S3 バケットを暗号化する

Amazon EMR の S3 暗号化では、すべての暗号化モードがデフォルトで単一の CMK を使用して S3 のオブジェクトを暗号化します。特定の S3 バケットに非常に機密性の高いコンテンツがある場合、個々のバケットに異なる CMK または暗号化モードを使用して、これらのバケットの暗号化を個別に管理することができます。これを実現するには、Amazon EMR のバケットごとの暗号化オーバーライドオプションを使用します。そのためには、次のステップを完了してください。

  1. Amazon EMR コンソールを開きます。
  2. [セキュリティ設定] を選択します。
  3. [S3 暗号化] で、[Amazon S3 での EMRFS データの保管時の暗号化を有効にする] を選択します。
  4. デフォルトの暗号化モードでは、暗号化モードを選択します。この投稿では SSE-KMS を使用します。
  5. AWS KMS カスタマーマスターキーの場合、ご使用のキーを選択します。ここで提供するキーは、Amazon EMR で使用されるすべての S3 バケットを暗号化します。この投稿では ebsEncryption_emr_default_role を使用します。
  6. バケットごとの暗号化オーバーライドを選択します。バケットごとに異なる暗号化モードを設定できます。
  7. S3 バケットの場合、異なる方法で暗号化する S3 バケットを追加します。
  8. 暗号化モードでは、暗号化モードを選択します。
  9. 暗号化マテリアルの場合、ご使用の CMK を入力します。

すでに Amazon S3 で直接 S3 バケットのデフォルト暗号化を有効にしている場合、Amazon EMR のセキュリティ構成設定で S3 暗号化オプションをバイパスすることもできます。これにより、Amazon EMR はバケット内の暗号化オブジェクトを Amazon S3 に委任できます。Amazon S3 は、バケットポリシーで指定された暗号化キーを使用して、オブジェクトを S3 で永続化する前に暗号化します。

まとめ

この投稿では、Amazon EMR で利用可能なネイティブ EBS および S3 暗号化オプションを使用して、データを暗号化および保護する方法をお見せしました。これらの最適化が実際のワークロードにどのように役立っているか、ぜひフィードバックをお寄せください。

 


著者について

Duncan Chan は Amazon EMR のソフトウェア開発エンジニアです。彼はビッグデータ技術の学習と作業を楽しんでいます。仕事をしていないときは、犬と遊んでいます。