簡體   English   中英

使用 AWS S3 KMS 加密時如何確保您的文件已加密?

[英]How to make sure your files are encrypted when using AWS S3 KMS encryption?

我正在嘗試使用 AWS S3 和 AWS java SDK(同時嘗試 v1 和 v2)測試有關加密/解密的最基本用例。

所以這就是我正在做的事情:

  1. 我使用 aws 控制台上傳了一個小的 json 文件,然后在“屬性”>“地穴”中檢查是否選擇了“AWS-KMS”並選擇了我的密鑰別名。 我假設這告訴我文件是用我的密鑰加密的,但我無法檢查這一點,因為如果我嘗試使用 aws 控制台打開文件,它是明文形式的。

  2. 我嘗試使用各種方法下載文件,我希望在使用最基本的方法時得到一個加密文件。

所以通過使用這個客戶端(sdk v2):

  @Bean
  public S3Client s3Clientv2(AppProperties appProperties, CustomAwsCredentialsProvider customAwsCredentialsProvider) {

    return S3Client.builder()
        .httpClientBuilder(httpClientBuilder)
        .credentialsProvider(customAwsCredentialsProvider)
        .region(Region.EU_WEST_3)
        .build();

  }

這個下載方法:

  public void downloadFile(String bucket, String key) {    
    s3Client.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(), ResponseTransformer.toFile(Paths.get("test_aws.json")));    
  }

我希望得到一個加密文件,但事實並非如此。

然后我嘗試使用能夠自行“加密/解密”的客戶端“使用此客戶端從 Amazon S3 獲得的任何對象都會自動解密”來源: https://docs.aws.amazon.com/en_pv/sdk-for -java/v1/developer-guide/examples-crypto-kms.html

AmazonS3Encryption s3Encryption = AmazonS3EncryptionClientBuilder
        .standard()
        .withRegion(Regions.US_WEST_2)
        .withCryptoConfiguration(new CryptoConfiguration(CryptoMode.EncryptionOnly).withAwsKmsRegion(Region.getRegion(Regions.US_WEST_2)))
        // Can either be Key ID or alias (prefixed with 'alias/')
        .withEncryptionMaterials(new KMSEncryptionMaterialsProvider("alias/s3-kms-key"))
        .build();

但是使用:

S3Object file = s3Encryption.getObject(new GetObjectRequest(bucket, key));

使用此客戶端調用會收到警告:“無法檢測存儲桶 '%s' 中 object '%s' 的加密信息。返回 object 而不解密。”

  • 那么我在這里做錯了什么?
  • 如何檢查我的文件是否真的加密?
  • 在沒有“文件未加密”警告的情況下下載和解密它的正確配置是什么?

更新:當然,我已經檢查了 object 元數據,其中確實包含 KMS 信息和 KMS 密鑰 ID,但加密客戶端期待有關此的一些其他信息:

/** Initialization vector (IV) header that is used in the symmetric and envelope encryption mechanisms */
public static final String CRYPTO_IV = "x-amz-iv";

和這個:

/**
 * Encrypted symmetric key header that is used in the Encryption Only (EO) envelope
 * encryption mechanism.
 */
public static final String CRYPTO_KEY = "x-amz-key";

好的,我想我明白了:我對服務器端加密和客戶端加密感到困惑。

所以 AmazonS3Encryption 客戶端只是關於客戶端加密 當您使用服務器端加密時,對文件的任何訪問都會對其進行解密。

所以我的問題的答案是:如果您需要對加密進行細粒度控制,並能夠下載仍然加密的內容,請禁用服務器端加密並使用客戶端加密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM