フェデレーションユーザーの一時的な認証情報を使用したリクエストの実行 - Amazon Simple Storage Service

フェデレーションユーザーの一時的な認証情報を使用したリクエストの実行

一時的なセキュリティ認証情報をリクエストし、AWS リソースにアクセスする必要があるフェデレーションユーザーまたはアプリケーションにその認証情報を提供できます。このセクションでは、AWS SDK を使用して、フェデレーションユーザーまたはアプリケーションのために一時セキュリティ証明書を取得し、その証明書を使用して認証リクエストを Amazon S3 に送信する方法の例について説明します。利用可能な AWS SDK のリストについては、サンプルコードとライブラリを参照してください。

注記

AWS アカウント と IAM ユーザーのいずれも、フェデレーティッドユーザーの一時的なセキュリティ認証情報をリクエストできます。ただし、より高度なセキュリティのためには、必要な権限を持つ IAM ユーザーのみが、この一時証明書をリクエストできるようにすることをお勧めします。こうすることで、フェデレーションユーザーに付与される権限が、リクエストを送信した IAM ユーザーの権限以下となります。アプリケーションによっては、フェデレーティッドユーザーおよびアプリケーションに一時的なセキュリティ認証情報を付与することを唯一の目的として、特定のアクセス許可を持つ IAM ユーザーを作成する方が適切な場合もあります。

Java

フェデレーティッドユーザーおよびアプリケーションから AWS リソースへのアクセスのリクエストが認証されて送信されるように、フェデレーティッドユーザーおよびアプリケーションに一時的なセキュリティ認証情報を提供することができます。このような一時的な認証情報をリクエストする場合、ユーザー名と、付与するリソースに対するアクセス許可を示す IAM ポリシーを指定する必要があります。デフォルトでは、セッションの有効期間は 1 時間です。フェデレーションユーザーおよびアプリケーション用に一時的なセキュリティ認証情報をリクエストするときに、明示的に別の有効期間値を設定できます。

注記

フェデレーティッドユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストする際のセキュリティ強化策として、必要なアクセス許可のみを持つ専用の IAM ユーザーを使用することをお勧めします。作成した一時ユーザーに、一時的なセキュリティ認証情報をリクエストした IAM ユーザーより多くの権限が付与されることはありません。詳細については、「AWS Identity and Access Management に関するよくある質問」を参照してください。

セキュリティ認証情報を提供し、認証されたリクエストを送信してリソースにアクセスするには、以下の操作を行います。

  • AWSSecurityTokenServiceClient クラスのインスタンスを作成します。認証情報の指定の詳細については、「AWS SDK for Java の使用」をご覧ください。

  • Security Token Service (STS) クライアントの getFederationToken() メソッドを呼び出してセッションを開始します。一時的な認証情報にアタッチするユーザー名と IAM ポリシーなどのセッション情報を指定します。必要に応じて、セッションの有効期間を指定できます。このメソッドは一時的なセキュリティ認証情報を返します。

  • BasicSessionCredentials オブジェクトのインスタンスに一時セキュリティ証明書をパッケージ化します。このオブジェクトを使用して、一時的なセキュリティ認証情報を Amazon S3 クライアントに提供します。

  • 一時的なセキュリティ認証情報を使用して、AmazonS3Client クラスのインスタンスを作成します。このクライアントを使用してリクエストを Amazon S3 に送信します。失効した認証情報を使用してリクエストを送信すると、Amazon S3 はエラーを返します。

例では、指定された S3 バケットのキーをリストしています。この例では、フェデレーティッドユーザー用に 2 時間のセッションの一時的なセキュリティ認証情報を取得し、それを使用して認証リクエストを Amazon S3 に送信します。例を実行するには、ユーザーに一時的なセキュリティ認証情報のリクエストと AWS リソースの一覧表示を許可するアタッチされたポリシーで、IAM ユーザーを作成する必要があります。次のポリシーでは、これが達成されます。

{ "Statement":[{ "Action":["s3:ListBucket", "sts:GetFederationToken*" ], "Effect":"Allow", "Resource":"*" } ] }

IAM ユーザーを作成する方法の詳細については、IAM ユーザーガイドの「最初の IAM ユーザーおよび管理者グループの作成」を参照してください。

