

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS SDK for PHP 버전 3 자격 증명 공급자 사용
<a name="guide_credentials"></a>

 AWS SDKs에 사용할 수 있는 자격 증명 메커니즘에 대한 참조 정보는 SDK 및 도구 참조 [안내서의 자격 증명 및 액세스를](https://docs.aws.amazon.com/sdkref/latest/guide/access.html) 참조하세요. *AWS SDKs *

**중요**  
보안을 위해 AWS 루트 계정을 액세스에 사용하지 **않는** 것이 *좋습니다*. 최신 보안 권장 사항은 항상 *IAM 사용자 설명서*의 [IAM의 보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

 AWS SDK for PHP 버전 3에서 자격 증명 공급자의 역할은 자격 증명을 소싱하고 SDK의 AWS 서비스 클라이언트에 제공하는 것입니다. SDK는 획득한 자격 증명을 사용하여 각 요청에 암호화 방식으로 서명하여 서비스를 인증합니다. 자격 증명은 일반적으로 액세스 키(액세스 키 ID)와 시크릿 액세스 키로 구성됩니다.

[IAM Identity Center 인증을 설정](credentials.md#use-idc-for-auth)하거나 [IAM 역할을 수임](assumerole-provider.md)하도록 런타임을 구성할 때와 같이 임시 자격 증명을 사용하는 경우 액세스 키에 세션 토큰이 추가되어 AWS 리소스에 대한 시간 제한 액세스를 제공합니다.

## AWS SDK for PHP 버전 3의 자격 증명 공급자란 무엇입니까?
<a name="cred-provider-defn-php"></a>

보안 인증 공급자는 `GuzzleHttp\Promise\PromiseInterface` 인스턴스를 통해 이행되거나 `Aws\Credentials\CredentialsInterface`을 통해 거부되는 `Aws\Exception\CredentialsException`를 반환하는 함수입니다. [SDK는 자격 증명 공급자 함수의 여러 구현을 제공](built-in-providers-in-the-sdk.md)하며, 자격 증명을 생성하거나 자격 증명 로딩을 최적화하기 위해 [고유한 사용자 지정 로직을 구현](creating-a-custom-provider.md)할 수도 있습니다.

보안 인증 공급자는 `credentials` 클라이언트 생성자 옵션에 전달됩니다. 보안 인증 공급자는 비동기적이므로, API 작업을 호출할 때마다 강제로 늦게 평가됩니다. 따라서 보안 인증 공급자 함수를 SDK 클라이언트 생성자에 전달하면 보안 인증이 즉시 확인되지 않습니다. 보안 인증 공급자가 보안 인증 객체를 반환하지 않는 경우 API 작업은 `Aws\Exception\CredentialsException`을 통해 거부됩니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

// Use the ECS credential provider. 
$provider = CredentialProvider::ecsCredentials();
// Be sure to memoize the credentials.
$memoizedProvider = CredentialProvider::memoize($provider);

// Pass the provider to the client
$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $memoizedProvider
]);
```

# AWS SDK for PHP 버전 3의 기본 자격 증명 공급자 체인 이해
<a name="guide_credentials_default_chain"></a>

기본 자격 증명 공급자 체인은 SDK가 간접 호출하는 일련의 기본 제공 자격 증명 공급자로 구성됩니다. 구현할 때는 파라미터 없이 [defaultProvider](defaultprovider-provider.md) 자격 증명 공급자 함수를 사용합니다. 유효한 보안 인증 정보를 찾은 후에는 검색이 중지됩니다.

는 다음 순서로 자격 증명 공급자를 AWS SDK for PHP 실행합니다.
+ [**`env` 공급자**](env-provider.md) - [환경 변수로 설정된AWS 액세스 키](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)를 검색합니다.
+ [**`assumeRoleWithWebIdentityCredentialProvider` 공급자**](assume-role-with-web-identity-provider.md) - IAM 역할 및 웹 ID 토큰 파일 설정을 검색합니다.
+ 체인의이 시점에서 SDK는 공유 AWS `config` 및 `credentials` 파일에서 구성을 찾습니다. SDK에서는 "기본" 프로필에서 구성을 검색하지만 `AWS_PROFILE` 환경 변수가 설정된 경우에는 명명된 프로필 값을 사용합니다.
  +  [**`sso` 공급자**](sso-provider.md) - 공유 `config` 파일에서 [IAM Identity Center 구성 설정](https://docs.aws.amazon.com/sdkref/latest/guide/feature-sso-credentials.html#sso-token-config)을 찾습니다.
  +  [**`login provider` **](login-provider.md) - SDK는 공유 `config` 파일에서 AWS 콘솔 로그인 세션 구성 설정을 찾습니다.
  + [**`process` 공급자 **](process-provider.md) - 공유 `credentials` 파일에서 `credential_process` 설정을 찾습니다.
  + [**`ini` 공급자**](ini-provider.md) - SDK는 공유 `credentials` 파일에서 AWS 자격 증명 또는 IAM 역할 정보를 찾습니다.
  + [**`process` 공급자**](process-provider.md) - 공유 `config` 파일에서 `credential_process` 설정을 찾습니다.
  + [**`ini` 공급자**](ini-provider.md) - SDK는 공유 `config` 파일에서 AWS 자격 증명 또는 IAM 역할 정보를 찾습니다.
+ [**`ecsCredentials` 공급자**](ecscredentials-provider.md) - 임시 자격 증명을 얻는 데 필요한 정보를 제공하는 환경 변수 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ` 또는 `AWS_CONTAINER_CREDENTIALS_FULL_URI`를 찾습니다.
+ [**`instanceProfile` 공급자**](instanceprofile-provider.md) - EC2 인스턴스 메타데이터 서비스를 사용하여 인스턴스 프로파일에 지정된 IAM 역할을 가져옵니다. 역할 정보를 사용하여 임시 자격 증명을 얻습니다.

**참고**  
기본 공급자의 결과는 자동으로 메모이제이션(memoization)됩니다.

체인에 대한 코드는 GitHub [소스 코드](https://github.com/aws/aws-sdk-php/blob/0a99dab427f0a1c082775301141aeac3558691ad/src/Credentials/CredentialProvider.php#L77)에서 확인할 수 있습니다.

# AWS SDK for PHP 버전 3의 기본 제공 자격 증명 공급자
<a name="built-in-providers-in-the-sdk"></a>

SDK는 여러 기본 제공 자격 증명 공급자를 제공하며, 이를 개별적으로 사용하거나 [사용자 지정 자격 증명 공급자 체인](chaining-providers.md)으로 결합할 수 있습니다.

서비스 클라이언트 생성 중에 자격 증명 공급자를 지정하면 SDK는 지정된 자격 증명 공급자만 사용하여 자격 증명을 로드하려고 시도합니다. [기본 자격 증명 공급자 체인](guide_credentials_default_chain.md)은 사용하지 않습니다. 서비스 클라이언트가 `instanceProfile` 공급자를 사용하도록 하려는 경우 서비스 클라이언트 생성자에 `instanceProfile` 공급자를 지정하여 기본 체인을 단축(short-circuit)시킬 수 있습니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::instanceProfile();
// Be sure to memoize the credentials
$memoizedProvider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'credentials' => $memoizedProvider  // The default credential provider chain is not used.
]);
```

**중요**  
API 작업을 수행할 때마다 보안 인증 공급자가 호출됩니다. 보안 인증 로딩이 비용이 많이 드는 작업(예: 디스크 또는 네트워크 리소스에서 로딩)이거나 공급자가 보안 인증일 캐시하지 않는 경우 보안 인증 공급자를 `Aws\Credentials\CredentialProvider::memoize` 함수 안에 래핑하는 것을 고려합니다. SDK에서 사용되는 기본 보안 인증 공급자는 자동으로 메모이제이션(memoization)됩니다.

**Topics**
+ [SDK for PHP의 `login` 공급자](login-provider.md)
+ [SDK for PHP의 `assumeRole` 공급자](assumerole-provider.md)
+ [SDK for PHP의 `sso` 공급자](sso-provider.md)
+ [SDK for PHP의 `defaultProvider` 공급자](defaultprovider-provider.md)
+ [SDK for PHP의 `ecsCredentials` 공급자](ecscredentials-provider.md)
+ [SDK for PHP의 `env` 공급자](env-provider.md)
+ [SDK for PHP의 `assumeRoleWithWebIdentityCredentialProvider` 공급자](assume-role-with-web-identity-provider.md)
+ [SDK for PHP의 `ini` 공급자](ini-provider.md)
+ [SDK for PHP의 `process` 공급자](process-provider.md)
+ [SDK for PHP의 `instanceProfile` 공급자](instanceprofile-provider.md)

# SDK for PHP의 `login` 공급자
<a name="login-provider"></a>

`Aws\Credentials\CredentialProvider::login`는 AWS CLI와 같은 도구에서 지원하는 브라우저 기반 로그인 세션으로 구성된 자격 증명을 로드하려고 시도합니다. 인증 후 AWS SDKs 및 도구에서 작동하는 임시 자격 증명을 AWS 생성합니다.

이 프로세스를 사용하면 초기 계정 설정 중에 생성된 루트 자격 증명, IAM 사용자 또는 자격 증명 공급자의 페더레이션 자격 증명을 사용하여 인증할 수 있으며, PHP용 AWS SDK가 임시 자격 증명을 자동으로 관리합니다. 이 접근 방식은 장기 자격 증명을 로컬에 저장할 필요가 없으므로 보안이 강화됩니다.

`aws login` 명령을 실행하면 활성 콘솔 세션에서 선택하거나 브라우저 기반 인증 흐름을 통해 로그인할 수 있으며, 그러면 임시 자격 증명이 자동으로 생성됩니다. PHP용 AWS SDK는 로그인 서비스를 사용하여 최대 12시간 동안 이러한 자격 증명을 자동으로 새로 고칩니다.

로그인 공급자는 제공된 프로필을 기반으로 이전에 언급한 로그인 세션 워크플로에서 생성된 액세스 토큰을 로드하려고 시도합니다. 공급자를 호출할 때 프로필이 제공되지 않으면 프로필로 돌아가기 전에 먼저 `AWS_PROFILE` 환경 변수를 확인하여 프로필을 확인하려고 시도합니다`default`. 코드 내 구성은 공급자에게 전달될 수 있으며, 공급자가 자격 증명을 새로 고치는 데 사용되는 로그인 서비스 클라이언트의 `region` 값을 찾습니다. 구성 배열에 리전이 제공되지 않은 경우 공급자는 `AWS_REGION` 환경 변수를 확인한 다음 확인된 프로파일에 설정된 리전 값을 확인하여 리전을 확인하려고 시도합니다. 리전을 찾을 수 없는 경우 공급자는 리전을 구성하는 방법에 대한 지침과 함께 거부된 promise를 반환합니다.

공급자는 기본 체인의 일부로 호출되며 직접 호출할 수 있습니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::login(<profile_name>, ['region' => <region>]);
// Cache the results in a memoize function to avoid loading and parsing
// the ini file on every API operation
$provider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region' => 'us-west-2',
    'credentials' => $provider
]);
```

기본적으로 사용하려는 서비스 클라이언트에 자격 증명 구성이 제공되지 않은 경우이 공급자는 자격 `defaultProvider()` 증명 체인의 일부로 호출됩니다. 이 시나리오에서는 서비스 클라이언트의 리전이 자동으로 `login()` 공급자에게 전달됩니다. 또한이 시나리오에서는 프로필로 돌아가기 전에 `AWS_PROFILE` 환경 변수를 확인하여 로그인 공급자에게 전달된 프로필 값을 확인합니다`default`.

# SDK for PHP의 `assumeRole` 공급자
<a name="assumerole-provider"></a>

역할 수임을 통해 `Aws\Credentials\AssumeRoleCredentialProvider`를 사용하여 보안 인증을 생성하는 경우 표시된 것처럼 `'client'` 정보를 `StsClient` 객체와 함께 제공하고 `'assume_role_params'` 세부 정보를 제공해야 합니다.

**참고**  
모든 API 작업에서 자격 AWS STS 증명을 불필요하게 가져오지 않도록 `memoize` 함수를 사용하여 자격 증명이 만료될 때 자격 증명 자동 새로 고침을 처리할 수 있습니다. 예제는 다음 코드를 참조하세요.

```
use Aws\Credentials\CredentialProvider;
use Aws\Credentials\InstanceProfileProvider;
use Aws\Credentials\AssumeRoleCredentialProvider;
use Aws\S3\S3Client;
use Aws\Sts\StsClient;

// Passing Aws\Credentials\AssumeRoleCredentialProvider options directly
$profile = new InstanceProfileProvider();
$ARN = "arn:aws:iam::123456789012:role/xaccounts3access";
$sessionName = "s3-access-example";

$assumeRoleCredentials = new AssumeRoleCredentialProvider([
    'client' => new StsClient([
        'region' => 'us-east-2',
        'version' => '2011-06-15',
        'credentials' => $profile
    ]),
    'assume_role_params' => [
        'RoleArn' => $ARN,
        'RoleSessionName' => $sessionName,
    ],
]);

// To avoid unnecessarily fetching STS credentials on every API operation,
// the memoize function handles automatically refreshing the credentials when they expire
$provider = CredentialProvider::memoize($assumeRoleCredentials);

$client = new S3Client([
    'region'      => 'us-east-2',
    'version'     => '2006-03-01',
    'credentials' => $provider
]);
```

