S3 버킷 작업이 리소스에 적용되지 않음


124

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

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

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

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

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


1
링크에서 솔루션을 시도 했습니다 . stackoverflow.com/a/36551238/2786039 그리고 지금 작동합니다. 감사합니다
— 부옹 응우 엔

답변:


218

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

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

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

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

39
이것이 버킷의 정책 및 / 또는 정책 생성자에 언급되어 있지 않다는 것을 믿을 수 없습니다!
— Carles Alcolea

4
나는 *를 사용하고 있는데 여전히 그 오류가 발생합니다. 누군가 나를 도울 수 있습니까?
— Yehuda Clinton

@YehudaClinton, 나를 위해 일합니다. / *
— RMati

74

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

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

아래와 같이, 당신은 있어야 s3:ListBucket처럼 버킷 내에서 항목에 관한 권한과는 별도의 성명 등의 허가 s3:GetObject및 s3: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/*"
    }
  ]
}

동의합니다. 일부 작업의 경우 GetObject를 수행하기 전에 ListBucket 권한이 필요하므로이 답변이 더 철저합니다.
— 3cheesewheel

2
이것은 저에게 효과적이며 사용자가 기본적인 작업을 수행하도록 안내하기 위해 AWS가 여전히해야하는 작업의 양을 강조합니다.
— volvox

41

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

단순히 정책에 작성한 작업이 리소스에 적용되지 않음을 의미합니다. 누구나 내 버킷에서 다운로드 할 수 있도록 버킷을 공개하려고했습니다. 내 진술에서 ( "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": "*"
    }
  ]
}

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


"s3 : ListBucket"을 제거하여 저를 위해 일해 주셔서 감사합니다.
— Paul Watson

14

방금이 문제가 발생하여 동일한 정책에 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": "*"
    }
  ]
}

잘못됨 Principal-S3 정책 문법에 허용되지 않습니다.
— azec-pdx

위의 솔루션 중 어느 것도 나를 위해 일하지 않았으며, 주체가 유효하지 않거나 액세스가 거부되었습니다.
— Daniel

이것은 맞습니다. The Resource는이 경우 배열이어야하며 그 두 줄을 포함해야합니다. 투표하십시오.
— Assil

4

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

{
    "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입니다.


감사합니다! 이것을 찾고
— 보냈습니다

4

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

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket이 나를 잡았습니다! 감사합니다
— Quad64Bit

나를 위해 getObjet 만 유지할 때 일했습니다
— LittleTiger

0

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

"리소스": "arn : aws : s3 ::: s3mybucketname / *"

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


0
  • 인스턴스의 Amazon S3로 이동합니다.
  • 권한-> 공용 액세스 탭으로 이동하십시오.
  • 편집을 선택하고 모든 공개 액세스 차단 및 저장을 선택 취소합니다.
  • 권한 탭과 액세스 제어 목록에 '공개'태그가 표시됩니다.

0

다음과 같이 각 폴더에 대해 ListBuckets를 구성 할 수도 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

이러한 규칙은 SES와 함께 이메일을 수신하는 데 사용되지만 외부 사용자가 SES가 버킷에 넣은 파일을 볼 수 있도록합니다. https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/ 의 지침을 따랐습니다.

또한 domain.co/user/SDK를 사용할 때 접두사를 WITH 슬래시 로 지정해야합니다 . 그렇지 않으면 액세스가 거부됩니다. 누구에게나 도움이되기를 바랍니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.