Laravel 앱에서 이미지를 S3에 저장하도록 변경하면 빠진 이야기

Laravel 앱에서 이미지를 S3에 저장하도록 변경하면 빠진 이야기



환경



Heroku
AWS(S3에서 이미지 저장)
PHP 7.3
Laravel 8.8.0
MySQL 5.6.47
HTML
CSS
블레이드

배경



원래 Laravel8로 만든 앱 배포는 모든 기능을 Heroku로 배포했습니다. 그러나 게시물 이미지가 일정 시간을 초과하면 이미지가 연결이 끊어집니다. 이것은 Heroku의 사양입니다.
이 문제를 해결하기 위해 이미지 저장 위치를 ​​AWS S3로 변경했습니다. 환경 변수의 설정등을 실시(이것은, 「Heroku Laravel S3」등으로 구그하면 나옵니다), 막상 화상을 투고하려고 하면 이하와 같은 에러가 나왔습니다.

①이것으로 화상을 투고하려고 하면…





②이렇다




긴… 덧붙여서 이미지없이 게시는 문제없이 할 수 있습니다. 이미지를 게시할 때만 이렇게 됩니다.

③ 우선 일본어로 해본다




일본어로 해도 탄석에 물. 꾸준히 해독합니다.
주목해야 할 것은 네 번째 줄의 403Forbidden이라는 설명.

403Forbidden이란?



Forbidden이란 "금지한다"는 의미의 영어.
403Forbidden은 "어떤 이유로 사이트를 볼 수 없거나 금지 된 상태입니다"라는 오류입니다.
즉, 권한(액세스 권한) 설정에서 연주될 가능성이 높습니다.

가설



오류 문장의 세 번째 줄에는 "AWS HTTP 오류"라고 쓰여 있습니다.
즉, 의심해야 할 것은 AWS 권한입니다. (이번에는 S3)

S3(AWS) 권한



S3의 권한은 버킷의 '액세스 권한'이라는 탭에서 설정할 수 있습니다.

이미지처럼 위의 두 체크를 제거합니다.
모두 제외해도 괜찮습니다만, 액세스 권한을 느슨하게 하는 것은 그만큼 보안이 취약해진다고 하는 것이므로, 최소한으로 두는 것에 넘은 적은 없을 것입니다.
따라서 아래 두 개는 차단된 상태로 둡니다.

덧붙여서, 아래 두 가지 옵션에 있는 버킷 정책은 "Access Policy Language (APL)를 사용하여 스토리지에 대한 액세스 여부를 정의하는 것"입니다. 어떤 액세스를 허용하고 어떤 액세스를 금지할지 코드로 정의할 수 있습니다.
액세스 포인트 정책은 거기에서 파생된 것으로, 문자 그대로 어디에서의 액세스라면 허가를 통과할지 등을 결정할 수 있는 것입니다. (예: VPC 내에서만 액세스 허용)
모두 이번에는 사용하지 않기 때문에 (특별한 설정을하지 않는 한 사용하지 않아야 함) 따라서 차단한 채로 둡니다.

위 두 가지 선택사항의 차이점은 '새'와 '임의' 부분이지만, 임의만 허용하면 이전에 게시한 이미지에 액세스할 수 있지만 새 게시를 할 수 없습니다.
따라서 이번에는 위의 두 가지를 제거합니다.

결과



무사히 게시할 수 있었습니다.


인사말



끝까지 봐 주셔서 감사합니다. 조금이라도 참고해 주시면 기쁩니다. 저 자신 프로그래밍 경력이 약 반년과 짧기 때문에, 이르지 않는 점도 많다고 생각합니다. 지적 등이 있으시면 코멘트에서 가르쳐 주시면 감사하겠습니다.

좋은 웹페이지 즐겨찾기