`'assume_role_params'`에 대한 자세한 내용은 [AssumeRole](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerole)을 참조하세요.

# SDK for PHP의 `sso` 공급자
<a name="sso-provider"></a>

`Aws\Credentials\CredentialProvider::sso`는 Single Sign-On 자격 증명 공급자입니다. 이 공급자를 AWS IAM Identity Center 자격 증명 공급자라고도 합니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$credentials = CredentialProvider::sso('profile default');

$s3 = new Aws\S3\S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
```

이름이 지정된 프로필을 사용하는 경우 이전 예제에서 프로필 이름을 `default`로 대체하세요. 이름이 지정된 프로필을 설정하는 방법에 대한 자세한 내용은 [https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) 참조하세요. 또는 [https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html#file-format-profile) 환경 변수를 사용하여 사용할 프로필 설정을 지정할 수 있습니다.

IAM ID 센터 공급자의 작동 방식을 자세히 알아보려면 *AWS SDK 및 도구* 참조 [안내서의 IAM ID 센터 인증 이해를](https://docs.aws.amazon.com/sdkref/latest/guide/understanding-sso.html) 참조하세요.

# SDK for PHP의 `defaultProvider` 공급자
<a name="defaultprovider-provider"></a>

 `Aws\Credentials\CredentialProvider::defaultProvider`는 기본 자격 증명 공급자이며 [기본 자격 증명 공급자 체인](guide_credentials_default_chain.md)이라고도 합니다. 이 공급자는 클라이언트를 생성할 때 `credentials` 옵션을 생략한 경우에 사용됩니다. 예를 들어, 다음 코드 스니펫과 같이 S3Client를 생성하면 SDK는 기본 공급자를 사용합니다.

```
$client = new S3Client([
    'region' => 'us-west-2'
]);
```

체인의 특정 자격 증명 공급자에 파라미터를 제공하려는 경우 코드에서 defaultProvider를 사용할 수도 있습니다. 예를 들어 다음 예제는 `ecsCredentials` 공급자 함수가 사용되는 경우 사용자 지정 연결 제한 시간 및 재시도 설정을 제공합니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::defaultProvider([
    'timeout' => '1.5',
    'retries' => 5
]);

$client = new S3Client([
    'region' => 'us-west-2',
    'credentials' => $provider
]);
```

# SDK for PHP의 `ecsCredentials` 공급자
<a name="ecscredentials-provider"></a>

 `Aws\Credentials\CredentialProvider::ecsCredentials`는 `GET` 요청을 통해 보안 인증을 로드하려고 시도합니다. 이 요청의 URI는 컨테이너에 있는 환경 변수 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`에서 지정됩니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::ecsCredentials();
// Be sure to memoize the credentials
$memoizedProvider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $memoizedProvider
]);
```

# SDK for PHP의 `env` 공급자
<a name="env-provider"></a>

환경 변수를 사용하여 자격 증명을 포함하면 실수로 AWS 보안 액세스 키를 공유할 수 없습니다. 프로덕션 파일의 클라이언트에 AWS 액세스 키를 직접 추가하지 않는 것이 좋습니다.

SDK는 Amazon Web Services에 인증하기 위해 먼저 환경 변수에서 보안 인증을 확인합니다. SDK는 `getenv()` 함수를 사용하여 `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` 및 `AWS_SESSION_TOKEN` 환경 변수를 찾습니다. 이러한 보안 인증을 환경 보안 인증이라고 합니다. 이러한 값을 얻는 방법에 대한 지침은 *AWS SDK 및 도구 참조 가이드*의 [단기 보안 인증을 사용한 인증](https://docs.aws.amazon.com/sdkref/latest/guide/access-temp-idc.html)을 참조하세요.

에서 애플리케이션을 호스팅하는 경우 SDK가 이러한 자격 증명을 자동으로 사용할 [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_PHP_eb.html)수 있도록 [AWS Elastic Beanstalk 콘솔을 통해](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-softwaresettings.html#environments-cfg-softwaresettings-console) `AWS_ACCESS_KEY_ID``AWS_SECRET_KEY`, 및 `AWS_SESSION_TOKEN` 환경 변수를 설정할 수 있습니다.

환경 변수를 설정하는 방법에 대한 자세한 내용은 *AWS SDK 및 도구 참조 가이드*의 [환경 변수 지원](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html) 참조하세요. 또한 대부분의 AWS SDKs. [https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#EVarSettings](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#EVarSettings) 

다음과 같이 명령줄에서 환경 변수를 설정할 수도 있습니다.

 **Linux** 

```
$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
   # The access key for your AWS 계정.
$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   # The secret access key for your AWS 계정.
$ export AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of security token>
   # The temporary session key for your AWS 계정. 
   # The AWS_SECURITY_TOKEN environment variable can also be used, but is only supported for backward compatibility purposes.
   # AWS_SESSION_TOKEN is supported by multiple AWS SDKs other than PHP.
```

 **Windows** 

```
C:\> SET  AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
   # The access key for your AWS 계정.
C:\> SET  AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   # The secret access key for your AWS 계정.
C:\> SET AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of security token>
   # The temporary session key for your AWS 계정. 
   # The AWS_SECURITY_TOKEN environment variable can also be used, but is only supported for backward compatibility purposes.
   # AWS_SESSION_TOKEN is supported by multiple AWS SDKs besides PHP.
```

 `Aws\Credentials\CredentialProvider::env`는 환경 변수에서 보안 인증을 로드하려고 시도합니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => CredentialProvider::env()
]);
```

# SDK for PHP의 `assumeRoleWithWebIdentityCredentialProvider` 공급자
<a name="assume-role-with-web-identity-provider"></a>

 `Aws\Credentials\CredentialProvider::assumeRoleWithWebIdentityCredentialProvider`는 역할을 위임하여 보안 인증 로드를 시도합니다. 환경 변수 `AWS_ROLE_ARN` 및 `AWS_WEB_IDENTITY_TOKEN_FILE`이 존재할 경우, 공급자는 `AWS_WEB_IDENTITY_TOKEN_FILE`에 지정된 전체 경로에서 디스크의 토큰을 사용하여 `AWS_ROLE_ARN`에서 지정된 역할 위임을 시도합니다. 환경 변수를 사용할 경우, 공급자는 `AWS_ROLE_SESSION_NAME` 환경 변수로부터 세션 설정을 시도합니다.

환경 변수가 설정되어 있지 않다면, 공급자는 기본 프로필 또는 `AWS_PROFILE`으로 설정된 값을 사용합니다. 공급자는 기본적으로 `~/.aws/credentials` 및 `~/.aws/config`에서 프로필을 읽으며, `filename` 컨피그 옵션에서 지정된 프로필을 읽어 들일 수 있습니다. 공급자는 프로필의 `role_arn`에서 역할을 위임하며, `web_identity_token_file`에서 설정된 전체 경로로부터 토큰을 읽습니다. `role_session_name`은 프로필에 설정되어 있는 경우 사용할 수 있습니다.

공급자는 기본 공급망의 한 부분으로서 호출되지만 직접 호출될 수도 있습니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::assumeRoleWithWebIdentityCredentialProvider();
// Cache the results in a memoize function to avoid loading and parsing
// the ini file on every API operation
$provider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $provider
]);
```

기본적으로 이 보안 인증 공급자는 StsClient에서 역할을 위임하기 위해 사용하는 구성된 리전을 상속합니다. 선택적으로 전체 StsClient를 제공할 수 있습니다. 보안 인증은 제공된 모든 StsClient에서 `false`로 설정해야 합니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;
use Aws\Sts\StsClient;

$stsClient = new StsClient([
    'region'      => 'us-west-2',
    'version'     => 'latest',
    'credentials' => false
])

$provider = CredentialProvider::assumeRoleWithWebIdentityCredentialProvider([
    'stsClient' => $stsClient
]);
// Cache the results in a memoize function to avoid loading and parsing
// the ini file on every API operation
$provider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $provider
]);
```

# SDK for PHP의 `ini` 공급자
<a name="ini-provider"></a>

 `Aws\Credentials\CredentialProvider::ini`는 공유 `config` 및 `credentials` 파일에서 자격 증명을 로드하려고 시도합니다. 기본적으로 SDK는에 있는 공유 AWS `credentials` 파일에서 “기본” 프로파일을 로드하려고 시도합니다`~/.aws/credentials`. SDK가 `AWS_SDK_LOAD_NONDEFAULT_CONFIG` 환경 변수를 찾으면에 있는 공유 AWS `config` 파일에서 "기본" 프로파일도 확인합니다`~/.aws/config`.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::ini();
// Cache the results in a memoize function to avoid loading and parsing
// the ini file on every API operation
$provider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $provider
]);
```

공급자를 생성하는 함수에 인수를 제공하여 사용자 지정 프로파일 또는 .ini 파일 위치를 사용할 수 있습니다.

```
$profile = 'production';
$path = '/full/path/to/credentials.ini';

$provider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $provider
]);
```

# SDK for PHP의 `process` 공급자
<a name="process-provider"></a>

 `Aws\Credentials\CredentialProvider::process`는 [공유 AWS 구성 파일의](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) 프로파일에 지정된 `credential_process` 값을 실행하여 자격 증명을 로드하려고 시도합니다.

기본적으로 SDK는 먼저에 있는 공유 AWS `credentials` 파일에서 “기본” 프로파일을 로드하려고 시도합니다`~/.aws/credentials`. 공유 `credentials` 파일에서 "기본" 프로필을 찾을 수 없는 경우 공유 `config` 파일에서 기본 프로필을 찾습니다. 다음은 공유 `credentials` 파일의 구성 예시입니다.

```
[default]
credential_process = /path/to/file/credential_returning_executable.sh --custom-command custom_parameter
```

SDK는 PHP의 `shell_exec` 함수를 사용하여 제공된 그대로 `credential_process` 명령을 직접적으로 호출한 후 stdout에서 JSON 데이터를 읽습니다. `credential_process`는 다음 형식으로 자격 증명을 stdout에 작성해야 합니다.

```
{
    "Version": 1,
    "AccessKeyId": "",
    "SecretAccessKey": "",
    "SessionToken": "",
    "Expiration": ""
}
```

 `SessionToken` 및 `Expiration`은 선택 사항 두 선택 사항을 지정한다면 보안 인증이 임시로 처리됩니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::process();
// Cache the results in a memoize function to avoid loading and parsing
// the ini file on every API operation
$provider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $provider
]);
```

공급자를 생성하는 함수에 인수를 제공하여 사용자 지정 프로파일 또는 .ini 파일 위치를 사용할 수 있습니다.

```
$profile = 'production';
$path = '/full/path/to/credentials.ini';

$provider = CredentialProvider::process($profile, $path);
$provider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $provider
]);
```

# SDK for PHP의 `instanceProfile` 공급자
<a name="instanceprofile-provider"></a>

 `Aws\Credentials\CredentialProvider::instanceProfile`은 Amazon EC2 인스턴스 프로파일에 지정된 IAM 역할에 대한 자격 증명을 로드하려고 시도합니다.

```
use Aws\Credentials\CredentialProvider;
use Aws\S3\S3Client;

$provider = CredentialProvider::instanceProfile();
// Be sure to memoize the credentials
$memoizedProvider = CredentialProvider::memoize($provider);

$client = new S3Client([
    'region'      => 'us-west-2',
    'version'     => '2006-03-01',
    'credentials' => $memoizedProvider
]);
```

기본적으로 공급자는 보안 인증을 가져오기 위해 최대 3번까지 재시도할 수 있습니다. 재시도 횟수는 `retries` 옵션으로 설정할 수 있으며, 다음 코드에서와 같이 옵션을 `0`으로 설정하여 완전히 비활성화할 수 있습니다.

```
use Aws\Credentials\CredentialProvider;

$provider = CredentialProvider::instanceProfile([
    'retries' => 0
]);
$memoizedProvider = CredentialProvider::memoize($provider);
```

환경 변수 `AWS_METADATA_SERVICE_NUM_ATTEMPTS`가 설정되어 있는 경우 그 값이 앞서 표시된 ‘retries’ 옵션보다 우선 적용됩니다.

**참고**  
`AWS_EC2_METADATA_DISABLED` 환경 변수를 `true`로 설정하면 Amazon EC2 인스턴스 프로파일에서 로드하려는 이 시도를 비활성화할 수 있습니다.

# SDK for PHP에서 자격 증명 공급자 체인화
<a name="chaining-providers"></a>

`Aws\Credentials\CredentialProvider::chain()` 함수를 사용하여 보안 인증 공급자를 연결할 수 있습니다. 이 함수는 variadic 수의 인수를 받으며, 각 인수는 보안 인증 공급자 함수입니다. 따라서 이 함수는 공급자 중 하나가 성공적으로 이행된 promise를 반환할 때까지 함수가 하나씩 차례로 호출되도록 제공된 함수의 합성인 새 함수를 반환합니다.

`defaultProvider`는 이 합성을 사용하여 실패하기 전에 여러 공급자를 확인합니다. `defaultProvider`의 소스는 `chain` 함수의 사용을 보여 줍니다.

```
// This function returns a provider
public static function defaultProvider(array $config = [])
{
    // This function is the provider, which is actually the composition
    // of multiple providers. Notice that we are also memoizing the result by
    // default.
    return self::memoize(
        self::chain(
            self::env(),
            self::ini(),
            self::instanceProfile($config)
        )
    );
}
```

# SDK for PHP와 함께 사용할 사용자 지정 자격 증명 공급자 생성
<a name="creating-a-custom-provider"></a>

보안 인증 공급자는 호출될 때 `GuzzleHttp\Promise\PromiseInterface` 객체를 통해 이행되거나 `Aws\Credentials\CredentialsInterface`을 통해 거부되는 promise(`Aws\Exception\CredentialsException`)를 반환하는 함수일 뿐입니다.

공급자를 생성하기 위한 모범 사례는 실제 보안 인증 공급자를 생성하기 위해 호출되는 함수를 생성하는 것입니다. 예를 들어 다음은 `env` 공급자의 소스입니다(예시용으로 약간 수정됨). 이 소스는 실제 공급자 함수를 반환하는 함수라는 점에 주의하세요. 이 함수를 사용하여 보안 인증 공급자를 쉽게 생성하고 값으로 전달할 수 있습니다.

```
use GuzzleHttp\Promise;
use GuzzleHttp\Promise\RejectedPromise;

// This function CREATES a credential provider
public static function env()
{
    // This function IS the credential provider
    return function () {
        // Use credentials from environment variables, if available
        $key = getenv(self::ENV_KEY);
        $secret = getenv(self::ENV_SECRET);
        if ($key && $secret) {
            return Create::promise_for(
                new Credentials($key, $secret, getenv(self::ENV_SESSION))
            );
        }

        $msg = 'Could not find environment variable '
            . 'credentials in ' . self::ENV_KEY . '/' . self::ENV_SECRET;
        return new RejectedPromise(new CredentialsException($msg));
    };
}
```

# SDK for PHP에서 자격 증명 메모이제이션
<a name="memoizing-credentials"></a>

때로는 이전 반환 값을 기억하는 보안 인증 공급자를 생성해야 할 수도 있습니다. 이 공급자는 보안 인증 로딩이 비용이 많이 드는 작업인 경우 또는 `Aws\Sdk` 클래스를 사용하여 여러 클라이언트 간에 보안 인증 공급자를 공유하는 경우 성능에 유용합니다. 보안 인증 공급자 함수를 `memoize` 함수 안에 래핑하여 메모이제이션(memoization)을 보안 인증 공급자에 추가할 수 있습니다.

```
use Aws\Credentials\CredentialProvider;

$provider = CredentialProvider::instanceProfile();
// Wrap the actual provider in a memoize function
$provider = CredentialProvider::memoize($provider);

// Pass the provider into the Sdk class and share the provider
// across multiple clients. Each time a new client is constructed,
// it will use the previously returned credentials as long as
// they haven't yet expired.
$sdk = new Aws\Sdk(['credentials' => $provider]);

$s3 = $sdk->getS3(['region' => 'us-west-2', 'version' => 'latest']);
$ec2 = $sdk->getEc2(['region' => 'us-west-2', 'version' => 'latest']);

