gpt4 book ai didi

java - 使用 AWS S3 KMS 加密时如何确保您的文件已加密?

转载 作者:行者123 更新时间:2023-11-30 12:02:37 26 4
gpt4 key购买 nike

我正在尝试使用 AWS S3 和 AWS java SDK(同时尝试 v1 和 v2)测试围绕加密/解密的最基本用例。

这就是我正在做的:

  1. 我使用 aws 控制台上传了一个小的 json 文件,然后我在“属性”>“crypt”中检查是否选择了“AWS-KMS”,并选择了我的 key 别名。我假设这告诉我文件是用我的 key 加密的,但我无法检查这一点,因为如果我尝试使用 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”中对象“%s”的加密信息。返回对象未解密。”

  • 那么我做错了什么?
  • 如何检查我的文件是否真的加密了?
  • 在没有“文件未加密”警告的情况下下载和解密它的正确配置是什么?

更新:当然我已经检查了对象元数据,它确实包含 KMS 信息和 KMS key 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 客户端只有大约 client-side encryption .当您使用 server-side encryption 时,对该文件的任何访问都会对其进行解密。

所以我的问题的答案是:如果您需要对加密进行细粒度控制并能够下载仍然加密的内容,请禁用服务器端加密并使用客户端加密。

关于java - 使用 AWS S3 KMS 加密时如何确保您的文件已加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com