메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

IAM 사용자 임시 자격 증명을 사용하여 요청 - Ruby용 AWS SDK

IAM 사용자 또는 AWS 계정은 Ruby용 AWS SDK를 사용하여 임시 보안 자격 증명을 요청(요청 만들기 참조)한 후 이 자격 증명을 사용하여 Amazon S3에 액세스할 수 있습니다. 세션의 유효 기간이 만료된 후 이 자격 증명도 만료됩니다. 세션은 기본적으로 1시간 동안 지속됩니다. IAM 사용자 자격 증명을 사용할 경우 임시 보안 자격 증명을 요청할 때 1시간 ~ 36시간의 기간을 지정할 수 있습니다.

IAM 사용자 임시 보안 자격 증명을 사용하여 요청하기

1

Aws::STS::Client.new로 새 AWS Security Token Service(AWS STS) 클라이언트를 만들고 임시 자격 증명을 만듭니다.

2

새로운 사용자에 대한 새로운 IAM 사용자 정책을 생성하고, 버킷의 콘텐츠를 나열할 수 있는 임시 권한을 부여합니다.

3

임시 자격 증명으로 Amazon S3 클라이언트를 만들고 임시 자격 증명을 사용하여 지정된 버킷의 콘텐츠를 나열합니다. 만료된 자격 증명을 사용하여 요청을 보낼 경우 Amazon S3에서 오류를 반환합니다.

다음은 위에서 설명한 작업을 실행하는 Ruby 코드 예제입니다.

require 'aws-sdk-s3' # Create new STS client and get temporary credentials sts = Aws::STS::Client.new(region: region) temp_creds = sts.get_federation_token({ duration_seconds: 3600, name: user_name, policy: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Stmt1\",\"Effect\":\"Allow\",\"Action\":\"s3:ListBucket\",\"Resource\":\"arn:aws:s3:::#{bucket_name}\"}]}", }) credentials = temp_creds.credentials =begin access_key_id = credentials.access_key_id # String expiration = credentials.expiration # Time secret_access_key = credentials.secret_access_key # String session_token = credentials.session_token # String =end # Create S3 client with temporary credentials s3 = Aws::S3::Client.new(region: region, credentials: credentials) # Get an Amazon S3 resource s3 = Aws::S3::Resource.new(region: region) # Create an array of the object keynames in the bucket, up to the first 100 bucket = s3.bucket('example_bucket').objects.collect(&:key) # Print the array to the terminal puts bucket

참고

AWS 계정 보안 자격 증명을 사용하여 구한 임시 보안 자격 증명의 유효 기간은 1시간입니다. IAM 사용자 자격 증명을 사용하여 세션을 요청할 경우에만 세션 기간을 지정할 수 있습니다.

다음 Ruby 코드 예제는 한 시간 동안 임시 사용자가 지정된 버킷의 항목을 나열하도록 연동 정책을 만듭니다. 이 코드 예제를 사용하려면 AWS 자격 증명에 새 AWS STS 클라이언트를 만들고, Amazon S3 버킷을 나열하는 데 필요한 권한이 있어야 합니다.

require 'aws-sdk-s3' USAGE = <<DOC Usage: sts_create_bucket_policy.rb -b BUCKET -u USER [-r REGION] [-d] [-h] Creates a federated policy for USER to list items in BUCKET for one hour BUCKET is required and must not already exist USER is required and if not found, is created If REGION is not supplied, defaults to us-west-2. -d gives you extra (debugging) information. -h displays this message and quits DOC $debug = false def print_debug(s) if $debug puts s end end def get_user(region, user_name, create) user = nil iam = Aws::IAM::Resource.new(region: region) if create print_debug("Trying to create new user #{user_name} in region #{region}") else print_debug("Getting user #{user_name} in region #{region}") end # First see if user exists user = iam.user(user_name) if user == nil && create user = iam.create_user(user_name: user_name) iam.wait_until(:user_exists, user_name: user_name) print_debug("Created new user #{user_name}") else print_debug("Found user #{user_name}") end user end # main region = 'us-west-2' user_name = '' bucket_name = '' i = 0 while i < ARGV.length case ARGV[i] when '-b' i += 1 bucket_name = ARGV[i] when '-u' i += 1 user_name = ARGV[i] when '-r' i += 1 region = ARGV[i] when '-d' puts 'Debugging enabled' $debug = true when '-h' puts USAGE exit 0 else puts 'Unrecognized option: ' + ARGV[i] puts USAGE exit 1 end i += 1 end if bucket_name == '' puts 'You must supply a bucket name' puts USAGE exit 1 end if user_name == '' puts 'You must supply a user name' puts USAGE exit 1 end # IAM user we allow to list S3 bucket items for an hour user = get_user(region, user_name, true) # Create new STS client and get temporary credentials sts = Aws::STS::Client.new(region: region) temp_creds = sts.get_federation_token({ duration_seconds: 3600, name: user_name, policy: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Stmt1\",\"Effect\":\"Allow\",\"Action\":\"s3:ListBucket\",\"Resource\":\"arn:aws:s3:::#{bucket_name}\"}]}", }) credentials = temp_creds.credentials =begin access_key_id = credentials.access_key_id # String expiration = credentials.expiration # Time secret_access_key = credentials.secret_access_key # String session_token = credentials.session_token # String =end # Create S3 client with temporary credentials s3 = Aws::S3::Client.new(region: region, credentials: credentials) # List the items for the specified S3 bucket s3 = Aws::S3::Resource.new(region: region) begin bucket = s3.bucket(bucket_name) count = bucket.objects.count puts "Items (#{count}):" puts # List the object key bucket.objects.each do |obj| puts " Name: #{obj.key}" end rescue Aws::S3::Errors::PermanentRedirect puts puts 'The bucket is not in the ' + region + ' region' exit 1 end