assert($s3->getCredentials() === $ec2->getCredentials());
```

메모이제이션(memoization)된 보안 인증이 만료되면 메모이제이션 래퍼가 보안 인증을 새로 고치려고 시도할 때 래핑된 공급자를 호출합니다.

# AWS SDK for PHP 버전 3을 사용하여 IAM 역할 수임
<a name="guide_credentials_assume_role"></a>

## Amazon EC2 인스턴스 변수 보안 인증에 IAM 역할 사용
<a name="instance-profile-credentials"></a>

Amazon EC2 인스턴스에서 애플리케이션을 실행하는 경우에 호출할 자격 증명을 제공하는 기본 방법은 [IAM 역할을](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) 사용하여 임시 보안 자격 증명을 가져오는 AWS 것입니다.

IAM 역할을 사용하는 경우 애플리케이션에서 보안 인증 관리에 대해 걱정할 필요가 없습니다. Amazon EC2 인스턴스의 메타데이터 서버에서 임시 보안 인증을 검색하여 인스턴스가 역할을 “수임”할 수 있습니다.

**인스턴스 프로파일 보안 인증**이라고도 하는 임시 보안 인증을 사용하면 역할 정책에서 허용하는 작업 및 리소스에 액세스할 수 있습니다. Amazon EC2는 IAM 서비스에 인스턴스를 안전하게 인증하여 역할을 수임하고, 검색된 역할 보안 인증을 정기적으로 업데이트하는 모든 작업을 처리합니다. 이러한 방식으로 사용자의 별도 작업 없이 애플리케이션을 안전하게 보호할 수 있습니다. 임시 보안 인증 정보를 지원하는 서비스 목록은 *IAM 사용 설명서*의 [IAM으로 작업하는AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)를 참조하세요.

**참고**  
매번 메타데이터 서비스를 실행하지 않으려면 `Aws\CacheInterface`의 인스턴스를 `'credentials'` 옵션으로 클라이언트 생성자에 전달할 수 있습니다. 이렇게 하면 SDK가 캐시된 인스턴스 프로파일 보안 인증을 대신 사용할 수 있습니다. 자세한 내용은 [AWS SDK for PHP 버전 3 구성](guide_configuration.md)을 참조하세요.

*SDK를 사용하여 Amazon EC2 애플리케이션을 개발하는 방법에 대한 자세한 내용은AWS SDK 및 도구 참조 안내서*의 [Amazon EC2 인스턴스용 IAM 역할 사용을](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html) 참조하세요.

### IAM 역할을 생성 및 Amazon EC2 인스턴스에 할당
<a name="create-and-assign-an-iam-role-to-an-ec2-instance"></a>

1. IAM 클라이언트 생성

    **가져오기** 

   ```
   require 'vendor/autoload.php';
   
   use Aws\Iam\IamClient;
   ```

    **샘플 코드** 

   ```
   $client = new IamClient([
       'region' => 'us-west-2',
       'version' => '2010-05-08'
   ]);
   ```

1. 사용할 작업과 리소스에 필요한 권한으로 IAM 역할을 생성합니다.

    **샘플 코드** 

   ```
   $result = $client->createRole([
       'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED
       'Description' => 'Description of Role',
       'RoleName' => 'RoleName', // REQUIRED
   ]);
   ```

1. IAM 인스턴스 프로파일을 생성하고 결과에서 Amazon 리소스 이름(ARN)을 생성합니다.
**참고**  
대신 IAM 콘솔을 사용하는 경우 AWS SDK for PHP콘솔은 인스턴스 프로파일을 자동으로 생성하고 해당하는 역할과 동일한 이름을 부여합니다.  
 **샘플 코드**   

   ```
   $IPN = 'InstanceProfileName';
   
   $result = $client->createInstanceProfile([
       'InstanceProfileName' => $IPN ,
   ]);
   
   $ARN = $result['Arn'];
   $InstanceID =  $result['InstanceProfileId'];
   ```

1. Amazon EC2 클라이언트 생성

    **가져오기** 

   ```
   require 'vendor/autoload.php';
   
   use Aws\Ec2\Ec2Client;
   ```

    **샘플 코드** 

   ```
   $ec2Client = new Ec2Client([
       'region' => 'us-west-2',
       'version' => '2016-11-15',
   ]);
   ```

1. Amazon EC2 인스턴스 프로파일을 실행 중이거나 중지된 Amazon EC2 인스턴에 추가합니다. IAM 역할의 인스턴스 프로파일 이름을 사용합니다.

    **샘플 코드** 

   ```
    $result = $ec2Client->associateIamInstanceProfile([
       'IamInstanceProfile' => [
           'Arn' => $ARN,
           'Name' => $IPN,
       ],
       'InstanceId' => $InstanceID
   ]);
   ```

자세한 내용은 *Amazon EC2 사용 설명서*의 [Amazon EC2의 IAM 역할](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)을 참조하세요.

## Amazon ECS 태스크에 대한 IAM 역할 사용하기
<a name="ecs-credentials"></a>

Amazon Elastic Container Service(Amazon ECS)의 태스크는 IAM 역할을 수임하여 AWS API를 호출할 수 있습니다. 이 기능은 Amazon EC2 인스턴스 프로파일이 Amazon EC2 인스턴스에 보안 인증을 제공하는 것과 비슷한 방식으로 애플리케이션에서 보안 인증을 관리할 수 있는 전략을 제공합니다.

장기 AWS 자격 증명을 생성하여 컨테이너에 배포하거나 Amazon EC2 인스턴스의 역할을 사용하는 대신 임시 자격 증명을 사용하는 IAM 역할을 ECS 작업 정의 또는 `RunTask` [API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ecs-2014-11-13.html#runtask) 작업과 연결할 수 있습니다.

컨테이너 작업이 맡을 수 있는 IAM 역할을 사용하는 방법에 대한 자세한 내용은 Amazon ECS 개발자 안내서[의 작업 IAM 역할](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) 주제를 참조하세요. 작업 정의에서 작업 IAM 역할을 a `taskRoleArn` 형식으로 사용하는 예제는 *Amazon ECS* 개발자 안내서에 있는 [예제 작업 정의를](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-example-taskdefs.html) 참조하세요.

## 다른에서 IAM 역할 수임 AWS 계정
<a name="assuming-an-iam-role-in-another-aws-account"></a>

 AWS 계정 (계정 A)에서 작업하고 다른 계정(계정 B)에서 역할을 맡으려면 먼저 계정 B에서 IAM 역할을 생성해야 합니다.이 역할은 계정(계정 A)의 엔터티가 계정 B에서 특정 작업을 수행하도록 허용합니다. 교차 계정 액세스에 대한 자세한 내용은 [자습서: IAM 역할을 사용하여 AWS 계정 간 액세스 위임을 참조하세요](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html).

계정 B로 역할을 생성한 후 역할 ARN을 기록합니다. 계정 A에서 역할을 수임할 때이 ARN을 사용합니다. 계정 A의 엔터티와 연결된 AWS 자격 증명을 사용하여 역할을 수임합니다.

에 대한 자격 증명을 사용하여 AWS STS 클라이언트를 생성합니다 AWS 계정. 다음에서는 보안 인증 프로파일을 사용했지만 어떤 방법이든 사용할 수 있습니다. 새로 생성된 AWS STS 클라이언트를 사용하여 assume-role을 호출하고 사용자 지정 sessionName을 제공합니다. 결과에서 새 임시 보안 인증을 검색합니다. 기본적으로 보안 인증은 1시간 지속됩니다.

 **샘플 코드** 

```
$stsClient = new Aws\Sts\StsClient([
    'profile' => 'default',
    'region' => 'us-east-2',
    'version' => '2011-06-15'
]);

