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 にサインインして、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. コードがアクセス許可を使用する必要があるサービスやアクションに限定した許可を持つ、新しいユーザーを作成します。新しいユーザーの作成方法の詳細については、「IAM ユーザーの作成 (コンソール)」を参照し、ステップ 8 までの手順に従ってください。

  3. AWS 認証情報のローカルコピーを保存するには、[Download .csv] (.csv のダウンロード) を選択します。

  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

このセクションでは、バージョン 3 の AWS SDK for PHP のクラスで AWS アカウント または IAM ユーザー認証情報を使用して、認証済みのリクエストを送信する方法について説明します。ここでは、既に 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

バージョン 3 の AWS SDK for Ruby を使用して Amazon S3 を呼び出す前に、SDK がバケットやオブジェクトへのアクセスの確認に使用する AWS アクセス認証情報を設定する必要があります。ローカルシステムの AWS 認証情報プロファイルで設定した認証情報を共有している場合、バージョン 3 の SDK for Ruby では、コード内で宣言することなく、これらの認証情報を使用できます。共有認証情報の設定の詳細については、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 のバケットとオブジェクトに対してコードを実行できます。バージョン 3 の SDK for Ruby を使用して送信されるリクエストは匿名であり、デフォルトでは署名はありません。公開されていないリソースに対して匿名リクエストを送信すると、Amazon S3 はエラーを返します。

次のより堅牢な例のように、SDK for Ruby アプリケーション用の前述のコードスニペットを使用して展開することができます。

# 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

次の例では、SDK for Go が共有認証情報ファイルから自動的に読み込む 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) } } }

関連リソース