S3 Access Grants가 발급한 자격 증명으로 S3 데이터 접근하기
S3 Access Grants가 발급한 자격 증명으로 S3 데이터 접근하기
수혜자가 접근 권한을 통해 임시 자격 증명을 얻은 뒤에는 이 임시 자격 증명을 사용해 Amazon S3 API 작업을 호출해 내 데이터에 접근할 수 있어요.
수혜자는 AWS Command Line Interface(AWS CLI), AWS SDK, Amazon S3 REST API를 사용해 S3 데이터에 접근할 수 있어요. 또한 AWS Python 및 Java 플러그인을 사용해 S3 Access Grants를 호출할 수도 있어요.
수혜자가 S3 Access Grants로부터 임시 자격 증명을 얻은 뒤에는 이 자격 증명으로 프로필을 설정해 데이터를 가져올 수 있어요.
AWS CLI를 설치하려면 AWS Command Line Interface 사용자 가이드의 AWS CLI 설치를 참고하세요. 다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
예제 – 프로필 설정
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
다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.
예제 – 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 KMSGenerateDataKey(kms:generateDataKey) WRITE 권한을 호출할 수 있어요. 이 권한은 AWS KMS 키에 대한 직접 접근을 허용하지 않아요.
| S3 IAM 작업 | API 작업 및 문서 | S3 Access Grants 권한 | S3 리소스 |
|---|---|---|---|
| s3:GetObject | GetObject | READ | Object |
| s3:GetObjectVersion | GetObject | READ | Object |
| s3:GetObjectAcl | GetObjectAcl | READ | Object |
| s3:GetObjectVersionAcl | GetObjectAcl | READ | Object |
| s3:ListMultipartUploads | ListParts | READ | Object |
| s3:PutObject | PutObject, CreateMultipartUpload, UploadPart, UploadPartCopy, CompleteMultipartUpload | WRITE | Object |
| s3:PutObjectAcl | PutObjectAcl | WRITE | Object |
| s3:PutObjectVersionAcl | PutObjectAcl | WRITE | Object |
| s3:DeleteObject | DeleteObject | WRITE | Object |
| s3:DeleteObjectVersion | DeleteObject | WRITE | Object |
| s3:AbortMultipartUpload | AbortMultipartUpload | WRITE | Object |
| s3:ListBucket | HeadBucket, ListObjectsV2, ListObjects | READ | Bucket |
| s3:ListBucketVersions | ListObjectVersions | READ | Bucket |
| s3:ListBucketMultipartUploads | ListMultipartUploads | READ | Bucket |
출처: 문서
본문
Accessing S3 data using vended credentials (발급된 자격 증명으로 S3 데이터 접근하기)
수혜자가 발급받은 임시 자격 증명으로 S3 데이터에 접근하는 방법을 설명했어요.