

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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) - SDK は、[環境変数として設定されたAWS アクセスキー](https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html)を検索します。
+ [**`assumeRoleWithWebIdentityCredentialProvider` プロバイダ**](assume-role-with-web-identity-provider.md) - SDK は IAM ロールとウェブ ID トークンファイル設定を検索します。
+ チェーンのこの時点で、SDK は共有 AWS `config` ファイルと `credentials` ファイルで設定を検索します。SDK は「default」プロファイルで設定を検索しますが、`AWS_PROFILE` 環境変数が設定されている場合、SDK はその名前付きプロファイル値を使用します。
  +  [**`sso` プロバイダ**](sso-provider.md) - SDK は、共有 `config` ファイル内の [IAM アイデンティティセンター設定](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) - SDK は共有 `credentials` ファイルで `credential_process` 設定を検索します。
  + [**`ini` **](ini-provider.md) provider - SDK は、共有`credentials`ファイル内の AWS 認証情報または IAM ロール情報を検索します。
  + [**`process` プロバイダ**](process-provider.md) - SDK は共有 `config` ファイルで `credential_process` 設定を検索します。
  + [**`ini` **](ini-provider.md) provider - SDK は、共有`config`ファイル内の AWS 認証情報または IAM ロール情報を検索します。
+ [**`ecsCredentials` プロバイダ**](ecscredentials-provider.md) - SDK は、一時的な認証情報を取得するための情報を提供する環境変数 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ` または `AWS_CONTAINER_CREDENTIALS_FULL_URI` を検索します。
+ [**`instanceProfile` プロバイダ**](instanceprofile-provider.md) - SDK は EC2 インスタンスメタデータサービスを使用して、インスタンスプロファイルで指定された IAM ロールを取得します。ロール情報を使用して、SDK は一時的な認証情報を取得します。

**注記**  
デフォルトのプロバイダの結果は自動的にメモ化されます。

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` プロバイダを指定することで、デフォルトのチェーンを短縮できます。

```
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 で使用されるデフォルトの認証情報プロバイダは自動的にメモ化されます。

**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` は、 CLI AWS などのツールによって容易になるブラウザベースのログインセッションによって設定された認証情報をロードしようとします。認証後、 は AWS SDKs とツールで動作する一時的な認証情報 AWS を生成します。

このプロセスでは、最初のアカウント設定時に作成されたルート認証情報、IAM ユーザー、または ID プロバイダーからのフェデレーティッド ID を使用して認証でき、 AWS SDK for PHP によって一時的な認証情報が自動的に管理されます。このアプローチにより、長期的な認証情報をローカルに保存する必要がなくなるため、セキュリティが強化されます。

`aws login` コマンドを実行すると、アクティブなコンソールセッションから選択することも、ブラウザベースの認証フローを使用してサインインすることもできます。これにより、一時的な認証情報が自動的に生成されます。 AWS SDK for PHP は、サインインサービスを使用して、これらの認証情報を最大 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` は、シングルサインオン認証情報プロバイダです。このプロバイダーは AWS IAM アイデンティティセンター 認証情報プロバイダーとも呼ばれます。

```
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`」をプロファイル名に置き換えてください。名前付きプロファイルの設定について詳しくは、*AWS SDK およびツールリファレンスガイド*の「[共有 `config` と `credentials` ファイル](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` オプションを指定しなかった場合に使用されます。例えば、次のスニペットに示すように S3 クライアントを作成すると、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 キーを本稼働ファイル内のクライアントに直接追加しないことをお勧めします。

Amazon Web Services に対して認証する場合、SDK が最初に認証情報をチェックする場所はユーザーの環境変数です。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)」を参照してください。

でアプリケーションをホストしている場合は[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`環境変数を設定して、SDK がそれらの認証情報を自動的に使用できるようにします。

環境変数の設定の詳細については、*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` config オプションで指定されたプロファイルから読み取ることができます。プロバイダーはプロファイルの `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` ファイルで「default」プロファイルが見つからない場合、SDK は共有 `config` ファイルで default プロファイルを検索します。次は共有 `credentials` ファイルの設定の例です。

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

SDK は `shell_exec` 関数を使用し、stdout から JSON データを読み取ることで、指定どおりに `credential_process` コマンドを呼び出します。`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()` 関数を使用して、認証情報プロバイダーチェーンを作成できます。この関数は、それぞれが認証情報プロバイダ関数である可変個引数を受け入れます。次に、この関数は、複数の指定した関数を合成した 1 つの新しい関数を返します (各関数は、いずれかのプロバイダから正常に満たされた 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` クラスを使用して複数のクライアントで 1 つの認証情報プロバイダを共有にする場合に、パフォーマンスを向上させるために便利であることがあります。認証情報プロバイダ関数を `memoize` 関数内にラップすることによって、認証情報プロバイダにメモ化を追加できます。

```
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());
```

メモ化された認証情報の有効期限が切れると、memoize ラッパーはラップされたプロバイダを呼び出して認証情報の更新を試行します。

# AWS SDK for PHP バージョン 3 を使用して IAM ロールを引き受ける
<a name="guide_credentials_assume_role"></a>

## IAM ロールによる Amazon EC2 インスタンス変数の認証情報の取得
<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 インスタンスのメタデータサーバーから一時認証情報を取得することで、インスタンスはロールを「継承」できます。

一時認証情報 (**インスタンスプロファイルの認証情報**とも呼ばれます) は、ロールのポリシーで許可されているアクションとリソースへのアクセスを可能にします。IAM サービスに対してインスタンスを安全に認証してロールを継承すること、および取得したロールの認証情報を定期的に更新することの細かい段取りはすべて Amazon EC2 によって処理されます。これにより、ユーザーはほとんど何もしなくてもアプリケーションの安全性が保たれます。一時的なセキュリティ認証情報を受け入れるサービスのリストについては、*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 インスタンスにインスタンスプロファイルを追加します。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) のタスクは、 AWS API コールを行う IAM ロールを引き受けることができます。これにより、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)」トピックを参照してください。タスク定義で `taskRoleArn` 形式のタスク IAM ロールを使用する例については、*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 を記録します。この ARN は、アカウント A からロールを引き受けるときに使用します。ロールを引き受けるには、アカウント 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) の使用」を参照してください。

## ウェブ ID がある IAM ロールの使用
<a name="using-an-iam-role-with-web-identity"></a>

Web Identity フェデレーションを使用すると、お客様は AWS リソースにアクセスするときに認証にサードパーティーの ID プロバイダーを使用できます。ウェブ ID があるロールを継承できるようになるには、その前に IAM ロールを作成してウェブ ID プロバイダー (dP) を設定する必要があります。詳細については、「[ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)」を参照してください。

[ID プロバイダーを作成し](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)、[ウェブ ID のロールを作成したら](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html)、 AWS STS クライアントを使用してユーザーを認証します。ID の 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 — ウェブベースの ID プロバイダーを介したフェデレーション](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` パラメーターを使用することで、`project1` で特定されたロールは、`default` プロファイルをソース認証情報を使用して継承されます。

次のスニペットは、`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` を設定すると、SDK for PHP は `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 ユーザー、または ID フェデレーションを介して認証するユーザーの制限付き権限、**一時的な認証情報**をリクエストできます。理解を深めるには、*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)」を参照してください。

一時的な認証情報の一般的なユースケースの 1 つは、サードパーティーの ID プロバイダーを介してユーザーを認証することで、モバイルまたはクライアント側のアプリケーションに AWS リソースへのアクセスを許可することです ([「ウェブ ID フェデレーション](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',
]);
```