AccessDenied: User is not authorized to perform: cloudfront:CreateInvalidation on resource

hjnoh·2022년 8월 8일
3

AWS S3 Bucket, CloudFront, Github Actions를 이용한 CI/CD 환경을 구성하고 있었다. 다른 블로그들 보면서 똑같이 하고 액션도 돌아갔는데.. deploy에서 에러가 났다

다른 사람들은 이런 에러 없던데 아무튼 이런 에러가 났다.
IAM 유저에게는 AmazonS3FullAccessAWSCodeDeployFullAccess 권한을 부여한 상태였다.
이 에러를 어떻게 해결할까?
CreateInvalidation 은 대체 뭐에 대한 권한일까?

🪜🔨Troubleshooting

지금 보니까 처음에 유저에 들어갈 필요 없이 Policies에서 바로 정책 추가하고 IAM에 연결만 하면 될 것 같은데 일단은 했던 거랑 또옥같이 적도록 하겠다. 혹시 모르니까.

1. 일단 AWS 콘솔에 접속해서 다음과 같이 사용하고 있는 IAM 유저로 들어가자.

2. Add permissions

3. Attach existing policied directly -> Create policy

4. Service에서 CloudFront 선택.

입력창에서 바로 검색하면 빠르다.

5. Actions에서 CreateInvalidation 선택.

역시 입력창에서 바로 검색하면 빠르다.

6. Resources에서 All resources 선택.

AWS 관련된 모든 작업이 그렇듯이, 개별적으로 진행하는게 베스트라고 안내해준다.

7. 정책 생성

Next 눌러가면서 리뷰쯤 되면 이름과 설명 원하는 걸로 짓고 Create policy 하면 된다.

8. 다시 1-2 반복


9. Attach existing policied directly -> 방금 만든 정책 선택 -> 파란 버튼만 계속 클릭

10. 마지막으로 푸쉬를 통해 액션 재실행.

감동적이다...

💡CreateInvalidation

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

Invalidation. 직역하면 무효화다. 대체 뭘 무효화 한다는 걸까.
찾아보니 CloudFront의 주요한 기능에 연관되어 있었다.
CloudFront는 전 세계 400개 이상의 엣지 로케이션 및 13개 이상의 중간 리전 캐시를 두고, 연결된 도메인에 대한 정보를 캐싱해서 전 세계의 사용자들에게 빠른 UX를 제공할 수 있다.

예를 들어, 한국에 있는 서버에 저어 지구 반대편 아르헨티나 사람이 접속한다고 하자.
라우터들은 바다아래 광케이블로 연결되어 있는 만큼 물리적으로 떨어져있으면 어쨌든 시간이 더 걸린다.
그러니 한국에서 한국 서버에 접속하는 것보다는 아르헨티나에서 한국 서버에 접속하는 속도가 훨씬 느릴 것이다.
하지만 우리가 아는 주요 해외 사이트들, 구글이나 넷플릭스 등을 이용할 때는 체감이 어려울 정도로 그냥 빨리 나온다.
어떻게 가능할까?

바로 전세계의 엣지에 사이트에 대한 정보를 미리 저장해놓는 것이다.

아르헨티나와 한국의 예를 계속 들자면, 아르헨티나 사람이 한국에 원본 서버가 있는 www.domain.com 으로 접속을 하면, 한국 서버까지 광케이블 여행을 하는 게 아니라 미리 캐싱해둔 데이터를 AWS 아르헨티나 엣지 로케이션에서 꺼내다 쓰게 된다.

그래서 뭘 무효화해?

간단하게 말해서 캐싱된 데이터를 무효화한다. CloudFront를 만든 순간 전 세계의 엣지에 데이터가 캐싱된다. CloudFront는 기본 설정 그대로라면 캐시된 데이터를 24시간동안 유지하고, 이 시간이 만료되면 원본 데이터를 갱신한다. Invalidation은 갱신시점(예: 24시간)까지 기다리지 않고 전 세계의 기존 캐시를 무효화 한 뒤, 데이터를 갱신한다는 의미였다.

그래서 왜 에러남?

일단 workflow에 invalidation을 실행하는 부분이 있고, 해당 IAM이 Invalidation에 대한 권한이 없어서 그런 건 맞는 것 같다.
근데 다른 블로그들은 이 권한 설정에 대한 언급이 없는데 도대체 어떻게 잘 됐는지.. 조금 궁금하다.
더 확실히 알게 되면 글을 업데이트 하기로..

2개의 댓글

comment-user-thumbnail
2022년 8월 8일

너무 멋진글입니다

답글 달기
comment-user-thumbnail
2022년 8월 8일

다니입글진멋 무너

답글 달기