

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

# 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 インスタンスプロファイルからのロードの試行を無効にできます。