미리 서명된 URL을 통해 객체 다운로드 및 업로드
미리 서명된 URL을 사용하여 버킷 정책을 업데이트하지 않고도 Amazon S3의 객체에 시간 제한 액세스를 부여할 수 있습니다. 미리 서명된 URL은 브라우저에 입력하거나 프로그램에서 객체를 다운로드하는 데 사용할 수 있습니다. 미리 서명된 URL에서 사용하는 자격 증명은 URL을 생성한 AWS Identity and Access Management(IAM) 위탁자의 자격 증명입니다.
또한 미리 서명된 URL을 사용하여 다른 사람이 특정 객체를 Amazon S3 버킷에 업로드하도록 허용할 수도 있습니다. 이 경우 상대방에게 AWS 보안 자격 증명이나 권한이 없어도 업로드할 수 있습니다. 미리 서명된 URL에 지정된 것과 동일한 키를 가진 객체가 버킷에 이미 존재하는 경우 Amazon S3는 기존 객체를 업로드한 객체로 대체합니다.
미리 서명된 URL은 만료 날짜 및 시간까지 여러 번 사용할 수 있습니다.
미리 서명된 URL을 생성하면 자격 증명을 제공한 후 다음을 지정해야 합니다.
-
Amazon S3 버킷
-
객체 키(이 객체를 다운로드하면 Amazon S3 버킷, 업로드하면 업로드할 파일 이름)
-
HTTP 메서드(객체 다운로드를 위한
GET, 업로드를 위한PUT, 객체 메타데이터를 읽기 위한HEAD등) -
만료 시간 간격
미리 서명된 URL을 사용하여 객체를 업로드하는 경우 체크섬을 사용하여 객체 무결성을 확인할 수 있습니다. AWS 서명 버전 2로 생성된 미리 서명된 URL이 MD5 체크섬만 지원하지만 서명 AWS 버전 4로 생성된 미리 서명된 URL은 CRC-64/NVME, CRC32, CRC32C, SHA-1, SHA-256 등의 추가 체크섬 알고리즘을 지원합니다. 이러한 추가 체크섬 알고리즘을 사용하려면 AWS 서명 버전 4를 사용하고 업로드 요청에 적절한 체크섬 헤더를 포함해야 합니다. 객체 무결성에 대한 자세한 내용은 Amazon S3에서 객체 무결성 확인 섹션을 참조하십시오.
주제
미리 서명된 URL을 생성할 수 있는 사용자
유효한 보안 자격 증명을 가진 사용자는 누구나 미리 서명된 URL을 만들 수 있습니다. 미리 서명된 URL에서 제공하려는 작업을 수행할 권한이 있는 사용자가 생성해야 이 URL을 통해 성공적으로 객체에 액세스할 수 있습니다.
다음은 미리 서명된 URL을 생성하는 데 사용할 수 있는 자격 증명 유형입니다.
-
IAM 사용자: AWS 서명 버전 4를 사용할 경우 최대 7일 동안 유효함.
최대 7일 동안 유효한 미리 서명된 URL을 생성하려면 먼저 미리 서명된 URL을 만드는 데 사용하는 방법으로 IAM 사용자 자격 증명(액세스 키 및 비밀 키)을 위임합니다.
-
임시 보안 자격 증명 - 자격 증명 자체보다 오래 사용할 수 없습니다. 이러한 자격 증명에는 다음이 포함됩니다.
-
IAM 역할 자격 증명 - 만료 시간을 더 길게 지정하더라도 역할 세션이 만료되면 미리 서명된 URL이 만료됩니다.
-
Amazon EC2 인스턴스에서 사용하는 IAM 역할 자격 증명 - 역할 자격 증명 기간(일반적으로 6시간) 동안 유효합니다.
-
AWS Security Token Service 자격 증명 - 임시 자격 증명 기간 동안에만 유효합니다.
-
참고
임시 자격 증명을 사용하여 미리 서명된 URL을 생성하면 자격 증명이 만료되면 이 URL도 만료됩니다. 일반적으로 미리 서명된 URL은 URL을 만드는 데 사용한 자격 증명이 취소, 삭제 또는 비활성화될 때 만료됩니다. 이 URL이 자격 증명보다 이후의 만료 시간으로 생성된 경우에도 마찬가지입니다. 임시 자격 증명의 수명은 IAM 사용 설명서의 AWS STS API 작업 비교를 참조하십시오.
미리 서명된 URL의 만료 시간
미리 서명된 URL은 URL이 생성될 때 지정된 기간 동안 유효합니다. Amazon S3 콘솔로 미리 서명된 URL을 생성하는 경우 만료 시간은 1분~12시간 사이로 설정할 수 있습니다. AWS CLI또는 AWS SDK를 사용하는 경우 만료 시간을 최대 7일로 설정할 수 있습니다.
임시 토큰을 사용하여 미리 서명된 URL을 생성한 경우 토큰이 만료되면 이 URL도 만료됩니다. 일반적으로 미리 서명된 URL은 URL을 만드는 데 사용한 자격 증명이 취소, 삭제 또는 비활성화될 때 만료됩니다. 이 URL이 자격 증명보다 이후의 만료 시간으로 생성된 경우에도 마찬가지입니다. 사용하는 자격 증명이 만료 시간에 미치는 영향에 대한 자세한 내용은 미리 서명된 URL을 생성할 수 있는 사용자 섹션을 참조하십시오.
Amazon S3는 HTTP 요청이 있을 때 서명된 URL의 만료 날짜 및 시간을 확인합니다. 예를 들어 클라이언트가 만료 시간 직전에 대용량 파일을 다운로드하기 시작한 경우, 다운로드 중에 만료 시간이 경과해도 다운로드는 진행됩니다. 단, 연결이 끊어진 경우 클라이언트가 만료 시간 이후에 다운로드를 다시 시작하는 것은 불가능합니다.
미리 서명된 URL 기능 제한
미리 서명된 URL의 기능은 이를 만든 사용자의 권한에 의해 제한됩니다. 미리 서명된 URL은 기본적으로 이를 소유한 사용자에게 액세스 권한을 부여하는 보유자 토큰입니다. 따라서 이러한 URL은 적절하게 보호하는 것이 좋습니다. 미리 서명된 URL의 사용을 제한할 때 사용할 수 있는 몇 가지 방법은 다음과 같습니다.
AWS Signature Version 4(SigV4)
사전 서명된 URL 요청이 AWS Signature Version 4(SigV4)를 사용하여 인증될 때 특정 동작을 적용하기 위해 버킷 정책 및 액세스 포인트 정책에서 조건 키를 사용할 수 있습니다. 예를 들어, 다음 버킷 정책은 서명이 10분 이상 지난 경우 s3:signatureAge 조건을 사용하여 amzn-s3-demo-bucket 버킷의 객체에 대한 Amazon S3 미리 서명된 URL 요청을 거부합니다. 이 예제를 사용하려면 를 사용자의 정보로 대체합니다.user input
placeholders
AWS 서명 버전 4와 관련된 정책 키에 대한 자세한 내용은 Amazon Simple Storage Service API 참조의 AWS 서명 버전 4 인증을 참조하십시오.
네트워크 경로 제한
미리 서명된 URL의 사용과 모든 Amazon S3 액세스를 특정 네트워크 경로로 제한하려는 경우, AWS Identity and Access Management(IAM) 정책을 작성할 수 있습니다. 이러한 정책은 호출을 하는 IAM 보안 주체, Amazon S3 버킷 또는 그 두 가지 모두에 설정할 수 있습니다.
IAM 보안 주체에 대한 네트워크 경로 제한은 해당 자격 증명의 사용자가 지정된 네트워크에서 요청해야 합니다. 버킷 또는 액세스 포인트에 대한 제한은 해당 리소스에 대한 모든 요청이 지정된 네트워크에서 시작되도록 요구합니다. 이러한 제한은 미리 서명된 URL 시나리오 외부에서도 적용됩니다.
사용하는 IAM 전역 조건 키는 엔드포인트 유형에 따라 달라집니다. Amazon S3용 퍼블릭 엔드포인트를 사용하는 경우 aws:SourceIp를 사용합니다. Amazon S3에 대한 가상 프라이빗 클라우드(VPC) 엔드포인트를 사용하는 경우 aws:SourceVpc 또는 aws:SourceVpce를 사용하십시오.
다음 IAM 정책 설명에서는 보안 주체가 지정된 네트워크 범위에서만 AWS에 액세스해야 합니다. 이 정책 설명을 사용하면 모든 액세스가 해당 범위에서 시작되어야 합니다. 여기에는 Amazon S3에 대해 미리 서명된 URL을 사용하는 사례가 포함됩니다. 이 예제를 사용하려면 를 사용자의 정보로 대체합니다.user input
placeholders
{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"}, "BoolIfExists": {"aws:ViaAWSService": "false"} } }
미리 서명된 URL에 대해 자주 묻는 질문
Q: 미리 서명된 URL이 구성된 만료 시간보다 일찍 만료되는 이유는 무엇인가요?
미리 서명된 URL은 기본 자격 증명이 유효한 동안에만 유효합니다. 미리 서명된 URL은 구성된 만료 시간 또는 연결된 자격 증명이 만료되는 시점 중 먼저 도래하는 시점에 만료됩니다. Amazon Elastic Container Service 태스크 또는 컨테이너의 경우 역할 자격 증명은 일반적으로 1~6시간마다 교체됩니다. AWS Security Token Service(AWS STS) AssumeRole을 사용하는 경우 역할 세션이 종료되면 미리 서명된 URL이 만료되는데, 이는 기본적으로 1시간입니다. Amazon EC2 인스턴스 프로파일의 경우 메타데이터 자격 증명은 주기적으로 교체되며 최대 유효 기간은 약 6시간입니다.
Q: 미리 서명된 URL에 액세스할 때 403 금지됨 오류가 발생하는 이유는 무엇인가요?
미리 서명된 URL을 생성하기 전에 올바른 권한이 구성되어 있는지 확인하세요. URL을 생성하는 IAM 사용자 또는 역할에는 특정 작업에 필요한 권한(예: s3:GetObject)이 있어야 합니다. 또한 Amazon S3 버킷 정책이 객체에 대한 액세스를 명시적으로 거부하지 않는지 확인하세요.
Q: SignatureDoesNotMatch 오류가 발생합니다. 해결하려면 어떻게 해야 하나요?
Amazon S3 미리 서명된 URL을 사용할 때 SignatureDoesNotMatch 오류가 발생하면 몇 가지 일반적인 원인을 고려하세요. 먼저 짧은 시간 드리프트라도 서명을 무효화할 수 있으므로 시스템 클럭이 NTP(Network Time Protocol) 서버와 동기화되었는지 확인합니다. 그런 다음 일부 기업 프록시는 헤더 또는 쿼리 문자열을 수정하여 서명 불일치를 일으킬 수 있습니다. 문제를 해결하려면 프록시 없이 테스트를 시도하세요. 마지막으로 HTTP 메서드, 헤더 및 쿼리 문자열을 포함한 모든 요청 파라미터가 URL 생성과 사용 간에 정확히 일치하는지 확인합니다. 이러한 문제를 해결하면 SignatureDoesNotMatch 오류를 해결할 수 있는 경우가 많습니다.
Q: ExpiredToken 오류가 발생합니다. 어떻게 해야 합니까?
미리 서명된 URL을 사용하는 동안 ExpiredToken 오류가 발생하면 URL을 생성하는 데 사용된 AWS 자격 증명이 더 이상 유효하지 않음을 나타냅니다. 이 문제를 해결하려면 미리 서명된 새 URL을 생성하기 전에 AWS 자격 증명을 새로 고칩니다. 장기 실행 애플리케이션의 경우 지속적인 액세스를 유지하기 위해 자격 증명 새로 고침 로직을 구현하는 것이 좋습니다. 필요한 경우 수명이 긴 자격 증명을 사용하거나 토큰 새로 고침 메커니즘을 구현할 수 있습니다. AWS Security Token Service(AWS STS) AssumeRole을 사용하는 경우 구성된 세션 기간이 사용 사례 요구 사항을 충족하는지 확인합니다. 미리 서명된 URL은 기본 자격 증명 기간 동안만 유효하므로 적절한 자격 증명 관리를 구현해야 합니다.