Azureをプログラムする:Azure Blobストレージでのクロスドメイン制約の回避方法

プログラマの日山です。

AJAXでAzure Blobストレージにアクセスするプログラムを書いていたら、クロスドメイン制約に引っかかりアクセスできない。そもそもBlobでクロスドメイン制約の設定ってどうやるんだっけ?とちょっとハマった末、解決できたので、ここで共有します。

解決方法

対象のBlobが属するストレージアカウントに対して、クロスオリジンリソース共有(CORS)を有効化にします。

MSDN
http://msdn.microsoft.com/ja-jp/library/windowsazure/dn535601.aspx

2013年8月にサポートが開始されたみたいですね。

有効化の方法

Windows Azure ストレージサービスREST APIを呼び出すことで有効化することができます。
有効化については、ライブラリ(WindowsAzure.Storage)を使うことで簡単に行うことができます。
ライブラリはバージョン3.0以降を使いましょう。古いと多分対応していないです。

以下、サンプルコードです。

サンプルコード

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Shared.Protocol;

namespace AzureBlobCorsSettingSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var connectionString = "";
            var account = CloudStorageAccount.Parse(connectionString);
            var client = account.CreateCloudBlobClient();

            var properties = client.GetServiceProperties();
            properties.Cors.CorsRules.Clear();
            properties.Cors.CorsRules.Add(new CorsRule()
            {
                AllowedHeaders = { "*" },
                AllowedMethods = CorsHttpMethods.Get | CorsHttpMethods.Head,
                AllowedOrigins = { "*" },
                ExposedHeaders = { "*" },
                MaxAgeInSeconds = 600
            });

            client.SetServiceProperties(properties);
        }
    }
}
TechTarget

クラウドエンジニア  日山 雅之による記事「Microsoft Azure スマート解説」がTechTarget Japanにて好評連載中です (全7回)