2017-02-03 18 views
1

Ruby/Ruby on Railsを使用してDynamoDBの暗号化を設定することはできますか?AWS DynamoDB暗号化 - Ruby

aws-sdkはそれを提供していますか?

私は自分でそれを行う必要がありますか?

それはできませんか?

注:同じRailsアプリがパラレルに実行され、同じDynamoDBに接続されることはほとんどありません。

+0

チェックアウトが必要です – Tilo

答えて

1

DynamoDBはデータを暗号化しません。 DynamoDBクライアントコードで暗号化と復号化を処理する必要があります。これを処理するためのJava libraryがありますが、私はRubyには表示されません。

DynamoDBは、暗号化したフィールドに対して意味のあるクエリを実行することはできません。

AWS KMSサービスを使用して、アプリケーションがDynamoDBにデータを挿入する前にデータを暗号化するために使用する暗号化キーを管理することをお勧めします。

0

AWSでクリティカルフィールドを暗号化するKMSはうまくいきます - 便利なモジュールにラップする方法の例です。

は 宝石 'AWS-SDK'、以下の答え '〜> 2.0'

設定/初期化子/ aws_kms.rb

# Helper for AWS KMS encryption/decryption: 
# 
# Example: 
# 
# cipherdata = Aws::KMS.encrypt('boring plain text') 
# 
# => "AQICAkSXnpkzAJrrzNcjlMxRK78jbKHnkPohQdSZ445Xv29z6C2ty433pG2rcs96IujEj4IXAa1rmSzJXfiQqw4LaFcluh3CYsFQOlOfhgh0LhPdiQhnIP7d0BzlIu3uRFzHLrhIpg2JssVsjnCLZstNkzerfiwYtGSNTpltVjaqJblz3kktSFNxnMoVOcJSlvTbuMdiD9yplGMDD3LC0YKjUZtEZIqEjt==" 
# 
# Aws::KMS.decrypt(cipherdata) 
# 
# => "boring plain text" 
# 
# 
# Protects from AWS KMS calls if we are in TEST environment 
# 
module Aws::KMS 

    def self.encrypt(plaintext) 
    if Rails.env.test? || Rails.env.development? 
     ['not_encrypted_in_test', plaintext].join('|') # faking encryption so we can test this without AWS 
    else 
     cipherdata = client.encrypt({ 
     key_id: ENV['KMS_ARN'], 
     plaintext: plaintext, 
     }).ciphertext_blob 
     Base64.strict_encode64(cipherdata) 
    end 
    end 

    def self.decrypt(ciphertext) 
    if Rails.env.test? || Rails.env.development? 
     ciphertext.split('|').second # faking decryption so we can test this without AWS 
    else 
     cipherdata = Base64.strict_decode64(ciphertext) 

     client.decrypt({ 
     ciphertext_blob: cipherdata 
     }).plaintext 
    end 
    end 

    # this helper method can be called to check if the ENV variables are configured correctly: 
    def self.setup_correct? 
    plaintext = 'Hey, it works!' 
    cipherdata = Aws::KMS.encrypt(plaintext) 
    Aws::KMS.decrypt(cipherdata) == plaintext 
    end 

    def self.client 
    Aws::KMS::Client.new 
    end 

end 
関連する問題