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

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

AWS 리소스에 액세스하기 위해 인증된 요청을 보낼 수 있도록 연동 사용자 및 애플리케이션에 대해 임시 보안 자격 증명을 제공할 수 있습니다. 이러한 임시 자격 증명을 요청할 때는 사용자 이름과 부여할 리소스 권한을 설명하는 IAM 정책을 제공해야 합니다. 세션은 기본적으로 1시간 동안 지속됩니다. 연합된 사용자 및 애플리케이션에 대한 임시 보안 자격 증명을 요청할 때는 다른 기간 값을 명시적으로 설정할 수 있습니다.

참고

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

리소스에 액세스하기 위해 보안 자격 증명을 제공하고 인증된 요청을 보내려면 다음을 수행합니다.

  • AWSSecurityTokenServiceClient 클래스의 인스턴스를 만듭니다. 자격 증명 제공에 대한 자세한 내용은 AWS SDK for Java 사용 단원을 참조하십시오.

  • 보안 토큰 서비스(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 java.io.IOException; 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.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; 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 com.amazonaws.services.s3.model.ObjectListing; public class MakingRequestsWithFederatedTempCredentials { public static void main(String[] args) throws IOException { String clientRegion = "*** Client 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(); } } }

관련 리소스

이 페이지에서: