개요

💡
Pre-signed URL이란 AWS 자원에 대한 접근 권한을 제공하기 위해서 사용되는 이름 그대로 사전에 적절한 권한을 가진 자격증명에 의하여 Signed 된 URL입니다. CloudFront의 signed URL과의 비슷한 개념이라고 생각하면 됩니다
      • 사용 도구
        RestAPI, AWS CLI,AWS CDK를 통해서 java,Net,Ruby,PHP,Node.js,python등을 통해 생성 가능합니다.
      • CLI :https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-windows.html 

         

        테스트

        <AWS CLI를 통하여 Presigned URL을 생성>

        • 버킷 생성
          • 해당 index.html 파일을 업로드 하여 테스트를 진행합니다.

           

        • CLI를 통한 Presigned URL 생성
          aws s3 presign s3://s3 object path –expires-in “만료시간” –region “대상리전”
          1. CLI를 통한 URL 정보 획득
            • 해당 URL은 S3 특정 Object를 다운로드할 수 있는 권한이 적용되어 있는 URL입니다.
            • 해당 expires 시간은 120 : 2분입니다.
          1. Presigned URL TEST
            1. 기존 bucket url을 통한 접속
              • 차단 확인 - 기본적으로 프라이빗 이기 때문
            1. Presigned-URL 접속
            1. Time over
        • 추가

          Bucket Policy를 이용하여 Presinged URL의 지정된 권한을 무시하여 방지

          지정된 VPC외부로 S3에 저장된 데이터를 공유하는 것을 방지 할 수 있습니다

          1. 정책 편집
            {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Sid": "Allow Bucket Access From specified VPC only",
                        "Effect": "Deny",
                        "Principal": {
                            "AWS": "arn:aws:iam::123456789012:user/username"
                        },
                        "Action": "s3:GetObject",
                        "Resource": "arn:aws:s3:::bucketname/*",
                        "Condition": {
                            "StringNotEquals": {
                                "aws:sourceVpce": "vpce-xxxxxxxx"
                            }
                        }
                    }
                ]
            }
          1. Presigned URL 생성
          1. 접속 test
            • 접근 차단 확인
          • boto 3 이용시
            import boto
            conn = boto.connect_s3()
            url = conn.generate_url(120, 'GET', bucket='presignedurl-sample-bucket', key='test.txt')
            print url

         

        결론

        따라서, Presigned URL 은 S3 Bucket을 공유할 때(다운로드 or 업로드) 편리하게 사용할 수 있다는 장점이 있지만 S3 Bucket에 대한 권한이 없는 환경에서도 Bucket 에 대한 접근 권한을 줄 수 있다는 점에서 조심스럽게 사용되어야 합니다.또한, 누구나 Presigned URL을 생성가능하며 permission이 필요하지 않습니다. 공유 대상이 되는 S3 Bucket 도 별도의 제한없이 지정이 가능합니다. 왜냐하면 S3 Presigned URL 은 공유 대상이 되는 S3 Bucket 과 Object 를 지정하고 공유를 하는 IAM 자격증명의 권한을 함께 지정함으로써 최종적으로 누군가가 Presigned URL 로 접근했을 때 Presigned URL 에 포함되어 있는 권한을 검사하여 해당 요청을 허용/차단하도록 동작하기 때문입니다. 즉, 최종적인 권한 검사는 Presigned URL 을 이용한 요청이 유입되었을 때 이루어지기 때문에 Presigned URL 을 생성하는 단계에서 어떤 제한을 적용할 수는 없습니다.따라서, Bucket Policy나 IAM Policy에 다양한 Condition을 적용하여 권한을 적절하게 제한하여 사용하는 것이 중요합니다.

         

         

 

 

 

 

'aws' 카테고리의 다른 글

RDS → s3 백업  (0) 2021.03.29
Elastisearch 를 사용 VPC FLOWLOGS  (0) 2021.03.29
CloudWatch / SSM Agent  (0) 2021.03.29
lb -acm 인증서를 이용한 접속  (0) 2021.02.09
route 53 도메인 연결  (0) 2021.02.09

+ Recent posts