質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

GoogleComputeEngine

GoogleComputeEngineとは、Linux VMをGoogleのデータセンター上で走らせるIaaS (インフラストラクチャ アズ ア サービス)製品で、ビジネス向けクラウドコンピューティング基盤のことです。

Q&A

1回答

964閲覧

UnityからFirebaseStorageへのアップロード時の、セキュリティルールでメタデータを参照したい

apptail

総合スコア14

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Storage

Google Cloud Storageは、グーグル社が提供しているクラウドベースのデベロッパー・企業向けストレージサービス。可用性に優れ、APIで操作可能なため、データのアーカイブ保存やアプリケーションのコンテンツ提供など様々な用途に活用できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

GoogleComputeEngine

GoogleComputeEngineとは、Linux VMをGoogleのデータセンター上で走らせるIaaS (インフラストラクチャ アズ ア サービス)製品で、ビジネス向けクラウドコンピューティング基盤のことです。

0グッド

0クリップ

投稿2019/07/27 13:54

編集2019/08/06 02:55

やりたいこと

  • Unityからローカルのファイルをアップロードしたい
  • Storageのセキュリティルールでメタデータが一致することをチェックして許可/拒否判定したい

起こっていること

アップロードに失敗し、task.Exceptionが下記のようになっている

System.AggregateException: One or more errors occurred. ---> Firebase.Storage.StorageException: Permission denied. Could not perform this operation Http Code: 403 --- End of inner exception stack trace --- ---> (Inner Exception #0) Firebase.Storage.StorageException: Permission denied. Could not perform this operation Http Code: 403<---

上記より、セキュリティルールの権限がないと判断しました。

試したこと

  • セキュリティルールを全開放(allow read, write: if true;)するとアップロード出来ていることを確認
  • アップロードできたファイルを確認するとメタデータに(folder:uploadFolder)が付加出来ていることを確認
  • セキュリティルールのシミュレータでは成功することを確認
  • Web(Node.js)から同様にメタデータを付加してアップロードすると成功することを確認

#Firebase Storage セキュリティルール

service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read: if true; allow write: if request.resource.metadata.testMeta == "AAA"; } } }

Unity側のソース(の一部)

storage = FirebaseStorage.DefaultInstance; StorageReference storage_ref = storage.GetReferenceFromUrl("gs://testfirebaseXXX.appspot.com"); string local_file = "/Users/XXX/test.txt"; // この時点ではまだストレージ側にファイルはない StorageReference test_ref = storage_ref.Child("test_storage.txt"); var metadataChange = new Firebase.Storage.MetadataChange(); var customMetadata = new Dictionary<string, string>(); customMetadata["folder"] = "uploadFolder"; metadataChange.CustomMetadata = customMetadata; metadataChange.ContentType = "text/plain"; test_ref.PutFileAsync(local_file, metadataChange) .ContinueWith (task => { if (task.IsFaulted || task.IsCanceled) { Debug.Log("アップロード失敗"); //Debug.Log("folder:::" + task.Result.GetCustomMetadata("folder")); Debug.Log(task.Exception.ToString()); } else { Debug.Log("アップロード成功!!!"); var download_url = test_ref.GetDownloadUrlAsync(); Debug.Log("Finished uploading"); Debug.Log("download url = " + download_url); } });

Webからは成功することから、
Unity側ソースの書き方が間違っているのだと思いますが、
セキュリティルールを開放した際はアップロード出来、メタデータが入っているので、
メタデータが渡っていないわけでもなさそう、ということで全然分からず、ぜひご教授頂けますと幸いです。
宜しくお願い致します。

アップロードできたファイルのメタデータ情報

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2019/08/06 02:29

・メタデータに「folder:uploadFolder」を指定している場所はどこですか?(そこを「testMeta:AAA」に書き換えるとどうなりますか?) ・「test_ref.UpdateMetadataAsync(metadataChange);」がコメントアウトされていますが、これを実行するとどうなりますか? 全く詳しくないので勘ですが、最初のメタデータ設定は正しく出来ているが、メタデータの変更が実行されていないのでは?という気がしています。
apptail

2019/08/06 02:53

ご指摘ありがとうございます! > ・メタデータに「folder:uploadFolder」を指定している場所はどこですか?(そこを「testMeta:AAA」に書き換えるとどうなりますか?) すみません、キャプチャとソースに違いがありました。 customMetadata["testMeta"] = "AAA"; で設定しているところのものなので、キャプチャが古い状態です。 > ・「test_ref.UpdateMetadataAsync(metadataChange);」がコメントアウトされていますが、これを実行するとどうなりますか? まだファイルが上がっていない状態なので、何も更新されません。 新規ファイルアップロード時にメタデータを付加したい、ということになります。
apptail

2019/08/06 02:54

紛らわしいので、キャプチャに合わせてソースを修正しました。
guest

回答1

0

リファレンス見た限りだと特に問題なさそうに見えますね……
https://firebase.google.com/docs/reference/security/storage#resource

既にファイルが存在するところにアップデートしようとしていて、既存ファイルのメタデータを見にいってるとかですかね?

投稿2019/08/06 03:38

kappa0923

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apptail

2019/08/06 04:11

ご回答ありがとうございます。 そうですよねー。。なぜUnittyからだけダメなのか。。 ファイルの削除は毎回行なっており、存在していない状態で行なっているのですが、やはりメタデータは見えていないみたいなんですよね。
kappa0923

2019/08/06 04:20

ダメ元ですが、ルール側のダブルクォートをシングルクォートに変えてもだめですよね。 リファレンスがシングルクォートのようなので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問