Php 配置AWS cloudfront以提供来自s3 bucket的签名url
我的s3存储桶中有一个名为Php 配置AWS cloudfront以提供来自s3 bucket的签名url,php,amazon-web-services,amazon-s3,laravel-5,Php,Amazon Web Services,Amazon S3,Laravel 5,我的s3存储桶中有一个名为private的文件夹,该文件夹中的内容仅由授权用户访问(即禁用公共读取访问) 因此,我正在生成一个标记url,用于访问该文件夹中的一个对象,它工作正常 这是签名的URL格式 s3-<region>.amazonaws.com/<folder>/<imagename>??X-Amz-Content-Sha256=....... s3-.amazonaws.com/。。。。。。。 我还为上述s3 bucket创建了cloudfron
private
的文件夹,该文件夹中的内容仅由授权用户访问(即禁用公共读取访问)
因此,我正在生成一个标记url,用于访问该文件夹中的一个对象,它工作正常
这是签名的URL格式
s3-<region>.amazonaws.com/<folder>/<imagename>??X-Amz-Content-Sha256=.......
s3-.amazonaws.com/。。。。。。。
我还为上述s3 bucket创建了cloudfront发行版,以获得更好的性能。
这里是CloudFrontURLxxxxjjj.cloudfront.net
那么,我如何使用这个cloudfront发行版提供我的签名url
当我尝试使用此url时
xxxxjjj.cloudfront.net/
我将遇到访问被拒绝错误,我认为这不是使用cloudfront发行版交付s3签名url内容的正确方法
使用php laravel frameworkCloudFront的签名URL与S3的签名URL使用不同的格式和凭据
阅读
GitHub上有一个应用程序,您也可以从中编写自己的代码
为了测试CloudFront和S3设置,您可以在aws cli中使用生成测试签名URL。CloudFront的签名URL使用与S3的签名URL不同的格式和凭据
阅读
GitHub上有一个应用程序,您也可以从中编写自己的代码
为了测试CloudFront和S3设置,您可以在aws cli中使用生成一个测试签名URL。此链接中有一个使用PHP SDK的示例
以下是使用自定义策略的Larave(5.3)中的等效代码:
public static function signedUrl($resourceKey) {
//$resourceKey = 'videos/example.mp4'
$baseUrl = 'https://xxxxjjjj.cloudfront.net';
$fullUrl = $baseUrl . '/' . $resourceKey;
$expires = time() + 300;
$customSigningPolicy = <<<POLICY
{
"Statement": [
{
"Resource": "{$fullUrl}",
"Condition": {
"DateLessThan": {"AWS:EpochTime": {$expires}}
}
}
]
}
POLICY;
// CloudFront Signed Urls
/** @var CloudFrontClient $cloudFront */
$cloudFront = \AWS::createClient('CloudFront');
$url = $cloudFront->getSignedUrl([
'url' => $fullUrl,
'policy' => $customSigningPolicy,
'key_pair_id' => 'YOUR_KEY_PAIR_ID',
'private_key' => '/path/to/your/cloudfront-private-key.pem'
]);
return $url;
}
公共静态函数signedUrl($resourceKey){
//$resourceKey='videos/example.mp4'
$baseUrl='0https://xxxxjjjj.cloudfront.net';
$fullUrl=$baseUrl.'/'.$resourceKey;
$expires=time()+300;
$customSigningPolicy=$customSigningPolicy,
“密钥对\u id”=>“您的密钥对\u id”,
'private_key'=>'/path/to/your/cloudfront private key.pem'
]);
返回$url;
}
另外,我在aws示例中发现了一个错误,因为他们在策略中使用$resourceKey作为资源值,这是不正常的,所以我使用的是文件的完整url
他们的代码:
$resourceKey = 'videos/example.mp4';
$customPolicy = <<<POLICY
{
"Statement": [
{
"Resource": "{$resourceKey}",
"Condition": {
"IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"},
"DateLessThan": {"AWS:EpochTime": {$expires}}
}
}
]
}
POLICY;
$resourceKey='videos/example.mp4';
$customPolicy=在这个链接中有一个使用PHP SDK的示例
以下是使用自定义策略的Larave(5.3)中的等效代码:
public static function signedUrl($resourceKey) {
//$resourceKey = 'videos/example.mp4'
$baseUrl = 'https://xxxxjjjj.cloudfront.net';
$fullUrl = $baseUrl . '/' . $resourceKey;
$expires = time() + 300;
$customSigningPolicy = <<<POLICY
{
"Statement": [
{
"Resource": "{$fullUrl}",
"Condition": {
"DateLessThan": {"AWS:EpochTime": {$expires}}
}
}
]
}
POLICY;
// CloudFront Signed Urls
/** @var CloudFrontClient $cloudFront */
$cloudFront = \AWS::createClient('CloudFront');
$url = $cloudFront->getSignedUrl([
'url' => $fullUrl,
'policy' => $customSigningPolicy,
'key_pair_id' => 'YOUR_KEY_PAIR_ID',
'private_key' => '/path/to/your/cloudfront-private-key.pem'
]);
return $url;
}
公共静态函数signedUrl($resourceKey){
//$resourceKey='videos/example.mp4'
$baseUrl='0https://xxxxjjjj.cloudfront.net';
$fullUrl=$baseUrl.'/'.$resourceKey;
$expires=time()+300;
$customSigningPolicy=$customSigningPolicy,
“密钥对\u id”=>“您的密钥对\u id”,
'private_key'=>'/path/to/your/cloudfront private key.pem'
]);
返回$url;
}
另外,我在aws示例中发现了一个错误,因为他们在策略中使用$resourceKey作为资源值,这是不正常的,所以我使用的是文件的完整url
他们的代码:
$resourceKey = 'videos/example.mp4';
$customPolicy = <<<POLICY
{
"Statement": [
{
"Resource": "{$resourceKey}",
"Condition": {
"IpAddress": {"AWS:SourceIp": "{$_SERVER['REMOTE_ADDR']}/32"},
"DateLessThan": {"AWS:EpochTime": {$expires}}
}
}
]
}
POLICY;
$resourceKey='videos/example.mp4';
$customPolicy=我已经使用php sdk生成了签名url,但是当我将基本部分ie(s3-.amazonaws.com
替换为hhsdjf.cloudfront.net
)更改url的主机组件时,它给出了一个拒绝访问的错误。更改url的主机组件并不是这样做的。CloudFront签名url完全不同,由不同的代码生成,并在查询字符串中包含&密钥对Id=…
——它们不使用X-Amz-Credential
,也不使用AWSAccessKeyId
。我已经使用php sdk生成签名url,但当我使用基本部分ie时(s3-.amazonaws.com
替换为hhsdjf.cloudfront.net
)它的“拒绝访问”错误更改URL的主机组件与此不同。CloudFront签名的URL完全不同,由不同的代码生成,并在查询字符串中包含&Key Pair Id=…
——它们不使用X-Amz-Credential
,也不使用AWSAccessKeyId
。