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

拒绝访问由Amazon CloudFront的安全签名URL提供的图像,这些URL使用AWSJavaSDK链接到私有S3存储桶

施招
2023-03-14

我使用AWS Java SDK创建签名URL,并尝试通过链接到私有S3 bucket的云端提供图像服务-已采取的步骤-

>

{String distributionDomain=“分布式域”;

String keyPairId="keyPairId";       
String s3ObjectKey=picName;
Date dateLessThan = DateUtils.parseISO8601Date("2014-01-12T21:20:00.000Z");


InputStream inputStream = ImageServiceImpl.class.getResourceAsStream("/cloudFront.der");
byte[] privateKeyBytes=IOUtils.toByteArray(inputStream);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);

KeyFactory keyFactory;
PrivateKey myPrivKey=null;
try {
    keyFactory = KeyFactory.getInstance("RSA");
    myPrivKey = keyFactory.generatePrivate(keySpec);
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

System.out.println(myPrivKey);

String domainUrl= "https://" + distributionDomain + "/" + s3ObjectKey;
String url1 = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(domainUrl, keyPairId, myPrivKey, dateLessThan);
System.out.println(url1);

}

当我点击URL安全签名URL时,我被拒绝访问,不确定我在这里错过了什么。如果需要任何其他信息,请告诉我。

共有1个答案

文国发
2023-03-14

我遵循本指南(https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html),像你一样,我也在使用Java所以我必须将CloudFront键转换为der格式(Java可以读取)。我使用以下openssl命令执行此操作:-

openssl pkcs8 -topk8 -nocrypt -in MyKey.pem -inform PEM -out MyKey.der -outform DER

转换密钥后,可以运行以下操作:-

public class AwsSignUrlCreator {

    public static void main(String[] args) throws InvalidKeySpecException, IOException {

        // The DNS name of your CloudFront distribution, or a registered alias
        String distributionDomainName = "xxxx.cloudfront.net";

        // the private key you created in the AWS Management Console 
        File cloudFrontPrivateKeyFile = new File ("C:/mykeys/MyKey.der");

        // The unique ID assigned to your CloudFront key pair in the console
        String cloudFrontKeyPairId = "xxxx";
        Date expirationDate = new Date(System.currentTimeMillis() + 60 * 1000);
        String s3ObjectKey = "my-file.txt";
        String signedUrl = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
            Protocol.https,
            distributionDomainName,
            cloudFrontPrivateKeyFile,
            s3ObjectKey,
            cloudFrontKeyPairId,
            expirationDate);

        System.out.println(signedUrl);
    }

}
 类似资料:
  • 我正试图使用一个以S3 bucket为起点的Cloudfront私有发行版来提供内容。 我的存储桶中有一个图像文件,用于测试目的,其权限设置为私有。我已经设置了我的存储桶策略,因此Cloudfront Origin Access Idbody具有获得权限 当我将Cloudfront发行版设置为public(不使用签名URL)时,它可以正常工作。该对象不能通过直接S3链接访问,但可以使用Cloudf

  • 我设置了以下信息: 创建了AWS S3存储桶并将一些映像上载到特定文件夹 创建了AWS CloudFront web发行版: 来源域名:从列表中选择的S3 bucket 限制存储桶访问:是 来源访问标识:选定的已有标识 授予桶的读取权限:是,更新桶策略 拒绝访问

  • 我正试图用预签名的URL直接上传一个文件到S3 bucket,但在PUT请求上出现AccessDenied(403 Plibended)错误。 附注。忘了补充。我已经尝试添加和以及并且在本例中上载工作正常,但是如何限制上载的访问?它应该只适用于预签名的URL,对吗?

  • 问题内容: 我正在使用Java8和aws-java-sdk1.10.43来获取S3文件的预签名URL。我确实获得了一个链接,但是浏览到该链接会导致此错误: 您提供的授权机制不受支持。请使用AWS4-HMAC-SHA256 要强调的是,我希望生成一个可以通过电子邮件发送并在浏览器中打开的URL,而不是使用Java代码从该URL中读取。 我正在使用下面的代码,并且我相信发现我需要以某种方式将setSS

  • Firebase存储允许使用URL访问文件

  • 我正在尝试使用MPEG Dash设置一个视频服务器,其中视频内容托管在S3存储桶上。当托管在本地(nginx服务器)时,它可以正常工作,但当我修改MPD文件以指向S3存储桶时,它就不工作了。 以下是我正在做的: --首先,我将视频转换为多比特率MP4 -然后我用MP4Box冲它 --导致以下MPD 当我编辑MPD以具有动态URL时: --PHP源代码-- --回音数据-- 我在MPD文件上得到了无