ACL 구성 - Amazon Simple Storage Service

ACL 구성

이 섹션에서는 ACL(액세스 제어 목록)을 사용하여 S3 버킷에 대한 액세스 권한을 관리하는 방법을 설명합니다. AWS Management Console, AWS Command Line Interface(CLI), REST API 또는 AWS SDK를 사용하면 리소스 AC에 대한 권한 부여를 추가할 수 있습니다.

버킷 및 객체 권한은 서로 독립적입니다. 객체는 해당 버킷으로부터 권한을 상속하지 않습니다. 예를 들어, 버킷을 만들고 사용자에게 쓰기 액세스 권한을 부여하는 경우 사용자로부터 명시적으로 권한을 부여 받지 않는 한 해당 사용자의 객체에 액세스할 수 없습니다.

다른 AWS 계정 사용자나 미리 정의된 그룹에 권한을 부여할 수 있습니다. 권한을 부여하는 사용자 또는 그룹을 피부여자라고 합니다. 기본적으로 소유자, 즉 버킷을 만든 AWS 계정에는 모든 권한이 있습니다.

사용자 또는 그룹에 부여하는 각 권한에 대해 버킷과 연결된 ACL에 항목이 추가됩니다. ACL은 피부여자와 그에 부여된 권한을 식별하는 권한 부여를 나열합니다.

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

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

중요

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

주의

모든 사람(퍼블릭 액세스) 또는 인증된 사용자 그룹(모든 AWS 인증 사용자) 그룹에는 쓰기 액세스 권한을 부여하지 않는 것이 좋습니다. 이러한 그룹에 쓰기 액세스 권한을 부여할 때의 영향에 대한 자세한 내용은 Amazon S3의 미리 정의된 그룹 섹션을 참조하십시오.

콘솔에는 중복된 피부여자에 대해 결합된 액세스 권한이 표시됩니다. ACL의 전체 목록을 보려면 Amazon S3 REST API, AWS CLI 또는 AWS SDK를 사용합니다.

다음 표에서는 Amazon S3 콘솔에서 버킷에 대해 구성할 수 있는 ACL 권한을 보여줍니다.

버킷에 대한 Amazon S3 콘솔 ACL 권한
콘솔 권한 ACL 권한 액세스
객체(Objects) – 나열(List) READ 피부여자가 버킷에서 객체를 나열할 수 있습니다.
객체 - 쓰기 WRITE 피부여자가 버킷에서 새 객체를 생성할 수 있습니다. 기존 객체의 버킷 및 객체 소유자는 해당 객체의 삭제 및 덮어쓰기도 허용합니다.
버킷 ACL - 읽기 READ_ACP 피부여자가 버킷 ACL을 읽을 수 있습니다.
버킷 ACL - 쓰기 WRITE_ACP 피부여자가 해당 버킷에 대한 ACL을 쓸 수 있습니다.
모든 사람(퍼블릭 액세스): 객체 - 목록 READ 버킷의 객체에 대한 공용 읽기 액세스 권한을 부여합니다. 모든 사람(퍼블릭 액세스)에 대한 목록 액세스 권한을 부여하면 전 세계 누구나 버킷의 객체에 액세스할 수 있습니다.
모든 사람(퍼블릭 액세스): 버킷 ACL - 읽기 READ_ACP 버킷 ACL에 대한 공용 읽기 액세스 권한을 부여합니다. 모든 사람(퍼블릭 액세스)에 읽기 권한을 부여하면 전 세계 누구나 버킷 ACL에 액세스할 수 있습니다.

ACL 권한에 대한 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

중요

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

