S3は、ユーザ、バケット、およびオブジェクトの「文脈」で、すべての該当する当局をテストして要求を許可します。
How Amazon S3 Authorizes a Requestを参照してください。
このドキュメントは最初の読解では混乱しますが、複数のポリシーで何が起こっているのかが分かります。
心に留めておくべきいくつかのポイント:
- ユーザーがバケツを所有していません。 アカウント自分のバケット、およびアカウントを自分のユーザー。
- ユーザーがバケットを作成した場合、そのユーザーを所有するアカウントは常にそのバケットを所有します。
- ユーザーがオブジェクトを作成した場合、そのオブジェクトを作成したバケットが別のアカウントによって所有されていても、そのユーザーを所有するアカウントは常にそのオブジェクトを所有します。
お待ちください。
私のバケツにあなたのユーザがオブジェクトを作成する権限を与えた場合、あなたは実際にそのオブジェクトを所有します。あなたが私にそれを読む許可を与えない限り、私はそれを読むことができません。それは私のバケツの中にあり、私はそれを保存するために払っている、私はそれを削除することができますが、それは私がそれにアクセスできない限り、私はそのオブジェクトに行うことができます。
ユーザー権限(IAMポリシー)、バケツとバケツ(バケットポリシーとACL)、物事アカウントの物件に対して、物事勘定を実行することが許可されている権限自分が所有するオブジェクト(オブジェクトACL)に対して実行を許可します。
デフォルトアクションは暗黙的拒否ですが、明示的に拒否されていない限り、他の場所で許可することで、許可する権限を持つアカウントは許可されます。明示的な拒否は例外なく、常に拒否されます。モデルの
影響:
- 私のユーザーは、私のバケツ、私のオブジェクトは、唯一の助成金を必要とします。私のアカウントはすべてのリソースを所有しているので、3つの場所のいずれかでアクセスを許可する必要があります。IAMポリシー、バケットポリシー、またはオブジェクトでこれを行うことができます。
- あなたのバケツは2つのグラントを必要とします - 私はIAMポリシーでユーザーを許可します。とあなたはユートバッカーポリシーで自分のユーザーを許可する必要があります。私はあなたの同意なしにあなたのバケツに物事を行う権限を持っていないし、あなたは私のユーザーが私の同意なしに何かをすることを許可する権限がありません。
- IAMポリシーはユーザーに適用され、「すべてのユーザー」は自分のIAMユーザーの1人ではないため、オブジェクトACLまたはバケットポリシーを通じてバケット内のオブジェクトを公開することは可能ですが、IAMポリシーは使用できません。
したがって、権限モデルのために、S3には複数のソースが必要です。クロスアカウントを何もしていない場合、可能な組み合わせのいくつかを知らないので、これのいくつかは明白ではありません。
私のバケットポリシーにはほとんど注意を払う必要はありません。ユーザーにはIAMでアクセス権が与えられ、オブジェクトレベルでパブリックオブジェクトが公開されます(バケットポリシーでこれを行うことができますが、オブジェクトレベルでは明示的に指定する方が望ましい)ので、バケットポリシーは目的が限定されています。バケツポリシーはAES-256のないアップロードを拒否します(したがって、オブジェクトの暗号化を「忘れる」ことはできません)。また、CloudFrontとの相互運用のための発信元アクセスID規則が存在することがあります...バケツポリシーのカスタマイズはほとんどありません。それは私の設計理念なのです。
私は、リソースベースのポリシーがIDベースポリシーが追加される前であったためだと思うし、AWSは両方を1つに結合することはできません。ありがとう! –