[amazon-web-services] 권한이 s3 : * 인 경우 S3 버킷의 ListObjects에 대해 AccessDenied

나는 얻고있다:

ListObjects 오퍼레이션을 호출 할 때 오류 (AccessDenied)가 발생했습니다. 액세스 거부

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성공적으로?



답변

S3 버킷 내부의 객체에 대한 명령을 수행 할 권한이 있지만 버킷 자체에 대한 작업을 수행 할 권한이 없습니다.

정책을 약간 수정하면 다음과 같습니다.

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

그러나 이것은 아마도 필요한 것보다 더 많은 권한을 부여 할 것입니다. 최소 권한 부여에 대한 AWS IAM 모범 사례를 따르면 다음과 같습니다.

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


답변

언급 한 “aws s3 cp s3 : // bucket-name / data / all-data /. –recursive”명령을 사용하여 모든 s3 버킷 객체를 복사하려면 다음을 수행하는 것이 안전하고 최소한의 정책입니다.

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

이 정책의 첫 번째 문은 특정 버킷의 하위 디렉토리 내에 객체를 나열 할 수있게합니다. 리소스는 S3 버킷의 영역이어야하며 해당 버킷의 하위 디렉토리로만 목록을 제한하려면 “s3 : prefix”값을 편집 할 수 있습니다.

이 정책의 두 번째 문장은 버킷 내의 객체를 특정 하위 디렉토리로 가져올 수 있도록합니다. 이것은 “s3 : // bucket-name / data / all-data /”경로 안에 복사 할 수있는 모든 항목을 의미합니다. 이렇게하면 “s3 : // bucket-name / data /”와 같은 상위 경로에서 복사 할 수 없습니다.

이 솔루션은 AWS CLI 명령에 대한 사용을 제한하기위한 것입니다. AWS 콘솔 또는 API를 통한 S3 액세스를 제한해야하는 경우 더 많은 정책이 필요합니다. https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/을 살펴보십시오 .

이와 비슷한 문제가 여기에서 발견되어 내가 제공하는 솔루션으로 이끌었습니다.
https://github.com/aws/aws-cli/issues/2408

도움이 되었기를 바랍니다!


답변

“arn : aws : 3 ::: bucketname”또는 “arn : aws : 3 ::: bucketname *”을 통해 버킷의 리소스를 지정해야합니다. 후자는 버킷 객체를 조작 할 수 있기 때문에 선호됩니다. 슬래시가 없습니다!

객체 나열은 버킷 작업입니다. 따라서 “s3 : ListBucket”조치가 필요합니다. 버킷에 객체를 추가하는 것은 객체에 대한 작업입니다. 따라서 “s3 : PutObject”작업이 필요합니다. 물론 필요에 따라 다른 작업을 추가 할 수도 있습니다.

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


답변

S3에 액세스 할 수 없었기 때문에

  • 먼저 인스턴스에서 키 액세스를 구성했습니다 (시작 후 역할을 연결할 수 없었습니다)
  • 몇 달 동안 잊어 버렸습니다
  • 인스턴스에 연결된 역할
  • 액세스하려고했습니다. 구성된 키가 역할보다 우선 순위가 높고 필요한 S3 권한이 사용자에게 부여되지 않아 액세스가 거부되었습니다.

솔루션 : rm -rf .aws/credentials, 그런 다음 aws역할 을 사용합니다.


답변

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"
    }
  ]
 }

그런 다음 한 줄 “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"
    }
 ]
}


답변

오류가 “s3 : ListObjects” 작업 으로 인한 것이라고 생각 했지만 “s3 : ListBucket” 작업을 추가하여 S3 버킷의 ListObjects에 대한 AccessDenied”문제를 해결해야했습니다.


답변

나는 같은 문제에 직면했다. 방금 자격 증명 구성을 추가했습니다.

aws_access_key_id = your_aws_access_key_id
aws_secret_access_key = your_aws_secret_access_key

“~ / .aws / 자격 증명” +는 기본 프로파일에 대한 터미널 다시 시작합니다.

다중 프로파일의 경우 –profile arg를 추가해야합니다.

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

여기서 PROFILE_NAME :

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

자격 증명 및 다중 프로필을 구성하는 방법에 대한 자세한 내용은 여기를 참조하십시오.