AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 요청 - Amazon Simple Storage Service

AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 요청

AWS 계정 또는 IAM 사용자 보안 자격 증명을 사용하여 인증된 요청을 Amazon S3로 보낼 수 있습니다. 이 단원에서는 AWS SDK for Java, AWS SDK for .NET 및 AWS SDK for PHP를 사용하여 인증된 요청을 보낼 수 있는 방법의 예제를 제공합니다. 사용 가능한 AWS SDK 목록은 샘플 코드 및 라이브러리를 참조하세요.

이러한 AWS SDK는 각기 SDK별 자격 증명 공급자 체인을 사용하여 자격 증명을 찾아서 사용하고 자격 증명 소유자를 대신하여 작업을 수행합니다. 이러한 모든 자격 증명 공급자 체인은 공통적으로 로컬 AWS 자격 증명 파일을 검색할 수 있는 기능을 가지고 있습니다.

자세한 내용은 아래 주제를 참조하세요.

로컬 AWS 자격 증명 파일 생성

AWS SDK에 대해 자격 증명을 구성하는 가장 간편한 방법은 AWS 자격 증명 파일을 사용하는 것입니다. AWS Command Line Interface(AWS CLI)를 사용하는 경우에는 이미 로컬 AWS 자격 증명 파일이 구성되어 있을 수 있습니다. 그렇지 않으면 다음 절차를 사용하여 자격 증명 파일을 설정합니다.

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 코드가 액세스 권한을 갖도록 하고 싶은 서비스 및 작업으로 권한을 제한하여 새로운 사용자를 생성합니다. 새로운 사용자 생성에 대한 자세한 내용은 IAM 사용자 생성(콘솔)을 참조하고 8단계의 지침을 따릅니다.

  3. [.csv 다운로드(Download .csv)]를 선택하여 AWS 자격 증명의 로컬 복사본을 저장합니다.

  4. 컴퓨터에서 홈 디렉터리를 탐색하고 .aws 디렉터리를 생성합니다. Linux 또는 OS X 같은 Unix 기반 시스템의 경우 이 디렉터리의 위치는 다음과 같습니다.

    ~/.aws

    Windows에서 이 디렉터리의 위치는 다음과 같습니다.

    %HOMEPATH%\.aws
  5. .aws 디렉터리에서 credentials라는 파일을 새로 생성합니다.

  6. IAM 콘솔에서 다운로드한 자격 증명 .csv 파일을 열어서 다음 형식을 사용하는 credentials 파일로 내용을 복사합니다.

    [default] aws_access_key_id = your_access_key_id aws_secret_access_key = your_secret_access_key
  7. credentials 파일을 저장하고 3단계에서 다운로드한 .csv 파일을 삭제합니다.

이제 공유 자격 증명 파일이 로컬 컴퓨터에 구성이 되고, AWS SDK에서 사용할 준비가 됩니다.

AWS SDK를 사용하여 인증된 요청 보내기

AWS SDK를 사용하여 인증된 요청을 보냅니다. 인증된 요청을 보내는 방법에 대한 자세한 내용은 AWS 보안 자격 증명 또는 IAM Identity Center 인증을 참조하세요.

Java

AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 Amazon S3에 인증된 요청을 보내려면 다음을 수행합니다.

  • AmazonS3ClientBuilder 클래스를 사용하여 AmazonS3Client 인스턴스를 생성합니다.

  • AmazonS3Client 메서드 중 하나를 실행하여 Amazon S3으로 요청을 보냅니다. 클라이언트가 제공된 자격 증명에서 필요한 서명을 생성하여 요청에 포함합니다.

