2017-12-08 10 views
0

バケットのすべてのコンテンツを特定のユーザーのリストに共有することは非常に基本的な目標です。これは、s3cmdというツールで動作するために使用されました。私がする必要があるのは、読み取り権限を持つアクセス制御リストにユーザー(電子メールで識別されたユーザー)を追加するだけでした。そして、ユーザーはデータをスムーズに一覧表示またはダウンロードすることができました。AWSバケットポリシーエラー:ポリシーに無効な処理があります

しかし最近、これは突然動作しなくなりました。システムはバケットにアクセスしようとする試みを拒否します。

私はバケツポリシーの編集を考え始めました。ここでポリシージェネレータによって生成された私の政策の草案は、(機密情報を匿名化された)である。

{ 
    "Id": "Policy123456789", 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "Stmt1512705836469", 
     "Action": [ 
     "s3:GetObject", 
     "s3:ListBucket", 
     "s3:ListObjects" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::mybucketname", 
     "Principal": { 
     "AWS": [ 
      "arn:aws:iam::anotheruserid:user/admin" 
     ] 
     } 
    } 
    ] 
} 

私は、「保存」をクリックすると、私はエラー「ポリシーが無効なアクションを持っている」です。私は、そのポリシーが

{ 
    "Id": "Policy123456789", 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "Stmt1512705836469", 
     "Action": [ 
     "s3:GetObject", 
     "s3:ListBucket" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::mybucketname", 
     "Principal": { 
     "AWS": [ 
      "arn:aws:iam::anotheruserid:user/admin" 
     ] 
     } 
    } 
    ] 
} 

になるように「ListObjects」を削除しようとした別のエラーメッセージ「アクションは声明の中で任意のリソース(複数可)には適用されません」です。これらの2つのエラーは私には意味がありません。私が間違っていれば私を修正してください。私が正しい方向にないなら、私を助けてください。

私は http://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html でチュートリアルを実行しようとしましたが、成功しませんでした。以下のバケットポリシー使用して: ":// examplebucket AWSのS3のls S3" を実行するためにAccountBのawscliを使用した場合

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
     "Sid": "Example permissions", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::AccountB-ID:root" 
     }, 
     "Action": [ 
      "s3:GetBucketLocation", 
      "s3:ListBucket" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::examplebucket" 
     ] 
     } 
    ] 
} 

を私はエラーメッセージが表示されました。エラーメッセージは、 "ListObjects操作を呼び出すときにエラーが発生しました(AccessDenied):アクセスが拒否されました"。これは私を混乱させる。 ListObjectを追加すると、「無効な」エラーが表示されます。 "ListObjects"を削除すると、別のユーザーがバケットのコンテンツを読み取ることができませんでした。

どうすればよいですか?

答えて

1

私はそれがバケツ内とは対照的に、バケツにを操作する操作に来るときポリシーエディタが賢くなってきたと思われます。

また、ListObjectsは怒っているようですので、放置してください。

このポリシーは、バケットの内容が記載されているとオブジェクトが検索されることを可能にする:

{ 
    "Id": "Policy1", 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "Statement1", 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket", 
       "s3:GetObject" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::my-bucket", 
       "arn:aws:s3:::my-bucket/*" 
      ], 
      "Principal": { 
       "AWS": "arn:aws:iam::123456789012:user/user-name" 
      } 
     } 
    ] 
} 

ListBucketがバケツに動作します。

GetObjectは、の内容のバケットので動作します。

ポリシー内に2つの別々のステートメント(バケット上に1つ、バケットの内容に1つ)を記述できますが、上記のように記述する方が簡単です。

+1

['s3:ListObjects'](http://docs.aws.amazon.com/IAM/latest/UserGuide/list_s3.html)はドキュメントエラーのようです。 's3:ListBucket'はバケット内のオブジェクトのリストを許可するアクションの不幸な名前です。私はそれに関するドキュメントのフィードバックを提出した。 –

+0

ありがとう!私はあなたのコードに従いました、そして、S3は私のバケツポリシーを受け入れます。しかし、私はまだ第3のユーザーが私のバケツにアクセスすることはできません。私が実行しようとしたコマンドは "aws s3 ls s3:// examplebucket"で、エラーは "ListObjects操作を呼び出すときにエラーが発生しました(AccessDenied):アクセスが拒否されました"でした。3番目のユーザーが行う必要があるものはありますか? – fanchyna

関連する問題