web-dev-qa-db-ja.com

パーミッションがs3の場合、S3用ListObjectsのアクセス拒否:*

私はなっています

ListObjectsオペレーションを呼び出すときにエラー(AccessDenied)が発生しました:Access Denied

s3バケットからフォルダを取得しようとしたとき.

このコマンドを使う

aws s3 cp s3://bucket-name/data/all-data/ . --recursive

バケットのIAMアクセス許可は次のようになります

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname/*"
        ]
    }
] }

copylsを成功させるためには何を変更する必要がありますか?

80
user1411335

S3バケット内のオブジェクトに対してコマンドを実行する権限を与えましたが、バケット自体に対してアクションを実行する権限を与えていません。次のようにポリシーを変更します。

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname",
            "arn:aws:s3:::bucketname/*"
        ]
    }
] }
136
Mark B

前述のようにコマンド "aws s3 cp s3://バケット名/データ/全データ/。--recursive"を使用してすべてのs3バケットオブジェクトを再帰的にコピーする場合は、次のようにする必要があります。

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::bucket-name"
          ]
      },
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObject"
          ],
          "Resource": [
              "arn:aws:s3:::bucket-name/data/all-data/*"
          ]
      }
  ]
}

このポリシーの最初のステートメントでは、バケット内のオブジェクトを一覧表示できます。この設定では、このバケットのサブディレクトリにあるオブジェクトも一覧表示できるようになります。 s3サブディレクトリへのアクセス許可だけをlsに与えることは不可能なので、このアクションをリソース "arn:aws:s3 ::: //バケット名/データ/全データ/"に適用してみてください。 t期待どおりに動作します(これを行うために複数の方法を試してみましたが、ここでの支援をいただければ幸いです)。

このポリシーの2番目のステートメントは、特定のサブディレクトリでオブジェクトをバケット内に入れることを可能にします。これは、 "s3://バケット名/データ/全データ/"パス内のすべてのものをコピーできることを意味します。 "s3:// bucket-name/data /"のような親パスからはコピーできないことに注意してください。

これと同様の問題がここにあり、それが私が与えている解決策に導いてくれました。 https://github.com/aws/aws-cli/issues/2408

この助けを願っています!

21
Robert Smith

"arn:aws:3 ::: bucketname"または "arn:aws:3 ::: bucketname *"でバケットのリソースを指定する必要があります。後者はバケツのオブジェクトに対する操作も可能にするので好ましいです。スラッシュがないことに注意してください。

オブジェクトの一覧表示はBucketの操作です。したがって、アクション "s3:ListBucket"が必要です。オブジェクトをバケットに追加することは、オブジェクトに対する操作です。したがって、アクション "s3:PutObject"が必要です。もちろん、必要に応じて他のアクションを追加したいと思うかもしれません。

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:PutObject"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname*"
        ]
    }
] 
}
9
marzhaev

S3にアクセスできませんでした。

  • 最初にインスタンスにキーアクセスを設定しました(起動後にロールを追加することは不可能でした)
  • 数ヶ月間それを忘れて
  • インスタンスに割り当てられたロール
  • アクセスしようとしました。構成されたキーはロールよりも優先度が高く、ユーザーに必要なS3権限が付与されていないためアクセスは拒否されました。

解決策:rm -rf .aws/credentials、そしてawsはroleを使います。

6
Putnik

私はs3:ListObjects操作のための "s3:ListBucket"を持っていますが、私は以下のようにポリシーを使うとき同じエラーを得ました。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
  ]
 }

それから私は1行を追加することでそれを修正しました "arn:aws:s3 ::: bucketname"

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
             "arn:aws:s3:::<bucketname>",
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
 ]
}
3
Gabriel Wu

エラーは "s3:ListObjects"アクションが原因であると考えていましたが、アクションを追加する必要がありました "s3:ListBucket" "S3オブジェクト用のListObjectsのアクセス拒否"の問題を解決するため

2
Sudhakar Naidu

私は同じ問題に直面しました。資格情報の設定を追加しました:

aws_access_key_id = your_aws_access_key_id
aws_secret_access_key = your_aws_secret_access_key

に 「〜/ .aws/credentials」 +デフォルトプロファイルのターミナルを再起動します。

マルチプロファイルの場合  - プロフィール argを追加する必要があります:

aws s3 sync ./localDir s3://bucketName --profile=${PROFILE_NAME}

どこで プロファイル名

.bash_profile ( or .bashrc) -> export PROFILE_NAME="yourProfileName"

クレデンシャルとマルチプロファイルの設定方法に関する詳細は、こちらをご覧ください こちら

1
Ihor Pavlyk

私は次を試しました:

aws s3 ls s3.console.aws.Amazon.com/s3/buckets/{bucket name}

これは私にエラーを与えました:

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

このフォームを使用するとうまくいきました:

aws s3 ls {bucket name}
0
Henry

同様の問題が発生しましたが、私にとっての問題は、bash_profileに異なるAWSキーが設定されていたことです。

私はここで同様の質問に答えました: https://stackoverflow.com/a/57317494/11871462

Bash_profileに競合するAWSキーがある場合、AWS CLIは代わりにこれらをデフォルトに設定します。

0
Varun Tandon