다음 예제에서는 다음과 같은 선행 작업을 수행합니다. 실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 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.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; import java.io.IOException; import java.util.List; public class MakingRequests { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Get a list of objects in the bucket, two at a time, and // print the name and size of each object. ListObjectsRequest listRequest = new ListObjectsRequest().withBucketName(bucketName).withMaxKeys(2); ObjectListing objects = s3Client.listObjects(listRequest); while (true) { List<S3ObjectSummary> summaries = objects.getObjectSummaries(); for (S3ObjectSummary summary : summaries) { System.out.printf("Object \"%s\" retrieved with size %d\n", summary.getKey(), summary.getSize()); } if (objects.isTruncated()) { objects = s3Client.listNextBatchOfObjects(objects); } else { break; } } } 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

AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 인증된 요청을 보내려면 다음을 수행합니다.

  • AmazonS3Client 클래스의 인스턴스를 만듭니다.

  • AmazonS3Client 메서드 중 하나를 실행하여 Amazon S3으로 요청을 보냅니다. 클라이언트는 사용자가 제공하는 자격 증명에서 필요한 서명을 생성하여 Amazon S3으로 보내는 요청에 포함시킵니다.

자세한 내용은 AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 요청 섹션을 참조하세요.

참고
  • 보안 자격 증명을 제공하지 않고 AmazonS3Client 클라이언트를 만들 수 있습니다. 이 클라이언트를 사용하여 보낸 요청은 서명이 없는 익명 요청입니다. Amazon S3는 공개적으로 사용할 수 없는 리소스에 대해 익명 요청을 보내면 오류를 반환합니다.

  • AWS 계정을 생성하고 필요한 사용자를 생성할 수 있습니다. 이러한 사용자의 자격 증명을 관리할 수도 있습니다. 다음 예제의 작업을 수행하려면 이러한 자격 증명이 필요합니다. 자세한 내용은 AWS SDK for .NET 개발자 안내서의 AWS 자격 증명 구성을 참조하세요.

    그런 다음 프로파일과 자격 증명을 미리 검색하고 AWS 서비스 클라이언트를 생성할 때 해당 자격 증명을 명시적으로 사용하도록 애플리케이션을 구성할 수도 있습니다. 자세한 내용은 AWS SDK for .NET 개발자 안내서애플리케이션의 자격 증명 및 프로파일 액세스를 참조하세요.

다음 C# 예제에서는 선행 작업을 수행하는 방법을 보여줍니다. 이 안내서의 .NET 예제 실행에 대한 자세한 내용 및 구성 파일에 자격 증명을 저장하는 방법에 대한 지침은 Amazon S3 .NET 코드 예제 실행 단원을 참조하십시오.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class MakeS3RequestTest { private const string bucketName = "*** 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() { using (client = new AmazonS3Client(bucketRegion)) { Console.WriteLine("Listing objects stored in a bucket"); ListingObjectsAsync().Wait(); } } static async Task ListingObjectsAsync() { try { ListObjectsRequest request = new ListObjectsRequest { BucketName = bucketName, MaxKeys = 2 }; do { ListObjectsResponse response = await client.ListObjectsAsync(request); // Process the response. foreach (S3Object entry in response.S3Objects) { Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size); } // If the response is truncated, set the marker to get the next // set of keys. if (response.IsTruncated) { request.Marker = response.NextMarker; } else { request = null; } } while (request != null); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }

사용 가능한 예제는 Amazon S3 객체 개요버킷 개요을 참조하십시오. AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 이러한 예제를 테스트할 수 있습니다.

예를 들어, 버킷의 모든 객체 키를 나열하려면 프로그래밍 방식으로 객체 키 나열을 참조하십시오.

PHP

이 섹션에서는 AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 인증된 요청을 보내기 위해 AWS SDK for PHP 버전 3의 클래스를 사용하는 방법을 설명합니다. 이미 AWS SDK for PHP 사용 및 PHP 예제 실행의 지침에 따라 AWS SDK for PHP가 올바르게 설치되어 있다고 가정합니다.

다음 PHP 예제에서는 클라이언트에서 보안 자격 증명을 사용하여 계정에 대한 모든 버킷을 나열하는 요청을 실행하는 방법을 보여줍니다.

require 'vendor/autoload.php'; use Aws\S3\Exception\S3Exception; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $s3 = new S3Client([ 'region' => 'us-east-1', 'version' => 'latest', ]); // Retrieve the list of buckets. $result = $s3->listBuckets(); try { // Retrieve a paginator for listing objects. $objects = $s3->getPaginator('ListObjects', [ 'Bucket' => $bucket ]); echo "Keys retrieved!" . PHP_EOL; // Print the list of objects to the page. foreach ($objects as $object) { echo $object['Key'] . PHP_EOL; } } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }
참고

보안 자격 증명을 제공하지 않고 S3Client 클라이언트를 만들 수 있습니다. 이 클라이언트를 사용하여 보낸 요청은 서명이 없는 익명 요청입니다. Amazon S3는 공개적으로 사용할 수 없는 리소스에 대해 익명 요청을 보내면 오류를 반환합니다. 자세한 내용은 AWS SDK for PHP 설명서익명 클라이언트 생성을 참조하세요.

사용 가능한 예제는 Amazon S3 객체 개요 단원을 참조하세요. AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 이러한 예제를 테스트할 수 있습니다.

버킷의 객체 키를 나열하는 예제는 프로그래밍 방식으로 객체 키 나열을 참조하십시오.

Ruby

AWS SDK for Ruby 버전 3을 사용하여 Amazon S3에 호출할 수 있으려면 먼저 SDK가 버킷 및 객체에 대한 액세스를 확인하기 위해 사용하는 AWS 액세스 자격 증명을 설정해야 합니다. 로컬 시스템에서 AWS 자격 증명 프로파일에 설정된 자격 증명을 공유하는 경우 SDK for Ruby 버전 3이 코드에서 선언하지 않고도 이러한 자격 증명을 사용할 수 있습니다. 공유 자격 증명 설정에 대한 자세한 내용은 AWS 계정 또는 IAM 사용자 자격 증명을 사용하여 요청 단원을 참조하십시오.

다음 Ruby 코드 조각은 로컬 컴퓨터에서 공유되는 AWS 자격 증명 파일의 자격 증명을 사용하여 특정 버킷에서 모든 객체 키 이름을 가져오기 위한 요청을 인증합니다. 이 예제에서는 작업을 수행합니다.

  1. Aws::S3::Client 클래스의 인스턴스를 만듭니다.

  2. list_objects_v2Aws::S3::Client 메서드를 사용하여 버킷의 객체를 열거함으로써 Amazon S3에 요청합니다. 클라이언트는 컴퓨터의 AWS 자격 증명 파일에 있는 자격 증명에서 필요한 서명 값을 생성하여 Amazon S3로 전송하는 요청에 포함시킵니다.

  3. 객체 키 이름 배열을 터미널에 인쇄합니다.

# Prerequisites: # - An existing Amazon S3 bucket. require "aws-sdk-s3" # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if all operations succeed; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-west-2') # exit 1 unless list_bucket_objects?(s3_client, 'doc-example-bucket') def list_bucket_objects?(s3_client, bucket_name) puts "Accessing the bucket named '#{bucket_name}'..." objects = s3_client.list_objects_v2( bucket: bucket_name, max_keys: 50 ) if objects.count.positive? puts "The object keys in this bucket are (first 50 objects):" objects.contents.each do |object| puts object.key end else puts "No objects found in this bucket." end return true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" return false end # Example usage: def run_me region = "us-west-2" bucket_name = "BUCKET_NAME" s3_client = Aws::S3::Client.new(region: region) exit 1 unless list_bucket_objects?(s3_client, bucket_name) end run_me if $PROGRAM_NAME == __FILE__

로컬 AWS 자격 증명 파일을 가지고 있지 않더라도 여전히 Aws::S3::Client 리소스를 생성하고 Amazon S3 버킷 및 객체에 대해 코드를 실행할 수 있습니다. Ruby용 SDK 버전 3을 사용하여 보낸 요청은 기본적으로 서명이 없는 익명 요청입니다. Amazon S3은 공개적으로 사용할 수 없는 리소스에 대해 익명 요청을 보내면 오류를 반환합니다.

다음과 같이 Ruby용 SDK 애플리케이션을 위한 이전의 코드 조각을 사용 및 확장하는 등 보다 강력한 용도로 사용할 수 있습니다.

# Prerequisites: # - An existing Amazon S3 bucket. require "aws-sdk-s3" # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if all operations succeed; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-west-2') # exit 1 unless list_bucket_objects?(s3_client, 'doc-example-bucket') def list_bucket_objects?(s3_client, bucket_name) puts "Accessing the bucket named '#{bucket_name}'..." objects = s3_client.list_objects_v2( bucket: bucket_name, max_keys: 50 ) if objects.count.positive? puts "The object keys in this bucket are (first 50 objects):" objects.contents.each do |object| puts object.key end else puts "No objects found in this bucket." end return true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" return false end # Example usage: def run_me region = "us-west-2" bucket_name = "BUCKET_NAME" s3_client = Aws::S3::Client.new(region: region) exit 1 unless list_bucket_objects?(s3_client, bucket_name) end run_me if $PROGRAM_NAME == __FILE__
Go

다음 예제에서는 공유 자격 증명 파일에서 Go용 SDK가 자동으로 로드한 AWS 자격 증명을 사용합니다.

package main import ( "context" "fmt" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3" ) // main uses the AWS SDK for Go V2 to create an Amazon Simple Storage Service // (Amazon S3) client and list up to 10 buckets in your account. // This example uses the default settings specified in your shared credentials // and config files. func main() { sdkConfig, err := config.LoadDefaultConfig(context.TODO()) if err != nil { fmt.Println("Couldn't load default configuration. Have you set up your AWS account?") fmt.Println(err) return } s3Client := s3.NewFromConfig(sdkConfig) count := 10 fmt.Printf("Let's list up to %v buckets for your account.\n", count) result, err := s3Client.ListBuckets(context.TODO(), &s3.ListBucketsInput{}) if err != nil { fmt.Printf("Couldn't list buckets for your account. Here's why: %v\n", err) return } if len(result.Buckets) == 0 { fmt.Println("You don't have any buckets!") } else { if count > len(result.Buckets) { count = len(result.Buckets) } for _, bucket := range result.Buckets[:count] { fmt.Printf("\t%v\n", *bucket.Name) } } }

관련 리소스