서명된 URL을 사용하여 PHP를 사용하여 Azure Storage의 이미지를 볼 수 있음(SAS)

13728 단어 AzurePHPsastech
잊어버리려고.
너무 귀찮아서 디테일을 생략했습니다.

의 목적


이거야.
Shared Access Signature(SAS)는 Azure Storage BLOB에 대한 액세스 제한을 허용하는 URI입니다.메모리 계정 키를 공유하지 않습니다. 특정 시간 범위의 메모리 계정 자원에 접근할 때 사용할 수 있습니다.

컨디션

  • PHP 7.4.16
  • composer 2.0.11
  • azure-storage-php
  • Azure 스토리지 계정
  • 예약
  • 무료 사용 버전
  • 성능/액세스 계층
  • Standard/핫
  • 계정 유형
  • StorageV2(공통 v2)
  • 전제 조건


    다음 그림 파일은 계정을 저장하는 용기에 업로드되었습니다.

    ※ 윈도우에서 이미지 대여
    https://www.irasutoya.com/2020/06/blog-post_169.html

    코드를 쓰다


    디렉토리 구조


    .
    ├── composer.json
    ├── composer.lock
    ├── index.php
    └── vendor
    

    코드


    <?php
    
    require_once "vendor/autoload.php";
    
    use MicrosoftAzure\Storage\Blob\BlobRestProxy;
    use MicrosoftAzure\Storage\Common\ServiceException;
    use MicrosoftAzure\Storage\Blob\BlobSharedAccessSignatureHelper;
    use MicrosoftAzure\Storage\Common\Internal\Resources;
    
    function getBlobUrlWithSignature(string $filePath)
    {
        try {
            // Default から始まってるやつ
            $connectionString = {接続文字列};
            $container = 'test-container';
    
            $blobClient = BlobRestProxy::createBlobService($connectionString);
            $url = $blobClient->getBlobUrl($container, $filePath);
    
            // cs から始まってるやつ
            $accountName = {ストレージ アカウント名};
    	// keyです。「アクセス キー」から確認できます
            $accountKey = {キー};
    
            $helper = new BlobSharedAccessSignatureHelper($accountName, $accountKey);
            $d = new \Datetime('now', new \DateTimeZone('UTC'));
    
            // リソース
            // 以下どちらかを選択するとのこと
            // ・Resources::RESOURCE_TYPE_BLOB
            // ・Resources::RESOURCE_TYPE_CONTAINER
            $signedResource = Resources::RESOURCE_TYPE_BLOB;
            
            // リソース名
            // コンテナからのリソースの場所を指定
            $resourceName = "{$container}/{$filePath}";
            
            // パーミッション
            // リソースごとに指定できるパーミッション
            //  ・Resources::RESOURCE_TYPE_BLOB => ['r', 'a', 'c', 'w', 'd'],
            //  ・Resources::RESOURCE_TYPE_CONTAINER => ['r', 'a', 'c', 'w', 'd', 'l']
            $signedPermissions = 'r';
    
            // 開始日時
            // Datetime or string でOK
            $signedStart = new \Datetime();
    
            // 有効期限
            // 今回は1時間後
            $signedExpiry = date_modify(date_create(), '+1 hour');
    
            // IPを制限したい場合は指定
            $signedIP = "";
    
            // 有効なプロトコル
            // https or httpだと思う
            $signedProtocol = "https";
    
            // ほかにも引数で指定できるが今回は不要なので省略
    
            $token = $helper->generateBlobServiceSharedAccessSignatureToken(
                $signedResource,
                $resourceName,
                $signedPermissions,
                $signedExpiry,
                $signedStart,
                $signedIP,
                $signedProtocol
            );
    
            return "{$url}?{$token}";
        } catch (ServiceException $e) {
            $code = $e->getCode();
            $errorMessage = $e->getMessage();
            echo "{$code}: {$errorMessage}" . PHP_EOL;
        }
    }
    
    echo getBlobUrlWithSignature('pose_pien_uruuru_woman.png') . PHP_EOL;
    

    실행하다


    $ php index.php
    https://{ストレージ アカウント名}.blob.core.windows.net/test-container/pose_pien_uruuru_woman.png?sv=2017-11-09&sr=b&st=2021-04-16T01:49:29Z&se=2021-04-16T02:49:29Z&sp=r&spr=https&sig=%2FPm0%2BgX4Iq8yvtLsgrTmis6VGJXEe5Gor9601cI6%2Fx4%3D
    
    이상!

    좋은 웹페이지 즐겨찾기