

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

# AWSワークロード認証情報プロバイダー
<a name="acm-certificate-automation"></a>

AWSワークロード認証情報プロバイダーは、ACM からエクスポートされた[パブリック](https://docs.aws.amazon.com/acm/latest/userguide/acm-exportable-certificates.html)および[プライベート](https://docs.aws.amazon.com/acm/latest/userguide/export-private.html) TLS 証明書の使用を自動化します。プロバイダーは定期的に証明書とそのプライベートキーを取得し、設定されたパスに書き込み、オプションでウェブサーバーなどの依存サービスを再ロードするコマンドを実行します。

ワークロード認証情報プロバイダーは、次のコンピューティング環境で使用できます。
+ Amazon Elastic Compute Cloud (Amazon EC2)
+ AWS認証情報を持つオンプレミスサーバー

ワークロード認証情報プロバイダーは、IAM ロールの引き受けを使用して証明書を取得します。Linux と Windows の両方で、専用の低特権ユーザーの下でシステムサービスとしてネイティブに実行され、アクセス許可が制限された証明書ファイルを書き込みます。

**重要**  
このプロバイダーで使用できるのは、エクスポート可能な証明書のみです。詳細については、[AWS Certificate Manager エクスポート可能なパブリック証明書](acm-exportable-certificates.md)「」および[「プライベート証明書のエクスポート](https://docs.aws.amazon.com/acm/latest/userguide/export-private.html)」を参照してください。

AWSワークロード認証情報プロバイダーはオープンソースです。ソースコードと貢献については、[GitHub リポジトリ](https://github.com/aws/aws-workload-credentials-provider)を参照してください。

## 証明書自動化の仕組み
<a name="acm-cert-automation-refresh"></a>

プロバイダーは、設定された各証明書を一定の間隔で更新するスケジューラを使用します。
+ 更新間隔は 24 時間です。
+ 各サイクルで、プロバイダーは証明書をエクスポートし、ディスク上のファイルと比較し、コンテンツが変更された場合にのみ新しいファイルを書き込みます。
+ 証明書ファイルが更新されると、設定された が`refresh_command`実行されます (NGINX や Apache の再ロードなど）。
+ 証明書の内容が変更されていない場合、更新コマンドはスキップされます。

プロバイダーは、すべてのシステム起動時とサービス起動直後に、小さなランダムジッターで初期更新を実行し、複数のプロバイダーがフリート間で同時に起動するときに同期された API コールを回避します。

プロバイダーは動的設定の再ロードもサポートしているため、再インストールすることなく証明書を追加、削除、または変更できます。詳細については、「[動的設定の再ロード](#acm-cert-automation-reload)」を参照してください。

## 前提条件
<a name="acm-cert-automation-prereqs"></a>

プロバイダーをインストールする前に、以下があることを確認してください。
+ systemd を使用する Linux インスタンス (Amazon Linux 2023、Ubuntu 20.04\+、または RHEL 8\+)
+ または、PowerShell 5.1 以降で Windows Server 2016 以降を実行している Windows インスタンス
+ インストーラを実行する管理者アクセス
+ ACM でエクスポート可能な証明書
+ ACM エクスポート権限を持つ IAM ロール (「」を参照[必要なアクセス許可](#acm-cert-automation-permissions))
+ AWSインスタンスで使用できる認証情報 (インスタンスプロファイル、環境変数、または認証情報ファイル)

## プロバイダーをインストールする
<a name="acm-cert-automation-install"></a>

------
#### [ Linux ]

1. 

**プロバイダーを構築する**

   ソースからプロバイダーバイナリを構築するか、プラットフォーム用に構築済みのバイナリを取得します。[Rust ツールチェーンをインストールするには](https://www.rust-lang.org/tools/install)、「Rust のインストール」の手順に従います。

   ```
   cargo build --release
   ```

   実行可能ファイルは にあります`target/release/aws-workload-credentials-provider`。

1. 

**設定ファイルを作成する**

   証明書の詳細を使用して TOML 設定ファイルを作成します。例については、[プロバイダーを設定する](#acm-cert-automation-configure) を参照してください。`--config` オプションを使用すると、インストーラはこのファイルを `/etc/aws-workload-credentials-provider/config.toml` に自動的にコピーします。

1. 

**インストーラの実行**

   インストールスクリプトをルートとして実行します。

   ```
   cd aws_workload_credentials_provider_common/configuration
   sudo ./install --config /path/to/your/config.toml
   ```

1. 

**(オプション) AWS認証情報を指定する**

   インスタンスプロファイルがアタッチされた Amazon EC2 インスタンスでは、プロバイダーは認証情報を自動的に取得します。他の環境では、systemd オーバーライドファイルを作成して認証情報を挿入します。

   ```
   sudo mkdir -p /etc/systemd/system/aws-workload-credentials-provider-acm.service.d
   sudo tee /etc/systemd/system/aws-workload-credentials-provider-acm.service.d/creds.conf > /dev/null <<EOF
   [Service]
   Environment="AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE"
   Environment="AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
   Environment="AWS_REGION=us-west-2"
   EOF
   sudo systemctl daemon-reload
   sudo systemctl restart aws-workload-credentials-provider-acm
   ```

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

1. 

**プロバイダーを構築または取得する**

   Windows のソースからプロバイダーバイナリを構築するか、構築済みのバイナリを取得します。[Rust ツールチェーンをインストールするには](https://www.rust-lang.org/tools/install)、「Rust のインストール」の手順に従います。

   ```
   cargo build --release
   ```

   実行可能ファイルは にあります`target\release\aws-workload-credentials-provider.exe`。

1. 

**設定ファイルを作成する**

   証明書の詳細を使用して TOML 設定ファイルを作成します。例については、[プロバイダーを設定する](#acm-cert-automation-configure) を参照してください。インストーラは、 `-Config`パラメータを使用するときに、このファイルを `C:\ProgramData\AWS\WorkloadCredentialsProvider\config.toml` に自動的にコピーします。

1. 

**インストーラの実行**

   インストールスクリプトを管理者として実行します。

   ```
   cd aws_workload_credentials_provider_common\configuration
   .\install.ps1 -Config C:\path\to\your\config.toml
   ```

   サービスを起動せずに をインストールするには:

   ```
   .\install.ps1 -Config C:\path\to\your\config.toml -NoStart
   ```

1. 

**(オプション) AWS認証情報を指定する**

   インスタンスプロファイルがアタッチされた Amazon EC2 インスタンスでは、プロバイダーは IMDS を介して認証情報を自動的に取得します。他の環境の場合は、Windows レジストリを使用してサービスの環境変数を設定します。

   ```
   $regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\AWSWorkloadCredentialsProvider-ACM"
   $envVars = @(
       "AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE",
       "AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
       "AWS_REGION=us-west-2"
   )
   New-ItemProperty -Path $regPath -Name "Environment" -Value $envVars -PropertyType MultiString -Force
   Restart-Service AWSWorkloadCredentialsProvider-ACM
   ```

------

## プロバイダーを設定する
<a name="acm-cert-automation-configure"></a>

証明書の詳細を使用して TOML 設定ファイルを作成します。`--config` オプションを使用すると`/etc/aws-workload-credentials-provider/config.toml`、インストーラはこのファイルを にコピーします。

------
#### [ NGINX ]

```
[logging]
log_level = "info"
log_to_file = true

[capabilities.acm]
enabled = true

[[capabilities.acm.certificates]]
certificate_arn = "arn:aws:acm:us-west-2:123456789012:certificate/abcd1234-5678-90ab-cdef-EXAMPLE11111"
role_arn = "arn:aws:iam::123456789012:role/ACMExportRole"
certificate_path = "/etc/pki/tls/certs/example.com.crt"
private_key_path = "/etc/pki/tls/private/example.com.key"
chain_path = "/etc/pki/tls/certs/example.com-chain.pem"
refresh_command = "/usr/sbin/nginx -s reload"
```

------
#### [ Apache ]

```
[logging]
log_level = "info"
log_to_file = true

[capabilities.acm]
enabled = true

[[capabilities.acm.certificates]]
certificate_arn = "arn:aws:acm:us-west-2:123456789012:certificate/abcd1234-5678-90ab-cdef-EXAMPLE11111"
role_arn = "arn:aws:iam::123456789012:role/ACMExportRole"
certificate_path = "/etc/ssl/certs/example.com.crt"
private_key_path = "/etc/ssl/private/example.com.key"
chain_path = "/etc/ssl/certs/example.com-chain.pem"
refresh_command = "/bin/systemctl reload httpd"
```

------
#### [ Apache (Windows) ]

```
[logging]
log_level = "info"
log_to_file = true

[capabilities.acm]
enabled = true

[[capabilities.acm.certificates]]
certificate_arn = "arn:aws:acm:us-west-2:123456789012:certificate/abcd1234-5678-90ab-cdef-EXAMPLE11111"
role_arn = "arn:aws:iam::123456789012:role/ACMExportRole"
certificate_path = 'C:\Apache24\conf\ssl\example.com.crt'
private_key_path = 'C:\Apache24\conf\ssl\example.com.key'
chain_path = 'C:\Apache24\conf\ssl\example.com-chain.pem'
refresh_command = 'C:\Apache24\bin\httpd.exe -k restart'
```

------

**注記**  
`chain_path` を省略すると、証明書チェーンが の ファイルに追加され`certificate_path`、フルチェーンファイルが生成されます。これは、証明書とそのチェーンを含む単一のファイルを想定するウェブサーバーと互換性があります。

### 動的設定の再ロード
<a name="acm-cert-automation-reload"></a>

`acm reload` コマンドを実行して、再インストールすることなくプロバイダーの設定を更新できます。これにより、新しい設定が検証され、新しい証明書パスと一致するようにアクセス許可が更新され、サービスが再起動されます。

設定から削除された証明書の更新が停止します。新しい証明書は、すぐに最初のエクスポートを開始します。各証明書は独立したタスクとして実行されるため、ある で障害が発生しても他の には影響しません。

------
#### [ Linux ]

```
aws-workload-credentials-provider acm reload --config /path/to/new-config.toml
```

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

```
& 'C:\Program Files\AWS\WorkloadCredentialsProvider\bin\aws-workload-credentials-provider.exe' acm reload -Config C:\path\to\new-config.toml
```

------

## 必要なアクセス許可
<a name="acm-cert-automation-permissions"></a>

### 基本認証情報
<a name="acm-cert-automation-permissions-base"></a>

プロバイダーの基本認証情報 (インスタンスプロファイルまたは環境) は、各証明書の で指定されたロールを引き受けることができる必要があります`role_arn`。

```
{
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::123456789012:role/ACMExportRole"
}
```

### 証明書のエクスポートロール
<a name="acm-cert-automation-permissions-export-role"></a>

で指定されたロールには、次のアクセス許可`role_arn`が必要です。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "acm:ExportCertificate",
            "Resource": "arn:aws:acm:us-west-2:123456789012:certificate/*"
        }
    ]
}
```

ロールの信頼ポリシーは、プロバイダーのベース ID がそれを引き受けることを許可する必要があります。

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

### コマンドのアクセス許可を更新する (Linux)
<a name="acm-cert-automation-permissions-refresh"></a>

Linux では、プロバイダーは `refresh_command`を介して設定された を実行します`sudo`。インストーラは で sudoers エントリを生成`/etc/sudoers.d/aws-workload-credentials-provider`し、プロバイダーユーザーがパスワードプロンプトなしで正確に設定されたコマンドを実行できるようにします。

**重要**  
に `/etc/sudoers.d` ディレクトリ`/etc/sudoers`が含まれていることを確認します。このインクルードディレクティブが存在しない場合、インストーラは警告します。これがないと、生成された sudoers ファイルは効果がなく、更新コマンドは失敗します。

Windows では、プロバイダーは SYSTEM スケジュールされたタスク`refresh_command`として をトリガーします。

## インストールの検証
<a name="acm-cert-automation-verify"></a>

インストール後、プロバイダーが実行中であり、証明書が書き込まれていることを確認します。

------
#### [ Linux ]

1. **サービスのステータスを確認します。**

   ```
   sudo systemctl status aws-workload-credentials-provider-acm
   ```

1. **プロバイダーログを確認します。**

   ```
   cat /opt/aws/workload-credentials-provider/logs/acm_provider.log
   ```

1. **証明書ファイルが存在することを確認します。**

   ```
   ls -la /etc/pki/tls/certs/example.com.crt
   ls -la /etc/pki/tls/private/example.com.key
   ```

1. **証明書の内容を検証する:**

   ```
   openssl x509 -in /etc/pki/tls/certs/example.com.crt -noout -subject -dates
   ```

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

1. **サービスのステータスを確認します。**

   ```
   Get-Service AWSWorkloadCredentialsProvider-ACM | Format-List Name, Status, StartType
   ```

1. **プロバイダーログを確認します。**

   ```
   Get-Content "C:\ProgramData\AWS\WorkloadCredentialsProvider\logs\acm_provider.log" -Tail 20
   ```

1. **証明書ファイルが存在することを確認します。**

   ```
   Get-Item C:\certs\example.com.crt
   Get-Item C:\certs\example.com.key
   ```

1. **証明書の内容を検証する:**

   ```
   $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2("C:\certs\example.com.crt")
   $cert | Select-Object Subject, NotBefore, NotAfter
   ```

------

## 設定リファレンス
<a name="acm-cert-automation-config-reference"></a>


| フィールド | [Required] (必須) | デフォルト | 説明 | 
| --- | --- | --- | --- | 
| logging.log\_level | いいえ | info | 詳細のログ記録: debug、info、warn、error、 none | 
| logging.log\_to\_file | いいえ | true | ファイル (true) または stdout/stderr (false) にログを書き込む | 
| capabilities.acm.enabled | いいえ | false | ACM 機能を有効または無効にする | 
| certificates[].certificate\_arn | はい | — | エクスポートする ACM 証明書の ARN | 
| certificates[].role\_arn | はい | — | ExportCertificate 呼び出しのために引き受ける IAM ロール ARN | 
| certificates[].certificate\_path | はい | — | 証明書ファイルを書き込む絶対パス | 
| certificates[].private\_key\_path | はい | — | プライベートキーファイルを書き込む絶対パス | 
| certificates[].chain\_path | いいえ | — | 証明書チェーンを書き込む絶対パス。省略すると、チェーンが に追加されます。 certificate\_path | 
| certificates[].refresh\_command | いいえ | — | 証明書ファイルの更新後に実行するコマンド。絶対パスである必要があります | 
| certificates[].certificate\_and\_chain\_permission | いいえ | 0600 | 証明書ファイルとチェーンファイルのファイルアクセス許可 (Linux mode形式) | 
| certificates[].key\_permission | いいえ | 0600 | プライベートキーファイルのファイルアクセス許可 (Linux mode形式) | 

## ログ記録
<a name="acm-cert-automation-logging"></a>

Linux では、プロバイダーは にログ記録します`/opt/aws/workload-credentials-provider/logs/acm_provider.log`。

Windows では、プロバイダーは にログ記録します`C:\ProgramData\AWS\WorkloadCredentialsProvider\logs\acm_provider.log`。サービスの開始イベントと停止イベントは、ソース の Windows アプリケーションイベントログにも記録されます`AWSWorkloadCredentialsProvider-ACM`。

**ログのローテーション** — プロバイダーは、現在のファイルが 10 MB に達すると新しいログファイルを作成し、アーカイブされたログファイルを最大 5 つ保存します。

**AWSサービスログ**記録 — プロバイダーが を呼び出すと`ExportCertificate`、その呼び出しは を含むユーザーエージェント文字列を使用して AWSCloudTrail に記録されます`aws-workload-credentials-provider`。プロバイダーの内部オペレーション (スケジューラサイクル、ファイル書き込み) は、ローカルログにのみ表示されます。

ログ記録は、 `log_level`および `log_to_file`設定で設定できます。詳細については、「[設定リファレンス](#acm-cert-automation-config-reference)」を参照してください。