当前位置: 首页 > 知识库问答 >
问题:

Java SDK中的Amazon S3 KMS上载

上官英哲
2023-03-14

我正在尝试使用AmazonS3服务器端加密(KMS)多部分上传一个文件。我有点困惑,我的代码中是否需要KMS键,如果需要,那么我如何将它添加到Java代码中呢?

--更新私有静态void saveMultipartData(String clientRegion,String bucketName,String awsFilePath,File File){AmazonS3 s3client=AmazonS3Client.Builder().WithReghtml" target="_blank">ion(clientRegion).WithCredentials(new AWSStaticCredentialsProvider(credentials)).Build();

    ObjectMetadata objectMetadata = new ObjectMetadata();
    PutObjectRequest putRequest = null;
    try {
        try {
            putRequest = new PutObjectRequest(bucketName,
                    awsFilePath,
                    new FileInputStream(file),
                    objectMetadata);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // Upload the object and check its encryption status.
        putRequest.putCustomRequestHeader("x-amz-server-side-encryption","aws:kms");
        putRequest.putCustomRequestHeader("x-amz-server-side-encryption-aws-kms-key-id","<<keyID>>");

        TransferManager tm = TransferManagerBuilder.standard().withMinimumUploadPartSize(100L).withMultipartUploadThreshold(100L)
                .withS3Client(s3client)
                .build();
        Upload upload = tm.upload(putRequest);

        upload.waitForCompletion();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

共有1个答案

高皓
2023-03-14

虽然您不需要在代码中包含KMS密钥,但您的代码确实需要能够访问该密钥。我的意思是,例如,您使用一个环境变量来传递这个值--这样键就隐藏了。获得密钥后,可以按以下方式执行多部分上载:

InitiateMultipartUploadRequest initRequest = new
                InitiateMultipartUploadRequest(bucketName, keyName);
        initRequest.putCustomRequestHeader("x-amz-server-side-encryption", "aws:kms");
        initRequest.putCustomRequestHeader("x-amz-server-side-encryption-aws-kms-key-id", kmsKey);
 类似资料:
  • 我正在使用AzureJavaSDK。有没有办法使用SDK(如CPU和Memory)找出VM的使用指标? 我已经试过了 但这给了我整个地区的度量信息。有没有办法在VM的基础上获取指标?

  • 我们正在构建一个JavaSDK,以简化对我们提供REST API的服务之一的访问。这个SDK将由第三方开发者使用。我正在努力寻找最好的模式来实现更适合Java语言的SDK中的错误处理。 假设我们有其余的endpoint:。这可能会返回以下HTTP状态代码: 401:用户未通过身份验证 403:用户没有访问此照片的权限 404:没有带那个身份证的照片 该服务看起来像这样: 在上面的代码中,我还没有提

  • 当使用JavaSDK(0.4.1)从SB队列检索消息时,即使所讨论的队列为空,也会返回非空。对该结果调用将返回一个非空的。我怎么知道我在一个空队列上打了接听电话?显然,在分布式并发系统中,查询大小不是一个选项。 我使用模式,队列是新创建的,所以我知道它是空的。 根据docs,对API的底层调用应该返回204的状态码。在返回的结果或消息中,我找不到任何方法访问该代码。

  • 我正在使用的功能应用程序在使用本地应用程序设置我的配置时效果非常好。设置。json文件。我已在Azure中设置了一个新的应用程序配置,以远程管理属性,但我在启动时遇到以下错误: 我正在选择正确的连接字符串值,没有任何问题,但@ServiceBusQueueTrigger的queueName属性似乎没有检测到我在azure配置中设置的队列名称变量。 有没有一种不用硬编码就可以插入这个变量的方法?

  • 类型DiskFileUpload中的方法ParserRequest(HttpServletRequest,int,long,String)不适用于参数(HttpServletRequest) 当我以服务器的身份运行时...它会在控制台出现错误 这是我在此代码中的代码出错,因为类型DiskFileUpload中的方法parseRequest(HttpServletRequest,int,long,S

  • 我一直试图在一个使用https的站点上实现ajax上传到AmazonS3,所以当然我也必须上传到S3的安全版本https://bucket.name.S3.amazonaws.com。但是,当我尝试此上载时,我最终得到一个错误,即站点具有无效的安全证书。从我读到的内容来看,这是意料之中的,因为Amazon的s3证书只覆盖一级子域(http://shlomoswidler.com/2009/08/A

  • 我正在使用PHP构建一个web应用程序。我正在创建一个文件上传部分,但我有问题。 上载php: 对于图像来说,它工作得很好。但当我尝试检查上传mp4文件时会发生什么情况。它的回声文件已经存在,对不起,只有JPG,JPEG,PNG

  • 我想解析将文件作为多部分/表单数据接受的请求主体。目前,当我尝试将inputStream打印为字符串时,我得到如下结果: 下面是我的控制器。Java语言 上载txt文件 所以基本上,我是在发送sb。toString()返回响应正文。 我的问题是,如何仅从我收到的上述回复中提取内容数据? 我尝试使用多部分文件,但仍然没有成功