AWS CLIの環境変数 AWS_CLI_SESSION_ID_DISABLED でセッションID無効化を試してみた

AWS CLIの環境変数 AWS_CLI_SESSION_ID_DISABLED でセッションID無効化を試してみた

AWS CLI は User-Agent にセッションID(SID)を付与します。v2.36.14 で追加された環境変数 AWS_CLI_SESSION_ID_DISABLED を設定すると SID が消えるのかを --debug ログと CloudTrail の userAgent で確認し、有効になる値の条件をソースコードから読み解きます。
2026.08.04

はじめに

AWS CLI v2.36.14(2026年7月31日)で、セッションID収集をオプトアウトする環境変数 AWS_CLI_SESSION_ID_DISABLED が追加されました。

curl -s https://raw.githubusercontent.com/aws/aws-cli/2.36.14/.changes/2.36.14.json | jq '.[] | select(.category == "``telemetry``")'
{
  "category": "``telemetry``",
  "description": "Add the ``AWS_CLI_SESSION_ID_DISABLED`` environment variable to opt out of session id collection.",
  "type": "enhancement"
}

本記事では、AWS_CLI_SESSION_ID_DISABLED=true で User-Agent から sid/ が消えることを確認しました。CloudTrail の userAgent への影響と、有効になる値の条件もあわせて確認しています。

検証環境

  • AWS CLI v2.36.14(Linux / aarch64)

検証内容

セッションIDとは

AWS CLI は API リクエストの User-Agent ヘッダーにセッションID(以下 SID)を sid/xxxxxxxxxxxx の形で付与します。生成ロジックは awscli/telemetry.py にあり、host_id(マシン固有UUID)、tty(端末名)、timestamp をハッシュ化した12文字です。コマンド内容・引数・リソース名・認証情報は含まれません。

この構成から、SID 単体で個人やマシンを特定することは難しいと考えられます。

有効期限は30分(awscli/telemetry.py_SESSION_LENGTH_SECONDS)で、30分間操作がなければ次のコマンド実行時に新しい SID が生成されます。有効期限が設定されていることから、長期的な追跡を想定した仕組みではないと読み取れます。

SID の生成時にはセッションデータベースを開きます。無効化の用途として、ネットワークファイルシステム(NFS など)上でのファイルロックの負荷を避けることがコメントに明記されています。

# Set to "true" to skip collecting session ids entirely. Opting out avoids
# opening the session database, whose file locking can be expensive when the
# database lives on a network filesystem.

--debug で差分を確認

他の環境変数の影響を排除するため、env -i でクリーンな環境を用意し、--debug ログから User-Agent を比較しました。

環境変数なしで実行したときの User-Agent には sid/ が含まれていました。

User-Agent: aws-cli/2.36.14 ... md/installer#update-exe sid/xxxxxxxxxxxx md/distrib#...

AWS_CLI_SESSION_ID_DISABLED=true を設定すると、sid/xxxxxxxxxxxx が消えました。

User-Agent: aws-cli/2.36.14 ... md/installer#update-exe md/distrib#...

CloudTrail userAgent への影響

EC2 セキュリティグループの作成を、環境変数なしと AWS_CLI_SESSION_ID_DISABLED=true の2パターンで実施し、userAgent を比較しました。

環境変数なしで実行したときの userAgent には sid/ が含まれていました。

aws-cli/2.36.14 ... md/installer#update-exe sid/xxxxxxxxxxxx md/distrib#...

AWS_CLI_SESSION_ID_DISABLED=true を設定した場合は sid/xxxxxxxxxxxx の部分がそのまま消え、それ以外の差分はありませんでした。

aws-cli/2.36.14 ... md/installer#update-exe md/distrib#...

SID はテレメトリ収集用の ID ですが、CloudTrail の userAgent にも残ります。Athena で userAgent をパースすれば同一セッションの操作をグルーピングできると考えられます(本記事では未検証です)。

有効な値は true(大文字小文字不問)のみ

2026-08-02 時点で、AWS CLI の環境変数リファレンスには AWS_CLI_SESSION_ID_DISABLED の記載がありませんでした。有効値の根拠はソースコードのみで、環境変数の解釈は botocore の botocore/utils.py にある ensure_boolean() が担っています。

def ensure_boolean(val):
    if isinstance(val, bool):
        return val
    elif isinstance(val, str):
        return val.lower() == 'true'
    else:
        return False

文字列の場合は val.lower() == 'true' のみが真になります。"1""yes" などは、記事執筆時点のソースでは真と評価されない仕様でした。

まとめ

AWS のテレメトリ収集用の ID(SID)と、AWS_CLI_SESSION_ID_DISABLED による無効化の挙動を確認しました。

SID にはコマンド内容・引数・リソース名・認証情報が含まれず、CloudTrail の userAgent に記録されるため、同一セッションの操作を追う手がかりになり得ます。

特別な理由がある場合を除き、デフォルトのままご利用いただくことをおすすめします。

参考リンク

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事