

**このドキュメントはバージョン 1 の AWS CLI のみを対象としています。**

AWS CLI バージョン 1 のサポート終了を発表しました。AWS CLI バージョン 2 に移行することをお勧めします。日付、その他の詳細、移行方法については、「[お知らせ](https://aws.amazon.com/blogs/developer/cli-v1-maintenance-mode-announcement/)」を参照してください。AWS CLI のバージョン 2 に関連するドキュメントについては、[バージョン 2 用ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/)を参照してください。

# Authentication and access credentials for the AWS CLI
<a name="cli-chap-authentication"></a>

AWS サービスを使用して開発するときは、AWS CLI が AWS との間でどのように認証するかを確立する必要があります。AWS CLI にプログラムでアクセスするための認証情報を設定するには、次のいずれかのオプションを選択します。オプションは推奨順になっています。


****  

| 認証タイプ | 目的 | 手順 | 
| --- | --- | --- | 
| IAM ユーザーの短期認証情報 | 長期認証情報よりも安全な IAM ユーザーの短期認証情報を使用します。認証情報が漏洩した場合でも、有効期限が切れる前に使用される可能性のある期間が限られます。 | [Authenticating with short-term credentials for the AWS CLI](cli-authentication-short-term.md) | 
| Amazon EC2 インスタンスの IAM 。 | Amazon EC2 インスタンスメタデータを使用し、Amazon EC2 インスタンスに割り当てられたロールを使用して一時的な認証情報のクエリを実行します。 | [Using Amazon EC2 instance metadata as credentials in the AWS CLI](cli-configure-metadata.md) | 
| アクセス許可のロールの引き受け | 別の認証情報メソッドと組み合わせて、ユーザーがアクセスできない可能性のある AWS のサービスに一時的にアクセスできるようにするためのロールを引き受けます。 | [AWS CLI での IAM ロールの使用](cli-configure-role.md) | 
| IAM ユーザーの長期認証情報 | (非推奨) 有効期限のない長期認証情報を使用します。 | [Authenticating using IAM user credentials for the AWS CLI](cli-authentication-user.md) | 
| IAM の外部ストレージ  | (非推奨) 別の認証情報メソッドと組み合わせます。ただし、認証情報値の値は AWS CLI 以外の場所に保存します。この方法は、認証情報が保存される外部の場所の安全性に依存します。 | [Sourcing credentials with an external process in the AWS CLI](cli-configure-sourcing-external.md) | 

## 設定と認証情報の優先順位
<a name="cli-chap-authentication-precedence"></a>

認証情報と構成設定は、システム環境変数、ユーザー環境変数、ローカルの AWS 設定ファイルなど複数の場所にあり、コマンドラインでパラメータとして明示的に宣言される場合もあります。特定の場所が他の場所よりも優先されます。AWS CLI 認証情報と構成設定は、次の順序で優先されます。

1. **[コマンドラインオプション](cli-configure-options.md)** - `--region`、`--output`、`--profile` パラメータなど、他の任意の場所にある設定を上書きします。

1. **[環境変数](cli-configure-envvars.md)** - システムの環境変数に値を保存できます。

1. **[ロールの継承](cli-configure-role.md)** - 設定または [https://docs.aws.amazon.com/cli/v1/reference/sts/assume-role.html](https://docs.aws.amazon.com/cli/v1/reference/sts/assume-role.html) コマンドを通じて IAM ロールのアクセス許可を継承します。

1. **[ウェブ ID によるロールの継承](cli-configure-role.md)** - 設定または [https://docs.aws.amazon.com/cli/v1/reference/sts/assume-role-with-web-identity.html](https://docs.aws.amazon.com/cli/v1/reference/sts/assume-role-with-web-identity.html) コマンドを通じてウェブ ID を使用して IAM ロールのアクセス許可を継承します。

1. **[認証情報ファイル](cli-configure-files.md)** – コマンド `aws configure` を実行すると、`credentials` ファイルと `config` ファイルが更新されます。「`credentials`」ファイルは、Linux または macOS では「`~/.aws/credentials`」、Windows では「`C:\Users\USERNAME\.aws\credentials`」にあります。

1. **[カスタムプロセス](cli-configure-sourcing-external.md)** — 外部ソースから認証情報を取得します。

1. **[設定ファイル](cli-configure-files.md)** - コマンド `aws configure` を実行すると、`credentials` ファイルと `config` ファイルが更新されます。「`config`」ファイルは、Linux または macOS では「`~/.aws/config`」、Windows では「`C:\Users\USERNAME\.aws\config`」にあります。

1. **[コンテナ認証情報](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)** - IAM ロールを各 Amazon Elastic コンテナサービス (Amazon ECS) タスク定義に関連付けることができます。関連付けられると、そのロールの一時認証情報は、そのタスクのコンテナで使用できるようになります。詳細については、*Amazon Elastic Container Service 開発者ガイド*の「[タスク用の IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)」を参照してください。

1. **[Amazon EC2 インスタンスプロファイルの認証情報](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)** - IAM ロールを各 Amazon Elastic コンピュートクラウド (Amazon EC2) インスタンスに関連付けることができます。関連付けられると、そのロールの一時認証情報は、インスタンスで実行中のコードで使用できるようになります。認証情報は、Amazon EC2 メタデータサービスを通じて配信されます。詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 の IAM ロール](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)」および「*IAM ユーザーガイド*」の「[インスタンスプロファイルの使用 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)」を参照してください。

## このセクションのその他のトピック
<a name="cli-chap-authentication-topics"></a>
+ [Authenticating with short-term credentials for the AWS CLI](cli-authentication-short-term.md)
+ [AWS CLI での IAM ロールの使用](cli-configure-role.md)
+ [Authenticating using IAM user credentials for the AWS CLI](cli-authentication-user.md)
+ [Using Amazon EC2 instance metadata as credentials in the AWS CLI](cli-configure-metadata.md)
+ [Sourcing credentials with an external process in the AWS CLI](cli-configure-sourcing-external.md)

# Authenticating with short-term credentials for the AWS CLI
<a name="cli-authentication-short-term"></a>

セッション期間の長いオプションで [IAM Identity Center 認証](https://docs.aws.amazon.com/sdkref/latest/guide/access-sso.html)を使用するように SDK またはツールを設定することをお勧めします。ただし、AWS アクセスポータルにある一時的な認証情報をコピーして使用することもできます。有効期限が切れたら、新しい認証情報をコピーする必要があります。一時的な認証情報は、プロファイルで使用することも、システムプロパティや環境変数の値として使用することもできます。

1. [AWS アクセスポータルにサインインします](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosignin.html)。

1. [次の手順](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html)に従って、AWS アクセスポータルから IAM ロール認証情報をコピーします。

   1. リンク先の手順のステップ 2 で、AWS アカウントと、開発ニーズに合ったアクセスを許可する IAM ロールの名前を選択します。通常、このロールには **PowerUserAccess** や **Developer** などの名前が付いています。

   1. ステップ 4 で、**[AWS 認証情報ファイルにプロファイルを追加]** オプションを選択し、内容をコピーします。

1. 共有 `credentials` ファイルを作成するか、開きます。このファイルは、`~/.aws/credentials` Linux および macOS システム、および `%USERPROFILE%\.aws\credentials` Windows 上にあります。詳細については、「[Configuration and credential file settings in the AWS CLI](cli-configure-files.md)」を参照してください。

1. 共有 `credentials` ファイルに次のテキストを追加します。サンプル値を、コピーした認証情報に置き換えます。

   ```
   [default] 
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE 
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE
   ```

1. 共有 `config` ファイルに、希望するデフォルトのリージョンと形式を追加します。

   ```
   [default]
   region=us-west-2
   output=json
   
   [profile user1]
   region=us-east-1
   output=text
   ```

SDK は、サービスクライアントを作成するときに、これらの一時的な認証情報にアクセスしてリクエストごとに使用します。ステップ 2a で選択した IAM ロールの設定により、[一時的な認証情報の有効期間](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtosessionduration.html)が決まります。最大期間は 12 時間です。

認証情報が期限切れになるたびに、これらのステップを繰り返します。

# AWS CLI での IAM ロールの使用
<a name="cli-configure-role"></a>

[AWS Identity and Access Management (IAM) ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)は、ユーザーが追加の (または異なる) アクセス許可を取得するか、または異なる AWS アカウントでアクションを実行するアクセス許可を取得するこをできる認可ツールです。

**Topics**
+ [前提条件](#cli-role-prereqs)
+ [IAM ロール使用の概要](#cli-role-overview)
+ [ロールの設定と使用](#cli-role-prepare)
+ [多要素認証を使用する](#cli-configure-role-mfa)
+ [クロスアカウントロールと外部 ID](#cli-configure-role-xaccount)
+ [監査を容易にするためのロールセッション名の指定](#cli-configure-role-session-name)
+ [ウェブ ID を使用したロールの継承](#cli-configure-role-oidc)
+ [キャッシュされた認証情報のクリア](#cli-configure-role-cache)

## 前提条件
<a name="cli-role-prereqs"></a>

これらの `iam` コマンドを使用するには、AWS CLI をインストールして設定する必要があります。これには、ロールが別の認証情報メソッドとペアになっていると仮定して設定されたプロファイルの設定が含まれます。詳細については、 を参照してください。[AWS CLI のインストール、更新、アンインストール](cli-chap-install.md)

## IAM ロール使用の概要
<a name="cli-role-overview"></a>

IAM ロールを使用するように AWS Command Line Interface (AWS CLI) を設定するには、`~/.aws/config` ファイルでロールのプロファイルを定義します。

次の例は `marketingadmin` という名前のロールプロファイルを示しています。`--profile marketingadmin` を使用して (または [AWS\$1PROFILE 環境変数](cli-configure-envvars.md)でこれを指定して) コマンドを実行する場合、AWS CLI は個別のプロファイル `user1` で定義された認証情報を使用して Amazon リソースネーム (ARN) `arn:aws:iam::123456789012:role/marketingadminrole` のロールを引き受けます。このロールに割り当てられたアクセス権限で許可される任意のオペレーションを実行することができます。

```
[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadminrole
source_profile = user1
```

その後、このロールを使用するアクセス許可があるユーザー認証情報を含む、別の名前付きプロファイルを示す `source_profile` を指定できます。前の例では、`marketingadmin` プロファイルは `user1` プロファイル内の認証情報を使用しています。AWS CLI コマンドがプロファイル `marketingadmin` を使用するように指定すると、AWS CLI はリンクされた `user1` プロファイルの認証情報を自動的に検索し、それらを使用して、指定された IAM ロールの一時的な認証情報をリクエストします。CLI では、バックグラウンドで [sts: AssumeRole ](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) オペレーションを使用してこれを実現します。これらの一時的な認証情報は次に、リクエストされた AWS CLI コマンドを実行するために使用されます。指定されたロールには、リクエストされた AWS CLI コマンドの実行を許可する IAM 許可ポリシーがアタッチされている必要があります。

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたは Amazon Elastic Container Service (Amazon ECS) コンテナ内から AWS CLI コマンドを実行するには、インスタンスプロファイルまたはコンテナにアタッチされた IAM ロールを使用できます。プロファイルを指定しない、または環境変数を設定しない場合、そのロールが直接使用されます。これにより、存続期間の長いアクセスキーをインスタンスで保存することを回避できます。これらのインスタンスまたはコンテナのロールは、別のロールの認証情報を取得するためにのみ使用できます。これを行うには、`credential_source` (`source_profile` の代わりに) を使用して、認証情報を検索する方法を指定します。`credential_source` 属性では、以下の値がサポートされます。
+ `Environment` - 環境変数からソース認証情報の取得。
+ `Ec2InstanceMetadata` - Amazon EC2 インスタンスプロファイルにアタッチされた IAM ロールの使用。
+ `EcsContainer` - Amazon ECS コンテナにアタッチされた IAM ロールの使用。

次の例は、Amazon EC2 インスタンスプロファイルを参照される場合に使われる同じ `marketingadminrole` ロールを示しています。

```
[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadminrole
credential_source = Ec2InstanceMetadata
```

ロールを呼び出すとき、多要素認証や外部 ID (サードパーティー企業がクライアントのリソースにアクセスするために使用する) の使用などを必須とする追加オプションがあります。AWS CloudTrail ログでより簡単に監査できる一意のロールセッション名を指定することもできます。

## ロールの設定と使用
<a name="cli-role-prepare"></a>

IAM ロールを指定するプロファイルを使用してコマンドを実行すると、AWS CLI はソースプロファイルの認証情報を使用して AWS Security Token Service (AWS STS) を呼び出し、指定したロールの一時的な認証情報を要求します。ソースプロファイルのユーザーは、指定されたプロファイルのロール用の `sts:assume-role` を呼び出すアクセス許可を持っている必要があります。ロールには、ソースプロファイルのユーザーがこのロールを使用できる信頼関係が必要です。ロールの一時的な認証情報を取得して使用するプロセスを、一般に*ロールを引き受ける*と呼びます。

「*AWS Identity and Access Management ユーザーガイド*」の「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」にある手順を実行することによって、ユーザーに引き受けさせたいアクセス許可を持つロールを IAM で作成できます。ロールとソースプロファイルの ユーザーが同じアカウントに存在する場合、ロールの信頼関係を設定するときに、独自のアカウント ID を入力することができます。

ロールを作成した後、 ユーザーが引き受けることを許可するように信頼関係を変更します。

次の例では、ロールにアタッチできる信頼ポリシーを示します。このポリシーは、アカウント「123456789012」の任意のユーザーがロールを引き受けることを許可します (そのアカウントの管理者が明示的にユーザーに「`sts:AssumeRole`」のアクセス許可を付与した**場合**)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

信頼ポリシーは、実際にはアクセス許可を付与しません。アカウントの管理者は、適切なアクセス許可を持つポリシーをアタッチすることによって、ロールを引き受けるアクセス許可を個々のユーザーに委任する必要があります。次の例では、ユーザーに付与を行い、ユーザーが `marketingadminrole` ロールのみを引き受けることを許可するポリシーを示しています。ロールを引き受けるためのユーザーアクセスの付与の詳細については、*IAM ユーザーガイド*の「[ロールを切り替えるためのユーザーアクセス許可の付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_permissions-to-switch.html)」を参照してください。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::123456789012:role/marketingadminrole"
    }
  ]
}
```

------

ユーザーには、ロールプロファイルを使用して AWS CLI コマンドを実行するための追加のアクセス許可は必要ありません。代わりに、コマンドを実行するためのアクセス権限は、*ロール*にアタッチされたアクセス権限によって提供されます。アクセス許可ポリシーをロールにアタッチして、どの AWS リソースに対してどのアクションを実行できるかを指定します。ロールへのアクセス許可のアタッチ (ユーザーと同じ機能) の詳細については、「IAM ユーザーガイド」の「[IAM ユーザーのアクセス許可の変更](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html)」を参照してください。

ロールプロファイル、ロールのアクセス許可、ロールの信頼関係およびユーザーアクセス許可が正しく設定されたので、コマンドラインで `--profile` オプションを呼び出してロールを使用できます。例えば、以下の例では、このトピックの冒頭で定義された`ls` ロールにアタッチされたアクセス権限を使用して Amazon S3 `marketingadmin` コマンドを呼び出します。

```
$ aws s3 ls --profile marketingadmin
```

いくつかの呼び出しにロールを使用するには、コマンドラインから、現在のセッションに対して `AWS_PROFILE` 環境変数を設定することができます。この環境変数が定義されている場合、各コマンドで `--profile` オプションを指定する必要はありません。

**Linux または macOS**

```
$ export AWS_PROFILE=marketingadmin
```

**Windows**:

```
C:\> setx AWS_PROFILE marketingadmin
```

IAM ユーザー、グループ、ロール、ベストプラクティスの詳細については、「*IAM ユーザーガイド*」の「[IAM ID (ユーザー、グループ、ロール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)」および「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id-roles.html)」を参照してください。

## 多要素認証を使用する
<a name="cli-configure-role-mfa"></a>

セキュリティを高めるには、ロールプロファイルを使用して呼び出しを試みるときに、多要素認証 (MFA) デバイスから生成された一回限りのキー、U2F デバイス、またはモバイルアプリケーションを指定するようにユーザーに要求することができます。

まず、MFA を要求するために IAM ロールの信頼関係を変更することを選択できます。これにより、すべてのユーザーは最初に MFA を使用して認証しなくてはロールを使用できなくなります。例として、次の例の `Condition` 行を参照してください。このポリシーでは、`anika` という名前のユーザーが、MFA を使用して認証した場合にのみ、ポリシーがアタッチされているロールを引き受けることを許可しています。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::123456789012:user/anika" },
      "Action": "sts:AssumeRole",
      "Condition": { "Bool": { "aws:multifactorAuthPresent": true } }
    }
  ]
}
```

------

次に、ロールプロファイルに、ユーザーの MFA デバイスの ARN を指定する行を追加します。次のサンプル `config` ファイルエントリでは、2 つのロールプロファイルを示しています。どちらもユーザー `anika` のアクセスキーを使用してロール `cli-role` の一時的な認証情報をリクエストします。ユーザー `anika` には、ロールの信頼ポリシーによって付与されたロールを引き受けるためのアクセス権限があります。

```
[profile role-without-mfa]
region = us-west-2
role_arn= arn:aws:iam::128716708097:role/cli-role
source_profile=cli-user

[profile role-with-mfa]
region = us-west-2
role_arn= arn:aws:iam::128716708097:role/cli-role
source_profile = cli-user
mfa_serial = arn:aws:iam::128716708097:mfa/cli-user

[profile cli-user]
region = us-west-2
output = json
```

この `mfa_serial` 設定では、次に示すような ARN またはハードウェア MFA トークンのシリアル番号を使用できます。

最初のプロファイル `role-without-mfa` では、 MFA は不要です。ただし、前の例でロールにアタッチされた信頼ポリシーが MFA を必要とするため、このプロファイルを使用してコマンドを実行しても失敗します。

```
$ aws iam list-users --profile role-without-mfa

An error occurred (AccessDenied) when calling the AssumeRole operation: Access denied
```

2 番目のプロファイルエントリ `role-with-mfa` は、使用する MFA デバイスを識別します。ユーザーがこのプロファイルを使用した AWS CLI コマンドの実行を試行すると、AWS CLI が MFA デバイスによって提供されるワンタイムパスワード (OTP) の入力を求めるプロンプトをユーザーに表示します。MFA 認証が成功すると、コマンドによってリクエストされたオペレーションが実行されます。OTP は画面に表示されません。

```
$ aws iam list-users --profile role-with-mfa
Enter MFA code for arn:aws:iam::123456789012:mfa/cli-user:
{
    "Users": [
        {
            ...
```

## クロスアカウントロールと外部 ID
<a name="cli-configure-role-xaccount"></a>

クロスアカウントロールとしてロールを設定することにより、 ユーザーが別のアカウントに属しているロールを使用できるようにすることができます。ロールの作成時に、[「IAM ユーザーに権限を委任するロールを作成する」](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)の説明に従って、ロールタイプを **[別の AWS アカウント]** に設定します。必要に応じて、[**MFA が必要**] を選択します。「**MFA が必要**」設定では、 [多要素認証を使用する](#cli-configure-role-mfa) の説明に従って、信頼関係の適切な条件を設定します。

[外部 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html) を使用して、複数のアカウント間でロールを使用できるユーザーをさらに制御する場合は、ロールプロファイルにも `external_id` パラメータを追加する必要があります。これは通常、もう一方のアカウントが社外または組織外のユーザーによって制御される場合にのみ使用します。

```
[profile crossaccountrole]
role_arn = arn:aws:iam::234567890123:role/SomeRole
source_profile = default
mfa_serial = arn:aws:iam::123456789012:mfa/saanvi
external_id = 123456
```

## 監査を容易にするためのロールセッション名の指定
<a name="cli-configure-role-session-name"></a>

ロールが多くの個人間で共有されると、監査はより難しくなります。そこで、呼び出された各オペレーションを、アクションを呼び出した個人に関連付けることが必要になります。ただし、個人がロールを使用する場合、個人によるロールの引き受けはオペレーションの呼び出しとは別のアクションであるため、この 2 つを手動で相互に関連付ける必要があります。

ユーザーがロールを引き受けるときに一意のロールセッション名を指定すれば、この手順を簡素化できます。これを行うには、ロールを指定する `role_session_name` ファイルの各名前付きプロファイルに `config` パラメータを追加します。`role_session_name` 値が `AssumeRole` オペレーションに渡され、ロールセッションの ARN の一部になります。また、ログに記録されたすべてのオペレーションの AWS CloudTrail ログにも含まれます。

例えば、次のようにロールベースのプロファイルを作成できます。

```
[profile namedsessionrole]
role_arn = arn:aws:iam::234567890123:role/SomeRole
source_profile = default
role_session_name = Session_Maria_Garcia
```

これにより、ロールセッションに次の ARN が付与されます。

```
arn:aws:iam::234567890123:assumed-role/SomeRole/Session_Maria_Garcia
```

また、すべての AWS CloudTrail ログには、各オペレーションでキャプチャされた情報にロールセッション名が含まれます。

## ウェブ ID を使用したロールの継承
<a name="cli-configure-role-oidc"></a>

プロファイルを設定して、AWS CLI が[ウェブ ID フェデレーションと Open ID Connect (OIDC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) を使用してロールを引き受ける必要があることを示すことができます。これをプロファイルで指定すると、AWS CLI は自動的に対応する AWS STS `AssumeRoleWithWebIdentity` 呼び出しを行います。

**注記**  
IAM ロールを使用するプロファイルを指定すると、AWS CLI は適切な呼び出しを行って、一時的な認証情報を取得します。これらの認証情報は `~/.aws/cli/cache` に保存されます。同じプロファイルを指定するそれ以降の AWS CLI コマンドでは、有効期限が切れるまで、キャッシュされた一時的な認証情報が使用されます。有効期限が切れると、AWS CLI は自動的に認証情報を更新します。

ウェブ ID フェデレーションを使用して一時的な認証情報を取得、使用するには、共有プロファイルで以下の設定値を指定します。

[role\$1arn](#cli-configure-role)  
引き受けるロールの ARN を指定します。

web\$1identity\$1token\$1file  
OAuth 2.0 アクセストークンまたは ID プロバイダによって提供される OpenID Connect ID トークンを含むファイルへのパスを指定します。AWS CLI はこのファイルをロードし、その内容を `WebIdentityToken` 引数として `AssumeRoleWithWebIdentity` オペレーションに渡します。

[role\$1session\$1name](#cli-configure-role-session-name)  
このロール継承セッションに適用されるオプションの名前を指定します。

ウェブ ID を使用したロールの継承プロファイルの設定に必要な最小限の設定例を次に示します。

```
# In ~/.aws/config

[profile web-identity]
role_arn=arn:aws:iam:123456789012:role/RoleNameToAssume
web_identity_token_file=/path/to/a/token
```

この設定は、[環境変数](cli-configure-envvars.md)を使用して提供することもできます。

AWS\$1ROLE\$1ARN  
引き受けるロールの ARN。

AWS\$1WEB\$1IDENTITY\$1TOKEN\$1FILE  
ウェブ ID トークンファイルへのパス。

AWS\$1ROLE\$1SESSION\$1NAME  
このロール継承セッションで適用される名前です。

**注記**  
これらの環境変数は、現在、ウェブ ID プロバイダーのロールを継承する場合にのみ適用されます。これらは、AssumeRole プロバイダーの設定には適用されません。

## キャッシュされた認証情報のクリア
<a name="cli-configure-role-cache"></a>

ロールを使用する際、AWS CLI は、有効期限が切れるまで一時的な認証情報をキャッシュします。次回この一時的な認証情報を使用しようとすると、AWS CLI はユーザーに代わってこの情報の更新を試みます。

ロールの一時的な認証情報が[取り消された場合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_revoke-sessions.html)、それらは自動的には更新されず、使用しようとすると失敗します。ただし、キャッシュを削除して、AWS CLI で新しい認証情報を取得するように強制することができます。

**Linux または macOS**

```
$ rm -r ~/.aws/cli/cache
```

**Windows**:

```
C:\> del /s /q %UserProfile%\.aws\cli\cache
```

# Authenticating using IAM user credentials for the AWS CLI
<a name="cli-authentication-user"></a>

**警告**  
セキュリティリスクを避けるため、専用ソフトウェアを開発するときや実際のデータを扱うときは、IAM ユーザーを認証に使用しないでください。代わりに、[AWS IAM アイデンティティセンター](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) などの ID プロバイダーとのフェデレーションを使用してください。

このセクションでは、IAM ユーザーで基本的な設定を構成する方法について説明します。これらには、`config` ファイルと `credentials` ファイルを使用したセキュリティ認証情報が含まれます。

**Contents**
+ [ステップ 1: IAM ユーザーを作成する](#cli-authentication-user-create)
+ [ステップ 2: アクセスキーを取得する](#cli-authentication-user-get)
+ [ステップ 3: AWS CLI を設定する](#cli-authentication-user-configure.title)
  + [`aws configure`の使用](#cli-authentication-user-configure-wizard)

## ステップ 1: IAM ユーザーを作成する
<a name="cli-authentication-user-create"></a>

「*IAM ユーザーガイド*」の「[IAM ユーザーの作成 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)」の手順に従って IAM ユーザーを作成します。
+ **[アクセス許可オプション]** で、このユーザーにアクセス許可を割り当てる方法として **[ポリシーを直接アタッチする]** を選択します。
+ ほとんどの「開始方法」 SDK チュートリアルでは、Amazon S3 サービスを例として使用しています。アプリケーションに Amazon S3 へのフルアクセスを提供するには、このユーザーにアタッチする `AmazonS3FullAccess` ポリシーを選択します。

## ステップ 2: アクセスキーを取得する
<a name="cli-authentication-user-get"></a>

1. AWS マネジメントコンソール にサインインして、IAM コンソール [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) を開きます。

1. IAM コンソールのナビゲーションペインで **[ユーザー]** を選択し、以前に作成したユーザーの **`User name`** を選択します。

1. ユーザーのページで、**[セキュリティ認証情報]** ページを選択します。次に、**[アクセスキー]** で **[アクセスキーの作成]** を選択します。

1.  **[アクセスキーの作成ステップ 1]** で、**[コマンドラインインターフェイス (CLI)]** を選択します。

1. **[アクセスキーの作成ステップ 2]** で、オプションのタグを入力して **[次へ]** を選択します。

1. **[アクセスキーの作成ステップ 3]** で、**[.csv ファイルをダウンロード]** を選択し、IAM ユーザーのアクセスキーとシークレットアクセスキーを含む `.csv` ファイルを保存します。この情報は後で必要になります。

1. [完了] を選択します。

## ステップ 3: AWS CLI を設定する
<a name="cli-authentication-user-configure.title"></a>

一般的に、AWS CLI には以下の情報が必要です。
+ アクセスキー ID
+ シークレットアクセスキー
+ AWS リージョン
+ 出力形式

この情報は、AWS CLI により、`default` ファイルの、`credentials` という名前の*プロファイル* (設定のコレクション) に保存されます。デフォルトでは、このプロファイル内の情報は、使用するプロファイルを明示的に指定しない AWS CLI コマンドを実行する場合に使用されます。`credentials` ファイルの詳細については、「[Configuration and credential file settings in the AWS CLI](cli-configure-files.md)」を参照してください。

AWS CLI を設定するには、次のいずれかの手順を使用します。

**Topics**
+ [`aws configure`の使用](#cli-authentication-user-configure-wizard)

### `aws configure`の使用
<a name="cli-authentication-user-configure-wizard"></a>

一般的な使用の場合、`aws configure` コマンドが、AWS CLI のインストールをセットアップするための最も簡単な方法です。この設定ウィザードでは、開始するために必要な各情報を入力するよう求められます。`--profile` オプションを使用した場合、特に指定しない限り、AWS CLI はこの情報を `default` プロファイルに保存します。

次の例では、サンプル値を使用して `default` プロファイルを設定します。次のセクションで説明するように、これらの値を独自の値に置き換えます。

```
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json
```

次の例では、サンプル値を使用して `userprod` という名前のプロファイルを設定します。次のセクションで説明するように、これらの値を独自の値に置き換えます。

```
$ aws configure --profile userprod
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json
```

# Using Amazon EC2 instance metadata as credentials in the AWS CLI
<a name="cli-configure-metadata"></a>

Amazon Elastic Compute Cloud (Amazon EC2) インスタンス内から AWS CLI を実行すると、コマンドへの認証情報の提供を簡素化できます。各 Amazon EC2 インスタンスには、AWS CLI が一時的な認証情報を直接クエリできるメタデータが含まれています。IAM ロールがインスタンスにアタッチされている場合、AWS CLI はインスタンスメタデータから認証情報を自動的かつ安全に取得します。

このサービスを無効にするには、[AWS\$1EC2\$1METADATA\$1DISABLED](cli-configure-envvars.md#envvars-list-AWS_EC2_METADATA_DISABLED) 環境変数を使用します。

**Topics**
+ [前提条件](#cli-configure-metadata-prereqs)
+ [Amazon EC2 メタデータのプロファイルの設定](#cli-configure-metadata-configure)

## 前提条件
<a name="cli-configure-metadata-prereqs"></a>

AWS CLI で Amazon EC2 認証情報を使用するには、以下を完了する必要があります。
+ AWS CLI をインストールして設定します。詳細については、「」および「[AWS CLI のインストール、更新、アンインストール](cli-chap-install.md)」を参照してください。[Authentication and access credentials for the AWS CLI](cli-chap-authentication.md)
+ 設定ファイルおよび名前付きプロファイルについて理解します。詳細については、「[Configuration and credential file settings in the AWS CLI](cli-configure-files.md)」を参照してください。
+ 必要なリソースへのアクセス権を持つ AWS Identity and Access Management (IAM) ロールが作成されており、Amazon EC2 インスタンスの起動時にそのロールをインスタンスに割り当てた。詳細については、「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 の IAM ポリシー](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-policies-for-amazon-ec2.html)」および「*IAM ユーザーガイド*」の「[Amazon EC2 インスタンスで実行されるアプリケーションに AWS リソースへのアクセス許可を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/role-usecase-ec2app.html)」を参照してください。

## Amazon EC2 メタデータのプロファイルの設定
<a name="cli-configure-metadata-configure"></a>

ホスティングする Amazon EC2 インスタンスプロファイルで使用可能な認証情報の使用を指定するには、設定ファイルの名前付きプロファイルで次の構文を使用します。詳細な手順については、以下のステップを参照してください。

```
[profile profilename]
role_arn = arn:aws:iam::123456789012:role/rolename
credential_source = Ec2InstanceMetadata
region = region
```

1. 設定ファイルにプロファイルを作成します。

   ```
   [profile profilename]
   ```

1. 必要なリソースにアクセスできる IAM arn ロールを追加します。

   ```
   role_arn = arn:aws:iam::123456789012:role/rolename
   ```

1. 認証情報のソースとして `Ec2InstanceMetadata` を指定します。

   ```
   credential_source = Ec2InstanceMetadata
   ```

1. リージョンを設定します。

   ```
   region = region
   ```

**例**

次の例では、*`marketingadminrole`* ロールを引き受け、`marketingadmin` という名前の Amazon EC2 インスタンスプロファイルの `us-west-2` リージョンを使用します。

```
[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadminrole
credential_source = Ec2InstanceMetadata
region = us-west-2
```

# 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 は、外部プロセスの認証情報をロールを引き受けるような認証情報としてキャッシュ***しません***。キャッシュが必要な場合は、外部プロセス内で実装する必要があります。

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