Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

연합된 사용자의 임시 자격 증명을 사용하여 요청하기 - Ruby용 AWS SDK

AWS 리소스에 액세스하기 위해 인증된 요청을 보낼 수 있도록 연동 사용자 및 애플리케이션에 대해 임시 보안 자격 증명을 제공할 수 있습니다. IAM 서비스로부터 이러한 임시 자격 증명을 요청할 경우 사용자 이름과, 부여할 리소스 권한을 정의한 IAM 정책을 제공해야 합니다. 세션은 기본적으로 1시간 동안 지속됩니다. 하지만 IAM 사용자 자격 증명을 사용하여 임시 자격 증명을 요청하면, 연합된 사용자 및 애플리케이션에 대해 임시 보안 자격 증명을 요청할 때 다른 기간 값을 명시적으로 설정할 수 있습니다. 연동 사용자와 애플리케이션의 임시 보안 자격 증명에 대한 자세한 내용은 요청 만들기 단원을 참조하십시오.

참고

연동 사용자 및 애플리케이션에 대한 임시 보안 자격 증명을 요청할 때 보안 강화를 위해 필요한 액세스 권한만 가진 전용 IAM 사용자를 사용할 수 있습니다. 임시 사용자는 임시 보안 자격 증명을 요청한 IAM 사용자보다 더 많은 권한을 가질 수 없습니다. 자세한 내용은 AWS Identity and Access Management FAQ를 참조하십시오.

다음 Ruby 코드 예제에서는 제한된 권한을 가진 연동 사용자가 지정된 버킷의 키를 나열하도록 합니다.

require 'aws-sdk-s3' require 'aws-sdk-iam' USAGE = <<DOC Usage: federated_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 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::Client.new(region: 'us-west-2') begin user = iam.create_user(user_name: user_name) iam.wait_until(:user_exists, user_name: user_name) print_debug("Created new user #{user_name}") rescue Aws::IAM::Errors::EntityAlreadyExists print_debug("Found user #{user_name} in region #{region}") end 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 #Identify the IAM user we allow to list Amazon S3 bucket items for an hour. user = get_user(region, user_name, true) # Create a new STS client and get temporary credentials. sts = Aws::STS::Client.new(region: region) 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}\"}]}", }) # Create an Amazon S3 resource with temporary credentials. s3 = Aws::S3::Resource.new(region: region, credentials: creds) puts "Contents of '%s':" % bucket_name puts ' Name => GUID' s3.bucket(bucket_name).objects.limit(50).each do |obj| puts " #{obj.key} => #{obj.etag}" end