当前位置: 首页 > 知识库问答 >
问题:

用于S3存储桶的ListObjectsV2操作AccessDended

岳承悦
2023-03-14

在GitlabCi期间,我得到了:“致命错误:调用ListObjectsV2操作时发生错误(AccessDenied):访问被拒绝”

我的桶政策:

{
"Version": "2008-10-17",
"Statement": [
    {
        "Sid": "AllowPublicRead",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::BUCKET-NAME/*"
    }
]

}

在gitlabCI设置集中:

  • AWS\u ACCESS\u KEY\u ID:YOUR-AWS-ACCESS-KEY-ID
  • AWS\u SECRET\u ACCESS\u密钥:YOUR-AWS-SECRET-ACCESS-KEY
  • S3\u BUCKET\u NAME:YOUR-S3-BUCKET-NAME
  • DISTRIBUTION\u ID:CLOUDFRONT-DISTRIBUTION-ID

我的gitlab-ci.yml

image: docker:latest

stages:
  - build
  - deploy

build:
  stage: build
  image: node:8.11.3
script:
  - export API_URL="d144iew37xsh40.cloudfront.net"
  - npm install
  - npm run build
  - echo "BUILD SUCCESSFULLY"
artifacts:
   paths:
    - public/
expire_in: 20 mins
environment:
name: production
only:
   - master
deploy:
  stage: deploy
  image: python:3.5
dependencies:
   - build
script:
  - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
  - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
  - export S3_BUCKET_NAME=$S3_BUCKET_NAME
  - export DISTRIBUTION_ID=$DISTRIBUTION_ID
  - pip install awscli --upgrade --user
  - export PATH=~/.local/bin:$PATH
  - aws s3 sync --acl public-read --delete public $S3_BUCKET_NAME
  - aws cloudfront create-invalidation --distribution-id 
$DISTRIBUTION_ID --paths '/*'
  - echo "DEPLOYED SUCCESSFULLY"

environment:
   name: production
only:
  - master

共有3个答案

蓟捷
2023-03-14

尝试将bucket策略更新为:

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "AllowPublicRead",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::BUCKET-NAME",
            "arn:aws:s3:::BUCKET-NAME/*"
        ]
    }
] }

我希望你明白这是非常不安全的。

韦高格
2023-03-14

我最近有这个问题。无论我做了什么,无论我提供了什么权限,在运行aws s3 ls时,我总是得到“调用ListObjectsV2操作时出错(AccessDenied):拒绝访问”

我忘记了在我的环境中配置了多个aws配置文件。aws命令使用的是默认配置文件,该配置文件具有不同的访问密钥集。我必须为命令指定--profile标志:

aws s3 ls

成功了。这是一个利基情况,但也许它会帮助某人。

王高邈
2023-03-14

我不确定这个被接受的答案是否真的可以接受,因为它只允许在bucket上进行所有操作。此外,Sid具有误导性…;-)

这篇AWS文章提到了AWS s3 sync所需的权限。

相应的策略是这样的:

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "AllowBucketSync",
        "Effect": "Allow",
        "Action": [
            "s3:GetObject", 
            "s3:PutObject", 
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::BUCKET-NAME",
            "arn:aws:s3:::BUCKET-NAME/*"
        ]
    }
] }
 类似资料:
  • 有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?

  • 我有一个亚马逊S3桶,我公开了这样的政策 我的水桶现在显示为http://bucket.s3-website-us-east-1.amazonaws.com/ 我看到其他人把他们的水桶称为http://s3-us-east-1.amazonaws.com/bucket/ 我更喜欢第二个URL,但它给出了拒绝访问。 如何更改策略以允许第二个URL?

  • 所以我就做了如下的桶策略: {“版本”:“2012-10-17”,“ID”:“HTTP引用策略示例”,“语句”:[{“SID”:“允许从www.example.com和example.com发起的get请求”,“Effect”:“Allow”,“Principal”:“”Action“:”S3:“,”Resource“:”arn:aws:s3:::exampleBucket/“,”Conditio

  • 如果我能知道根本原因是什么就好了。

  • 我们有一些terraform配置,我们使用s3作为后端。我们有多个AWS帐户,每个环境一个。 在所有的环境和跨多个地区的情况下,我们有不同的选择 我不确定在不必在旧状态桶上运行destroy并在新状态桶上应用的情况下,实现这一点的最佳方法是什么。 我能想到的几个选项如下,但我不确定它们是否正确。 重命名s3桶:我明白这是不可能的(还是?) 移动s3桶:重命名的解决方案如这里所述。不确定这种方法是否

  • 我搞不清这里出了什么问题。如有任何帮助,我们将不胜感激。