2017-03-27 15 views
0

私は既存のアプリケーションをAWS内のEC2、S3、RDSモデルに変換していますが、これまではうまくいっていますが問題はあります。 。Amazon S3アクセス許可クライアントコード

私のWebアプリケーションは、画像や文書のためのS3ボックスにアクセスし、これが保存されている方法は、

Data/ClientCode1/Images 
Data/ClientCode2/Images 
Data/ClientABC/Images -- etc 

また、WebアプリケーションをホストしているEC2のようwww.programname.com/ClientCode1/Index.aspx、同様の構造内で動作、クライアントコードであります例えば、これはクロスクライアントアクセスを防止するためのセキュリティを備えています。

www.programname.com/ClientCode1/Index.aspxが画像のS3にアクセスするとき、私はそれがS3のClientCode1フォルダにのみアクセスできることを確認する必要があります、目標はクライアントAの画像/文書を見ることを防ぐことですハイテクなソートを試みている

おそらく、ページリファラーを取得する方法はありますか、またはこの問題に対するより良いアプローチがありますか?

+0

Amazonでは、アクセス制御はIAMポリシーを使用して行われます。ここからドキュメントが始まります:http://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html – PaulG

答えて

0

Amazon S3へのアクセスを制御するためのURLやリファラーを使用する方法はありません。その情報はS3には表示されないため、アプリケーションに表示されるためです。

すべてのユーザーが同じアプリケーションを使用してAmazon S3のデータにアクセスしている場合は、アプリケーションのジョブがとなり、セキュリティが強化されます。これは、アプリケーションが単一の認証情報を使用してAWSサービスにアクセスするため、アプリケーションが要求するすべてのデータにアクセスする必要があるためです。

明確にする: Amazon S3は、ユーザーがどのページを表示しているかわかりません。あなたのアプリケーションだけがこれを知っています。したがって、アプリケーションでセキュリティを強化する必要があります。

+1

あなたの言うことは、真実ではなく、真実ではない、あいまいではない、真実です。 S3 *は、あなたが閲覧しているブラウザ*がどのページに表示されているのかを一般に知っていますが、 'aws:Referer' [条件キー](http://docs.aws.amazon.com/ IAM/latest/UserGuide/reference_policies_elements.html#Condition)...この機能は関連していないため、答えはまだ正しいです。これは、リバート元がブラウザそのものであり、信用できないため、敗北/バイパスするのは簡単ではないため、セキュリティメカニズムとしての使用には適していません。アプリは決定する必要があります。 –

0

私は、解決策を見つけた動作するようです良く

{ 
    "Version": "2012-10-17", 
    "Id": "http referer policy example", 
    "Statement": [ 
    { 
     "Sid": "Allow get requests referred by www.example.com and example.com.", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::clientdata/Clients/Client1/*", 
     "Condition": { 
     "StringLike": {"aws:Referer": ["http://www.example.com/Client1/*","http://example.com/Client1/*"]} 
     } 
    }, 
     { 
     "Sid": "Explicit deny to ensure requests are allowed only from specific referer.", 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::clientdata/Clients/Client1/*", 
     "Condition": { 
      "StringNotLike": {"aws:Referer": ["http://www.example.com/Client1/*","http://example.com/Client1/*"]} 
     } 
     } 
    ] 
} 

これは、私の場合、私は自分のパスに各クライアントに座っている、あなたはURLが指定したパスからであるかどうかを確認するためにリファラをチェックすることができますバケツは同じルールに従います。上記の例では、Client2にログインしてClient1バケットに強制的に画像を強制しようとすると、Client1からのユーザのみがClient1のバケットデータにアクセスできます。

関連する問題