web-dev-qa-db-ja.com

IAMユーザーがバケットを作成してアップロードできないのはなぜですか?

PDATE:翌日すべて正常に動作します!?!したがって、答えは、新しいIAMユーザーを作成した後、または新しいバケットを作成した後、アップロードが機能するまで、しばらく待つ必要があるということになると思います。


専用のIAMユーザーを作成してから、aws configureとキーを指定し、「eu-west-1」リージョンを指定しました。 〜/ .aws/configで正しい情報を確認できます。

私は試した aws s3 mb s3://backupが既に存在すると言われました。 aws s3 ls確認していません。しかしながら aws s3 mb s3://backup-specialtestうまくいきました。

しかし、私がしようとするとaws s3 cp test.tgz s3://backup-specialtest取得:

A client error (AccessDenied) occurred when calling the CreateMultipartUpload operation: Anonymous users cannot initiate multipart uploads.  Please authenticate.

問題になるのは、大きなファイルだけではありません。 6バイトのテキストファイルを作成し、aws s3 cp test.txt s3://backup-specialtest/が得ます:

upload failed: ./test.txt to s3://backup-specialtest/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied

aws s3 ls s3://backup-specialtestがくれます:

A client error (AccessDenied) occurred when calling the ListObjects operation: Access Denied

aws s3api get-bucket-acl --bucket backup-specialtestがくれます:

A client error (AccessDenied) occurred when calling the GetBucketAcl operation: Access Denied

AWSウェブコンソールで、ユーザーに「AmazonS3FullAccess」ポリシーをすでにアタッチしていました。ポリシーの表示をクリックすると、次のようになります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

それは見栄えがいいです。彼はすべてのリソースですべてのS3アクションを実行できます。

これを書いている間、私はまだ新しいバケットを作成できることを再確認するつもりだと思いました、そして途中で何も壊していませんでした。だから私はaws s3 mb s3://another-testおよび得た:

make_bucket failed: s3://another-test/ A client error (BucketAlreadyExists) occurred when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.

しかし、私が試したとき:aws s3 mb s3://another-test-2成功しました:

make_bucket: s3://another-test-2/

そして、そこにあります:aws s3 ls

2015-11-13 11:07:10 another-test-2
2015-11-13 10:18:53 backup-specialtest
2014-08-05 21:00:33 something-older

(最後のバケットは、昨年rootユーザーによって作成されたようで、空です。)

3
Darren Cook

最初に、バケット名がAmazonドメイン全体で一意であることを理解する必要があります。したがって、ユーザーがすでに「backup」という名前のバケットを持っている場合、この名前で新しいバケットを作成することはできません。

つまり、バケットの権限を管理するには、主に2つの方法があります。

  • バケットを作成するときは、デフォルトでアップロード/ダウンロードする権限が必要です。これを確認するには、バケットに移動し、バケット名をクリックしてから、[プロパティ]、最後に[許可]をクリックします。ここで、IAMユーザーが付与された権限にリストされていることを確認してください。必要に応じて他の権限を追加できます
  • それ以外の場合は、バケットポリシーを使用することもできます(上記の権限と同じ場所)。バケットポリシーの例 here があります。例として、次のようなものはバケットを公開する必要があります:

    {"Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "myPolicy",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::YOUR_BUCKET_NAME/*",
                "arn:aws:s3:::YOUR_BUCKET_NAME"
            ]
        }
    ]}
    
2
Tom