$ARN = "arn:aws:iam::123456789012:role/xaccounts3access";
$sessionName = "s3-access-example";

$result = $stsClient->AssumeRole([
      'RoleArn' => $ARN,
      'RoleSessionName' => $sessionName,
]);

 $s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' =>  [
        'key'    => $result['Credentials']['AccessKeyId'],
        'secret' => $result['Credentials']['SecretAccessKey'],
        'token'  => $result['Credentials']['SessionToken']
    ]
]);
```

자세한 내용은 AWS SDK for PHP API 참조의 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) 또는 [AssumeRole](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerole) 사용을 참조하세요.

## 웹 보안 인증으로 IAM 역할 사용
<a name="using-an-iam-role-with-web-identity"></a>

웹 자격 증명 연동을 사용하면 고객이 AWS 리소스에 액세스할 때 인증에 타사 자격 증명 공급자를 사용할 수 있습니다. 웹 보안 인증을 사용하여 역할을 수임하려면 먼저 IAM 역할을 생성하고 웹 ID 제공업체(idP)를 구성해야 합니다. 자세한 내용은 [웹 ID 또는 OpenID Connect 페더레이션을 위한 역할 생성(콘솔)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)을 참조하세요.

자격 [증명 공급자를 생성하고](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) [웹 자격 증명에 대한 역할을 생성한](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) 후 AWS STS 클라이언트를 사용하여 사용자를 인증합니다. 해당 사용자에 대한 권한으로 보안 인증에 대한 webIdentityToken 및 ProviderId를 제공하고 IAM 역할에 대한 역할 ARN을 제공합니다.

 **샘플 코드** 

```
$stsClient = new Aws\Sts\StsClient([
    'profile' => 'default',
    'region' => 'us-east-2',
    'version' => '2011-06-15'
]);

$ARN = "arn:aws:iam::123456789012:role/xaccounts3access";
$sessionName = "s3-access-example";
$duration = 3600;

$result = $stsClient->AssumeRoleWithWebIdentity([
      'WebIdentityToken' => "FACEBOOK_ACCESS_TOKEN",
      'ProviderId' => "graph.facebook.com",
      'RoleArn' => $ARN,
      'RoleSessionName' => $sessionName,
]);

 $s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' =>  [
        'key'    => $result['Credentials']['AccessKeyId'],
        'secret' => $result['Credentials']['SecretAccessKey'],
        'token'  => $result['Credentials']['SessionToken']
    ]
]);
```

자세한 내용은 AWS SDK for PHP API 참조의 [AssumeRoleWithWebIdentity - 웹 기반 자격 증명 공급자를 통한 연동](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity.html) 또는 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerolewithwebidentity)를 참조하세요.

## 프로필을 사용하여 역할 수임
<a name="assume-role-with-profile"></a>

### `~/.aws/credentials`에서 프로필을 정의하세요
<a name="assume-role-profile-credentials-file"></a>

에서 프로필을 정의하여 IAM 역할을 AWS SDK for PHP 사용하도록를 구성할 수 있습니다`~/.aws/credentials`.

수임할 역할에 대해 `role_arn` 설정을 사용하여 새 프로필을 생성합니다. 또한 IAM 역할을 수임할 수 있는 권한을 가진 보안 인증을 사용하여 다른 프로필의 `source_profile` 설정을 포함합니다. 이러한 구성 설정에 대한 자세한 내용은 *AWS SDK 및 도구 참조 가이드의* [역할 보안 인증 수임](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html)을 참조하세요.

예를 들어, 다음 `~/.aws/credentials`에서 `project1` 프로필은 `role_arn`을 설정하고 `default` 프로필을 보안 인증의 원본으로 지정하여 연결된 엔티티가 역할을 수임할 수 있는지 확인합니다.

```
[project1]
role_arn = arn:aws:iam::123456789012:role/testing
source_profile = default
role_session_name = OPTIONAL_SESSION_NAME

[default]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
aws_session_token= YOUR_AWS_SESSION_TOKEN
```

클라이언트를 시작할 때 `AWS_PROFILE` 환경 변수 또는 `profile` 파라미터를 설정하여 `default` 프로필을 소스 보안 인증으로 사용하면 `project1`에 지정된 역할이 수임됩니다.

다음 `S3Client` 스니펫은 생성자에서 `profile` 파라미터를 사용하는 방법을 보여줍니다. `S3Client`에는 `project1` 프로필과 관련된 역할과 관련된 권한이 있습니다.

```
$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-1',
    'version' => '2006-03-01',
    'profile' => 'project1'
]);
```

### `~/.aws/config`에서 프로필을 정의하세요
<a name="assume-role-profile-config-file"></a>

이 `~/.aws/config` 파일에는 가정하려는 프로필도 포함될 수 있습니다. 환경 변수를 `AWS_SDK_LOAD_NONDEFAULT_CONFIG`로 설정하면 `config` 파일에서 프로파일을 로드합니다. `AWS_SDK_LOAD_NONDEFAULT_CONFIG`를 설정하면 SDK는 `~/.aws/config` 및 `~/.aws/credentials` 모두에서 프로필을 로드합니다. `~/.aws/credentials`의 프로필이 마지막으로 로드되고 `~/.aws/config`에 있는 동일한 이름의 프로필보다 우선 적용됩니다. 어느 위치의 프로필이든 `source_profile` 또는 수임할 프로필로 사용할 수 있습니다.

다음 예제에서는 파일에 정의된 `config` 파일의 `project1` 프로필과 `credentials`파일의 `default` 프로필을 사용합니다. `AWS_SDK_LOAD_NONDEFAULT_CONFIG`도 설정됩니다.

```
# Profile in ~/.aws/config.