IAM ユーザーを作成し、前述のポリシーをアタッチしたら、以下の例を実行できます。作業サンプルを作成およびテストする方法については、「Amazon S3 Java コード例のテスト」を参照してください。

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicSessionCredentials; import com.amazonaws.auth.policy.Policy; import com.amazonaws.auth.policy.Resource; import com.amazonaws.auth.policy.Statement; import com.amazonaws.auth.policy.Statement.Effect; import com.amazonaws.auth.policy.actions.S3Actions; 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.ObjectListing; import com.amazonaws.services.securitytoken.AWSSecurityTokenService; import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder; import com.amazonaws.services.securitytoken.model.Credentials; import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest; import com.amazonaws.services.securitytoken.model.GetFederationTokenResult; import java.io.IOException; public class MakingRequestsWithFederatedTempCredentials { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Specify bucket name ***"; String federatedUser = "*** Federated user name ***"; String resourceARN = "arn:aws:s3:::" + bucketName; try { AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder .standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest(); getFederationTokenRequest.setDurationSeconds(7200); getFederationTokenRequest.setName(federatedUser); // Define the policy and add it to the request. Policy policy = new Policy(); policy.withStatements(new Statement(Effect.Allow) .withActions(S3Actions.ListObjects) .withResources(new Resource(resourceARN))); getFederationTokenRequest.setPolicy(policy.toJson()); // Get the temporary security credentials. GetFederationTokenResult federationTokenResult = stsClient.getFederationToken(getFederationTokenRequest); Credentials sessionCredentials = federationTokenResult.getCredentials(); // Package the session credentials as a BasicSessionCredentials // object for an Amazon S3 client object to use. BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials( sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken()); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(basicSessionCredentials)) .withRegion(clientRegion) .build(); // To verify that the client works, send a listObjects request using // the temporary security credentials. ObjectListing objects = s3Client.listObjects(bucketName); System.out.println("No. of Objects = " + objects.getObjectSummaries().size()); } 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 ポリシーを指定する必要があります。デフォルトでは、セッションの有効期間は 1 時間です。フェデレーションユーザーおよびアプリケーション用に一時的なセキュリティ認証情報をリクエストするときに、明示的に別の有効期間値を設定できます。認証されたリクエストを送信する方法については、「リクエストの実行」を参照してください。

注記

フェデレーティッドユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストする際のセキュリティ強化策として、必要なアクセス許可のみを持つ専用の IAM ユーザーを使用することをお勧めします。作成した一時ユーザーに、一時的なセキュリティ認証情報をリクエストした IAM ユーザーより多くの権限が付与されることはありません。詳細については、「AWS Identity and Access Management に関するよくある質問」を参照してください。

次の作業を行います。

  • AWS Security Token Service クライアント AmazonSecurityTokenServiceClient クラスのインスタンスを作成します。認証情報の指定の詳細については、「AWS SDK for .NET の使用」をご覧ください。

  • STS クライアントの GetFederationToken メソッドを呼び出してセッションを開始します。一時的な認証情報にアタッチするユーザー名と IAM ポリシーなどのセッション情報を指定する必要があります。必要に応じて、セッションの有効期間を指定できます。このメソッドは一時的なセキュリティ認証情報を返します。

  • SessionAWSCredentials オブジェクトのインスタンスに一時セキュリティ証明書をパッケージ化します。このオブジェクトを使用して、一時的なセキュリティ認証情報を Amazon S3 クライアントに提供します。

  • 一時的なセキュリティ認証情報を渡して、AmazonS3Client クラスのインスタンスを作成します。このクライアントを使用してリクエストを Amazon S3 に送信します。失効した認証情報を使用してリクエストを送信すると、Amazon S3 はエラーを返します。

次の C# の例では、指定したバケットのキーをリストします。この例では、フェデレーティッドユーザー (User1) 用に 2 時間のセッションの一時的なセキュリティ認証情報を取得し、それを使用して認証リクエストを Amazon S3 に送信します。

  • この演習では、最小限のアクセス許可を持つ IAM ユーザーを作成します。この IAM ユーザーの認証情報を使用して、他のユーザーの一時的な認証情報をリクエストします。この例では、特定のバケットに含まれるオブジェクトのみ表示されています。以下のポリシーをアタッチして IAM ユーザーを作成します。

    { "Statement":[{ "Action":["s3:ListBucket", "sts:GetFederationToken*" ], "Effect":"Allow", "Resource":"*" } ] }

    このポリシーでは、IAM ユーザーが一時的なセキュリティ認証情報と、AWS リソースを一覧表示できるだけの許可をリクエストすることを許可しています。IAM ユーザーを作成する方法の詳細については、IAM ユーザーガイドの「最初の IAM ユーザーおよび管理者グループの作成」を参照してください。

  • IAM ユーザーのセキュリティ認証情報を使用して、以下の例をテストします。この例では、一時的なセキュリティ認証情報を使用して、認証リクエストを Amazon S3 に送信します。この例では、フェデレーティッドユーザー (User1) 用に、アクセスを特定のバケット (YourBucketName) 内のオブジェクトの列挙に制限する一時的なセキュリティ認証情報をリクエストするときに、以下のポリシーを指定します。ポリシーを更新し、独自の既存のバケット名を指定する必要があります。

    { "Statement":[ { "Sid":"1", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":"arn:aws:s3:::YourBucketName" } ] }
  • 以下の例を編集して、前述のフェデレーティッドユーザーアクセスポリシーで指定したバケット名を指定します。作業サンプルを作成およびテストする方法については、「Amazon S3 .NET コード例の実行」を参照してください。

    using Amazon; using Amazon.Runtime; using Amazon.S3; using Amazon.S3.Model; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class TempFederatedCredentialsTest { 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() { ListObjectsAsync().Wait(); } private static async Task ListObjectsAsync() { try { Console.WriteLine("Listing objects stored in a bucket"); // Credentials use the default AWS SDK for .NET credential search chain. // On local development machines, this is your default profile. SessionAWSCredentials tempCredentials = await GetTemporaryFederatedCredentialsAsync(); // Create a client by providing temporary security credentials. using (client = new AmazonS3Client(bucketRegion)) { ListObjectsRequest listObjectRequest = new ListObjectsRequest(); listObjectRequest.BucketName = bucketName; ListObjectsResponse response = await client.ListObjectsAsync(listObjectRequest); List<S3Object> objects = response.S3Objects; Console.WriteLine("Object count = {0}", objects.Count); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered ***. 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); } } private static async Task<SessionAWSCredentials> GetTemporaryFederatedCredentialsAsync() { AmazonSecurityTokenServiceConfig config = new AmazonSecurityTokenServiceConfig(); AmazonSecurityTokenServiceClient stsClient = new AmazonSecurityTokenServiceClient( config); GetFederationTokenRequest federationTokenRequest = new GetFederationTokenRequest(); federationTokenRequest.DurationSeconds = 7200; federationTokenRequest.Name = "User1"; federationTokenRequest.Policy = @"{ ""Statement"": [ { ""Sid"":""Stmt1311212314284"", ""Action"":[""s3:ListBucket""], ""Effect"":""Allow"", ""Resource"":""arn:aws:s3:::" + bucketName + @""" } ] } "; GetFederationTokenResponse federationTokenResponse = await stsClient.GetFederationTokenAsync(federationTokenRequest); Credentials credentials = federationTokenResponse.Credentials; SessionAWSCredentials sessionCredentials = new SessionAWSCredentials(credentials.AccessKeyId, credentials.SecretAccessKey, credentials.SessionToken); return sessionCredentials; } } }
PHP

このトピックでは、バージョン 3 の AWS SDK for PHP のクラスを使用して、フェデレーティッドユーザーおよびアプリケーションの一時的なセキュリティ認証情報をリクエストし、その認証情報を使用して Amazon S3 に保存されているリソースにアクセスする手順を示します。ここでは、既に AWS SDK for PHP の使用と PHP サンプルの実行 の手順が実行されていて、AWS SDK for PHP が正しくインストールされていることを前提としています。

フェデレーティッドユーザーおよびアプリケーションから AWS リソースへのアクセスをリクエストできるように、一時的なセキュリティ認証情報を提供することができます。このような一時的な認証情報をリクエストする場合、ユーザー名と、付与するリソースに対するアクセス許可を示す IAM ポリシーを指定する必要があります。これらの認証情報は、セッションの有効期間が失効すると同時に失効します。デフォルトでは、セッションの有効期間は 1 時間です。フェデレーティッドユーザーおよびアプリケーション用に一時的なセキュリティ認証情報をリクエストするときに、明示的に有効期間の別の値を設定できます。一時的なセキュリティ認証情報の詳細については、IAM ユーザーガイドの「IAM の一時的なセキュリティ認証情報」を参照してください。フェデレーティッドユーザーおよびアプリケーションに一時的なセキュリティ認証情報を指定する方法については、「リクエストの実行」を参照してください。

フェデレーティッドユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストする際のセキュリティ強化策として、必要なアクセス許可のみを持つ専用の IAM ユーザーを使用することをお勧めします。作成した一時ユーザーに、一時的なセキュリティ認証情報をリクエストした IAM ユーザーより多くの権限が付与されることはありません。ID フェデレーションについて詳しくは、「AWS Identity and Access Management に関するよくある質問」を参照してください。 。

PHP 例の実行については、このガイド内の「PHP サンプルの実行」を参照してください。

次の PHP の例では、指定したバケットのキーをリストします。この例では、フェデレーティッドユーザー (User1) 用に 1 時間のセッションの一時的なセキュリティ認証情報を取得します。次に、その一時的なセキュリティ認証情報を使用して、認証リクエストを Amazon S3 に送信します。

他のユーザー用に一時的な認証情報をリクエストする場合、セキュリティ強化策として、一時的なセキュリティ認証情報をリクエストするアクセス許可を持つ IAM ユーザーのセキュリティ認証情報を使用します。また、IAM ユーザーがフェデレーティッドユーザーに最小限のアプリケーション固有のアクセス許可しか付与できないように、この IAM ユーザーのアクセス許可を制限することができます。この例では、特定のバケットに含まれるオブジェクトのみ表示されています。以下のポリシーをアタッチして IAM ユーザーを作成します。

{ "Statement":[{ "Action":["s3:ListBucket", "sts:GetFederationToken*" ], "Effect":"Allow", "Resource":"*" } ] }

このポリシーでは、IAM ユーザーが一時的なセキュリティ認証情報と、AWS リソースを一覧表示できるだけの許可をリクエストすることを許可しています。IAM ユーザーを作成する方法の詳細については、IAM ユーザーガイドの「最初の IAM ユーザーおよび管理者グループの作成」を参照してください。

これで、IAM ユーザーのセキュリティ認証情報を使用して、以下の例をテストできるようになりました。この例では、一時的なセキュリティ認証情報を使用して、認証リクエストを Amazon S3 に送信します。この例では、フェデレーティッドユーザー (User1) 用に、アクセスを特定のバケット内のオブジェクトの列挙に制限する一時的なセキュリティ認証情報をリクエストするときに、以下のポリシーを指定します。ポリシーは、使用しているバケット名で更新してください。

{ "Statement":[ { "Sid":"1", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":"arn:aws:s3:::YourBucketName" } ] }

以下の例では、ポリシーリソースを指定するときに、YourBucketName を、使用しているバケット名で置き換えます。

require 'vendor/autoload.php'; use Aws\S3\Exception\S3Exception; use Aws\S3\S3Client; use Aws\Sts\StsClient; $bucket = '*** Your Bucket Name ***'; // In real applications, the following code is part of your trusted code. It has // the security credentials that you use to obtain temporary security credentials. $sts = new StsClient([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Fetch the federated credentials. $sessionToken = $sts->getFederationToken([ 'Name' => 'User1', 'DurationSeconds' => '3600', 'Policy' => json_encode([ 'Statement' => [ 'Sid' => 'randomstatementid' . time(), 'Action' => ['s3:ListBucket'], 'Effect' => 'Allow', 'Resource' => 'arn:aws:s3:::' . $bucket ] ]) ]); // The following will be part of your less trusted code. You provide temporary // security credentials so the code can send authenticated requests to Amazon S3. $s3 = new S3Client([ 'region' => 'us-east-1', 'version' => 'latest', 'credentials' => [ 'key' => $sessionToken['Credentials']['AccessKeyId'], 'secret' => $sessionToken['Credentials']['SecretAccessKey'], 'token' => $sessionToken['Credentials']['SessionToken'] ] ]); try { $result = $s3->listObjects([ 'Bucket' => $bucket ]); } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }
Ruby

フェデレーティッドユーザーおよびアプリケーションから AWS リソースへのアクセスのリクエストが認証されて送信されるように、フェデレーティッドユーザーおよびアプリケーションに一時的なセキュリティ認証情報を提供することができます。IAM サービスに対して一時的な認証情報をリクエストする場合は、ユーザー名と、リソースに対するアクセス許可を付与するための IAM ポリシーを指定する必要があります。デフォルトでは、セッションの有効期間は 1 時間です。ただし、IAM ユーザー認証情報を使用して一時的な認証情報をリクエストする場合、フェデレーションユーザーおよびアプリケーション用の一時的なセキュリティ認証情報をリクエストするときに、別の有効期間値を明示的に設定できます。フェデレーティッドユーザーおよびアプリケーションの一時的なセキュリティ認証情報については、「リクエストの実行」を参照してください。

注記

フェデレーティッドユーザーおよびアプリケーションの一時的なセキュリティ認証情報をリクエストする場合、セキュリティ強化策として、専用の IAM ユーザーを使用して必要なアクセス許可のみを付与できます。作成した一時ユーザーに、一時的なセキュリティ認証情報をリクエストした IAM ユーザーより多くの権限が付与されることはありません。詳細については、「AWS Identity and Access Management に関するよくある質問」を参照してください。

次の Ruby コード例では、フェデレーティッドユーザーに付与するアクセス許可を制限した上で、指定したバケットのキーを一覧表示することを許可します。

# Prerequisites: # - An existing Amazon S3 bucket. require "aws-sdk-s3" require "aws-sdk-iam" require "json" # Checks to see whether a user exists in IAM; otherwise, # creates the user. # # @param iam [Aws::IAM::Client] An initialized IAM client. # @param user_name [String] The user's name. # @return [Aws::IAM::Types::User] The existing or new user. # @example # iam = Aws::IAM::Client.new(region: 'us-west-2') # user = get_user(iam, 'my-user') # exit 1 unless user.user_name # puts "User's name: #{user.user_name}" def get_user(iam, user_name) puts "Checking for a user with the name '#{user_name}'..." response = iam.get_user(user_name: user_name) puts "A user with the name '#{user_name}' already exists." return response.user # If the user doesn't exist, create them. rescue Aws::IAM::Errors::NoSuchEntity puts "A user with the name '#{user_name}' doesn't exist. Creating this user..." response = iam.create_user(user_name: user_name) iam.wait_until(:user_exists, user_name: user_name) puts "Created user with the name '#{user_name}'." return response.user rescue StandardError => e puts "Error while accessing or creating the user named '#{user_name}': #{e.message}" end # Gets temporary AWS credentials for an IAM user with the specified permissions. # # @param sts [Aws::STS::Client] An initialized AWS STS client. # @param duration_seconds [Integer] The number of seconds for valid credentials. # @param user_name [String] The user's name. # @param policy [Hash] The access policy. # @return [Aws::STS::Types::Credentials] AWS credentials for API authentication. # @example # sts = Aws::STS::Client.new(region: 'us-west-2') # credentials = get_temporary_credentials(sts, duration_seconds, user_name, # { # 'Version' => '2012-10-17', # 'Statement' => [ # 'Sid' => 'Stmt1', # 'Effect' => 'Allow', # 'Action' => 's3:ListBucket', # 'Resource' => 'arn:aws:s3:::doc-example-bucket' # ] # } # ) # exit 1 unless credentials.access_key_id # puts "Access key ID: #{credentials.access_key_id}" def get_temporary_credentials(sts, duration_seconds, user_name, policy) response = sts.get_federation_token( duration_seconds: duration_seconds, name: user_name, policy: policy.to_json ) return response.credentials rescue StandardError => e puts "Error while getting federation token: #{e.message}" end # Lists the keys and ETags for the objects in an Amazon S3 bucket. # # @param s3_client [Aws::S3::Client] An initialized Amazon S3 client. # @param bucket_name [String] The bucket's name. # @return [Boolean] true if the objects were listed; otherwise, false. # @example # s3_client = Aws::S3::Client.new(region: 'us-west-2') # exit 1 unless list_objects_in_bucket?(s3_client, 'doc-example-bucket') def list_objects_in_bucket?(s3_client, bucket_name) puts "Accessing the contents of the bucket named '#{bucket_name}'..." response = s3_client.list_objects_v2( bucket: bucket_name, max_keys: 50 ) if response.count.positive? puts "Contents of the bucket named '#{bucket_name}' (first 50 objects):" puts "Name => ETag" response.contents.each do |obj| puts "#{obj.key} => #{obj.etag}" end else puts "No objects in the bucket named '#{bucket_name}'." end return true rescue StandardError => e puts "Error while accessing the bucket named '#{bucket_name}': #{e.message}" end # Example usage: def run_me region = "us-west-2" user_name = "my-user" bucket_name = "doc-example-bucket" iam = Aws::IAM::Client.new(region: region) user = get_user(iam, user_name) exit 1 unless user.user_name puts "User's name: #{user.user_name}" sts = Aws::STS::Client.new(region: region) credentials = get_temporary_credentials(sts, 3600, user_name, { "Version" => "2012-10-17", "Statement" => [ "Sid" => "Stmt1", "Effect" => "Allow", "Action" => "s3:ListBucket", "Resource" => "arn:aws:s3:::#{bucket_name}" ] } ) exit 1 unless credentials.access_key_id puts "Access key ID: #{credentials.access_key_id}" s3_client = Aws::S3::Client.new(region: region, credentials: credentials) exit 1 unless list_objects_in_bucket?(s3_client, bucket_name) end run_me if $PROGRAM_NAME == __FILE__

関連リソース