Cloudfront(with S3)

hs·2022년 8월 3일
0
post-thumbnail

Cloudfront(with S3)

배포 생성으로 들어간다.

처음엔 전부 셋팅하지만 나중에 수정할 땐 3부위로 나뉜다.

  • 일반 - 설정
  • 원본 도메인
  • 동작

원본( 원본 도메인 )

원본 도메인 선택

  • S3, Elastic Load Balancer등을 연결 시킬 원본 도메인(엔드포인트?)

이름 - 이름

기본 캐시 동작 ( 동작 )

경로 패턴 - 기본값

자동으로 객체 압축 - Yes

*뷰어 엑세스 제한 - 따로 정리

캐시 키 및 원본 요청

캐시 정책 - CachingOptimized

원본 요청 정책 - CORS-S3Origin (S3의 Cors 정책을 똑같이 따르겠다.)

응답 헤더 정책 - CORS-with-prefilght-and-SecurityHeadersPolicy( 모든 Cors 정책과 보안 헤더 정책을 적용시키겠다?)

설정( 일반 - 설정 )

다 필요 없고 - 물론 아직은

기본값 루트 객체 - S3라면 빌드 파일의 시작 index.html

뷰어 엑세스 제한

서명 URL이라고도 하며 인증이 된 URL을 통해서만 접근이 가능하도록 URL을 만들어 전달한다.

이 URL은 수명을 줄 수도 있다.

YES를 선택할 경우

Trusted key groups 와 Trusted signer 이렇게 있는데

Trusted key groups

  • 키 그룹을 만들어 허용된 키들만 접근이 가능하게 한다.

Trusted signer

  • 인증된 사용자들만 사용할 수 있게 하는 것인데 아마 이 부분에서 필요했던거 같다..
  • 바로 cloudfront public key, private key, access key id 이렇게 3개를 만들어 준다. (말이 3개지 그냥 하나 만들면 다 만들어진다)
  • 일단 Node 버전으로 다 실패 했고 Python으로 성공하였다. ( 나머지 : Perl, PHP, Java, C#)

서명 URL에 대한 서명을 만드는 코드 예제

import datetime

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from botocore.signers import CloudFrontSigner

def rsa_signer(message):
    with open('<private key 경로>', 'rb') as key_file:
        private_key = serialization.load_pem_private_key(
            key_file.read(),
            password=None,
            backend=default_backend()
        )
    return private_key.sign(message, padding.PKCS1v15(), hashes.SHA1())

key_id = 'access key id'
url = '<cloudfront 도메인 + /index.html'
expire_date = datetime.datetime(2023, 1, 1) # 수명 주기를 정할 수 있다.

cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)

# Create a signed url that will be valid until the specific expiry date
# provided using a canned policy.
signed_url = cloudfront_signer.generate_presigned_url(
    url, date_less_than=expire_date)
print(signed_url)

위 코드를 실행하면 생성되는 URL을 통해 접근을 하면 된다. ( 기존 cloudfront 도메인으로 접속시 Missing key만 뜬다.)

profile
무엇이든 끝까지 보람차게

0개의 댓글