0

複数の Azure アカウントを持っています。大きなブログ (250GB vhd) をあるアカウントから別のアカウントにコピーしたいのですが、ローカル マシンにダウンロードしてアップロードする必要はありません。

これを行うために Microsoft ユーティリティ AZCOPY を使用してみました (キーは x に置き換えられます):

azcopy https://accountfrom.blob.core.windows.net/neo4j/neo4j-250gb.db.vhd https://accountto.blob.core.windows.net/neo4j/neo4j-250gb.db.vhd /DestKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /SourceKey:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

しかし、これにより次のエラー メッセージが表示されます。宛先の場所の解析中にエラーが発生しました。リモート サーバーがエラーを返しました: (403) 許可されていません。

CloudBerry でアカウントを開いて、キーとアカウントをテストしました。CloudBerry からも URL を取得したので、それらも正しく取得できたと思います。

403 の原因は何ですか?

4

7 に答える 7

3

Fiddler を使用するという Gaurav の提案を試しました。これにより、Azure Storage からの XML 応答を確認できました。そこで、「AuthenticationErrorDetail: Request date header too old」というメッセージが表示されました。仮想マシンを使用していて、時間が遅れていたことが判明しました。VM のクロックを更新すると、認証の問題が修正されました。

于 2015-02-07T23:28:13.763 に答える
0

CopyFromBlob メソッドを試しましたか? サブスクリプション間で機能するかどうかはわかりません。複数のサブスクリプションがある場合はテストします。しかし、それは非常に高速で、アップダウンを行いません。

このようなもの:

//set the azure container
string sourceContainerName = "mySourceContainer";
string destinationContainerName = "myDestinationContainer";
//azure connection string
string sourceSettingKey = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", "xxxx",
                                            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
string destinationSettingKey = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", "xxxx",
                                            "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
//setup the container object
CloudStorageAccount sourceStorageAccount = CloudStorageAccount.Parse(sourceSettingKey);
CloudStorageAccount destinationStorageAccount = CloudStorageAccount.Parse(destinationSettingKey);
CloudBlobClient sourceClient = sourceStorageAccount.CreateCloudBlobClient();
CloudBlobClient destinationClient = destinationStorageAccount.CreateCloudBlobClient();
CloudBlobContainer sourceContainer = blobClient.GetContainerReference(sourceContainerName);
CloudBlobContainer destinationContainer = blobClient.GetContainerReference(destinationContainerName);

// Set permissions on the container.
BlobContainerPermissions permissions = new BlobContainerPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Blob;
sourceContainer.SetPermissions(permissions);
destinationContainer.SetPermissions(permissions);

//grab the blob
CloudBlob sourceBlob = sourceContainer.GetBlobReference("mySourceBlobName");
CloudBlob destinationBlob = destinationContainer.GetBlobReference("myDestinationBlobName");
//create a new blob
destinationBlob.CopyFromBlob(sourceBlob);
于 2013-08-12T20:56:19.787 に答える
0

最初に使用した (ストレージ アカウント用に生成された) キーに何らかの欠陥があったため、403 が返されました。2番目のキーを使用するように変更するだけで問題が解決しました-そしてもちろん最初のキーを再生成しました。

于 2016-12-01T00:19:15.337 に答える
0

初めて「オブジェクト」を作成するとき、許可された「リソース タイプ」の SAS キー生成フォームでチェックする必要がありました。デバッグのデフォルトの方法は、すべてがチェックされた状態で SAS キーを取得し、それが機能する場合はスリム化することです。

于 2020-07-17T12:29:03.180 に答える