15

デスクトップアプリケーションで Amazon S3 と simpleDB を使用することを検討しています。

私が抱えている主な問題は、aws 資格情報をアプリケーションに保存するか、他のスキームを使用する必要があることです。

それらは簡単に選択されるため、アプリケーションに保存することは問題外だと思います。

別のオプションは、aws 認証署名を作成する Web サービスを作成することですが、これには独自の問題があります。署名には、アップロードされているファイルのすべてのデータが必要ですか? その場合、すべてのデータを 2 回転送する必要があります。その場合、AWS を使用する主な理由の 1 つである中心的な障害点が発生します。

何か案は?

アップデート:

他の人に配布されたアプリケーションに自分の aws 認証情報を保存したいということを少し明確にする必要がありました。DPAPI またはその他の暗号化は、リフレクターを使用して資格情報を取得するだけの人を止めるだけです。暗号化を使用するには、簡単に取得できるキーが必要です。

更新 2 - 2011 年 9 月

Amazon は、AWS Security Token Service の使用に関する詳細をいくつか公開しました。これにより、秘密鍵を開示せずに認証が可能になります。詳細については、このブログ投稿を参照してください。

4

4 に答える 4

10

ティム、あなたは確かに 2 つの重要なアプローチに取り組んでいます。

  1. 十分ではありません: 秘密鍵をアプリに「密かに」保存します。誰かがアプリのコードからそれを選んでしまうという重大なリスクが実際にあります。緩和策としては、(a) DPAPI を使用してキーをアプリ バイナリの外部に保存するか、(b) 必要なたびに Web サービスからネットワーク経由で (SSL 経由で) キーを取得し、決してローカルに保存しないことが考えられます。クリアテキスト キーは最終的にアプリの RAM に格納される必要があるため、デバッガーを使用して有能な攻撃者を実際に遅らせる緩和策はありません。

  2. より良い: 保護する必要があるコンテンツを Web サービスにプッシュし、そこで署名します。幸いなことに、署名する必要があるのはリクエスト名とタイムスタンプだけで、アップロードされたすべてのビットに署名する必要はありません (Amazon は、これらすべてのビットの検証にサイクルを費やしたくないと思います!)。以下は、Amazon 自身の「Introduction to AWS for C# Developers」からの関連するコード行です。Aws_GetSignature「PutObject」とタイムスタンプのみで呼び出される方法に注目してください。ファイル全体を送信したり、キーを危険にさらしたりすることなく、独自の Web サービスに署名を確実に実装できます。ご不明な点がございましたら、Aws_GetSignature秘密鍵を使用して、定数文字列「AmazonS3」、オペレーション名、およびタイムスタンプの RFC822 表現の連結に対して SHA1 ハッシュを実行する 9 行の関数です。

    DateTime timestamp = Aws_GetDatestamp();
    string signature = Aws_GetSignature( "PutObject", timestamp );
    byte[] data = UnicodeEncoding.ASCII.GetBytes( content );
    service.PutObjectInline( "MainBucket", cAWSSecretKey, metadata,
            data, content.Length, null,
            StorageClass.STANDARD, true,
            cAWSAccessKeyId, timestamp, true,
            signature, null );
    

編集: Amazon ID のシークレット キー部分は非表示のままにしておくことができますが、アクセス キー ID 部分はリクエストに埋め込む必要があることに注意してください。独自の Web サービスを介してファイルを送信しない限り、ファイルをアプリに埋め込む必要があります。

于 2009-07-21T21:25:31.063 に答える
0

構成ファイルを暗号化するか、ProtectedDataを使用することができます。これが両方に関する私のブログ投稿です。

更新:インストール手順の一部としてapp.configを暗号化する必要があるかもしれません。こちらのサンプル:http://www.codeproject.com/KB/security/encryptstrings.aspx。素晴らしいとは言えませんが、私がこれまでに見つけた中で最高のものです。

于 2009-07-21T19:26:46.047 に答える
0

プログラムのコピーを入手した人は誰でもS3/SimpleDBのデータにアクセスできますか?そうでない場合は、AWSセキュリティから独立した独自の認証スキームが必要になります。

その場合、顧客に提供するクレデンシャル(ユーザー名/パスワード、デジタル証明書など)を受け入れてから、プログラムに必要なS3/SimpleDB操作を実行するWebサービスを実装できます。そうすれば、AWSクレデンシャルがAWSを離れることはありません。特定のユーザーの資格情報が侵害された場合、Webサービスでそれらの資格情報をキャンセルできます。

于 2009-07-29T22:36:06.513 に答える
0

私が抱えている主な問題は、aws 資格情報をアプリケーションに保存するか、他のスキームを使用する必要があることです。

Windows には、Apple のKeychain Managerに似たシステム全体のサービスがありますか? その場合は、資格情報をそこに置きます。そうでない場合は、強力に暗号化されたバージョンの AWS 資格情報を保存するために、水で薄めたバージョンを構築することができます。

署名には、アップロードされているファイルのすべてのデータが必要ですか?

HMAC SHA-1 署名は、HTTP 要求ヘッダーのエンコードされた暗号化です。この署名はハッシュ値であり、データに比べて非常に短く、わずか 20 バイトの長さです。

于 2009-07-21T19:10:22.460 に答える