2017-01-13 9 views
1

私がしようとしているのは、(匿名の)ユーザーが指定したバケットにファイルを共有できるようにすることです。しかし、すでに存在するファイルを読み込むことはできません。バケットからオブジェクトを一覧表示/取得できる唯一のアカウントは、バケット所有者である必要があります。ここでS3ポリシー - パブリック書き込みのみ認証された読み取り

は、私がこれまでに得たものである:

{ 
"Version": "2012-10-17", 
"Id": "PutOnlyPolicy", 
"Statement": [ 
    { 
     "Sid": "Allow_PublicPut", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": [ 
      "s3:PutObject", 
      "s3:PutObjectAcl" 
     ], 
     "Resource": "arn:aws:s3:::myputbucket/*" 
    }, 
    { 
     "Sid": "Deny_Read", 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::myputbucket/*" 
    }, 
    { 
     "Sid": "Allow_BucketOwnerRead", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::myAWSAccountID:root" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::myputbucket/*" 
    } 
] 
} 

ていなくても、上記のポリシーは、バケット(アンドロイドアプリS3anywhere経由FE)にファイルを書き込むために私を可能にしますが、私は、オブジェクトを取得することはできません私の認証されたアカウントで

これをどのように達成できるかについてのヒントはありますか?ありがとう!

+1

バケットへの匿名アクセスを許可するのは間違いです。ただしないでください。しかし、もしあなたがとにかく行うのであれば、ポリシーを使ってACLをバケツ所有者フルコントロールにすることが非常に重要です。そうしないと、あなたがダウンロードできないオブジェクトになります。 ** **匿名アップロードの有効なユースケースはありません。 –

答えて

0

ポリシー内の拒否ステートメントが他のすべてよりも優先されます。デフォルトでは、特に許可されていないものはすべて拒否されるため、拒否ステートメントを削除するだけで、すべての操作が必要になります。

+0

これは私の最初の試みであり、不思議なことにバケットにファイルをアップロードした場合、f.e.アプリを経由して私はまだ公然とファイルを取得することができます。アップロードされたファイルには全くパーミッションが付いていないので、バケットからパーミッションを継承すると思います。 –

+0

AWS IAMポリシーシミュレータを試しましたか?あなたはそれからどのような結果を得ていますか? – Ann

1

デフォルトでは、匿名ユーザーはバケットのコンテンツを読み取ることができません。あなたのポリシーでのみこれらのラインを持っている必要がありますので:

{ 
    "Version": "2012-10-17", 
    "Id": "PutOnlyPolicy", 
    "Statement": [ 
    { 
     "Sid": "Allow_PublicPut", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": [ 
     "s3:PutObject", 
     "s3:PutObjectAcl" 
     ], 
     "Resource": "arn:aws:s3:::myputbucket/*" 
    }  
] 
} 
+0

別の答えによると、これは私の最初の試みでした。私はもう一度あなたのポリシーをコピー&ペーストしました。奇妙なことに、バケツにファイルをアップロードすると、f.e.アプリを経由して私はまだ公然とファイルを取得することができます。だから私はGETを明示的に拒否することにしましたが、それはうまく動作し、バケット所有者でさえも私には負えません。 :/ –

+0

@konrad_pe:あなたのバケツは管理コンソールのバケット 'Permissions'ペインのように、あなたのバケツに他のallow-public-readルールが他に定義されていない限り、あなたの答えがうまくいくはずです。 –

+0

'Permissions'ペインには、このバケットの2つのエントリがあります:権限" ME "(すべての権限)と" Any Authenticated AWS User "(LIST)。なぜ私は公共からオブジェクトにアクセスできるのか説明していないのですか?前述のように、オブジェクト自体にはアクセス権が設定されていません。 –

0

ポリシーがよさそうだ、私は校長にその問題を推測、あなたはそれがドキュメントhttp://docs.aws.amazon.com/AmazonS3/latest/dev/s3-bucket-user-policy-specifying-principal-intro.htmlに使用方法を見ることができます。おそらく使用する必要がありますAccountNumber-WithoutHyphens

+0

あなたの提案をありがとう。私はすでにそこにもいます。 F.e. {"CanonicalUser": "64-digit-alphanumeric-value"} '(もちろん、64桁の値はhttps://console.aws.amazonの正規のユーザーIDです。 com/iam/home?region = eu-central-1#/ security_credential)を指定します。このバケットはGETできません。 –

関連する問題