Ruby/Ruby on Railsを使用してDynamoDBの暗号化を設定することはできますか?AWS DynamoDB暗号化 - Ruby
aws-sdkはそれを提供していますか?
私は自分でそれを行う必要がありますか?
それはできませんか?
注:同じRailsアプリがパラレルに実行され、同じDynamoDBに接続されることはほとんどありません。
Ruby/Ruby on Railsを使用してDynamoDBの暗号化を設定することはできますか?AWS DynamoDB暗号化 - Ruby
aws-sdkはそれを提供していますか?
私は自分でそれを行う必要がありますか?
それはできませんか?
注:同じRailsアプリがパラレルに実行され、同じDynamoDBに接続されることはほとんどありません。
DynamoDBはデータを暗号化しません。 DynamoDBクライアントコードで暗号化と復号化を処理する必要があります。これを処理するためのJava libraryがありますが、私はRubyには表示されません。
DynamoDBは、暗号化したフィールドに対して意味のあるクエリを実行することはできません。
AWS KMSサービスを使用して、アプリケーションがDynamoDBにデータを挿入する前にデータを暗号化するために使用する暗号化キーを管理することをお勧めします。
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
チェックアウトが必要です – Tilo