繁体   English   中英

AWS CloudFront格式错误的策略

[英]Aws CloudFront Malformed Policy

我一直在尝试使用php中的有限权限为Cloud Front创建一个签名的URL(指向我的s3存储桶),但是我一直收到格式错误的策略错误。

我在用 :

$customPolicy = '{"Id":"Policy1319566876317","Statement":[{"Sid":"Stmt1319566860498","Action":["s3:GetObject"],"Effect":"Allow","Resource":"arn:aws:s3:::my-bucket/*","Principal":{"CanonicalUser":["92cd670939a0460a1b48cbbfedcb5178139bcb315881d9ec3833e497a9e62959762d560feec321a749217754e5d02e5f"]}}]}';


// Create a signed URL for the resource using the canned policy
        $signedUrlCannedPolicy = $cloudFront->getSignedUrl([
            'url'         => $streamHostUrl . '/' . $resourceKey,
            'private_key' => base_path().'/'.'mypem file',
            'key_pair_id' => 'myid',
            'policy' => $customPolicy

        ]);

基本上,我希望此签名URL的接收者仅具有我指定的那些s3对象特权(在上面的代码中,将其设置为getObject,有时将其放置为object,有时可能将其设置为delete object。我该如何实现在云战线?

您的自定义策略看起来像S3 / IAM策略声明。 这不是用于CloudFront签名URL的策略文档。 CloudFront具有完全不同的策略语言。

从技术上讲,CloudFront中的自定义策略允许访问CloudFront而不是其背后的资源。 CloudFront签名的URL以及处理它们的逻辑不了解背面的实体或配置,例如存储桶名称,键,主体,原始访问身份等……它们仅用于指定允许CloudFront服务于对特定URL或URL模式的请求,仅此而已。 它们严格在CloudFront的“前端”上运行,并且在这一层没有对幕后情况的了解。 如果您的CloudFront发行版由于无限制的存储桶访问或由于授予原始访问身份的权限而被授权对基础资源执行请求,则操作成功。 否则,它将失败。

查看为使用自定义策略的签名URL创建策略声明以获取这些策略的正确格式。

从根本上讲,如果您想对存储桶而不是GET使用CloudFront签名的URL进行其他操作,那么您很可能会尝试以与其设计不一致的方式使用CloudFront签名的URL。

可以通过CloudFront将GETHEADOPTIONS之外的其他操作“发送”到S3,但是这样做的理由只有一个-乘坐从Edge网络到原始S3位置的高质量路径。 通过CloudFront进行PUT实际上不会在CloudFront中存储任何内容-它只是将请求传递到存储桶,并且对CloudFront中可能已经缓存的内容没有影响。

您可以通过使用S3 Transfer Acceleration来实现相同的目的-提高非GET操作的全局网络性能和吞吐量-当您启用S3传输加速时 ,它会在https://example-bucket.s3-accelerate.amazonaws.com公开您的存储桶。特征。 我有点过分简化了,但实际上,这将您的存储桶放在了不缓存的通用CloudFront发行版后面,使您可以利用Edge网络进行更快的传输,但仍使用标准的S3签名和策略来完成您的工作需要所有其他S3操作。

或者,只需将其他请求直接发送到存储桶。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM