웹 사이트 액세스에 대한 권한 설정 - Amazon Simple Storage Service

웹 사이트 액세스에 대한 권한 설정

버킷을 정적 웹 사이트로 구성할 때, 웹 사이트를 퍼블릭으로 설정하려면 퍼블릭 읽기 액세스 권한을 부여할 수 있습니다. 버킷을 공개적으로 읽기 가능하게 만들려면 버킷에 대해 퍼블릭 액세스 차단 설정을 사용 중지하고 퍼블릭 읽기 액세스 권한을 부여하는 버킷 정책을 작성해야 합니다. 버킷에 버킷 소유자가 소유하지 않은 객체가 포함되어 있는 경우 모든 사용자에게 읽기 권한을 부여하는 객체 ACL(액세스 제어 목록)을 추가해야 할 수도 있습니다.

버킷에 대한 퍼블릭 액세스 차단 설정을 비활성화하지 않으면서 웹 사이트를 퍼블릭으로 설정하려면 Amazon CloudFront 배포를 생성하여 정적 웹 사이트를 제공할 수 있습니다. 자세한 내용은 Amazon CloudFront로 웹사이트 속도 향상 또는 Amazon Route 53 개발자 안내서에서 Amazon CloudFront 배포를 사용하여 정적 웹 사이트 제공을 참조하십시오.

참고

웹 사이트 엔드포인트에서 사용자가 존재하지 않는 객체를 요청하는 경우, Amazon S3은 HTTP 응답 코드 404 (Not Found)를 반환합니다. 객체가 존재하지만 해당 객체에 대한 읽기 권한을 부여하지 않았다면 웹 사이트 엔드포인트는 HTTP 응답 코드 403 (Access Denied)을 반환합니다. 이 응답 코드를 사용하여 특정 객체가 존재하는지 여부를 유추할 수 있습니다. 이 동작을 원하지 않을 경우, 버킷에 웹 사이트 지원을 설정해서는 안 됩니다.

1단계: S3 퍼블릭 액세스 차단 설정 편집

기존 버킷을 퍼블릭 액세스를 포함하는 정적 웹 사이트로 구성하려면 해당 버킷에 대한 퍼블릭 액세스 차단 설정을 편집해야 합니다. 계정 수준의 퍼블릭 액세스 차단 설정을 편집해야 할 수도 있습니다. Amazon S3은 버킷 수준 및 계정 수준 퍼블릭 액세스 차단 설정의 가장 제한적인 조합을 적용합니다.

예를 들어 버킷에 대한 퍼블릭 액세스는 허용하지만 계정 수준의 모든 퍼블릭 액세스는 차단하는 경우 Amazon S3에서 해당 버킷에 대한 퍼블릭 액세스를 계속 차단합니다. 이 시나리오에서는 버킷 수준 및 계정 수준의 퍼블릭 액세스 차단 설정을 편집해야 할 수도 있습니다. 자세한 내용은 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단 섹션을 참조하세요.

기본적으로 Amazon S3은 계정 및 버킷에 대한 퍼블릭 액세스를 차단합니다. 버킷을 사용하여 정적 웹 사이트를 호스팅하려는 경우 이러한 단계를 사용하여 퍼블릭 액세스 차단 설정을 편집할 수 있습니다.

주의

이러한 단계를 완료하기 전에 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단을 검토하여 퍼블릭 액세스 허용과 관련된 위험을 이해하고 이에 동의하는지 확인합니다. 퍼블릭 액세스 차단 설정을 해제하여 버킷을 퍼블릭으로 만들면 인터넷상의 모든 사용자가 버킷에 액세스할 수 있습니다. 버킷에 대한 모든 퍼블릭 액세스를 차단하는 것이 좋습니다.

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 정적 웹 사이트로 구성한 버킷의 이름을 선택합니다.

  3. Permissions를 선택합니다.

  4. 퍼블릭 액세스 차단(버킷 설정)(Block public access (bucket settings))에서 편집(Edit)을 선택합니다.

  5. 모든 퍼블릭 액세스 차단(Block all public access)을 선택 취소하고 변경 사항 저장(Save changes)을 선택합니다.

    퍼블릭 액세스 차단 버킷 설정을 보여주는 Amazon S3 콘솔.

    Amazon S3은 버킷에 대한 퍼블릭 액세스 차단 설정을 끕니다. 정적 퍼블릭 웹 사이트를 생성하려면 버킷 정책을 추가하기 전에 계정에 대한 퍼블릭 액세스 차단 설정을 편집해야 할 수도 있습니다. 계정에 대한 퍼블릭 액세스 차단 설정이 현재 켜져 있는 경우 퍼블릭 액세스 차단(버킷 설정) 아래에 메모가 표시됩니다.

2단계: 버킷 정책 추가

버킷의 객체를 공개적으로 읽기 가능하게 만들려면 모든 사용자에게 s3:GetObject 권한을 부여하는 버킷 정책을 작성해야 합니다.

S3 퍼블릭 액세스 차단 설정을 편집한 후에는 버킷 정책을 추가하여 버킷에 퍼블릭 읽기 액세스 권한을 부여할 수 있습니다. 퍼블릭 읽기 액세스 권한을 부여하면 인터넷의 모든 사용자가 버킷에 액세스할 수 있습니다.

중요

다음 정책은 하나의 예일 뿐이며 버킷의 콘텐츠에 대한 전체 액세스를 허용합니다. 이 단계를 진행하기 전에 Amazon S3 버킷에 있는 파일을 보호하려면 어떻게 해야 하나요?를 검토하여 S3 버킷의 파일 보안을 위한 모범 사례 및 퍼블릭 액세스 권한 부여와 관련된 위험을 파악할 수 있습니다.

  1. 버킷에서 버킷의 이름을 선택합니다.

  2. Permissions를 선택합니다.

  3. 버킷 정책(Bucket Policy)에서 편집(Edit)을 선택합니다.

  4. 웹 사이트에 대한 퍼블릭 읽기 액세스 권한을 부여하려면 다음 버킷 정책을 복사한 후 버킷 정책 편집기에 붙여 넣습니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::Bucket-Name/*" ] } ] }
  5. Resource를 버킷 이름으로 업데이트합니다.

    앞의 버킷 정책 예제에서 Bucket-Name은 버킷 이름의 자리 표시자입니다. 자체 버킷에 이 버킷 정책을 사용하려면 자체 버킷 이름과 일치하도록 이 이름을 업데이트해야 합니다.

  6. [변경 사항 저장(Save changes)]을 선택합니다.

    버킷 정책이 성공적으로 추가되었음을 나타내는 메시지가 나타납니다.

    Policy has invalid resource라는 오류가 표시되면 버킷 정책의 버킷 이름이 사용자의 버킷 이름과 일치하는지 확인합니다. 버킷 정책 추가에 대한 자세한 내용은 S3 버킷 정책을 추가하려면 어떻게 해야 하나요?를 참조하십시오.

    오류 메시지가 나타나고 버킷 정책을 저장할 수 없는 경우 계정 및 버킷의 퍼블릭 액세스 차단 설정에서 버킷에 대한 퍼블릭 액세스를 허용하는지 확인합니다.

객체 ACL(액세스 제어 목록)

버킷 정책을 사용하여 객체에 퍼블릭 읽기 권한을 부여할 수 있습니다. 그러나 버킷 정책은 버킷 소유자가 소유한 객체에만 적용됩니다. 버킷에 버킷 소유자가 소유하지 않은 객체가 포함된 경우 버킷 소유자는 객체 ACL(액세스 제어 목록)을 사용하여 해당 객체에 대한 퍼블릭 읽기 권한을 부여해야 합니다.

S3 객체 소유권은 버킷에 업로드되는 객체의 소유권을 제어하고 ACL을 비활성화 또는 활성화하는 데 사용할 수 있는 Amazon S3 버킷 수준 설정입니다. 기본적으로 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 모든 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 액세스 관리 정책을 사용하여 객체에 대한 액세스를 독점적으로 관리합니다.

Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다. 각 객체에 대해 액세스를 개별적으로 제어할 필요가 있는 드문 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다. ACL을 비활성화하면 누가 객체를 버킷에 업로드했는지에 관계없이 정책을 사용하여 버킷의 모든 객체에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 단원을 참조하십시오.

중요

버킷이 S3 객체 소유권에 대해 버킷 소유자 적용 설정을 사용하는 경우 정책을 사용하여 버킷과 버킷의 객체에 대한 액세스 권한을 부여해야 합니다. 버킷 소유자 적용 설정이 활성화된 상태에서 액세스 제어 목록(ACL) 설정 또는 ACL 업데이트 요청은 실패하고 AccessControlListNotSupported 오류 코드를 반환합니다. ACL 읽기 요청은 계속 지원됩니다.

ACL을 사용하여 객체를 공개적으로 읽기 가능하게 만들려면 다음 부여 요소에 나와 있는 대로 AllUsers 그룹에 읽기 권한을 부여합니다. 객체 ACL에 이 부여 요소를 추가합니다. ACL 관리에 관한 자세한 내용은 ACL(액세스 제어 목록) 개요 섹션을 참조하십시오.

<Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant>