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

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

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

참고

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

연합된 사용자의 임시 보안 자격 증명을 사용하여 요청하기

1

AWS Security Token Service 클라이언트의 인스턴스인 AWSSecurityTokenServiceClient를 만듭니다.

2

이전 단계에서 만든 STS 클라이언트의 getFederationToken 메서드를 호출하여 세션을 시작합니다.

임시 자격 증명에 연결하려는 IAM 정책 및 사용자 이름을 비롯한 세션 정보를 제공해야 합니다.

이 메서드는 임시 보안 자격 증명을 반환합니다.

3

BasicSessionCredentials 객체의 인스턴스에 임시 보안 자격 증명을 패키지로 포함합니다. 이 객체를 사용하여 Amazon S3 클라이언트에 임시 보안 자격 증명을 제공합니다.

4

임시 보안 자격 증명을 전달하여 AmazonS3Client 클래스의 인스턴스를 만듭니다.

이 클라이언트를 사용하여 Amazon S3에 요청을 보냅니다. 만료된 자격 증명을 사용하여 요청을 보낼 경우 Amazon S3에서 오류를 반환합니다.

다음은 위에서 설명한 작업을 실행하는 Java 코드 샘플입니다.

Copy
// In real applications, the following code is part of your trusted code. It has // your security credentials you use to obtain temporary security credentials. AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider()); GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest(); getFederationTokenRequest.setDurationSeconds(7200); getFederationTokenRequest.setName("User1"); // Define the policy and add to the request. Policy policy = new Policy(); // Define the policy here. // Add the policy to the request. getFederationTokenRequest.setPolicy(policy.toJson()); GetFederationTokenResult federationTokenResult = stsClient.getFederationToken(getFederationTokenRequest); Credentials sessionCredentials = federationTokenResult.getCredentials(); // Package the session credentials as a BasicSessionCredentials object // for an S3 client object to use. BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials( sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken()); // The following will be part of your less trusted code. You provide temporary security // credentials so it can send authenticated requests to Amazon S3. // Create an Amazon S3 client by passing in the basicSessionCredentials object. AmazonS3Client s3 = new AmazonS3Client(basicSessionCredentials); // Test. For example, send list object keys in a bucket. ObjectListing objects = s3.listObjects(bucketName);

정책에서 조건을 설정하려면 Condition 객체를 만들고 이를 정책에 연결하십시오. 다음 코드 샘플에서는 지정된 IP 범위의 사용자가 객체를 나열할 수 있게 하는 조건을 보여 줍니다.

Copy
Policy policy = new Policy(); // Allow only a specified IP range. Condition condition = new StringCondition(StringCondition.StringComparisonType.StringLike, ConditionFactory.SOURCE_IP_CONDITION_KEY , "192.168.143.*"); policy.withStatements(new Statement(Effect.Allow) .withActions(S3Actions.ListObjects) .withConditions(condition) .withResources(new Resource("arn:aws:s3:::"+ bucketName))); getFederationTokenRequest.setPolicy(policy.toJson());

다음 Java 코드 예제는 지정된 버킷의 키를 나열합니다. 이 코드 예제에서는 먼저 연합된 사용자(User1)를 위해 2시간짜리 세션에 대한 임시 보안 자격 증명을 가져오고 이를 사용하여 인증된 요청을 Amazon S3로 보냅니다.

다른 사용자에 대한 임시 보안 자격 증명을 요청할 경우, 보안 강화를 위해 임시 자격 증명을 요청할 수 있는 IAM 사용자의 보안 자격 증명을 사용할 수 있습니다. IAM 사용자가 임시 보안 자격 증명을 요청할 때 최소한의 애플리케이션별 권한만 부여하도록 이 IAM 사용자의 액세스 권한을 제한할 수도 있습니다. 이 샘플은 특정 버킷의 객체만 나열합니다. 따라서 우선 다음과 같은 정책을 연결하여 IAM 사용자를 만듭니다.

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

이 정책은 IAM 사용자에게 임시 보안 자격 증명을 요청하고, AWS 리소스를 목록을 조회할 수만 있는 액세스 권한을 허용합니다. IAM 사용자를 만드는 방법에 대한 자세한 내용은 IAM 사용 설명서IAM 사용자와 관리자 그룹 처음 만들기 단원을 참조하십시오.

이제 IAM 사용자 보안 자격 증명을 사용하여 다음 예제를 테스트할 수 있습니다. 이 예제에서는 임시 보안 자격 증명을 사용하여 인증된 요청을 Amazon S3로 보냅니다. 이 예제에서는 연합된 사용자(User1)에 대한 임시 보안 자격 증명을 요청할 때 특정 버킷(YourBucketName)의 객체를 나열하는 데 필요한 액세스 권한을 제한하는 다음 정책을 지정합니다. 정책을 업데이트하고 자신의 기존 버킷 이름을 제공해야 합니다.

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

다음 샘플을 업데이트하고 이전 연합된 사용자 액세스 정책에 지정한 버킷 이름을 제공해야 합니다.

Copy
import java.io.IOException; import com.amazonaws.auth.BasicSessionCredentials; import com.amazonaws.auth.PropertiesCredentials; 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.services.s3.AmazonS3Client; import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient; 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 S3Sample { private static String bucketName = "*** Specify bucket name ***"; public static void main(String[] args) throws IOException { AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient(new ProfileCredentialsProvider()); GetFederationTokenRequest getFederationTokenRequest = new GetFederationTokenRequest(); getFederationTokenRequest.setDurationSeconds(7200); getFederationTokenRequest.setName("User1"); // Define the policy and add to the request. Policy policy = new Policy(); policy.withStatements(new Statement(Effect.Allow) .withActions(S3Actions.ListObjects) .withResources(new Resource("arn:aws:s3:::ExampleBucket"))); 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 S3 client object to use. BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(), sessionCredentials.getSessionToken()); AmazonS3Client s3 = new AmazonS3Client(basicSessionCredentials); // Test. For example, send ListBucket request using the temporary security credentials. ObjectListing objects = s3.listObjects(bucketName); System.out.println("No. of Objects = " + objects.getObjectSummaries().size()); } }

관련 리소스

이 페이지에서: