21

Amazon は、匿名ユーザーへのアクセス許可の付与の例を次のように提供しています ( Amazon S3 バケット ポリシーのケース例を参照)。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*"
        }
    ]
}

ポリシー内で、「arn:aws:s3:::bucket/」の「bucket」を「my-bucket」に変更しました。

ただし、そのバケットのフォルダー内の画像にアクセスしようとすると、次のアクセス拒否エラーが発生します。

この XML ファイルには、スタイル情報が関連付けられていないようです。ドキュメントツリーを以下に示します。

(その画像のプロパティを明示的にパブリックに変更し、その URL をリロードすると、画像は完全に読み込まれます)

私は何を間違っていますか?


更新 #1 : どうやら、私がアクセスを許可したサードパーティのサイトと関係があるようです。メイン ユーザー (私) としてすべてのアクセス許可があり、そのオブジェクトは同じフォルダーにあり、まったく同じアクセス許可がありますが、それらを公開することはできません。理由はわかりません。

更新 #2 : バケット ポリシーは、他のユーザーが「所有」しているオブジェクトには適用されません。それらがバケット内にある場合でも、詳細については私の回答を参照してください。

4

8 に答える 8

21

アップデート

GoodGets のコメントによると、実際の問題は、バケット ポリシーが他の誰かによって「所有されている」オブジェクトに適用されないことです。それらが自分のバケットにある場合でも、詳細についてはGoodGets 自身の回答(+1) を参照してください。


これは新しいバケット/オブジェクトの設定ですか、それとも既存の設定にバケット ポリシーを追加しようとしていますか?

後者の場合、利用可能な 3 つの異なる S3 アクセス制御メカニズム間の相互作用が原因で、関連する落とし穴に出くわした可能性があります。これは、たとえばACL とバケット ポリシーを一緒に使用するで対処されます。

バケットに ACL とバケット ポリシーが割り当てられている場合、Amazon S3 リソースへのアカウントのアクセス許可を決定する際に、Amazon S3 は既存の Amazon S3 ACL とバケット ポリシーを評価します。ACL またはポリシーで指定されたリソースにアクセスできるアカウントは、要求されたリソースにアクセスできます。

これは簡単に聞こえるかもしれませんが、ACL とポリシーの間で微妙に異なるデフォルトが原因で、意図しない干渉が発生する可能性があります。

既存の Amazon S3 ACL では、許可は常にバケットまたはオブジェクトへのアクセスを提供します。ポリシーを使用する場合、 deny は常に grant をオーバーライドします[鉱山を強調]

これは、ACL 付与を追加すると常にアクセスが保証される理由を説明していますが、これはポリシー付与の追加には適用されません。これは、セットアップの他の場所で提供された明示的なポリシー拒否が引き続き適用されるためです。ロジック

したがって、本番環境のシナリオに適用する前に、新しいバケット/オブジェクトのセットアップから始めて、目的の構成をテストすることをお勧めします (もちろん、それでも干渉する可能性がありますが、場合によっては違いを特定/デバッグする方が簡単です)。

幸運を!

于 2012-02-13T22:43:01.803 に答える
7

バケット ポリシーは、他の所有者のファイルには適用されません。そのため、サードパーティに書き込みアクセスを許可しましたが、所有権はサードパーティのままであり、バケット ポリシーはそれらのオブジェクトには適用されません。

于 2012-02-14T22:19:41.187 に答える
3

私はこれに何時間も費やしました。根本的な原因はばかげていました。ここで言及されている解決策は役に立ちませんでした (すべて試してみました)。AWS s3 アクセス許可のドキュメントでは、この点が強調されていませんでした。

設定がオンの場合Requester Pays、匿名アクセスを有効にすることはできません (バケット ポリシーまたは ACL 'Everyone' のいずれかによって)。ポリシーと ACL を作成して適用し、コンソールを使用して明示的にファイルをパブリックに設定することもできますが、署名されていない URL では、requester pays設定のチェックを外すまで、そのファイルで 403 アクセスが 100% 拒否されます。バケット全体のコンソール (バケットが選択されている場合は [プロパティ] タブ)。または、何らかの API REST 呼び出しを介してだと思います。

チェックされておらRequester Paysず、匿名アクセスが機能しており、リファラーの制限などがあります。公平を期すために、AWS コンソールは次のことを教えてくれます。

リクエスタ支払いが有効になっている間、このバケットへの匿名アクセスは無効になります。

于 2013-12-12T23:50:15.120 に答える
0

問題はアクションにあり、配列形式にする必要があります

これを試して:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

「リソース」でバケット名を渡します

于 2015-12-07T09:32:08.580 に答える