S3 Access Grants에서 제공하는 자격 증명을 사용하여 S3 데이터에 액세스 - Amazon Simple Storage Service

S3 Access Grants에서 제공하는 자격 증명을 사용하여 S3 데이터에 액세스

액세스 권한 부여를 통해 임시 자격 증명을 획득한 피부여자는 해당 임시 자격 증명을 사용하여 Amazon S3 API 작업을 호출하여 데이터에 액세스할 수 있습니다.

피부여자는 AWS Command Line Interface(AWS CLI), AWS SDK, Amazon S3 REST API를 사용하여 S3 데이터에 액세스할 수 있습니다. 또한, AWS PythonJava 플러그인을 사용하여 S3 Access Grants를 직접 호출할 수 있습니다.

S3 Access Grants로부터 임시 자격 증명을 받은 후 피부여자는 해당 자격 증명으로 프로필을 설정하여 데이터를 검색할 수 있습니다.

AWS CLI를 설치하려면 AWS Command Line Interface 사용 설명서AWS CLI 설치를 참조하세요.

다음 예시 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

예 - 프로필 설정
aws configure set aws_access_key_id "$accessKey" --profile access-grants-consumer-access-profile aws configure set aws_secret_access_key "$secretKey" --profile access-grants-consumer-access-profile aws configure set aws_session_token "$sessionToken" --profile access-grants-consumer-access-profile

다음 예시 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

예 – S3 데이터 가져오기

피부여자는 get-object AWS CLI 명령을 사용하여 데이터에 액세스할 수 있습니다. 피부여자는 put-object, ls 및 기타 S3 AWS CLI 명령도 사용할 수 있습니다.

aws s3api get-object \ --bucket amzn-s3-demo-bucket1 \ --key myprefix \ --region us-east-2 \ --profile access-grants-consumer-access-profile

이 섹션에서는 피부여자가 AWS SDK를 사용하여 S3 데이터에 액세스하는 방법의 예시를 보여줍니다.

Java

다음 Java 코드 예제는 S3 버킷에서 객체를 가져옵니다. 실제 예제를 만들고 테스트하는 방법에 대한 자세한 내용은 AWS SDK for Java 개발자 안내서의 시작하기를 참조하세요.

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.GetObjectRequest; import com.amazonaws.services.s3.model.ResponseHeaderOverrides; import com.amazonaws.services.s3.model.S3Object; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class GetObject2 { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String key = "*** Object key ***"; S3Object fullObject = null, objectPortion = null, headerOverrideObject = null; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new ProfileCredentialsProvider()) .build(); // Get an object and print its contents. System.out.println("Downloading an object"); fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key)); System.out.println("Content-Type: " + fullObject.getObjectMetadata().getContentType()); System.out.println("Content: "); displayTextInputStream(fullObject.getObjectContent()); // Get a range of bytes from an object and print the bytes. GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, key) .withRange(0, 9); objectPortion = s3Client.getObject(rangeObjectRequest); System.out.println("Printing bytes retrieved."); displayTextInputStream(objectPortion.getObjectContent()); // Get an entire object, overriding the specified response headers, and print // the object's content. ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides() .withCacheControl("No-cache") .withContentDisposition("attachment; filename=example.txt"); GetObjectRequest getObjectRequestHeaderOverride = new GetObjectRequest(bucketName, key) .withResponseHeaders(headerOverrides); headerOverrideObject = s3Client.getObject(getObjectRequestHeaderOverride); displayTextInputStream(headerOverrideObject.getObjectContent()); } 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(); } finally { // To ensure that the network connection doesn't remain open, close any open // input streams. if (fullObject != null) { fullObject.close(); } if (objectPortion != null) { objectPortion.close(); } if (headerOverrideObject != null) { headerOverrideObject.close(); } } } private static void displayTextInputStream(InputStream input) throws IOException { // Read the text input stream one line at a time and display each line. BufferedReader reader = new BufferedReader(new InputStreamReader(input)); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } System.out.println(); } }

S3 Access Grants에서 지원되는 S3 작업

피부여자는 S3 Access Grants에서 제공하는 임시 자격 증명을 사용하여 액세스 권한이 있는 S3 데이터에 대해 S3 작업을 수행할 수 있습니다. 다음은 피부여자가 수행할 수 있는 허용 가능한 S3 작업 목록입니다. 허용되는 작업은 액세스 권한 부여에 부여된 권한 수준(READ, WRITE 또는 READWRITE)에 따라 다릅니다.

참고

아래 나열된 Amazon S3 권한 외에도, Amazon S3는 AWS Key Management Service(AWS KMS) Decrypt(kms:decrypt) READ 권한 또는 AWS KMS GenerateDataKey(kms:generateDataKey) WRITE 권한을 직접적으로 호출할 수 있습니다. 이러한 권한으로는 AWS KMS 키에 직접 액세스할 수 없습니다.

S3 IAM 작업 API 작업 및 문서 S3 Access Grants 권한 S3 리소스
s3:GetObject GetObject READ 객체
s3:GetObjectVersion GetObject READ 객체
s3:GetObjectAcl GetObjectAcl READ 객체
s3:GetObjectVersionAcl GetObjectAcl READ 객체
s3:ListMultipartUploads ListParts READ 객체
s3:PutObject PutObject, CreateMultipartUpload, UploadPart, UploadPartCopy, CompleteMultipartUpload WRITE 객체
s3:PutObjectAcl PutObjectAcl WRITE 객체
s3:PutObjectVersionAcl PutObjectAcl WRITE 객체
s3:DeleteObject DeleteObject WRITE 객체
s3:DeleteObjectVersion DeleteObject WRITE 객체
s3:AbortMultipartUpload AbortMultipartUpload WRITE 객체
s3:ListBucket HeadBucket, ListObjectsV2, ListObjects READ 버킷
s3:ListBucketVersions ListObjectVersions READ 버킷
s3:ListBucketMultipartUploads ListMultipartUploads READ 버킷