

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

# AWS Secrets Manager エージェントの使用
<a name="secrets-manager-agent"></a>

## Secrets Manager Agent の仕組み
<a name="agent-overview"></a>

 AWS Secrets Manager エージェントは、コンピューティング環境全体で Secrets Manager からシークレットを使用する方法を標準化するのに役立つクライアント側の HTTP サービスです。これは次のサービスと併用できます。
+ AWS Lambda
+ Amazon Elastic Container Service
+ アマゾン エラスティックKubernetesサービス
+ Amazon Elastic Compute Cloud

Secrets Manager Agent はシークレットを取得してメモリにキャッシュするため、アプリケーションは Secrets Manager を直接呼び出す代わりに localhost からシークレットを取得できます。Secrets Manager Agent はシークレットのみを読み取ることができます。シークレットを変更することはできません。

**重要**  
Secrets Manager エージェントは、環境の AWS 認証情報を使用して Secrets Manager を呼び出します。これには、シークレットセキュリティの向上に役立つ Server Side Request Forgery (SSRF) に対する保護が含まれています。Secrets Manager Agent は、デフォルトで最高優先度のキー交換としてポスト量子 ML-KEM キー交換を使用します。

## Secrets Manager Agent のキャッシュについて
<a name="agent-caching"></a>

Secrets Manager Agent はインメモリキャッシュを使用するため、Secrets Manager Agent を再起動するとキャッシュがリセットされます。以下に基づいて、キャッシュされたシークレット値を定期的に更新します。
+ デフォルトの更新頻度 (TTL) は 300 秒です
+ 設定ファイルを使用して TTL を変更できます。
+ 更新は、TTL の有効期限が切れた後にシークレットをリクエストしたときに発生します。

**注記**  
Secrets Manager Agent にはキャッシュ無効化は含まれません。キャッシュエントリの有効期限が切れる前にシークレットがローテーションすると、Secrets Manager Agent は古いシークレット値を返すことがあります。

Secrets Manager Agent は、`GetSecretValue` のレスポンスと同じ形式でシークレット値を返します。シークレット値はキャッシュ内で暗号化されません。

