

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# 最適化された Bottlerocket AMI を使用してノードを作成する
<a name="eks-optimized-ami-bottlerocket"></a>

 [Bottlerocket](https://aws.amazon.com/bottlerocket/) は、AWS がスポンサーおよびサポートするオープンソースの Linux ディストリビューションです。Bottlerocket は、コンテナワークロードをホストするために専用に構築されています。Bottlerocket を使用すると、コンテナインフラストラクチャの更新を自動化することで、コンテナ化されたデプロイの可用性を向上させ、運用コストを削減できます。Bottlerocket には、コンテナの実行に不可欠なソフトウェアのみが含まれており、リソース使用率の向上、セキュリティ上の脅威の軽減、管理オーバーヘッドの軽減が実現されます。Bottlerocket AMI には、`containerd`、`kubelet`、および AWS IAM Authenticator が含まれます。Bottlerocket は、マネージド型ノードグループとセルフマネージド型ノードに加え、[Karpenter](https://karpenter.sh/) でもサポートされています。

## 利点
<a name="bottlerocket-advantages"></a>

Amazon EKS クラスターと Bottlerocket を使用すると次のようなメリットがあります。
+  **運用コストが低く、管理の複雑さが軽減されたことによるアップタイムの向上** – Bottlerocket は、他の Linux ディストリビューションよりもリソースフットプリントが小さく、ブート時間が短く、セキュリティ脅威に対する脆弱性が低くなります。Bottlerocket のフットプリントが小さいため、ストレージ、コンピューティング、ネットワークリソースの使用量が減り、コストを削減できます。
+  **OS の自動更新によるセキュリティの向上** — Bottlerocket への更新プログラムは単一のユニットとして適用され、必要に応じてロールバックできます。これにより、システムが使用不能な状態にさらす更新プログラムの破損または失敗のリスクをなくします。Bottlerocket を使用すると、セキュリティ更新プログラムが利用可能になり次第、中断を最小限に抑えながら自動的に適用され、障害が発生した場合はロールバックできます。
+  **プレミアムサポート** — Amazon EC2 で AWS が提供する Bottlerocket のビルドは、Amazon EC2、Amazon EKS、Amazon ECR などの AWS サービスも対象とする同じ AWS サポートプランの対象となります。

## 考慮事項
<a name="bottlerocket-considerations"></a>

Bottlerocket を AMI タイプに使用する際、次の事項を考慮してください。
+ Bottlerocket は、`x86_64` と `arm64` プロセッサを搭載した Amazon EC2 インスタンスをサポートします。
+ Bottlerocket は、GPU を搭載した Amazon EC2 インスタンスをサポートします。詳細については、「[GPU インスタンス向けに EKS 最適化高速 AMI を使用する](ml-eks-optimized-ami.md)」を参照してください。
+ Bottlerocket イメージには、SSH サーバーまたはシェルは含まれません。帯域外のアクセス方法を使用して SSH を許可できます。これらの手法は、管理者コンテナを有効にし、ユーザーデータでブートストラップの設定ステップの渡しを可能にします。詳細については、GitHub の「[Bottlerocket OS](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md)」内にある次のセクションを参照してください。
  +  [探査](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#exploration) 
  +  [管理者コンテナ](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#admin-container) 
  +  [Kubernetes 設定](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#kubernetes-settings) 
+ Bottlerocket は以下のさまざまなコンテナタイプを使用します。
  + デフォルトで、「[コントロールコンテナ](https://github.com/bottlerocket-os/bottlerocket-control-container)」は有効になっています。このコンテナは、Amazon EC2 Bottlerocket インスタンス上でのコマンドの実行や、シェルセッションの開始に使用できる [AWS Systems Manager エージェント](https://github.com/aws/amazon-ssm-agent)を実行します。詳細については、*AWS Systems Manager ユーザーガイド*の「[Session Manager のセットアップ](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html)」を参照してください。
  + ノードグループの作成時に SSH キーが与えられる場合、管理者コンテナが有効になります。admin container は、開発とテストのシナリオにのみ使用することをお勧めします。本番環境で使用することはお勧めしません。詳細については、GitHub の [Admin container](https://github.com/bottlerocket-os/bottlerocket/blob/develop/README.md#admin-container) を参照してください。

## 詳細情報
<a name="bottlerocket-more-information"></a>

Amazon EKS 最適化 Bottlerocket AMI の使用に関する詳細については、以下のセクションを参照してください。
+ Bottlerocket の詳細については、[Bottlerocket のドキュメント](https://bottlerocket.dev/en/)を参照してください。
+ バージョン情報のリソースについては、「[Bottlerocket AMI のバージョン情報を取得する](eks-ami-versions-bottlerocket.md)」を参照してください。
+ Bottlerocket をマネージド型ノードグループと使用するには、「[マネージドノードグループを使用してノードライフサイクルを簡素化する](managed-node-groups.md)」を参照してください。
+ セルフマネージド型の Bottlerocket ノードを起動するには、「[セルフマネージド Bottlerocket ノードの作成](launch-node-bottlerocket.md)」を参照してください。
+ Amazon EKS 最適化 Bottlerocket AMI の最新の ID を取得するには、「[推奨 Bottlerocket AMI ID を取得する](retrieve-ami-id-bottlerocket.md)」を参照してください。
+ コンプライアンスサポートの詳細については、「[Bottlerocket を使用してコンプライアンス要件に準拠する](bottlerocket-compliance-support.md)」を参照してください。

# Bottlerocket AMI のバージョン情報を取得する
<a name="eks-ami-versions-bottlerocket"></a>

各 Bottlerocket AMI リリースには、[kubelet](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/)、Bottlerocket カーネル、[containerd](https://containerd.io/) のさまざまなバージョンが含まれます。また高速 AMI バリアントには、さまざまなバージョンの NVIDIA ドライバーも含まれます。このバージョン情報は、Bottlerocket のドキュメントの「[OS](https://bottlerocket.dev/en/os/)」のトピックで確認できます。このページから、該当する「Version Information」のサブトピックに移動します。

Bottlerocket のドキュメントは、GitHub で利用可能なバージョンよりも遅れることがあります。最新バージョンの変更のリストは、GitHub の「[Releases](https://github.com/bottlerocket-os/bottlerocket/releases)」で確認できます。

# 推奨 Bottlerocket AMI ID を取得する
<a name="retrieve-ami-id-bottlerocket"></a>

ノードをデプロイする際に、事前構築済みの Amazon EKS 最適化 Amazon マシンイメージ (AMI) の ID を指定できます。希望する設定に合った AMI ID を取得するには、AWS Systems Manager Parameter Store API をクエリします。この API を使用すると、Amazon EKS 最適化 AMI ID を手動で検索する必要がなくなります。詳細については、「[GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html)」を参照してください。使用する [IAM プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)には、Amazon EKS 最適化 AMI メタデータを取得するための `ssm:GetParameter` IAM アクセス許可が必要です。

サブパラメータ `image_id` を使用する次の AWS CLI コマンドを使用することで、推奨される最新の Amazon EKS 最適化 Bottlerocket AMI のイメージ ID を取得できます。必要に応じてコマンドに次の変更を加え、変更したコマンドを実行してください：
+ *kubernetes-version* を、サポートされている [platform-version](https://docs.aws.amazon.com/eks/latest/userguide/platform-versions.html) に置き換えます。
+ *-flavor* は、以下のいずれかのオプションに置き換えます。
  + GPU のないバリアントの場合は *-flavor* を削除します。
  + GPU 対応バリアントには *-nvidia* を使用します。
  + FIPS 対応バリアントには *-fips* を使用します。
+ *architecture* は、以下のいずれかのオプションに置き換えます。
  + `x86` ベースのインスタンスには *x86\$164* を使用します。
  + ARM インスタンスには *arm64* を使用します。
+ *region-code* を、AMI ID が必要な [Amazon EKS がサポートしている AWS リージョン](https://docs.aws.amazon.com/general/latest/gr/eks.html)に置き換えます。

```
aws ssm get-parameter --name /aws/service/bottlerocket/aws-k8s-kubernetes-version-flavor/architecture/latest/image_id \
    --region region-code --query "Parameter.Value" --output text
```

プレースホルダーの置換が行われた後のコマンドの例を以下に示します。

```
aws ssm get-parameter --name /aws/service/bottlerocket/aws-k8s-1.31/x86_64/latest/image_id \
    --region us-west-2 --query "Parameter.Value" --output text
```

出力例は次のとおりです。

```
ami-1234567890abcdef0
```

# Bottlerocket を使用してコンプライアンス要件に準拠する
<a name="bottlerocket-compliance-support"></a>

Bottlerocket はさまざまな組織によって定義された推奨事項に準拠しています。
+ [CIS ベンチマーク](https://www.cisecurity.org/benchmark/bottlerocket)は Bottlerocket に定義されています。デフォルト設定では、Bottlerocket イメージには CIS レベル 1 構成プロファイルに必要なほとんどのコントロールが含まれています。CIS レベル 2 構成プロファイルに必要なコントロールを実装できます。詳細については、「AWS ブログ」の「[Amazon EKS に最適化された Bottlerocket AMI を CIS ベンチマークと照合して検証](https://aws.amazon.com/blogs/containers/validating-amazon-eks-optimized-bottlerocket-ami-against-the-cis-benchmark)」を参照してください。
+ 最適化された機能セットおよび最小化したアタックサーフェスは、攻撃対象領域が小さくなるため、Bottlerocket インスタンスが PCI DSS 要件を満たすために必要な構成が少なくて済みます。[Bottlerocket の CIS Benchmark](https://www.cisecurity.org/benchmark/bottlerocket) は、ガイダンスを強化するために優れたリソースであり、PCI DSS 要件 2.2 に基づく安全な構成標準の要件をサポートします。[Fluent Bit](https://opensearch.org/blog/technical-post/2022/07/bottlerocket-k8s-fluent-bit/) を活用して、PCI DSS 要件 10.2 に基づくオペレーティングシステムレベルの監査ログ記録の要件をサポートすることもできます。AWS は、PCI DSS 要件 6.2 (v3.2.1 用) および要件 6.3.3 (v4.0 用) を満たすために役立つ新しい (パッチが適用された) Bottlerocket インスタンスを定期的に公開します。
+ Bottlerocket は、Amazon EC2 および Amazon EKS の両方に規制対象のワークロードで使用が承認された HIPAA 対象の機能です。詳細については、「[コンプライアンスプログラムによる AWS 対象範囲内のサービス](https://aws.amazon.com/compliance/hipaa-eligible-services-reference/)」を参照してください。
+ Bottlerocket AMI はFIPS 140-3 検証済み暗号化モジュールを使用するように事前設定されています。これには Amazon Linux 2023 Kernel Crypto API 暗号化モジュールや AWS-LC 暗号化モジュールなどがあります。詳細については、「[Bottlerocket FIPS AMI を使用してワーカーノードを FIPS 対応にする](bottlerocket-fips-amis.md)」を参照してください。

# Bottlerocket FIPS AMI を使用してワーカーノードを FIPS 対応にする
<a name="bottlerocket-fips-amis"></a>

連邦情報処理規格 (Federal Information Processing Standards/FIPS) 公開情報 140-3 は、機密情報を保護する暗号モジュールのセキュリティ要件を規定する、米国およびカナダ政府の基準です。Bottlerocket からは、FIPS カーネルを備えた AMI が提供されており、これによって、FIPS への準拠が容易になります。

これらの AMI は、FIPS 140-3 検証済み暗号化モジュールを使用するように事前構成されています。これには Amazon Linux 2023 Kernel Crypto API 暗号化モジュールや AWS-LC 暗号化モジュールなどがあります。

Bottlerocket FIPS AMI を使用すると、ワーカーノードは「FIPS 対応」になりますが、自動的に「FIPS に準拠」するわけではありません。詳細については、「[連邦情報処理規格 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)」を参照してください。

## 考慮事項
<a name="_considerations"></a>
+ クラスターで分離サブネットを使用している場合、Amazon ECR FIPS エンドポイントにアクセスできない場合があります。これによって、ノードのブートストラップが失敗する可能性があります。ネットワーク設定で、必要な FIPS エンドポイントへのアクセスが許可されていることを確認してください。詳細については、「*AWS PrivateLink ガイド*」の「[Access a resource through a resource VPC endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/use-resource-endpoint.html)」を参照してください。
+ Amazon ECR FIPS エンドポイントは PrivateLink 経由で使用できないため、クラスターで [PrivateLink](vpc-interface-endpoints.md) を利用するサブネットが使用されている場合、イメージのプルが失敗します。

## Bottlerocket FIPS AMI を使用してマネージド型ノードグループを作成する
<a name="_create_a_managed_node_group_with_a_bottlerocket_fips_ami"></a>

Bottlerocket FIPS AMI には、ワークロードをサポートする 4 つのバリアントがあります。
+  `BOTTLEROCKET_x86_64_FIPS` 
+  `BOTTLEROCKET_ARM_64_FIPS` 
+  `BOTTLEROCKET_x86_64_NVIDIA_FIPS` 
+  `BOTTLEROCKET_ARM_64_NVIDIA_FIPS` 

Bottlerocket FIPS AMI を使用してマネージド型ノードグループを作成するには、作成プロセス中に、該当する AMI タイプを選択します。詳細については、「[クラスターのマネージドノードグループを作成する](create-managed-node-group.md)」を参照してください。

FIPS 対応バリアントの選択の詳細については、「[推奨 Bottlerocket AMI ID を取得する](retrieve-ami-id-bottlerocket.md)」を参照してください。

## サポートされていない AWS リージョンの FIPS エンドポイントを無効にする
<a name="disable_the_fips_endpoint_for_non_supported_shared_aws_regions"></a>

Bottlerocket FIPS AMI は、AWS GovCloud (米国) リージョンを含め、米国では直接サポートされています。AMI が使用可能でも、直接サポートされていない AWS リージョンでは、起動テンプレートでマネージド型ノードグループを作成すると、AMI を引き続き使用できます。

Bottlerocket FIPS AMI は、ブートストラップ中に Amazon ECR FIPS エンドポイントに依存しますが、このエンドポイントは、米国以外では一般には利用できません。Amazon ECR FIPS エンドポイントが利用できない AWS リージョンで FIPS カーネルを目的に AMI を使用するには、次のステップを実行して FIPS エンドポイントを無効にします。

1. 以下を記述した新しい設定ファイルを作成するか、既存の設定ファイルに以下を記述します。

```
[default]
use_fips_endpoint=false
```

1. ファイルの記述を Base64 形式でエンコードします。

1. 起動テンプレートの `UserData` で、エンコードした次の文字列を TOML 形式で追加します。

```
[settings.aws]
config = "<your-base64-encoded-string>"
```

その他の設定については、GitHub にある、Bottlerocket の「[Description of settings](https://github.com/bottlerocket-os/bottlerocket?tab=readme-ov-file#description-of-settings)」を参照してください。

起動テンプレートに記述した `UserData` の例を次に示します。

```
[settings]
motd = "Hello from eksctl!"
[settings.aws]
config = "W2RlZmF1bHRdCnVzZV9maXBzX2VuZHBvaW50PWZhbHNlCg==" # Base64-encoded string.
[settings.kubernetes]
api-server = "<api-server-endpoint>"
cluster-certificate = "<cluster-certificate-authority>"
cluster-name = "<cluster-name>"
...<other-settings>
```

起動テンプレート作成の詳細については、「[起動テンプレートを使用してマネージドノードをカスタマイズする](launch-templates.md)」を参照してください。