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

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

이 주제에서는 PHP용 AWS SDK 버전 3의 클래스를 사용하여 연동 사용자 및 애플리케이션에 대한 임시 보안 자격 증명을 요청하고 이를 사용하여 Amazon S3에 저장된 리소스에 액세스하는 방법을 설명합니다. 여기에서는 PHP용 AWS SDK 사용 및 PHP 예제 실행의 지침에 따라 PHP용 AWS SDK가 올바르게 설치되어 있다고 가정합니다.

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

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

이 가이드의 PHP 예제 실행에 대한 자세한 내용은 PHP 예제 실행 단원을 참조하십시오.

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

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

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

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

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

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

다음 예제에서는 정책 리소스를 지정할 때 YourBucketName을 자신의 기존 버킷 이름으로 대체합니다.

<?php require 'vendor/autoload.php'; use Aws\Sts\StsClient; use Aws\S3\S3Client; use Aws\S3\Exception\S3Exception; $bucket = '*** Your Bucket Name ***'; // In real applications, the following code is part of your trusted code. It has // the security credentials that you use to obtain temporary security credentials. $sts = new StsClient( [ 'version' => 'latest', 'region' => 'us-east-1'] ); // Fetch the federated credentials. $sessionToken = $sts->getFederationToken([ 'Name' => 'User1', 'DurationSeconds' => '3600', 'Policy' => json_encode([ 'Statement' => [ 'Sid' => 'randomstatementid' . time(), 'Action' => ['s3:ListBucket'], 'Effect' => 'Allow', 'Resource' => 'arn:aws:s3:::' . $bucket ] ]) ]); // The following will be part of your less trusted code. You provide temporary // security credentials so the code can send authenticated requests to Amazon S3. $s3 = new S3Client([ 'region' => 'us-east-1', 'version' => 'latest', 'credentials' => [ 'key' => $sessionToken['Credentials']['AccessKeyId'], 'secret' => $sessionToken['Credentials']['SecretAccessKey'], 'token' => $sessionToken['Credentials']['SessionToken'] ] ]); try { $result = $s3->listObjects([ 'Bucket' => $bucket ]); } catch (S3Exception $e) { echo $e->getMessage() . PHP_EOL; }

관련 리소스

이 페이지에서: