[英]How to make sure your files are encrypted when using AWS S3 KMS encryption?
我正在尝试使用 AWS S3 和 AWS java SDK(同时尝试 v1 和 v2)测试有关加密/解密的最基本用例。
所以这就是我正在做的事情:
我使用 aws 控制台上传了一个小的 json 文件,然后在“属性”>“地穴”中检查是否选择了“AWS-KMS”并选择了我的密钥别名。 我假设这告诉我文件是用我的密钥加密的,但我无法检查这一点,因为如果我尝试使用 aws 控制台打开文件,它是明文形式的。
我尝试使用各种方法下载文件,我希望在使用最基本的方法时得到一个加密文件。
所以通过使用这个客户端(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";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.