AWS Toolkit for VScodeからAWSにアクセスしようとすると、「The security token included in the request is invalid.」の解決方法

# 概要
前回記事より、AWS Toolkitの認証をIAM identity Center経由でするまではよかったが、実際にAWSサービスにアクセスできない事象が発生した。

https://qiita.com/kota-done/items/c740e3180133608893c1

公式ドキュメントで解決方法を模索するも、およそ1週間強まったく解決できなかったので、解決できた方法を残そうと思う。誰かの助力になれば幸いである。

## 結論
AWS CLIで認証しているプロファイルが正しくなかった。

※2024年10月24日追記
デフォルトで使用するプロファイル設定がされていなかった。

:::note alert
追記の解決方法は、記事の後方に解決方法②で追加。
記事を閲覧される方には申し訳ないが、自身の過ちとして間違った内容も残す。
::: 
## 前提
結論の前に下記の事項を先に確認してほしい。

### ①SSOプロファイルは設定済みである。
＊未設定の場合は下記公式のリンクを確認し、設定してほしい。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-sso.html#cli-configure-sso-configure

設定できている場合は、ConfigおよびCredentialファイルが下記のようになっている。

![スクリーンショット 2024-09-18 15.53.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3338426/f92f85a8-a414-1666-7fd5-5686773fb212.png)

:::note warn
IAM Identitiy CenterのユーザーとSSO設定のリージョンは注意。
同じにしておく。
:::

### ②AWS Toolkitで認証したユーザーが正しく認証されている。

下記コマンドをVScodeのターミナルに打ち込む。

``` 
aws sts get-caller-identity --profile your profile name
```
```
#result

{
    "UserId": "************:Bedrock-handson", #数字と認証ユーザー名（ここでは、Identity Centerのユーザー）
    "Account": "************", #configのsso_account_id
    "Arn": "arn:aws:sts::***********:assumed-role/AWSReservedSSO_AdministratorAccess_***********/Bedrock-handson"
}

```

ここでresultが出ない場合は、ログイン方法をAWS CLIで再度行う
```
aws sso login --profile your profile name
```
:::note warn
著者はこのログイン段階で、プロファイルを指定できていなかったみたいだ。
:::


## 解決方法
前提事項がすべて問題なくクリアしているにも限らずアクセスできない場合

```
export AWS_PROFILE=your_sso_profile_name
```
コマンド入力後は、CLI上に何か応答はない。
下記方法で、指定プロファイルが設定されているか確認可能。
＊使用ユーザーの付与権限に応じて変更してください。

:::note info
Bedrockでどのモデルが使用できるか確認するだけのコマンド

```
aws bedrock list-foundation-models 
```

```
#result
{
    "modelSummaries": [
        {
            "modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-text-express-v1:0:8k",
            "modelId": "amazon.titan-text-express-v1:0:8k",
            "modelName": "Titan Text G1 - Express",
            "providerName": "Amazon",
            "inputModalities": [
                "TEXT"
            ],
            "outputModalities": [
                "TEXT"
            ],
            "responseStreamingSupported": true,
            "customizationsSupported": [],
            "inferenceTypesSupported": [],
            "modelLifecycle": {
                "status": "ACTIVE"
            }
        },

```
:::
:::note warn
AWS Toolkitを使用するといっても、実行するのはCLIなので、そのプロファイルが正しくないなら認証できないよねって話だった。
とはいえ、AWS Toolkitの機能を全然使いこなせていないので、実はCLIで実行しなくてもアクセスする方法があるのかもしれない。
AWS Toolkit機能を知るのは、今後の課題にしておく。
:::

## 解決方法②

下記コマンドを実行
＊AWS CLIで実行されるプロファイルを設定する。
```
export AWS_DEFAULT_PROFILE=your_sso_profile_name #自分で設定したプロファイル名
```

下記参考記事

https://qiita.com/shonansurvivors/items/1fb53a2d3b8dddab6629


デフォルトプロファイルを設定した後は、
```
aws configure sso
```
を入力。
その後、使用するsso-sessionが前提①で正しくconfigファイルに設定されていれば、Web認証のみでAWS CLIが使用可能になるはずである。


### あとがき
著者は、VscodeでPythonを実行する上で、venvで仮想環境を構築し、それ経由で実行するよう設定していた。AWS CLIの実行も、仮想環境で実行していた。
そのため、同じ環境での記事が見当たらず、仮想環境が影響しているのかと、公式ドキュメントを元に解決方法を模索していた。
しかし、全く糸口が見えないまま１週間経過して発狂しそうだったため、Chatgptをアップグレーして相談したところ、10分で解決した。
解決できたことは望ましいが、別の意味で発狂しそうだった。
以上、ここまでお付き合いありがとうございます。ようやくハンズオンで生成AIアプリを動かすことに移行できます。

※2024年9月19日追記
AWS CLIのログイン方法について記載がなく、著者自身もエラーが再現したため、ログイン方法について追記。

※2024年10月24日追記
AWSサポートに加入し問い合わせを行った結果として、AWS CLIとAWS ToolKit for Vscodeの認証は別物とのこと。
Vscodeでプログラムを実行する上で、AWSサービスにアクセスしたい場合は、AWS CLIの認証のみで十分であることが判明しました。