IT/Network & OS

[AWS] S3 403 Forbidden

루벤초이 2022. 4. 10. 13:04

그대로 따라했는데 403 Forbidden이 났어요. 무엇이 문제인지 분석해 봅시다.

 

Amazon S3에서 403 액세스 거부 오류 문제 해결

2.    버킷 정책 또는 IAM 정책이 사용자에게 필요한 Amazon S3 작업을 허용하는지 확인합니다. 예를 들어, 다음 버킷 정책은 s3:PutObjectAcl 작업을 포함하지 않습니다. IAM 사용자가 객체의 ACL(액세스

aws.amazon.com

  • 버킷 및 객체 소유권
    • aws s3api list-buckets --query Owner.ID
    • aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET
    • 비교해보니 Owner.ID가 잘 들어있네요.
  • 버킷 정책 또는 AWS Identity and Access Management(IAM) 사용자 정책: Bucket policy가 비어있다면 패스
  • IAM 권한 경계: Permissions boundary 없으니 패스
  • Amazon S3 퍼블릭 액세스 차단 설정: 퍼블릭 아니니까 패스
  • Amazon S3에 액세스하기 위한 자격 증명: 무슨 얘기인지 모르겠네요. 뭘 확인해야할까요?
  • 임시 보안 자격 증명
    • CloudTrail로 로그를 살펴봅니다. 그런데 좀 이상해요, 왜 request가 unAuth role일까요? auth role로 들어와야 하는 거 아닌가??

  • Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트 정책: 해당사항 없음
  • Amazon S3 액세스 포인트 정책: 액세스 포인트 없으므로 패스
  • 누락된 객체 또는 특수 문자가 있는 객체: head-object 명령으로 잘 나오네요.
  • AWS Key Management Service(AWS KMS) 암호화
  • 버킷에 요청자 지불이 활성화됨
  • AWS Organizations 서비스 제어 정책

돌이켜 생각해 보면, Node.js 앱에서는 잘 되고 ACL 설정에서 Authenticated users group에 List 허용만 해도 잘 되는데,

Node.js는 credentials이 필요없는데 반해(환경변수로 해결) React에서는 credentials을 적용해야 하므로 문제는 이 부분인 것 같습니다. amplify add storage로 생성된 S3에 권한문제가 발생한다니 좀 이상하긴 하지만... 구글링 해도 별로 쓰는 사람도 없는 것 같고 인기가 없어서 버그가 많은가...

const options = {
  region: REGION,
  credentials: fromCognitoIdentityPool({
    clientConfig: { region: REGION },
    identityPoolId: IDENTITY_POOL_ID
  })
}

 

S3 직접 만들기

튜토리얼을 참고하여 Bucket을 새로 만들고 policy를 만들어 IAM 유저 auth/unauth에 추가해줍니다. CORS도 설정해줍니다.

그런데도 403 오류가 나네요. 계정에 총체적인 문제가 있나 본데...... 하던 찰나,

 

범인은 Bucket policy!

ACL 끄고 Block all public access : off하고 아래와 같이 Bucket policy 추가해주니 되네요. 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::~~~~~~~~~~~~:role/amplify-~~~~~~-authRole",
                    "arn:aws:iam::~~~~~~~~~~~~:role/amplify-~~~~~~-unauthRole"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket_name",
                "arn:aws:s3:::bucket_name/*"
            ]
        }
    ]
}

여전히 이상한 건 당연히 자격 증명했으니 authRole로 요청이 들어와야할 것 같은데 unauth로 들어오네요. 때문에 위에서 authRole을 빼면 403이 또 나고요. 아직도 뭔가 이상하네요.

언제부턴가 Amplify 콘솔에서 - dev - authenticate 항목으로 들어가면 화면이 먹통되는데 뭔가 제대로 authRole로 안 넘어가는 것 같기도 하고 새로 만들어도 안되는 거 보면 계정 자체가 뭔가 꼬인 건가 싶기도 하고.

728x90
반응형

'IT > Network & OS' 카테고리의 다른 글

[SW Architecture] Tactics apllied to WebRTC  (0) 2023.03.05
MAC OS 이슈 모음  (0) 2022.10.30
[AWS] S3 SDK  (0) 2022.04.09
[AWS] IoT + React App + Amplify  (0) 2022.02.23
[AWS] IoT  (0) 2022.02.21