12

Amazon の Security Token Service を使用して一時ユーザーを作成し、S3 バケットのサブディレクトリにアクセスするアプリを構築しています。ユーザーは、バケットへの完全な読み取り/書き込みアクセス権 (およびユーザーの作成に必要なアクセス許可) を持つ IAM ユーザーによって作成されます。

ユーザーの作成はセッションの有効期限などと一緒に完全に機能していますが、キーのプレフィックスベースのリストを許可する適切なポリシーを適切に設定するのに問題があります。エンド ユーザーに付与する権限は次のとおりです。

  1. 定義された接頭辞にあるオブジェクトを読み取る
  2. 同じ定義済みプレフィックスにオブジェクトを書き込む
  3. 定義されたプレフィックスに存在するすべてのオブジェクトをリストします

なんとか読み書きはできましたが、何を試してもリストへのアクセスが正しく機能しません。一番近くにいたときに使用していた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% うまく機能しますが、ユーザーが互いの作業を上書きすることを可能にするプレフィックスに制約されるものは何もないという明らかな問題があります。

ポリシーで何が間違っていますか?

4

2 に答える 2

7

ユーザーを S3 バケット内のプレフィックスに制限するポリシーの作成について具体的に説明しているため、この記事は興味深いかもしれません。

モバイル アプリケーションの認証情報管理

ほとんどの場合、2 番目のポリシーを参照するだけで済みます。

{ 
        "Statement":
        [
            {
              "Effect":"Allow",
              "Action":["s3:PutObject","s3:GetObject","s3:DeleteObject"],
              "Resource":"arn:aws:s3:::__MY_APPS_BUCKET_NAME__/__USERNAME__/*"
            },
            {
              "Effect":"Allow",
              "Action":"s3:ListBucket",
              "Resource":"arn:aws:s3:::__MY_APPS_BUCKET_NAME__",
              "Condition":{"StringLike":{"s3:prefix":"__USERNAME__/"}}
            },
            {
              "Effect":"Deny",
              "Action":["sts:*", "iam:*", "sdb:*"],
              "Resource":"*"
            }
        ]
}

最初の 2 つのステートメントは、最も関心のあるものです。

お役に立てれば。

于 2013-04-15T17:02:55.800 に答える