Amazon の Security Token Service を使用して一時ユーザーを作成し、S3 バケットのサブディレクトリにアクセスするアプリを構築しています。ユーザーは、バケットへの完全な読み取り/書き込みアクセス権 (およびユーザーの作成に必要なアクセス許可) を持つ IAM ユーザーによって作成されます。
ユーザーの作成はセッションの有効期限などと一緒に完全に機能していますが、キーのプレフィックスベースのリストを許可する適切なポリシーを適切に設定するのに問題があります。エンド ユーザーに付与する権限は次のとおりです。
- 定義された接頭辞にあるオブジェクトを読み取る
- 同じ定義済みプレフィックスにオブジェクトを書き込む
- 定義されたプレフィックスに存在するすべてのオブジェクトをリストします
なんとか読み書きはできましたが、何を試してもリストへのアクセスが正しく機能しません。一番近くにいたときに使用していたRubyコードは次のとおりです。
AWS::STS::Policy.new do |policy|
policy.allow(
actions: ["s3:GetObject*", "s3:PutObject*", "s3:DeleteObject*"],
resources: "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/#{folder_path}/*"
)
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
).where(:s3_prefix).like("#{folder_path}/*")
end
思い出すと、これにより読み書きはできましたが、一覧表示はできませんでした。私はまだ開発中なので、コードを次のように変更しました。
AWS::STS::Policy.new do |policy|
# FIXME: This is way too permissive, but it's not working to be more specific.
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
)
end
これは 100% うまく機能しますが、ユーザーが互いの作業を上書きすることを可能にするプレフィックスに制約されるものは何もないという明らかな問題があります。
ポリシーで何が間違っていますか?