2016-10-06 13 views
0

バケツをすべて拒否するように制限しようとしていますが、特定のIAMユーザーからのアップロードを許可し、refererヘッダーに基づいてオブジェクトを取得します。ここに私の方針は次のとおりです。AWS S3バケットポリシー明示的拒否

{ 
    "Version": "2012-10-17", 
    "Id": "Meteor refer policy", 
    "Statement": [ 
     { 
      "Sid": "allow upload", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::556754141176:user/username" 
      }, 
      "Action": "s3:PutObject*", 
      "Resource": [ 
       "arn:aws:s3:::bucketname", 
       "arn:aws:s3:::bucketname/*" 
      ] 
     }, 
     { 
      "Sid": "Allow get", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:GetObject", 
      "Resource": "bucketname/*", 
      "Condition": { 
       "StringLike": { 
        "aws:Referer": [ 
         "http://myapp.com*", 
         "http://localhost*" 
        ] 
       } 
      } 
     }, 
     { 
      "Sid": "Explicit deny", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": "bucketname/*", 
      "Condition": { 
       "StringNotLike": { 
        "aws:Referer": [ 
         "http://myapp.com*", 
         "http://localhost*" 
        ] 
       } 
      } 
     } 
    ] 
} 

このポリシーは、正しくのみRefererヘッダにGetObject関数ディレクティブを施行したが、私は、私が述べたように、そのユーザーに何かをアップロードすることはできませんよ。明示的な否定を取り除くと、どこからでもオブジェクトにアクセスでき、リファラーは問題になりません。私のポリシーに何が間違っていますか?また、私はコンソールからバケツ内のものにアクセスすることはできません。そのために私は何をする必要がありますか?

ありがとう、

答えて

2

デフォルトでは、Amazon S3バケットのすべてのコンテンツはプライベートです。したがって、許可する必要のあるユーザーへのアクセスを追加するだけです。

また、単にPutObjectを付与することだけが、API呼び出しとListAllMyBucketsのような権限を必要とAWS Management Consoleの、経由のアクセスを許可しないだろうことができます。したがって、アップロードするユーザーに必要な権限があるか、許可されているAPI呼び出しのみが使用されていることを確認してください。したがって

  • ポリシーを拒否削除する - それはGetObject政策で
  • を必要とされていないことがバケットポリシーが適用されることに明示的なので、あなたも"Resource": "bucketname/*",を削除する必要がありますそれが添付されているバケット
  • アップロードするユーザーにAWS Command-Line Interface (CLI)またはアップロードするWebページを使用させる場合は、PutObjectまたは grant addここではAmazon S3のためにAWS管理コンソールを使用することができるようにするitional権限(下図参照)

は(Is there an S3 policy for limiting access to only see/access one bucket?のおかげで)Amazon S3の管理コンソール内のアップロードアクセスを許可します許可のセットです。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Stmt1", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetBucketLocation", 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucketname" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "s3:ListAllMyBuckets", 
      "Resource": "*" 
     } 
    ] 
} 
+0

説明をありがとうございます!私はS3バケットがデフォルトでプライベートであることは知っていましたが、明示的な拒否を削除したときはいつでもどこからでも写真を見ることができました。これは、私の3番目のツールがアップロードに使用していたACLのために、誰もが読み込みアクセス権を与えられたためだとわかりました。 ACLとポリシーを使ってサークルで自分自身をスピンしたと思う。説明ありがとう!好奇心の念から、この記事でAWSが明示的に否定することを提案するのはなぜですか? http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-4 – gkrizek

+0

私は記事が「示唆」しているとは思わない他のルールを上書きする場合は明示的に拒否を使用することができます。私が使用したい例は... Sys AdminsにすべてのS3バケットを表示する権限があるが、HRスタッフだけがアクセスできるようにするHRバケットがあるとしよう。 HRスタッフにHRバケットへのアクセスを許可してから、明示的拒否を使用して、アクセス権が別途付与されている場合でも(Sys Adminsなど)誰でもアクセスをブロックすることができます。 –

+0

ありがとうございます。それは理にかなっている! – gkrizek

関連する問題