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: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/*"
    }
  ]
}

동의합니다. 일부 작업의 경우 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.