

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

# 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 인스턴스 프로파일에서 로드하려는 이 시도를 비활성화할 수 있습니다.