[amazon-web-services] S3 버킷 작업이 리소스에 적용되지 않음

이 답변 의 지침 에 따라 S3 버킷 정책을 생성합니다.

{
  "Id": "Policy1495981680273",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1495981517155",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::surplace-audio",
      "Principal": "*"
    }
  ]
}

다음 오류가 다시 나타납니다.

작업이 문의 리소스에 적용되지 않습니다.

내 정책에서 무엇을 놓치고 있습니까?



답변

IAM의 문서에서, http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

일부 서비스에서는 개별 리소스에 대한 작업을 지정할 수 없습니다. 대신 Action 또는 NotAction 요소에 나열한 모든 작업이 해당 서비스의 모든 리소스에 적용됩니다. 이 경우 Resource 요소에 와일드 카드 *를 사용합니다.

이 정보를 통해 리소스는 다음과 같은 값을 가져야합니다.

"Resource": "arn:aws:s3:::surplace-audio/*"


답변

s3:ListBucket권한을 제거하는 것만으로 는 나에게 충분한 해결책이 아니며 다른 많은 사람들에게도 적합하지 않을 수 있습니다.

당신이 원하는 경우 s3:ListBucket권한을, 당신은 단지합니다 (없는 버킷의 일반 ARN이 필요합니다 /*이 권한이 버킷 내에서 항목을 양동이 자체에 적용되지 말을).

아래와 같이, 당신은 있어야 s3:ListBucket처럼 버킷 내에서 항목에 관한 권한과는 별도의 성명 등의 허가 s3:GetObjects3:PutObject:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}


답변

오류 작업이 문의 리소스에 적용되지 않습니다.

단순히 정책에 작성한 작업이 리소스에 적용되지 않음을 의미합니다. 누구나 내 버킷에서 다운로드 할 수 있도록 버킷을 공개하려고했습니다. 내 진술에서 ( “s3 : ListBucket”)을 제거 할 때까지 오류가 발생했습니다.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bucket-name/*",
      "Principal": "*"
    }
  ]
}

목록 버킷은 버킷 내부에 적용되지 않으므로이 작업 정책을 삭제하면 제대로 작동했습니다.


답변

방금이 문제가 발생하여 동일한 정책에 ListBucket 및 GetObject를 포함하려는 사용자를위한 더 짧은 솔루션을 찾았습니다.

{
  "Id": "Policyxxxx961",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxx4365",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket-name",
          "arn:aws:s3:::bucket-name/*"
      ],
      "Principal": "*"
    }
  ]
}


답변

버킷을 만드는 동안 비슷한 문제에 직면했습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949"
            ]
        }
    ]
}


위의 코드를 다음과 같이 변경했습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949/*"
            ]
        }
    ]
}

버킷 이름
/ * 를 추가 하면 문제가 해결됩니다.

여기 내 버킷 이름은 mrt9949입니다.


답변

제 경우에는이 오류에 대한 해결책이 제가 적용한 일부 작업을 제거하려고했습니다. 그들 중 일부는이 리소스와 관련이 없거나이 리소스와 함께 사용할 수 없습니다. 이 경우 다음을 포함 할 수 없습니다.

GetBucketAcl ListBucket ListBucketMultipartUploads


답변

정책에 대한 Resource 태그 아래에 정의 된 arn의 패턴을 확인해야합니다.

“리소스”: “arn : aws : s3 ::: s3mybucketname / *”

끝에 “/ *”를 추가하면 버킷에 대해 퍼블릭 액세스 정책을 차단 해제 한 후에도 문제가 발생하면 문제를 해결하는 데 도움이됩니다.