--- title: "AWS SDK for Ruby With Wasabi" slug: "how-do-i-use-aws-sdk-for-ruby-with-wasabi" updated: 2026-07-29T20:48:04Z published: 2026-07-29T20:48:04Z canonical: "docs.wasabi.com/how-do-i-use-aws-sdk-for-ruby-with-wasabi" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.wasabi.com/llms.txt > Use this file to discover all available pages before exploring further. # AWS SDK for Ruby With Wasabi [AWS SDK for Ruby](https://aws.amazon.com/sdk-for-ruby/). Execute the following steps. 1. Install the [AWS SDK for Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/setup-install.html). 2. (optional) Configure an additional [AWS CLI profile for Wasabi](https://docs.wasabi.com/docs/how-do-i-use-aws-cli-with-wasabi) account using the Wasabi keys. In this example, we have set the profile name as "wasabi" in the "~/.aws/credentials" file. To help you use this SDK with Wasabi, we provided examples for both IAM and S3: - Setting the Credentials - Connecting to IAM and S3 Endpoints - Creating a User Using IAM - Creating a Bucket - Uploading an Object to the Bucket - Reading an Object From the Bucket - Deleting an Object From the Bucket - Other Examples Additional examples are available from the [AWS documentation](https://docs.aws.amazon.com/aws-sdk-php/v2/guide/). > [!NOTE] > The examples use Wasabi's us-east-1 storage region. For other Wasabi storage regions, use the appropriate [Wasabi service URL](https://docs.wasabi.com/docs/what-are-the-service-urls-for-wasabis-different-storage-regions). > [!NOTE] > Send all IAM requests to [iam.wasabisys.com](http://sts.wasabisys.com/). ## Setting the Credentials ```plaintext require 'aws-sdk' # To use the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') # To use Access and Secret keys directly, specify them directly in the function. ``` ## Connecting to IAM and S3 Endpoints #### IAM ```plaintext require 'aws-sdk' # To use the Access and Secret key from the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') iam = Aws::IAM::Client.new( access_key_id: credentials.credentials.access_key_id, secret_access_key: credentials.credentials.secret_access_key, region: 'us-east-1', endpoint: 'https://iam.wasabisys.com' ) # # To use Access and secret keys directly. # iam = Aws::IAM::Client.new( #   access_key_id: '', #   secret_access_key: '', #   region: 'us-east-1', #   endpoint: 'https://iam.wasabisys.com' # ) ``` #### S3 ```plaintext require 'aws-sdk' # To use the Access and Secret key from the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') s3 = Aws::S3::Client.new( access_key_id: credentials.credentials.access_key_id, secret_access_key: credentials.credentials.secret_access_key, region: 'us-east-1', endpoint: 'https://s3.wasabisys.com' ) # # To use Access and secret keys directly. # s3 = Aws::S3::Client.new( #   access_key_id: '', #   secret_access_key: '', #   region: 'us-east-1', #   endpoint: 'https://s3.wasabisys.com' # ) ``` ## Creating a User Using IAM ```plaintext require 'aws-sdk' # To use the Access and Secret key from the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') iam = Aws::IAM::Client.new( access_key_id: credentials.credentials.access_key_id, secret_access_key: credentials.credentials.secret_access_key, region: 'us-east-1', endpoint: 'https://iam.wasabisys.com' ) # # To use Access and secret keys directly. # iam = Aws::IAM::Client.new( #   access_key_id: '', #   secret_access_key: '', #   region: 'us-east-1', #   endpoint: 'https://iam.wasabisys.com' # ) user_name = '' # create IAM User iam.create_user(user_name: user_name) ``` ## Creating a Bucket ```plaintext require 'aws-sdk' # To use the Access and Secret key from the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') s3 = Aws::S3::Client.new( access_key_id: credentials.credentials.access_key_id, secret_access_key: credentials.credentials.secret_access_key, region: 'us-east-1', endpoint: 'https://s3.wasabisys.com' ) # # To use Access and secret keys directly. # s3 = Aws::S3::Client.new( #   access_key_id: '', #   secret_access_key: '', #   region: 'us-east-1', #   endpoint: 'https://s3.wasabisys.com' # ) bucket_name = '' # create a bucket s3.create_bucket(bucket: bucket_name) ``` ## Uploading an Object to the Bucket ```plaintext require 'aws-sdk' # To use the Access and Secret key from the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') s3 = Aws::S3::Client.new( access_key_id: credentials.credentials.access_key_id, secret_access_key: credentials.credentials.secret_access_key, region: 'us-east-1', endpoint: 'https://s3.wasabisys.com' ) # # To use Access and secret keys directly. # s3 = Aws::S3::Client.new( #   access_key_id: '', #   secret_access_key: '', #   region: 'us-east-1', #   endpoint: 'https://s3.wasabisys.com' # ) bucket_name = '' object_key = '' object_path = '' # upload to your Wasabi bucket File.open(object_path, 'rb') do |file| s3.put_object(bucket: bucket_name, key: object_key, body: file) end ``` ## Reading an Object From the Bucket ```plaintext require 'aws-sdk' # To use the Access and Secret key from the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') s3 = Aws::S3::Client.new( access_key_id: credentials.credentials.access_key_id, secret_access_key: credentials.credentials.secret_access_key, region: 'us-east-1', endpoint: 'https://s3.wasabisys.com' ) # # To use Access and secret keys directly. # s3 = Aws::S3::Client.new( #   access_key_id: '', #   secret_access_key: '', #   region: 'us-east-1', #   endpoint: 'https://s3.wasabisys.com' # ) bucket_name = '' object_key = '' # get object from your Wasabi bucket s3.get_object(bucket: bucket_name, key: object_key) ``` ## Deleting an Object From the Bucket ```plaintext require 'aws-sdk' # To use the Access and Secret key from the aws credentials file. credentials = Aws::SharedCredentials.new(profile_name: 'wasabi') s3 = Aws::S3::Client.new( access_key_id: credentials.credentials.access_key_id, secret_access_key: credentials.credentials.secret_access_key, region: 'us-east-1', endpoint: 'https://s3.wasabisys.com' ) # # To use Access and secret keys directly. # s3 = Aws::S3::Client.new( #   access_key_id: '', #   secret_access_key: '', #   region: 'us-east-1', #   endpoint: 'https://s3.wasabisys.com' # ) bucket_name = '' object_key = '' # delete object from Wasabi bucket s3.delete_object(bucket: bucket_name, key: object_key) ``` ## Other Examples This example shows how to create Access Keys for IAM users on Wasabi using Ruby. ```plaintext require 'aws-sdk-iam' #v2: require 'aws-sdk' Aws::IAM::Errors::ServiceError iam = Aws::IAM::Client.new( { region: 'us-east-1', credentials: Aws::Credentials.new('Wasabi-Access-Key', 'Wasabi-Secret-Key'), endpoint: 'https://iam.wasabisys.com' } ) user_name = "User-Name" def list_keys(iam, user_name) begin list_access_keys_response = iam.list_access_keys({ user_name: user_name }) if list_access_keys_response.access_key_metadata.count == 0 puts"No access keys." else puts"Access keys:" list_access_keys_response.access_key_metadata.each do |key_metadata| puts" Access key ID: #{key_metadata.access_key_id}" end end rescueAws::IAM::Errors::NoSuchEntity puts"Cannot find user '#{user_name}'." exit(false) end end list_keys(iam, user_name) puts "\nCreating access key..." begin iam.create_access_key({ user_name: user_name }) list_keys(iam, user_name) rescue Aws::IAM::Errors::LimitExceeded puts"Too many access keys. Can't create any more." end ``` This example shows how to copy object(s) between buckets using Ruby. ```plaintext require 'aws-sdk-s3' #v2: require 'aws-sdk' Aws.config.update({ region: 'us-east-1', credentials: Aws::Credentials.new('Wasabi-Access-Key', 'Wasabi-Secret-Key'), endpoint: 'https://s3.wasabisys.com' }) source_bucket_name = 'bucket-name-1' target_bucket_name = 'bucket-name-2' #note that your source and destination bucket needs to be in the same region as you cannot specify and point to two different endpoints source_key = 'object-key' target_key = 'object-key' #you can either use the same name or copy them with a different name begin s3 = Aws::S3::Client.new(region: 'us-east-1') s3.copy_object(bucket: target_bucket_name, copy_source: source_bucket_name + '/' + source_key, key: target_key) rescue StandardError => ex puts'Caught exception copying object ' + source_key + ' from bucket ' + source_bucket_name + ' to bucket ' + target_bucket_name + ' as ' + target_key + ':' puts ex.message end puts 'Copied ' + source_key + ' from bucket ' + source_bucket_name + ' to bucket ' + target_bucket_name + ' as ' + target_key   ```