[profile project1]
role_arn = arn:aws:iam::123456789012:role/testing
source_profile = default
role_session_name = OPTIONAL_SESSION_NAME
```

```
# Profile in ~/.aws/credentials.

[default]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
aws_session_token= YOUR_AWS_SESSION_TOKEN
```

다음 스니펫과 같이 `S3Client` 생성자가 실행되면 프로필에 정의된 역할은 `project1` 프로필과 `default` 관련된 보안 인증을 사용하여 가정됩니다.

```
$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-1',
    'version' => '2006-03-01',
    'profile' => 'project1'
]);
```

# SDK for PHP AWS STS 에서의 임시 자격 증명 사용
<a name="guide_credentials_temporary"></a>

 AWS Security Token Service (AWS STS)를 사용하면 IAM 사용자 또는 자격 증명 페더레이션을 통해 인증하는 사용자에 대해 제한된 권한, **임시 자격 증명을** 요청할 수 있습니다. 자세한 내용은 *IAM 사용자 설명서*의 [임시 보안 보안 인증](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)을 참조하세요. 임시 보안 자격 증명을 사용하여 대부분의 AWS 서비스에 액세스할 수 있습니다. 임시 보안 인증 정보를 지원하는 서비스 목록은 *IAM 사용 설명서*의 [IAM으로 작업하는AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)를 참조하세요.

임시 자격 증명의 일반적인 사용 사례 중 하나는 타사 자격 증명 공급자를 통해 사용자를 인증하여 모바일 또는 클라이언트 측 애플리케이션에 AWS 리소스에 대한 액세스 권한을 부여하는 것입니다([웹 자격 증명 연동](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) 참조).

## 임시 보안 인증 얻기
<a name="getting-temporary-credentials"></a>

AWS STS 에는 임시 자격 증명을 반환하는 여러 작업이 있지만, `GetSessionToken` 가장 간단하게 보여줄 수 있습니다. 다음 스니펫은 PHP SDK STS 클라이언트의 `getSessionToken` 메서드를 직접 호출하여 임시 자격 증명을 검색합니다.

```
$sdk = new Aws\Sdk([
    'region'   => 'us-east-1',
]);

$stsClient = $sdk->createSts();

$result = $stsClient->getSessionToken();
```

`GetSessionToken` 및 다른 AWS STS 작업의 결과에는 항상 `'Credentials'` 값이 포함됩니다. `$result`를 출력하면(예: `print_r($result)` 사용) 다음과 같습니다.

```
Array
(
    ...
    [Credentials] => Array
    (
        [SessionToken] => '<base64 encoded session token value>'
        [SecretAccessKey] => '<temporary secret access key value>'
        [Expiration] => 2013-11-01T01:57:52Z
        [AccessKeyId] => '<temporary access key value>'
    )
    ...
)
```

## 에 임시 자격 증명 제공 AWS SDK for PHP
<a name="providing-temporary-credentials-to-the-sdk-php"></a>

 AWS 클라이언트를 인스턴스화하고에서 AWS STS 직접 수신한 값을 전달하여 다른 클라이언트에서 임시 자격 증명을 사용할 수 있습니다.

```
use Aws\S3\S3Client;

$result = $stsClient->getSessionToken();

$s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' => [
        'key'    => $result['Credentials']['AccessKeyId'],
        'secret' => $result['Credentials']['SecretAccessKey'],
        'token'  => $result['Credentials']['SessionToken']
    ]
]);
```

또한 `Aws\Credentials\Credentials` 객체를 생성하고 클라이언트를 인스턴스화할 때 해당 객체를 사용할 수도 있습니다.

```
use Aws\Credentials\Credentials;
use Aws\S3\S3Client;

$result = $stsClient->getSessionToken();

$credentials = new Credentials(
    $result['Credentials']['AccessKeyId'],
    $result['Credentials']['SecretAccessKey'],
    $result['Credentials']['SessionToken']
);

$s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
```

하지만 임시 보안 인증을 제공하는 *가장 좋은* 방법은 `StsClient`와 함께 포함된 `createCredentials()` 헬퍼 메서드를 사용하는 것입니다. 이 메서드는 AWS STS 결과에서 데이터를 추출하고 `Credentials` 객체를 생성합니다.

```
$result = $stsClient->getSessionToken();
$credentials = $stsClient->createCredentials($result);

$s3Client = new S3Client([
    'version'     => '2006-03-01',
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
```

애플리케이션 또는 프로젝트에서 임시 자격 증명을 사용해야 하는 이유에 대한 자세한 내용은 AWS STS 설명서의 [임시 액세스 권한 부여 시나리오](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)를 참조하세요.

# SDK for PHP에서 익명 클라이언트 생성
<a name="guide_credentials_anonymous"></a>

보안 인증과 연결되지 않은 클라이언트를 만들어야 할 경우가 있습니다. 이렇게 하면 서비스에 익명 요청을 수행할 수 있습니다.

예를 들어 익명 액세스를 허용하도록 Amazon S3 객체와 Amazon CloudSearch 도메인을 둘 다 구성할 수 있습니다.

익명 클라이언트를 생성하려면 `'credentials'` 옵션을 `false`로 설정할 수 있습니다.

```
$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
    'credentials' => false
]);

// Makes an anonymous request. The object would need to be publicly
// readable for this to succeed.
$result = $s3Client->getObject([
    'Bucket' => 'amzn-s3-demo-bucket',
    'Key'    => 'my-key',
]);
```