作成中の Winforms C# アプリで GCPs Secret Manager を使用しようとしましたが、最初に Secret Manager にアクセスするには credentials.json が必要です。これは開発では問題ありませんが、本番環境では問題ありません。おそらく、シークレット マネージャーを使用するべきではありません。
現在、私はローカル C# winforms アプリを持っています。アプリをローカルで使用しているユーザー (管理者ではない顧客) は、Windows ファイルシステムからファイルを選択し、これらのファイルを Google Cloud Storage バケットにアップロードできます。私はサーバーをまったく持っていませんが、サーバー内にどのようなロジックが必要なのかわかりません。
コメントから、サーバーはユーザーがログインする仲介者であるべきだと思います。ユーザーはトークンを取得し、ユーザーはトークンを使用してサーバー経由で gcloud ストレージ バケットにファイルをアップロードできます。そうすれば、そもそもユーザーに credentials.json ファイルを実際に渡すことはありません。
このアーキテクチャでは、サーバーが認証されたユーザーに代わって gcloud storage バケットのアップロード呼び出しを行うため、サービス アカウントを使用する必要があると考えましたが、John Hanley から、ユーザー資格情報は安全でない環境で開始されると想定されていることがわかりました。 d 監査ログに「どのユーザーが何をしたか」の情報が必要です。
私の開発ビルドでは、credentials.json をプロジェクト ディレクトリの外に保存し、環境変数を使用してそれを指しています。これは機能しますが、この回答は、Google KMS を使用して暗号化し、アプリケーションで復号化することを示唆しています。
コメントでは、サービス アカウントの資格情報が公開される可能性があるため、これは実際には安全ではないことがわかります。
この回答によると、 dll は同等の C# コードに逆コンパイルできるため、キーの復号化に使用したものを誰でも見ることができます。
- では、本番環境で使用する必要があるアーキテクチャと、それを安全にする方法を知りたいですか?
- ユーザー情報をデータベースに保存し、認証されたユーザーにトークンを与え、gcloud ストレージ バケットにアップロードする呼び出しを行うときにこのトークンを使用する GAE インスタンスを作成することを考えています。これは本番アプリには十分ですか?