私は非常に奇妙な問題を抱えています。azure クラウド サービスに webrole を発行しました。このプロジェクトでは、webrole が Azure Rest API を呼び出す必要があります。ローカル エミュレーターで応答を取得できますが、Azure に発行すると、403 禁止エラーが発生します。証明書を Azure にインストールしたことは確かです。
このエラーは、次の手順で再現できます。
- まず、以下のリンクで証明書を作成します: http://msdn.microsoft.com/en-us/library/windowsazure/gg651127.aspx
 - Webrole を使用してクラウド サービスを作成し、Azure portal で証明書を使用して、クラウド サービスの証明書と webrole->property->certificate を作成します。
 - プロジェクトを公開します。
 - Web ロール インスタンスにリモート ログインします。
 - ローカルでコンソール アプリケーションを作成し、デバッグ フォルダーをリモート インスタンスにコピーして、リモート アプリケーションで exe を実行します。アプリケーションがローカルで完全に実行できることがわかりますが、Azure インスタンスでは、証明書を見つけることができるように見えますが、それでも 403 禁止エラーが発生します。
 
コンソール アプリのコード:
static void Main(string[] args)
    {
        try
        {
            // X.509 certificate variables.
            X509Store certStore = null;
            X509Certificate2Collection certCollection = null;
            X509Certificate2 certificate = null;
            // Request and response variables.
            HttpWebRequest httpWebRequest = null;
            HttpWebResponse httpWebResponse = null;
            // Stream variables.
            Stream responseStream = null;
            StreamReader reader = null;
            // URI variable.
            Uri requestUri = null;
            // Specify operation to use for the service management call.
            // This sample will use the operation for listing the hosted services.
            string operation = "hostedservices";
            // The ID for the Windows Azure subscription.
            string subscriptionId = "";
            // The thumbprint for the certificate. This certificate would have been
            // previously added as a management certificate within the Windows Azure management portal.
            string thumbPrint = "";
            // Open the certificate store for the current user.
            certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
            certStore.Open(OpenFlags.ReadOnly);
            // Find the certificate with the specified thumbprint.
            certCollection = certStore.Certificates.Find(
                                 X509FindType.FindByThumbprint,
                                 thumbPrint,
                                 false);
            // Close the certificate store.
            certStore.Close();
            // Check to see if a matching certificate was found.
            if (0 == certCollection.Count)
            {
                throw new Exception("No certificate found containing thumbprint " + thumbPrint);
            }
            // A matching certificate was found.
            certificate = certCollection[0];
            Console.WriteLine("Using certificate with thumbprint: " + thumbPrint);
            // Create the request.
            requestUri = new Uri("https://management.core.windows.net/"
                                 + subscriptionId 
                                 + "/services/" 
                                 + operation);
            httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(requestUri);
            // Add the certificate to the request.
            httpWebRequest.ClientCertificates.Add(certificate);
            // Specify the version information in the header.
            httpWebRequest.Headers.Add("x-ms-version", "2011-10-01");
            // Make the call using the web request.
            httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            // Display the web response status code.
            Console.WriteLine("Response status code: " + httpWebResponse.StatusCode);
            // Display the request ID returned by Windows Azure.
             if (null != httpWebResponse.Headers)
             {
                 Console.WriteLine("x-ms-request-id: "
                 + httpWebResponse.Headers["x-ms-request-id"]);
             }
            // Parse the web response.
            responseStream = httpWebResponse.GetResponseStream();
            reader = new StreamReader(responseStream);
            // Display the raw response.
            Console.WriteLine("Response output:");
            Console.WriteLine(reader.ReadToEnd());
            // Close the resources no longer needed.
            httpWebResponse.Close(); 
            responseStream.Close(); 
            reader.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("Error encountered: " + e.Message);
            // Exit the application with exit code 1.
            Console.ReadLine();
            System.Environment.Exit(1);
        }
        finally
        {
            // Exit the application.
            Console.ReadLine();
            System.Environment.Exit(0);
        }
    }