**Topics**
+ [Secrets Manager Agent の仕組み](#agent-overview)
+ [Secrets Manager Agent のキャッシュについて](#agent-caching)
+ [Secrets Manager Agentをビルドする](#secrets-manager-agent-build)
+ [Secrets Manager Agent をインストールする](#secrets-manager-agent-install)
+ [Secrets Manager Agent を使用してシークレットを取得する](#secrets-manager-agent-call)
+ [`refreshNow` パラメータについて](#secrets-manager-agent-refresh)
+ [Secrets Manager Agent の構成](#secrets-manager-agent-config)
+ [オプション機能](#secrets-manager-agent-features)
+ [ログ記録](#secrets-manager-agent-log)
+ [セキュリティに関する考慮事項](#secrets-manager-agent-security)

## Secrets Manager Agentをビルドする
<a name="secrets-manager-agent-build"></a>

開始する前に、プラットフォーム用の標準開発ツールと Rust ツールがインストールされていることを確認してください。

**注記**  
macOS で `fips` 機能を有効にしてエージェントを構築するには、現在次の回避策が必要です。  
`xcrun --show-sdk-path` の実行の結果に設定された `SDKROOT` という環境変数を作成する

------
#### [ RPM-based systems ]

**RPM ベースのシステム上に構築するには**

1. リポジトリで提供されている `install` スクリプトを使用します。

   スクリプトは、起動時にランダムな SSRF トークンを生成し、ファイル `/var/run/awssmatoken` に保存します。トークンは、インストールスクリプトが作成する `awssmatokenreader` グループによって読み取り可能です。

1. アプリケーションがトークンファイルを読み取れるようにするには、アプリケーションが実行するユーザーアカウントを `awssmatokenreader` グループに追加する必要があります。例えば、次の usermod コマンドを使用してトークンファイルを読み取るアクセス許可をアプリケーションに付与できます。ここで *<APP\$1USER>* は、アプリケーションを実行するユーザー ID です。

   ```
   sudo usermod -aG awssmatokenreader <APP_USER>
   ```

**開発ツールのインストール**  
AL2023 などの RPM ベースのシステムでは、開発ツールグループをインストールします。

   ```
   sudo yum -y groupinstall "Development Tools"
   ```

1. 

**Rust のインストール**  
「*Rust ドキュメント*」の「[Rust のインストール](https://www.rust-lang.org/tools/install)」の指示に従います。

   ```
   curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Follow the on-screen instructions
   . "$HOME/.cargo/env"
   ```

1. 

**エージェントの構築**  
cargo build コマンドを使用して Secrets Manager Agent をビルドします。

   ```
   cargo build --release
   ```

   実行ファイルは `target/release/aws_secretsmanager_agent` にあります。

------
#### [ Debian-based systems ]

**Debian ベースのシステム上に構築するには**

1. 

**開発ツールのインストール**  
Ubuntu などの Debian ベースのシステムでは、build-essential パッケージをインストールします。

   ```
   sudo apt install build-essential
   ```

1. 

**Rust のインストール**  
「*Rust ドキュメント*」の「[Rust のインストール](https://www.rust-lang.org/tools/install)」の指示に従います。

   ```
   curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Follow the on-screen instructions
   . "$HOME/.cargo/env"
   ```

1. 

**エージェントの構築**  
cargo build コマンドを使用して Secrets Manager Agent をビルドします。

   ```
   cargo build --release
   ```

   実行ファイルは `target/release/aws_secretsmanager_agent` にあります。

------
#### [ Windows ]

**Windows でビルドするには**

1. 

**開発環境のセットアップ**  
「*Microsoft Windows ドキュメント*」の「[Windows for Rust で開発環境をセットアップする](https://learn.microsoft.com/en-us/windows/dev-environment/rust/setup)」の手順に従います。

1. 

**エージェントの構築**  
cargo build コマンドを使用して Secrets Manager Agent をビルドします。

   ```
   cargo build --release
   ```

   実行ファイルは `target/release/aws_secretsmanager_agent.exe` にあります。

------
#### [ Cross-compile natively ]

**ネイティブにクロスコンパイルするには**

1. 

**クロスコンパイルツールをインストールする**  
Ubuntu など、mingw-w64 パッケージが利用可能なディストリビューションでは、クロスコンパイルツールチェーンをインストールします。

   ```
   # Install the cross compile tool chain
   sudo add-apt-repository universe
   sudo apt install -y mingw-w64
   ```

1. 

**Rust ビルドターゲットを追加する**  
Windows GNU ビルドターゲットをインストールします:

   ```
   rustup target add x86_64-pc-windows-gnu
   ```

1. 

**Windows 用にビルドする**  
Windows 用のエージェントをクロスコンパイルします:

   ```
   cargo build --release --target x86_64-pc-windows-gnu
   ```

   実行ファイルは `target/x86_64-pc-windows-gnu/release/aws_secretsmanager_agent.exe` にあります。

------
#### [ Cross compile with Rust cross ]

**Rust cross を使用してクロスコンパイルするには**

クロスコンパイルツールがシステムでネイティブに利用できない場合、Rust のクロスプロジェクトを使用できます。詳細については、[https://github.com/cross-rs/cross](https://github.com/cross-rs/cross) を参照してください。
**重要**  
ビルド環境には 32GB のディスク容量をお勧めします。

1. 

**Docker をセットアップ**  
Docker をインストールして構成します:

   ```
   # Install and start docker
   sudo yum -y install docker
   sudo systemctl start docker
   sudo systemctl enable docker # Make docker start after reboot
   ```

1. 

**Docker アクセス許可を設定する**  
ユーザーを Docker グループに追加します:

   ```
   # Give ourselves permission to run the docker images without sudo
   sudo usermod -aG docker $USER
   newgrp docker
   ```

1. 

**Windows 用にビルドする**  
クロスをインストールし、実行可能ファイルを構築します:

   ```
   # Install cross and cross compile the executable
   cargo install cross
   cross build --release --target x86_64-pc-windows-gnu
   ```

------

## Secrets Manager Agent をインストールする
<a name="secrets-manager-agent-install"></a>

次のインストールオプションからコンピューティング環境を選択します。

------
#### [ Amazon EC2 ]

**Amazon EC2 で Secrets Manager Agent をインストールするには**

1. 

**設定ディレクトリに移動する**  
設定ディレクトリに変更します:

   ```
   cd aws_secretsmanager_agent/configuration
   ```

1. 

**インストールスクリプトを実行する**  
リポジトリで提供されている `install` スクリプトを実行します。

   スクリプトは、起動時にランダムな SSRF トークンを生成し、ファイル `/var/run/awssmatoken` に保存します。トークンは、インストールスクリプトが作成する `awssmatokenreader` グループによって読み取り可能です。

1. 

**アプリケーションのアクセス許可を設定する**  
アプリケーションが実行されるユーザーアカウントを `awssmatokenreader` グループに追加します:

   ```
   sudo usermod -aG awssmatokenreader APP_USER
   ```

   *APP\$1USER* を、アプリケーションが実行されるユーザー ID に置き換えます。

------
#### [ Container Sidecar ]

Docker を使用して、Secrets Manager Agent をアプリケーションと一緒にサイドカーコンテナとして実行できます。その後、アプリケーションは Secrets Manager Agent が提供するローカル HTTP サーバーからシークレットを取得できます。Docker の詳細については、「[Docker ドキュメント](https://docs.docker.com)」を参照してください。

**Secrets Manager Agent のサイドカーコンテナを作成するには**

1. 

**エージェント Dockerfile を作成する**  
Secrets Manager Agent サイドカーコンテナ用の Dockerfile を作成します:

   ```
   # Use the latest Debian image as the base
   FROM debian:latest
   
   # Set the working directory inside the container
   WORKDIR /app 
   
   # Copy the Secrets Manager Agent binary to the container
   COPY secrets-manager-agent . 
   
   # Install any necessary dependencies
   RUN apt-get update && apt-get install -y ca-certificates 
   
   # Set the entry point to run the Secrets Manager Agent binary
   ENTRYPOINT ["./secrets-manager-agent"]
   ```

1. 

**アプリケーション Dockerfile を作成する**  
クライアントアプリケーション用の Dockerfile を作成します。

1. 

**Docker Compose ファイルを作成する**  
Docker Compose ファイルを作成して、共有ネットワークインターフェイスで両方のコンテナを実行します:
**重要**  
Secrets Manager エージェントを使用するには、アプリケーションの AWS 認証情報と SSRF トークンをロードする必要があります。Amazon EKS と Amazon ECS については、以下を参照してください。  
「*Amazon EKS ユーザーガイド*」の「[アクセスの管理](https://docs.aws.amazon.com/eks/latest/userguide/cluster-auth.html)」
「*Amazon ECS デベロッパーガイド*」の「[Amazon ECS タスク IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)」

   ```
   version: '3'
   services:
       client-application:
       container_name: client-application
       build:
           context: .
           dockerfile: Dockerfile.client
       command: tail -f /dev/null  # Keep the container running
       
   
       secrets-manager-agent:
       container_name: secrets-manager-agent
       build:
           context: .
           dockerfile: Dockerfile.agent
       network_mode: "container:client-application"  # Attach to the client-application container's network
       depends_on:
           - client-application
   ```

1. 

**エージェントバイナリのコピー**  
`secrets-manager-agent` バイナリを Dockerfiles および Docker Compose ファイルと同じディレクトリにコピーします。

1. 

**コンテナの構築と実行**  
Docker Compose を使用し、コンテナを構築して実行します:

   ```
   docker-compose up --build
   ```

1. 

**次の手順**  
クライアントコンテナから、Secrets Manager Agent を使用してシークレットを取得できるようになりました。詳細については、「[Secrets Manager Agent を使用してシークレットを取得する](#secrets-manager-agent-call)」を参照してください。

------
#### [ Lambda ]

[Secrets Manager Agent を Lambda 拡張機能としてパッケージ化できます](https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html)。次に、[Lambda 関数にレイヤーとして追加](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html)し、Lambda 関数から Secrets Manager Agent を呼び出してシークレットを取得します。

次の手順は、[https://github.com/aws/aws-secretsmanager-agent](https://github.com/aws/aws-secretsmanager-agent) のサンプルスクリプト `secrets-manager-agent-extension.sh` を使用して *MyTest* という名前のシークレットを取得し、Secrets Manager Agent を Lambda 拡張機能としてインストールする方法を示します。

**Secrets Manager Agent 用の Lambda 拡張機能を作成するには**

1. 

**エージェントレイヤーをパッケージ化する**  
Secrets Manager Agent コードパッケージのルートから、次のコマンドを実行します:

   ```
   AWS_ACCOUNT_ID=AWS_ACCOUNT_ID
   LAMBDA_ARN=LAMBDA_ARN
   
   # Build the release binary 
   cargo build --release --target=x86_64-unknown-linux-gnu
   
   # Copy the release binary into the `bin` folder
   mkdir -p ./bin
   cp ./target/x86_64-unknown-linux-gnu/release/aws_secretsmanager_agent ./bin/secrets-manager-agent
   
   # Copy the `secrets-manager-agent-extension.sh` example script into the `extensions` folder.
   mkdir -p ./extensions
   cp aws_secretsmanager_agent/examples/example-lambda-extension/secrets-manager-agent-extension.sh ./extensions
   
   # Zip the extension shell script and the binary 
   zip secrets-manager-agent-extension.zip bin/* extensions/*
   
   # Publish the layer version
   LAYER_VERSION_ARN=$(aws lambda publish-layer-version \
       --layer-name secrets-manager-agent-extension \
       --zip-file "fileb://secrets-manager-agent-extension.zip" | jq -r '.LayerVersionArn')
   ```

1. 

**SSRF トークンを設定する**  
エージェントのデフォルト設定では、SSRF トークンは、事前に設定された `AWS_SESSION_TOKEN` または `AWS_CONTAINER_AUTHORIZATION_TOKEN` 環境変数 (SnapStart が有効になっている Lambda 関数の後半変数) で設定された値に自動的に設定されます。または、Lambda 関数の任意の値を使用して `AWS_TOKEN` 環境変数を定義することもできます。これは、この変数が他の 2 つよりも優先されるためです。`AWS_TOKEN` 環境変数を使用する場合は、その環境変数を `lambda:UpdateFunctionConfiguration` 呼び出しで設定する必要があります。

1. 

**レイヤーを関数にアタッチする**  
レイヤーバージョンを Lambda 関数にアタッチします:

   ```
   # Attach the layer version to the Lambda function
   aws lambda update-function-configuration \
       --function-name $LAMBDA_ARN \
       --layers "$LAYER_VERSION_ARN"
   ```

1. 

**関数コードの更新**  
`X-Aws-codes-Secrets-Token` ヘッダー値を上記の環境変数から取得した SSRF トークンの値に設定して `http://localhost:2773/secretsmanager/get?secretId=MyTest` のクエリを実行するように Lambda 関数を更新し、シークレットを取得します。Lambda 拡張機能の初期化と登録の遅延に対応するため、アプリケーションコードに再試行ロジックを実装してください。

1. 

**関数をテストする**  
Lambda 関数を呼び出して、シークレットが正しく取得されていることを確認します。

------

## Secrets Manager Agent を使用してシークレットを取得する
<a name="secrets-manager-agent-call"></a>

シークレットを取得するには、シークレットの名前または ARN をクエリパラメータとして含めて、ローカルの Secrets Manager Agent エンドポイントを呼び出します。デフォルトでは、Secrets Manager Agent はシークレットの `AWSCURRENT` バージョンを取得します。別のバージョンを取得するには、versionStage または versionId パラメータを使用します。

**重要**  
Secrets Manager Agent を保護するためには、各リクエスト `X-Aws-Parameters-Secrets-Token` の一部として SSRF トークンヘッダーを含める必要があります。Secrets Manager Agent は、このヘッダーを持たないリクエストや無効な SSRF トークンを持つリクエストを拒否します。[Secrets Manager Agent の構成](#secrets-manager-agent-config) で SSRF ヘッダー名をカスタマイズできます。

### 必要なアクセス許可
<a name="agent-call-permissions"></a>

Secrets Manager エージェントは、[AWS 認証情報プロバイダーチェーン](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/credentials.html)を使用する AWS SDK for Rust を使用します。これらの IAM 認証情報の ID は、Secrets Manager Agent がシークレットを取得するためのアクセス許可を決定します。
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:GetSecretValue`

権限の詳細については、「[のアクセス許可リファレンス AWS Secrets Manager](auth-and-access.md#reference_iam-permissions)」を参照してください。

**重要**  
シークレット値が Secrets Manager Agent に取り込まれると、コンピューティング環境と SSRF トークンにアクセスできるすべてのユーザーが Secrets Manager Agent キャッシュからシークレットにアクセスできます。詳細については、「[セキュリティに関する考慮事項](#secrets-manager-agent-security)」を参照してください。

### リクエストの例
<a name="agent-call-examples"></a>

------
#### [ curl ]

**Example 例 – curl を使用してシークレットを取得する**  
次の curl の例は Secrets Manager Agent からシークレットを取得する方法を示しています。この例では、SSRF がインストールスクリプトによって保存されるファイルに存在するかどうかに依存します。  

```
curl -v -H \\
    "X-Aws-Parameters-Secrets-Token: $(/var/run/awssmatoken)" \\
    'http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID' \\
    echo
```

------
#### [ Python ]

**Example 例 – Python を使用してシークレットを取得する**  
次の Python の例は Secrets Manager Agent からシークレットを取得する方法を示しています。この例では、SSRF がインストールスクリプトによって保存されるファイルに存在するかどうかに依存します。  

```
import requests
import json

# Function that fetches the secret from Secrets Manager Agent for the provided secret id. 
def get_secret():
    # Construct the URL for the GET request
    url = f"http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID"

    # Get the SSRF token from the token file
    with open('/var/run/awssmatoken') as fp:
        token = fp.read() 

    headers = {
        "X-Aws-Parameters-Secrets-Token": token.strip()
    }

    try:
        # Send the GET request with headers
        response = requests.get(url, headers=headers)

        # Check if the request was successful
        if response.status_code == 200:
            # Return the secret value
            return response.text
        else:
            # Handle error cases
            raise Exception(f"Status code {response.status_code} - {response.text}")

    except Exception as e:
        # Handle network errors
        raise Exception(f"Error: {e}")
```

------

## `refreshNow` パラメータについて
<a name="secrets-manager-agent-refresh"></a>

Secrets Manager Agent は、インメモリキャッシュを使用してシークレット値を保存し、定期的に更新します。デフォルトでは、この更新は、有効期限 (TTL) が切れた後、通常 300 秒ごとにシークレットをリクエストしたときに発生します。ただし、このアプローチでは、特にキャッシュエントリの有効期限が切れる前にシークレットがローテーションした場合、シークレット値が古くなることがあります。

この制限に対応するため、Secrets Manager Agent は URL で `refreshNow` というパラメータをサポートしています。このパラメータを使用して、シークレットの値の即時更新を強制し、キャッシュをバイパスして最新の情報を取得できます。

**デフォルトの動作 (`refreshNow` なし)**  
+ TTL の有効期限が切れるまでキャッシュされた値を使用します
+ TTL の後にのみシークレットを更新します (デフォルトは 300 秒)
+ キャッシュの有効期限が切れる前にシークレットがローテーションすると、古い値を返す可能性があります

**`refreshNow=true` での動作**  
+ キャッシュを完全にバイパスします
+ Secrets Manager から直接、最新のシークレット値を取得します
+ キャッシュを新しい値で更新し、TTL をリセットします
+ 常に最新のシークレット値を取得するようにします

### シークレット値を強制更新する
<a name="refreshnow-examples"></a>

**重要**  
`refreshNow` の初期値は `false` です。`true` に設定すると、Secrets Manager Agent 設定ファイルで指定された TTL が上書きされ、Secrets Manager への API コールが行われます。

------
#### [ curl ]

**Example 例 – curl を使用してシークレットを強制更新する**  
次の curl の例は Secrets Manager Agent からシークレットを取得する方法を示しています。この例では、SSRF がインストールスクリプトによって保存されるファイルに存在するかどうかに依存します。  

```
curl -v -H \\
"X-Aws-Parameters-Secrets-Token: $(/var/run/awssmatoken)" \\
'http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID&refreshNow=true' \\
echo
```

------
#### [ Python ]

**Example 例 – Python を使用してシークレットを強制更新する**  
次の Python の例は Secrets Manager Agent からシークレットを取得する方法を示しています。この例では、SSRF がインストールスクリプトによって保存されるファイルに存在するかどうかに依存します。  

```
import requests
import json

# Function that fetches the secret from Secrets Manager Agent for the provided secret id. 
def get_secret():
    # Construct the URL for the GET request
    url = f"http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID&refreshNow=true"

    # Get the SSRF token from the token file
    with open('/var/run/awssmatoken') as fp:
        token = fp.read() 

    headers = {
        "X-Aws-Parameters-Secrets-Token": token.strip()
    }

    try:
        # Send the GET request with headers
        response = requests.get(url, headers=headers)

        # Check if the request was successful
        if response.status_code == 200:
            # Return the secret value
            return response.text
        else:
            # Handle error cases
            raise Exception(f"Status code {response.status_code} - {response.text}")

    except Exception as e:
        # Handle network errors
        raise Exception(f"Error: {e}")
```

------

## Secrets Manager Agent の構成
<a name="secrets-manager-agent-config"></a>

Secrets Manager Agent の設定を変更するには、[TOML](https://toml.io/en/) 設定ファイルを作成し、次に `./aws_secretsmanager_agent --config config.toml` を呼び出します。設定オプション

**`log_level`**  
Secrets Manager Agent のログで報告される詳細レベル: DEBUG、INFO、WARN、ERROR、または NONE。デフォルトは INFO です。

**`log_to_file`**  
ファイルまたは stdout/stderr にログを記録するかどうか: `true` または `false`。デフォルトは `true` です。

**`http_port`**  
ローカル HTTP サーバーのポート範囲は 1024 ～ 65535 です。デフォルトは 2773 です。

**`region`**  
リクエストに使用する AWS リージョン。リージョンが指定されていない場合、Secrets Manager Agent は SDK からリージョンを決定します。詳細については、「*AWS SDK for Rust Developer Guide*」の「[Specify your credentials and default Region](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/credentials.html)」を参照してください。

**`ttl_seconds`**  
キャッシュされた項目の TTL (秒単位) の範囲は 0 ～ 3600 です。デフォルトは 300 です。0 はキャッシュがないことを示します。

**`cache_size`**  
キャッシュに保存できるシークレットの最大数。範囲は 1～1000 です。デフォルトは 1000 です。

**`ssrf_headers`**  
Secrets Manager Agent が SSRF トークンを確認するヘッダー名のリスト。デフォルトは「X-Aws-Parameters-Secrets-Token, X-Vault-Token」です。

**`ssrf_env_variables`**  
Secrets Manager Agent が SSRF トークンを順番にチェックする環境変数名のリスト。環境変数には、`AWS_TOKEN=file:///var/run/awssmatoken` のようにトークンまたはトークンファイルへの参照を含めることができます。デフォルトは、AWS\$1TOKEN、AWS\$1SESSION\$1TOKEN、AWS\$1CONTAINER\$1AUTHORIZATION\$1TOKEN です。

**`path_prefix`**  
リクエストがパスベースのリクエストかどうかを判断するために使用される URI プレフィックス。デフォルトは「/v1/」です。

**`max_conn`**  
Secrets Manager Agent が許可する HTTP クライアントからの接続の最大数で、範囲は 1～1000 です。デフォルトは 800 です。

## オプション機能
<a name="secrets-manager-agent-features"></a>

Secrets Manager Agent は、`--features` フラグを `cargo build` に渡すことで、オプション機能で構築できます。利用できる機能は次のとおりです。構築機能

**`prefer-post-quantum`**  
`X25519MLKEM768` を最も優先度の高いキー交換アルゴリズムにします。それ以外にした場合も利用可能ですが、最高の優先度にはなりません。`X25519MLKEM768` は、ハイブリッドのポスト量子セキュアキー交換アルゴリズムです。

**`fips`**  
エージェントで使用される暗号スイートを FIPS 承認の暗号のみに制限します。

## ログ記録
<a name="secrets-manager-agent-log"></a>

**ローカルなログ記録**  
Secrets Manager Agent は `log_to_file` 設定変数に応じて、エラーを `logs/secrets_manager_agent.log` ファイルまたは stdout/stderr にローカルでログに記録します。アプリケーションが Secrets Manager Agent を呼び出してシークレットを取得すると、それらの呼び出しはローカルログに表示されます。CloudTrail ログには表示されません。

**ログローテーション**  
Secrets Manager Agent は、ファイルが 10 MB に達すると新しいログファイルを作成し、合計で最大 5 つのログファイルを保存します。

**AWS サービスログ記録**  
ログは Secrets Manager、CloudTrail、または CloudWatch には送信されません。Secrets Manager Agent からシークレットを取得するリクエストは、これらのログに表示されません。Secrets Manager Agent が Secrets Manager を呼び出してシークレットを取得すると、その呼び出しは `aws-secrets-manager-agent` を含むユーザーエージェント文字列とともに CloudTrail に記録されます。

[Secrets Manager Agent の構成](#secrets-manager-agent-config) でログ記録オプションを設定できます。

## セキュリティに関する考慮事項
<a name="secrets-manager-agent-security"></a>

**信頼ドメイン**  
エージェントアーキテクチャの場合、信頼ドメインは、エージェントエンドポイントと SSRF トークンにアクセスできる場所であり、通常はホスト全体です。同じセキュリティ体制を維持するために、Secrets Manager Agent の信頼ドメインは、Secrets Manager 認証情報が利用可能なドメインと一致する必要があります。例えば、Amazon EC2 では、Secrets Manager Agent の信頼ドメインは、Amazon EC2 のロールを使用する場合の認証情報のドメインと同じになります。

**重要**  
Secrets Manager 認証情報がアプリケーションにロックされたエージェントソリューションをまだ使用していないセキュリティ意識の高いアプリケーションでは、言語固有の AWS SDKs またはキャッシュソリューションの使用を検討する必要があります。シークレットの詳細については、「[シークレットの取得](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html)」を参照してください。