

# Sourcing credentials with an external process in the AWS CLI
<a name="cli-configure-sourcing-external"></a>

**警告**  
このトピックでは、外部プロセスからの認証情報の調達について説明します。認証情報を生成するコマンドが非承認のプロセスやユーザーからアクセスできることは、セキュリティ上のリスクにつながります。AWS CLI および AWS が提供するサポートされた安全な代替方法を使用して、認証情報が侵害されるリスクを低下することをおすすめします。漏洩を防ぐために、`config` ファイルおよびサポートされたファイルとツールの安全を確保します。  
カスタム認証情報ツールが機密情報を `StdErr` に書き込まないことを確実にしてください。SDK および AWS CLI がそのような情報をキャプチャしてログに記録し、不正ユーザーに情報を公開する可能性があるためです。

AWS CLI で直接サポートされていない認証情報を生成または参照する方法がある場合は、`config` ファイル内の `credential_process` を設定することで、それを使用するように AWS CLI を設定できます。

例えば、`config` ファイルに次のようなエントリを含めることができます。

```
[profile developer]
credential_process = /opt/bin/awscreds-custom --username helen
```

**構文**  
任意のオペレーティングシステムと互換性のある方法でこの文字列を作成するには、以下のルールに従います。
+ パスまたはファイル名にスペースが含まれている場合は、完全なパスとファイル名を二重引用符 (" ") で囲みます。パスとファイル名は A 〜 Z、a 〜 z、0 〜 9、- \$1 . の文字、スペースのみで構成できます。
+ パラメータ名またはパラメータ値にスペースが含まれている場合は、その要素を二重引用符 (" ") で囲みます。囲むのは、名前または値のみであり、そのペアではありません。
+ 文字列に環境変数を含めないでください。例えば、`$HOME` または `%USERPROFILE%` を含めることはできません。
+ ホームフォルダを `~` として指定しないでください。完全パスを指定する必要があります。

**Windows の例**

```
credential_process = "C:\Path\To\credentials.cmd" parameterWithoutSpaces "parameter with spaces"
```

**Linux または macOS の例**

```
credential_process = "/Users/Dave/path/to/credentials.sh" parameterWithoutSpaces "parameter with spaces"
```

**認証情報プログラムからの想定される出力**

AWS CLI はプロファイルで指定されたようにコマンドを実行し、次に `STDOUT` からデータを読み取ります。指定するコマンドは、以下の構文と一致する JSON 出力を `STDOUT` に生成する必要があります。

```
{
  "Version": 1,
  "AccessKeyId": "an AWS access key",
  "SecretAccessKey": "your AWS secret access key",
  "SessionToken": "the AWS session token for temporary credentials", 
  "Expiration": "ISO8601 timestamp when the credentials expire"
}
```

**注記**  
本文書の執筆時点では、`Version` キーは `1` に設定する必要があります。構造が進化するため、時間の経過と共に増えていく可能性があります。

`Expiration` キーは、[ISO8601](https://en.wikipedia.org/wiki/ISO_8601) 形式のタイムスタンプです。`Expiration` キーがツールの出力にない場合、CLI はこの認証情報が更新されない長期の認証情報であると判断します。それ以外の認証情報は一時的な認証情報と見なされ、有効期限が切れる前に `credential_process` を再実行して自動的に更新されます。

**注記**  
AWS CLI は、外部プロセスの認証情報をロールを引き受けるような認証情報としてキャッシュ***しません***。キャッシュが必要な場合は、外部プロセス内で実装する必要があります。

外部プロセスはゼロ以外のリターンコードを返して、認証情報の取得時にエラーが発生したことを示すことができます。