버킷에 대한 ACL 권한 설정
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 권한을 설정하려는 버킷의 이름을 선택합니다.

  3. Permissions를 선택합니다.

  4. [액세스 제어 목록(Access control list)]에서 [편집(Edit)]을 선택합니다.

    버킷에 대한 다음과 같은 ACL 권한을 편집할 수 있습니다.

    Objects
    • 나열 - 피부여자는 버킷의 객체를 나열할 수 있습니다.

    • 쓰기 – 피부여자가 버킷에서 새 객체를 생성할 수 있습니다. 기존 객체의 버킷 및 객체 소유자는 해당 객체의 삭제 및 덮어쓰기도 허용합니다.

      S3 콘솔에서는 S3 로그 전송 그룹과 버킷 소유자(AWS 계정)에게만 쓰기 액세스 권한을 부여할 수 있습니다. 다른 피부여자에게는 쓰기 액세스 권한을 부여하지 않는 것이 좋습니다. 그러나 쓰기 액세스 권한을 부여해야 하는 경우 AWS CLI, AWS SDK 또는 REST API를 사용할 수 있습니다.

    Bucket ACL
    • 읽기 – 피부여자는 버킷 ACL을 읽을 수 있습니다.

    • 쓰기 – 피부여자는 해당하는 버킷의 ACL을 쓸 수 있습니다.

  5. 버킷 소유자의 권한을 변경하려면 버킷 소유자(AWS 계정) 옆에 있는 다음 ACL 권한을 선택하거나 선택 취소합니다.

    • [객체(Objects) – [나열(List)] 또는 [쓰기(Write)]

    • [버킷 ACL(Bucket ACL)] – [읽기(Read)] 또는 [쓰기(Write)]

    소유자란 AWS Identity and Access Management IAM 사용자가 아닌 AWS 계정 루트 사용자를 지칭합니다. 루트 사용자에 대한 자세한 내용은 IAM 사용 설명서의 AWS 계정 루트 사용자를 참조하세요.

  6. 일반 대중(인터넷의 모든 사용자)에게 권한을 부여하거나 권한 부여를 취소하려면 [모든 사용자(Everyone)] 옆에 있는 다음 ACL 권한을 지우거나 선택합니다.

    • [객체(Objects)] – [나열(List)]

    • [버킷 ACL(Bucket ACL) – [읽기(Read)]

    주의

    S3 버킷에 모든 사람 그룹 퍼블릭 액세스 권한을 부여할 때 주의하십시오. 이 그룹에 액세스 권한을 부여하면 전 세계 누구나 버킷에 액세스할 수 있습니다. S3 버킷에 대한 퍼블릭 쓰기 액세스 권한을 부여하지 않는 것이 좋습니다.

  7. AWS 계정을 가진 모든 사용자에게 권한을 부여하거나 권한 부여를 취소하려면 인증된 사용자 그룹(AWS 계정이 있는 모든 사용자) 옆에 있는 다음 ACL 권한을 선택하거나 선택 취소합니다.

    • [객체(Objects)] – [나열(List)]

    • [버킷 ACL(Bucket ACL) – [읽기(Read)]

  8. 서버 액세스 로그를 버킷에 쓸 수 있는 권한을 Amazon S3에 부여하거나 권한 부여를 취소하려면 [S3 로그 전송 그룹(S3 log delivery group)] 다음 ACL 권한을 지우거나 선택합니다.

    • [객체(Objects) – [나열(List)] 또는 [쓰기(Write)]

    • [버킷 ACL(Bucket ACL)] – [읽기(Read)] 또는 [쓰기(Write)]

      버킷이 액세스 로그를 수신할 대상 버킷으로 설정되면 버킷 권한을 통해 로그 전달 그룹에게 버킷에 대한 쓰기 액세스 권한을 허용해야 합니다. 버킷에서 서버 액세스 로깅을 사용 설정하면 로그 수신을 위해 선택한 대상 버킷에서 Amazon S3 콘솔이 쓰기 액세스 권한을 로그 전달 그룹에 부여합니다. 서버 액세스 로깅에 대한 자세한 내용은 Amazon S3 서버 액세스 로깅 사용 설정 단원을 참조하십시오.

  9. 다른 AWS 계정에 대한 액세스 권한을 부여하려면 다음을 수행합니다.

    1. [피부여자 추가(Add grantee)]를 선택합니다.

    2. [피부여자(Grantee)] 상자에 다른 AWS 계정의 정식 ID를 입력합니다.

    3. 다음 ACL 권한 중에서 선택합니다.

      • [객체(Objects) – [나열(List)] 또는 [쓰기(Write)]

      • [버킷 ACL(Bucket ACL)] – [읽기(Read)] 또는 [쓰기(Write)]

    주의

    다른 AWS 계정에 본인의 리소스 액세스를 허용하는 경우, AWS 계정이 자신의 계정에 속한 사용자에게 그 권한을 위임할 수도 있다는 사실을 염두에 두어야 합니다. 이것을 교차 계정 액세스라고 합니다. 교차 계정 액세스를 사용하는 자세한 방법은 IAM 사용 설명서에서 역할을 만들어 IAM 사용자에게 권한 위임 단원을 참조하십시오.

  10. 다른 AWS 계정에 대한 액세스를 제거하려면 다른 AWS 계정에 대한 액세스에서 제거를 선택합니다.

  11. 변경 사항을 저장하려면 변경 사항 저장을 선택합니다.

콘솔에는 중복된 피부여자에 대해 결합된 액세스 권한이 표시됩니다. ACL의 전체 목록을 보려면 Amazon S3 REST API, AWS CLI 또는 AWS SDK를 사용합니다. 다음 표에서는 Amazon S3 콘솔에서 객체에 대해 구성할 수 있는 ACL 권한을 보여줍니다.

객체에 대한 Amazon S3 콘솔 ACL 권한
콘솔 권한 ACL 권한 액세스
객체 - 읽기 READ 피부여자가 객체 데이터와 그 메타데이터를 읽을 수 있습니다.
객체 ACL - 읽기 READ_ACP 피부여자가 객체 ACL을 읽을 수 있습니다.
객체 ACL - 쓰기 WRITE_ACP 피부여자에게 해당 객체에 대한 ACL 쓰기를 허용합니다

ACL 권한에 대한 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

중요

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

객체에 대한 ACL 권한 설정
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷(Buckets) 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

  3. [객체(objects)] 목록에서 권한을 설정하려는 객체의 이름을 선택합니다.

  4. Permissions를 선택합니다.

  5. ACL(액세스 제어 목록)에서 [편집(Edit)]을 선택합니다.

    객체에 대한 다음과 같은 ACL 권한을 편집할 수 있습니다.

    객체
    • 읽기 – 피부여자는 객체 데이터와 해당하는 메타데이터를 읽을 수 있습니다.

    객체 ACL
    • 읽기 – 피부여자는 객체 ACL을 읽을 수 있습니다.

    • 쓰기 – 피부여자는 해당하는 객체의 ACL을 쓸 수 있습니다. S3 콘솔에서는 버킷 소유자(AWS 계정)에게만 쓰기 액세스 권한을 부여할 수 있습니다. 다른 피부여자에게는 쓰기 액세스 권한을 부여하지 않는 것이 좋습니다. 그러나 쓰기 액세스 권한을 부여해야 하는 경우 AWS CLI, AWS SDK 또는 REST API를 사용할 수 있습니다.

  6. 다음에 대한 객체 액세스 권한을 관리할 수 있습니다.

    1. 객체 소유자의 액세스

      소유자란 AWS Identity and Access Management IAM 사용자가 아닌 AWS 계정 루트 사용자를 지칭합니다. 루트 사용자에 대한 자세한 내용은 IAM 사용 설명서의 AWS 계정 루트 사용자를 참조하십시오.

      소유자의 객체 액세스 권한을 변경하려면 객체 소유자 액세스에서 해당 AWS 계정(소유자)를 선택합니다.

      변경하려는 권한에 대한 확인란을 선택한 다음, 저장을 선택합니다.

    2. 다른 AWS 계정에 대한 액세스

      다른 AWS 계정의 AWS 사용자에게 권한을 부여하려면 다른 AWS 계정에 대한 액세스 아래에서 계정 추가를 선택합니다. [ID 입력(Enter an ID)] 필드에 객체 권한을 부여할 AWS 사용자의 정식 ID를 입력합니다. 정식 ID 찾기에 대한 자세한 내용은 Amazon Web Services 일반 참조의 AWS 계정 식별자를 참조하십시오. 사용자는 최대 99명까지 추가할 수 있습니다.

      사용자에게 부여할 권한의 확인란을 선택한 다음, 저장을 선택합니다. 권한에 대한 정보를 표시하려면 도움말 아이콘을 선택합니다.

    3. 퍼블릭 액세스

      일반 대중(전 세계 모든 사람)에게 객체 액세스 권한을 부여하려면 퍼블릭 액세스에서 모든 사람을 선택합니다. 퍼블릭 액세스 권한을 부여한다는 것은 전 세계 누구든 객체에 액세스할 수 있다는 뜻입니다.

      부여하려는 권한에 대한 확인란을 선택한 다음, 저장을 선택합니다.

      주의
      • 모든 사람 그룹에 Amazon S3 객체에 대한 익명 액세스 권한을 부여할 때는 주의하십시오. 이 그룹에 대해 액세스 권한을 부여하면 전 세계 누구나 객체에 액세스할 수 있습니다. 모두에게 액세스 권한을 부여해야 하는 경우, Read objects(객체 읽기)에 대한 권한만 부여하는 것이 좋습니다.

      • 모든 사람 그룹에 객체 쓰기 권한을 부여하지 않는 것이 좋습니다. 이렇게 하면 누구든지 객체에 대한 ACL 권한을 덮어쓸 수 있습니다.

이 섹션에서는 버킷 및 객체에 대한 ACL(액세스 제어 목록) 권한 부여를 구성하는 방법을 보여주는 예제를 제공합니다.

중요

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

Java

이 섹션에서는 버킷 및 객체에 대한 ACL(액세스 제어 목록) 권한 부여를 구성하는 방법을 보여주는 예제를 제공합니다. 첫 번째 예제에서는 준비된 ACL을 사용하여 버킷을 생성하고(미리 제공된 ACL 단원 참조), 사용자 지정 권한 부여 목록을 생성한 다음 사용자 지정 권한 부여가 포함된 ACL로 준비된 ACL을 대체합니다. 두 번째 예제에서는 AccessControlList.grantPermission() 메서드를 사용하여 ACL을 수정하는 방법을 보여줍니다.

예 버킷을 생성하고, S3 로그 전송 그룹에 권한을 부여하는 미리 준비된 ACL을 지정합니다.

이 예제에서는 버킷을 생성합니다. 요청 시 이 예제는 로그 전달 그룹 권한을 부여하는 준비된 ACL을 지정하여 버킷에 로그를 기록합니다.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.*; import java.io.IOException; import java.util.ArrayList; public class CreateBucketWithACL { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String userEmailForReadPermission = "*** user@example.com ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .build(); // Create a bucket with a canned ACL. This ACL will be replaced by the // setBucketAcl() // calls below. It is included here for demonstration purposes. CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName, clientRegion.getName()) .withCannedAcl(CannedAccessControlList.LogDeliveryWrite); s3Client.createBucket(createBucketRequest); // Create a collection of grants to add to the bucket. ArrayList<Grant> grantCollection = new ArrayList<Grant>(); // Grant the account owner full control. Grant grant1 = new Grant(new CanonicalGrantee(s3Client.getS3AccountOwner().getId()), Permission.FullControl); grantCollection.add(grant1); // Grant the LogDelivery group permission to write to the bucket. Grant grant2 = new Grant(GroupGrantee.LogDelivery, Permission.Write); grantCollection.add(grant2); // Save grants by replacing all current ACL grants with the two we just created. AccessControlList bucketAcl = new AccessControlList(); bucketAcl.grantAllPermissions(grantCollection.toArray(new Grant[0])); s3Client.setBucketAcl(bucketName, bucketAcl); // Retrieve the bucket's ACL, add another grant, and then save the new ACL. AccessControlList newBucketAcl = s3Client.getBucketAcl(bucketName); Grant grant3 = new Grant(new EmailAddressGrantee(userEmailForReadPermission), Permission.Read); newBucketAcl.grantAllPermissions(grant3); s3Client.setBucketAcl(bucketName, newBucketAcl); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it and returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
예 기존 객체의 ACL 업데이트

이 예제에서는 객체에 대한 ACL을 업데이트합니다. 이 예에서는 다음과 같은 작업을 수행합니다.

  • 객체의 ACL 가져오기

  • 기존 권한을 모두 제거하여 ACL 지우기

  • 두 가지 권한 추가: 소유자의 경우 모든 액세스 권한 및 이메일 주소로 식별되는 사용자의 경우 WRITE_ACP(부여할 수 있는 권한 단원 참조)

  • 객체에 대한 ACL 저장

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.CanonicalGrantee; import com.amazonaws.services.s3.model.EmailAddressGrantee; import com.amazonaws.services.s3.model.Permission; import java.io.IOException; public class ModifyACLExistingObject { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyName = "*** Key name ***"; String emailGrantee = "*** user@example.com ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Get the existing object ACL that we want to modify. AccessControlList acl = s3Client.getObjectAcl(bucketName, keyName); // Clear the existing list of grants. acl.getGrantsAsList().clear(); // Grant a sample set of permissions, using the existing ACL owner for Full // Control permissions. acl.grantPermission(new CanonicalGrantee(acl.getOwner().getId()), Permission.FullControl); acl.grantPermission(new EmailAddressGrantee(emailGrantee), Permission.WriteAcp); // Save the modified ACL back to the object. s3Client.setObjectAcl(bucketName, keyName, acl); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET
예 버킷을 생성하고, S3 로그 전송 그룹에 권한을 부여하는 미리 준비된 ACL을 지정합니다.

이 C# 예제에서는 버킷을 생성합니다. 요청 시 이 코드는 로그 전달 그룹 권한을 부여하는 준비된 ACL을 지정하여 버킷에 로그를 기록합니다.

코드 예제 설정 및 실행에 대한 자세한 내용은 AWS SDK for .NET 개발자 안내서AWS SDK for .NET 시작하기를 참조하세요.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class ManagingBucketACLTest { private const string newBucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); CreateBucketUseCannedACLAsync().Wait(); } private static async Task CreateBucketUseCannedACLAsync() { try { // Add bucket (specify canned ACL). PutBucketRequest putBucketRequest = new PutBucketRequest() { BucketName = newBucketName, BucketRegion = S3Region.EUW1, // S3Region.US, // Add canned ACL. CannedACL = S3CannedACL.LogDeliveryWrite }; PutBucketResponse putBucketResponse = await client.PutBucketAsync(putBucketRequest); // Retrieve bucket ACL. GetACLResponse getACLResponse = await client.GetACLAsync(new GetACLRequest { BucketName = newBucketName }); } catch (AmazonS3Exception amazonS3Exception) { Console.WriteLine("S3 error occurred. Exception: " + amazonS3Exception.ToString()); } catch (Exception e) { Console.WriteLine("Exception: " + e.ToString()); } } } }
예 기존 객체의 ACL 업데이트

이 C# 예제에서는 기존 객체에 대한 ACL을 업데이트합니다. 이 예에서는 다음과 같은 작업을 수행합니다.

  • 객체의 ACL을 가져옵니다.

  • 기존 권한을 모두 제거하여 ACL을 지웁니다.

  • 소유자의 경우 모든 액세스 권한 및 이메일 주소로 식별되는 사용자의 경우 WRITE_ACP 권한, 이렇게 두 가지 권한을 추가합니다.

  • PutAcl 요청을 보내 ACL을 저장합니다.

코드 예제 설정 및 실행에 대한 자세한 내용은 AWS SDK for .NET 개발자 안내서AWS SDK for .NET 시작하기를 참조하세요.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class ManagingObjectACLTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** object key name ***"; private const string emailAddress = "*** email address ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); TestObjectACLTestAsync().Wait(); } private static async Task TestObjectACLTestAsync() { try { // Retrieve the ACL for the object. GetACLResponse aclResponse = await client.GetACLAsync(new GetACLRequest { BucketName = bucketName, Key = keyName }); S3AccessControlList acl = aclResponse.AccessControlList; // Retrieve the owner (we use this to re-add permissions after we clear the ACL). Owner owner = acl.Owner; // Clear existing grants. acl.Grants.Clear(); // Add a grant to reset the owner's full permission (the previous clear statement removed all permissions). S3Grant fullControlGrant = new S3Grant { Grantee = new S3Grantee { CanonicalUser = owner.Id }, Permission = S3Permission.FULL_CONTROL }; // Describe the grant for the permission using an email address. S3Grant grantUsingEmail = new S3Grant { Grantee = new S3Grantee { EmailAddress = emailAddress }, Permission = S3Permission.WRITE_ACP }; acl.Grants.AddRange(new List<S3Grant> { fullControlGrant, grantUsingEmail }); // Set a new ACL. PutACLResponse response = await client.PutACLAsync(new PutACLRequest { BucketName = bucketName, Key = keyName, AccessControlList = acl }); } catch (AmazonS3Exception amazonS3Exception) { Console.WriteLine("An AmazonS3Exception was thrown. Exception: " + amazonS3Exception.ToString()); } catch (Exception e) { Console.WriteLine("Exception: " + e.ToString()); } } } }

Amazon S3 API로 버킷이나 객체 생성 시 ACL을 설정할 수 있습니다. Amazon S3는 기존 버킷이나 객체에 ACL을 설정하는 API도 제공합니다. 이러한 API는 다음과 같은 ACL 설정 메서드를 제공합니다.

  • 요청 헤더를 사용한 ACL 설정– 리소스(버킷이나 객체) 생성 요청 전송 시, 요청 헤더로 ACL을 설정합니다. 이러한 헤더를 사용하여 미리 제공된 ACL을 지정하거나 권한을 명시적으로 지정(명시적으로 피부여자와 권한을 식별)할 수 있습니다.

  • 요청 본문을 사용한 ACL 설정– 기존 리소스에 대한 ACL 설정 요청을 전송 시, 요청 헤더나 본문에 ACL을 설정할 수 있습니다.

ACL 관리에 필요한 REST API 지원에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 다음 단원을 참조하십시오.

중요

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

ACL(액세스 제어 목록) 특정 요청 헤더

헤더를 사용하여 ACL(액세스 제어 목록) 기반 권한을 부여할 수 있습니다. 기본적으로 모든 객체는 비공개이며, 소유자만 모든 액세스 제어 권한을 가집니다. 새 객체를 추가할 때 개별 AWS 계정에 또는 Amazon S3에서 정의한 사전 정의된 그룹에 권한을 부여할 수 있습니다. 그런 다음 이러한 사용 권한이 개체의 ACL(액세스 제어 목록)에 추가됩니다. 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

이 작업을 통해 다음 두 가지 방법 중 하나를 사용하여 액세스 권한을 부여할 수 있습니다.

  • 미리 제공된 ACL(x-amz-acl) — Amazon S3는 미리 제공된 ACL이라고 하는 사전정의된 ACL 집합을 지원합니다. 미리 제공된 각 ACL에는 사전정의된 피부여자와 권한 집합이 있습니다. 자세한 내용은 미리 제공된 ACL 단원을 참조하십시오.

  • 액세스 권한 - 특정 AWS 계정 또는 그룹에 액세스 권한을 명시적으로 부여하려면 다음 헤더를 사용합니다. 각 헤더는 Amazon S3가 ACL에서 지원하는 특정 권한에 매핑됩니다. 자세한 내용은 ACL(액세스 제어 목록) 개요 단원을 참조하십시오. 헤더에서 특정 권한을 받는 피부여자 목록을 지정합니다.

    • x-amz-grant-read

    • x-amz-grant-write

    • x-amz-grant-read-acp

    • x-amz-grant-write-acp

    • x-amz-grant-full-control

AWS CLI를 사용한 ACL 관리에 대한 자세한 내용은 AWS CLI 명령 참조put-bucket-acl을 참조하십시오.

중요

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