Amazon Web Services での RHEL のデプロイと管理
Red Hat Enterprise Linux システムイメージの取得と AWS での RHEL インスタンスの作成
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat は質の高いドキュメントを提供することに尽力しており、皆様からのフィードバックを大切にしています。改善にご協力いただくため、Red Hat Jira トラッキングシステムを通じてご提案やエラー報告をお寄せください。
手順
Jira の Web サイトにログインします。
アカウントがない場合、アカウント作成オプションを選択します。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ウィンドウ下部の Create をクリックします。
第1章 パブリッククラウドプラットフォームでの RHEL の導入 リンクのコピーリンクがクリップボードにコピーされました!
パブリッククラウドプラットフォームは、コンピューティングリソースをサービスとして提供します。オンプレミスのハードウェアを維持管理する代わりに、IT ワークロードをパブリッククラウドのインスタンスとして実行できます。これには、Red Hat Enterprise Linux (RHEL) システムが含まれます。
1.1. パブリッククラウドで RHEL を使用する利点 リンクのコピーリンクがクリップボードにコピーされました!
パブリッククラウドプラットフォーム上で Red Hat Enterprise Linux (RHEL) を実行することで、柔軟なリソース割り当て、コスト効率、およびソフトウェア制御による設定が可能になり、物理ハードウェアを管理することなくインフラストラクチャーを最適化できます。
パブリッククラウドプラットフォーム上に配置されたクラウドインスタンスとしての RHEL には、RHEL オンプレミスの物理システムまたは仮想マシン (VM) に比べて次の利点があります。
- リソースの柔軟性と詳細な割り当て
RHEL インスタンスは、クラウドプラットフォーム上で仮想マシンとして動作します。クラウドプラットフォームとは、クラウドサービスプロバイダーによって管理される、リモートサーバーの集合体であります。したがって、インスタンスへのハードウェアリソース (特定の種類の CPU やストレージなど) の割り当てを、ソフトウェアレベルで簡単にカスタマイズできます。
ローカルの RHEL システムとは異なり、リソースの選択肢は物理ハードウェアの制限を受けません。その代わりに、クラウドプロバイダーが提供する幅広い機能や設定の中から選択することができます。
- 領域とコスト効率
クラウドワークロードをホストするためにオンプレミスサーバーを所有する必要がありません。これにより、物理ハードウェアに関連するスペース、電力、メンテナンスの要件が回避されます。
その代わりに、クラウドインスタンスの使用料をクラウドプロバイダーに直接支払います。費用は、ハードウェアの割り当てと使用時間に基づいて算出されます。したがって、要件に基づいてコストを最適化できます。
- ソフトウェアで制御される設定
クラウドインスタンスの設定全体をデータとして保存できます。また、クラウドプラットフォームを介してソフトウェアで制御することも可能です。したがって、インスタンスの作成、削除、複製、または移行を行います。また、クラウドインスタンスは、クラウドプロバイダーのコンソールでリモートで操作され、デフォルトでリモートストレージに接続されます。
さらに、クラウドインスタンスの現在の状態をいつでもスナップショットとしてバックアップできます。その後、スナップショットをロードしてインスタンスを保存した状態に復元できます。
- ホストからの分離とソフトウェアの互換性
ローカルの仮想マシンと同様に、クラウドインスタンス上の RHEL ゲストオペレーティングシステムは Kernel-based Virtual Machine (KVM) 上で実行されます。KVM は、ローカルの RHEL カーネルを
TYPE-1 ハイパーバイザーに変換するロード可能なカーネルモジュールです。KVM はホストオペレーティングシステムとは別個のものです。また、インスタンスに接続できるクライアントシステムとは別個のものです。したがって、任意のオペレーティングシステムをクラウドインスタンスにインストールできます。つまり、RHEL のパブリッククラウドインスタンス上では、ローカルのオペレーティングシステムでは使用できない可能性のある RHEL 固有のアプリケーションを実行できるということです。さらに、インスタンスのオペレーティングシステムが不安定になったり侵害されたりした場合でも、クライアントシステムには一切影響がありません。
1.2. RHEL のパブリッククラウドのユースケース リンクのコピーリンクがクリップボードにコピーされました!
パブリッククラウドにアプリケーションをデプロイするかどうかは、ユースケースによって異なります。パブリッククラウドへのデプロイメントの移行が有益かどうかを評価する際には、Red Hat Enterprise Linux (RHEL) デプロイメントにおける利点を考慮してください。
- 有益なユースケース
パブリッククラウドのインスタンスは、必要に応じてコンピューティング能力を効果的にオン/オフできます。これは スケールアップ と スケールダウン として知られています。次の場合、パブリッククラウド上で RHEL を使用できます。
- ピーク時のワークロードが高く、全体的なパフォーマンス要件が低いクラスターは、柔軟なスケーリングの恩恵を受ける。要求に応じてスケールアップおよびスケールダウンすることで、リソースコストの面で高い効率が得られる場合があります。
- クラスターを迅速にセットアップまたは拡張する場合。これにより、ローカルサーバーのセットアップにかかる高額な初期費用が回避されます。
- ローカル環境の変更はクラウドインスタンスには影響しません。したがって、バックアップや障害復旧に使用できます。
- 問題が発生する可能性のあるユースケース
- 調整不可能な既存の環境を運用している場合。既存のデプロイメントニーズに合わせてクラウドインスタンスをカスタマイズすることは、経済的に効率的ではない可能性があります。現在お使いのホスティングプラットフォームの方が、費用対効果が高いかもしれません。
- 厳しい予算制限の中で運用している場合。ローカルデータセンターは、一般的にパブリッククラウドよりも柔軟性に劣る。しかし、それらは最大リソースコストをより細かく制御できるという利点があります。
1.3. パブリッククラウドへの移行時によくある懸念事項 リンクのコピーリンクがクリップボードにコピーされました!
RHEL ワークロードをローカル環境からパブリッククラウドプラットフォームに移行すると、それに伴う変更に懸念が生じる可能性があります。よくある質問は次のとおりです。
- RHEL は、クラウドインスタンスとして動作する場合、ローカル仮想マシンとして動作する場合とは異なる動作になりますか?
パブリッククラウドプラットフォーム上の RHEL インスタンスは、ほとんどの点で、オンプレミスサーバーなどのローカルホスト上の RHEL 仮想マシンと同じように機能します。注目すべき例外には次のようなものがあります。
- パブリッククラウドインスタンスは、プライベートオーケストレーションインターフェイスの代わりに、プロバイダー固有のコンソールインターフェイスを使用してクラウドリソースを管理します。
- ネストされた仮想化などの特定の機能が正しく動作しない可能性があります。特定の機能がデプロイメントにとって重要な場合は、選択したパブリッククラウドプロバイダーとその機能の互換性を事前に確認してください。
- ローカルサーバーと比べて、パブリッククラウドではデータは安全に保たれますか?
RHEL クラウドインスタンス内のデータは、お客様の所有権に帰属します。お客様のパブリッククラウドプロバイダーは、それにアクセスできません。主要なクラウドプロバイダーは、データ転送時の暗号化をサポートしています。これにより、仮想マシンをパブリッククラウドに移行する際のデータセキュリティーが向上します。RHEL パブリッククラウドインスタンスのセキュリティーは、以下のように要約できます。
- パブリッククラウドプロバイダーは、クラウドハイパーバイザーのセキュリティーを担当します。
- Red Hat は、RHEL ゲストオペレーティングシステムのセキュリティー機能をインスタンスに提供します。
- ユーザーは、クラウドインフラストラクチャーにおける特定のセキュリティー設定とプラクティスを管理します。
- ユーザーの地理的リージョンは、RHEL パブリッククラウドインスタンスの機能にどのように影響しますか?
- RHEL インスタンスは、地理的な場所に関係なく、パブリッククラウドプラットフォームで使用できます。したがって、インスタンスをオンプレミスサーバーと同じリージョンで実行できます。しかし、インスタンスを物理的に離れたリージョンにホストすると、レイテンシーが高くなり、パフォーマンスが低下する可能性があります。さらに、パブリッククラウドプロバイダーによっては、特定のリージョンで、追加機能が提供される場合や、より高いコスト効率が得られる場合があります。RHEL インスタンスを作成する前に、選択したクラウドプロバイダーで利用可能なホスティングリージョンのプロパティーを確認してください。
1.4. パブリッククラウドデプロイメント用の RHEL の入手 リンクのコピーリンクがクリップボードにコピーされました!
パブリッククラウド環境に Red Hat Enterprise Linux (RHEL) をデプロイするには、認定クラウドサービスプロバイダー (CCSP) を選択し、RHEL クラウドインスタンスを作成する必要があります。
お客様の要件と現在の市場提供状況に基づき、RHEL インスタンスを実行するための最適な CCSP として、Amazon Web Services (AWS)、Google Cloud、および Microsoft Azure を選択してください。
注記このドキュメントでは、AWS に RHEL をデプロイするプロセスを具体的に説明します。
- クラウドプラットフォーム上に RHEL クラウドインスタンスを作成します。
- Red Hat Update Infrastructure (RHUI) を使用して、RHEL デプロイメントを最新の状態に保ってください。
1.5. RHEL クラウドインスタンスを作成する方法 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux (RHEL) システムイメージを作成し、それをクラウドプラットフォームにインポートすることができます。
システムイメージを作成するには、RHEL Image Builder を使用するか、クラウドサービスプロバイダーのマーケットプレイスからイメージを購入することができます。その後、RHEL イメージをクラウドインスタンスとしてデプロイできます。
RHEL インスタンスをパブリッククラウドプラットフォームにデプロイするには、次のいずれかの方法を使用できます。
- RHEL システムイメージを作成してクラウドプラットフォームにインポートする
- システムイメージを作成するには、RHEL Image Builder を使用するか、イメージを手動でビルドできます。
- この方法は、既存の RHEL サブスクリプションを使用します (BYOS で独自のサブスクリプションを持ち込む)。
- 年間サブスクリプションを前払いすると、Red Hat お客様割引を利用できます。
- Red Hat はカスタマーサービスを提供しています。
-
多くのイメージを効果的に作成するには、
cloud-initユーティリティーを使用できます。
- RHEL インスタンスをクラウドプロバイダーマーケットプレイスから直接購入する
- サービスの利用に対して時間料金を後払いで支払います。この方法は、従量課金制 (PAYG) とも呼ばれます。
- クラウドサービスプロバイダーはカスタマーサービスを提供します。
第2章 AMI イメージの準備と AWS へのアップロード リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder を使用すると、AWS クラウド上でカスタムイメージを作成し、手動または自動で更新できます。
2.1. AWS AMI イメージを手動でアップロードする準備 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) に Amazon Machine Image (AMI) をアップロードする前に、イメージをアップロードするためのシステムを設定する必要があります。
前提条件
- 書き込み可能な S3 バケット が準備されました。
AWS 認証は、以下のいずれかの方法を使用して設定されています。
- 静的認証情報:AWS IAM アカウントマネージャーで設定されたアクセスキー ID とシークレットアクセスキー。AWS IAM アカウントマネージャー でアクセスキー ID を設定した。
- 動的認証情報:AWS IAM アイデンティティー Center (SSO) を使用して管理される、有効期限の短い認証情報。
手順
Python 3 と
pipツールをインストールします。# dnf install python3 python3-pippipを使用して AWS コマンドラインツール をインストールします。$ pip3 install awscliAWS CLI 認証プロファイルを設定します。
静的認証情報 (AWS アクセスキー) の設定: ターミナルで認証情報、リージョン、出力形式を入力するよう求められます。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:動的認証情報の設定 (AWS SSO/IAM アイデンティティー Center): 組織で有効期限の短い動的認証情報を使用している場合は、別のプロファイルにログインしてください。リモートの SSH セッションで CLI を実行する場合は、
--remoteフラグを含めてください。$ aws login --region eu-central-1 --profile auth --remoteブラウザーで認証を行うには、表示されるリンクをクリックしてください。これにより、
~/.aws/configファイルにエントリーが作成されます。[profile auth] region = eu-central-1 login_session = arn:aws:sts::12345678910:assumed-role/12345678910-admin/<username>重要image-builder はAWS SDK for Go v2 を使用していますが、これは動的な認証情報をネイティブにサポートしていません。上記のプロファイルのみを使用してアップロードしようとすると、認証情報は黙って無視され、次のエラーが発生します。取得中: 操作エラー S3: CreateMultipartUpload、アイデンティティーの取得: 認証情報の取得: キャッシュされた認証情報の更新に失敗しました、EC2 IMDS ロールが見つかりません…この制限を回避するには、[default]または別の指定プロファイルを設定してcredential_processを使用します。これは、動的なセッショントークンを、image-builder が読み取ることができる静的な認証情報にマッピングします。~/.aws/configファイルに以下を追加してください。[default] region = eu-central-1 credential_process = aws configure export-credentials --profile auth --format process
バケットの名前を定義し、バケットを作成します。
$ BUCKET=<bucketname>$ aws s3 mb s3://$BUCKET<bucketname> を実際のバケット名に置き換えてください。この名前は、グローバルで一意となるように指定する必要があります。Simple Storage Service (S3) へのアクセス権限を付与するには、AWS Identity and Access Management (IAM) で
vmimportロールを作成します (まだ作成していない場合)。信頼ポリシー設定を含む
trust-policy.jsonファイルを JSON 形式で作成します。以下に例を示します。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:Externalid": "vmimport" } } }] }ロールポリシーの設定を JSON 形式で記述した
role-policy.jsonファイルを作成します。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::%s", "arn:aws:s3:::%s/"] }, { "Effect": "Allow", "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe"], "Resource": "*" }] }$BUCKET $BUCKETtrust-policy.jsonファイルを使用して、Amazon Web Services アカウントのロールを作成します。$ aws iam create-role --role-name vmimport --assume-role-policy-document \file://trust-policy.jsonrole-policy.jsonファイルを使用して、インラインポリシードキュメントを埋め込みます。$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document \file://role-policy.json
検証
バケットが作成されたことを確認します。
$ aws s3 ls | grep $BUCKETvmimportロールが作成されたことを確認します。$ aws iam get-role --role-name vmimport
2.2. CLI を使用して AMI イメージを AWS に手動でアップロードする リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder を使用して AMI イメージを作成し、CLI を使用して Amazon AWS クラウドサービスプロバイダーに手動で直接アップロードできます。
前提条件
-
ローカルシステムに設定されている
credential_process の回避策を使用して、静的または動的な認証情報を作成しました。AWS AMI イメージを手動でアップロードするための準備を 参照してください。 -
AWS IAM アカウントマネージャーで
Access Key IDを設定した。 - 書き込み可能な S3 バケット を用意した。
- 定義済みの青写真がある。
手順
イメージをビルドします。
$ sudo image-builder build ami \ --blueprint <blueprint_name> \ --aws-region us-east-1 \ --aws-bucket <example_bucket> \ --aws-ami-name <image_name>イメージを AWS にアップロードしてください。単体の RAW イメージの場合は、以下のアップロードコマンドを使用してください。
$ sudo image-builder upload rhel-10.1-ami-x86_64.raw \ --to=aws --aws-region=eu-central-1 \ --aws-bucket=<my_bucket> --aws-ami-name <image_name>デフォルトプロファイルの回避策を使用して動的認証情報を設定した場合、
アップロードコマンドは設定済みのcredential_processフローを自動的に使用します。
検証
- AWS コンソールで利用可能な EC2 イメージを確認し、正しいリージョンを選択してください。
- ダッシュボードでイメージを選択し、 をクリックします。
トラブルシューティング
- ビルドコマンドまたはアップロードコマンドが認証エラーまたは権限エラーで失敗した場合は、AWS CLI プロファイルに有効な認証情報が設定されていること、および IAM ユーザーまたはロールが S3 バケットと EC2 仮想マシンインポート/エクスポート API にアクセスできることを確認する必要があります。
-
コマンドがバケットが見つからない、アクセスできない、または間違った場所にあると報告する場合は、バケット名が
--aws-bucketと一致していること、およびバケットが--aws- リージョンに渡したのと同じ AWS リージョンに存在することを確認する必要があります。 -
AWS がサービスロールエラーでインポートを拒否した場合、仮想マシンをインポートするために必要なサービスロールの 説明に従って、仮想マシンインポート/エクスポートに必要な
vmimportIAM ロールと信頼ポリシーを作成する必要があります。
2.3. イメージを作成して AWS Cloud AMI に自動的にアップロードする リンクのコピーリンクがクリップボードにコピーされました!
RHEL Image Builder を使用して RAW イメージを作成し、AWS にアップロード を選択すると、イメージが Amazon AWS クラウド AMI サービスプロバイダーに自動的にアップロードされます。
前提条件
-
rootまたはwheelグループでシステムにアクセスできる。 - ブラウザーで、RHEL Web コンソールの RHEL Image Builder インターフェイスを開いている。
- RHEL Image Builder のブループリントを作成しました。
- AWS Identity and Access Management (IAM) アカウントマネージャーにアクセスキー ID が設定されている必要があります。
- 書き込み可能な AWS Simple Storage Service (S3) バケットを事前に準備しておく必要があります。
手順
- RHEL Image Builder ダッシュボードの blueprint name でブループリントを選択します。Images タブを選択し、Create Image をクリックします。
Type ドロップダウンメニューのリストから
Amazon Machine Image Disk (.raw)を選択し、Upload to AWS にチェックを入れて Next をクリックします。注記シークレットキーがわからない場合は、新しいアクセスキー IDを生成してください。-
対応するフィールドに
AWS access key IDとAWS secret access keyを入力します。Next をクリックします。 -
イメージ名、Amazon S3 バケット名、AWS リージョンを入力し、[次へ] をクリックします。 - 情報を確認し、Finish をクリックします。Image build complete ステータスになるまで待ちます。
-
AWS コンソールで Service→EC2 に移動し、正しいリージョンを選択して、イメージのステータスが
Availableになっていることを確認します。 - イメージを選択して Launch をクリックし、インスタンスタイプを選択し、Review and Launch をクリックします。
インスタンスの詳細を確認して Launch をクリックし、キーペアを選択または作成します。
- 新しいキーペアを作成するには、Create a new key pair を選択し、名前を入力して Download Key Pair をクリックします。
- Launch Instance をクリックし、インスタンスのステータスが running になるまで待ちます。
Connect をクリックし、SSH を使用してインスタンスにアクセスします。
$ chmod 400 <your_instance_name>.pem$ ssh -i <your-instance_name>.pem \\ ec2-user@<your-instance-IP-address>-
yesと入力して接続を確認します。
-
検証
- SSH を使用してインスタンスに接続した状態で、何らかの操作を実行できるかどうかを確認してください。
第3章 AWS での EC2 インスタンスとしての RHEL イメージのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) で Red Hat Enterprise Linux (RHEL) イメージを使用するには、RHEL イメージを AWS 互換フォーマットである Amazon Machine Image (AMI) に変換します。カスタマイズには、RHEL Image Builder または手動設定を使用してください。AMI から、Elastic Cloud コンピュート (EC2) インスタンスを起動できます。
3.1. パブリッククラウドで利用可能な RHEL イメージタイプ リンクのコピーリンクがクリップボードにコピーされました!
認定クラウドサービスプロバイダー (CCSP) 上に Red Hat Enterprise Linux (RHEL) 仮想マシン (VM) をデプロイするには、いくつかの方法があります。次の表に、使用可能なイメージタイプ、サブスクリプション、留意事項、イメージタイプのサンプルシナリオを示します。
カスタマイズされた ISO イメージをデプロイするには、RHEL Image Builder を使用できます。RHEL Image Builder を使用すると、選択した CCSP に特化したカスタムイメージを作成、アップロード、およびデプロイできます。
| イメージタイプ | サブスクリプション | 留意事項 | サンプルシナリオ |
|---|---|---|---|
| Red Hat ゴールドイメージをデプロイする | 既存の Red Hat サブスクリプションを使用する | サブスクリプションには、Red Hat 製品の費用と Cloud Access イメージのサポートが含まれており、その他のインスタンス費用はすべて CCSP に支払う必要があります。 | CCSP の要件に応じて、Red Hat のゴールドイメージを選択します。 |
| CCSP に移動するカスタムイメージをデプロイする | 既存の Red Hat サブスクリプションを使用する | サブスクリプションには、Red Hat 製品の費用とカスタム RHEL イメージのサポートが含まれており、その他のインスタンス費用はすべて CCSP に支払う必要があります。 | カスタムイメージをアップロードし、サブスクリプションを割り当てます。 |
| 既存の RHEL ベースのカスタムマシンイメージをデプロイする | カスタムマシンイメージには RHEL イメージが含まれる | 従量課金 モデルに基づき、CCSP に時間単位で支払います。このモデルの場合、オンデマンドイメージは CCSP マーケットプレイスで入手できます。CCSP はこれらのイメージに対するサポートを提供し、Red Hat が更新を処理します。CCSP は、Red Hat Update Infrastructure (RHUI) を通じてアップデートを提供します。 | CCSP クラウド管理コンソールでインスタンスを起動するときに RHEL イメージを選択するか、CCSP マーケットプレイスからイメージを選択します。 |
on-demand, license-included EC2 インスタンスを、bring-your-own-license (BYOL) RHEL EC2 インスタンスに変換します。
3.2. カスタムベースイメージを使用して RHEL インスタンスをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
クラウドプラットフォーム上で仮想マシン (仮想マシン) を手動で設定するには、ベース (スターター) イメージを作成し、設定を変更し、パッケージを仮想マシンに追加します。この仮想マシンは、カスタマイズ可能で、柔軟性があり、軽量です。イメージをアップロードした後、これらの特定のアプリケーションの設定を変更できます。
前提条件
- 仮想マシンの作成と設定には、コマンドラインインターフェイス (CLI) または Web コンソールを使用できます。CLI または Web コンソールにアクセスできない場合は、Red Hat Cloud Access ポータルを使用して仮想マシンを作成および設定できます。
- Secure Shell (SSH) - SSH を有効にすると、仮想マシンへのリモートアクセスが可能になります。
- Dynamic Host Configuration Protocol (DHCP) - プライマリー仮想アダプターが DHCP を使用するように設定します。
- ホストマシンで仮想化を有効にしました。
- Web コンソールの場合は、次のオプションを確認する。
- Immediately Start VM オプションにチェックを入れていない。
- Memory サイズを必要な設定に変更した。
- Virtual Network Interface Settings の Model オプションを virtio に変更し、vCPUs を仮想マシンの容量設定に変更した。
手順
Red Hat Enterprise Linux (RHEL) 仮想マシンを設定します。詳細は、関連情報セクションを参照してください。
- CLI からインストールする場合は、仮想マシンの要件に応じて、デフォルトのメモリー、ネットワークインターフェイス、および CPU を設定してください。
- RHEL は Web コンソールからもインストールできます。
インストールが開始されたら、以下を実行します。
-
rootのパスワードを作成します。 - 管理者ユーザーアカウントを作成します。
-
-
インストールが完了してから、仮想マシンを再起動して
rootアカウントにログインします。 -
rootとしてログインすると、イメージを設定できます。 仮想マシンを登録し、RHEL リポジトリーを有効にします。
# subscription-manager registerAMD64 または Intel 64 (x86_64) 仮想マシンの場合は、
nvmeドライバー、xen-netfrontドライバー、およびxen-blkfrontドライバーをインストールします。# dracut -f --add-drivers "nvme xen-netfront xen-blkfront"ARM 64 (aarch64) 仮想マシンの場合は、
nvmeドライバーをインストールします。# dracut -f --add-drivers "nvme"これらのドライバーを含めると、
dracutのタイムアウトが防止されます。ここでは、ドライバーを
/etc/dracut.conf.d/に追加し、dracut -fを入力して既存のinitramfsファイルを上書きできます。cloud-initパッケージをインストールしてください。# dnf install cloud-initcloud-initサービスを有効にして起動します。# systemctl enable --now cloud-init.service- 変更を適用するには、仮想マシンを再起動してください。
検証
仮想マシンが実行されていることを確認します。
# systemctl status cloud-init
3.3. コマンドラインを使用して RHEL イメージを AWS にアップロードする リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) で RHEL インスタンスを実行するには、まず RHEL イメージを AWS にアップロードする必要があります。AWS 上で RHEL EC2 インスタンスを設定および管理するには、awscli2 ユーティリティーを使用します。
3.3.1. AWSCLI2 のインストール リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) のコマンドラインインターフェイスである awscli2 ユーティリティーを使用すると、AWS 上で Red Hat Enterprise Linux (RHEL) イメージおよび Red Hat 高可用性 (HA) クラスターを設定および管理できます。
前提条件
- Red Hat アカウント が作成されている。
- AWS アカウントにサインアップして設定した。
- AWS アクセスキー ID と AWS シークレットアクセスキーにアクセスできる。詳細は、manage access keys を参照してください。
手順
awscli2をインストールします。# dnf install awscli2
検証
インストールを確認します。
$ aws --version aws-cli/1.19.77 Python/3.6.15 Linux/5.14.16-201.fc34.x86_64 botocore/1.20.77AWS の認証情報と設定用に
awscli2を設定します。$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:
3.3.2. イメージを変換して Amazon S3 にプッシュする リンクのコピーリンクがクリップボードにコピーされました!
qemu-img ユーティリティーを使用すると、qcow2 イメージ形式の Red Hat Enterprise Linux (RHEL) イメージを OVA、VHD、VHDX、VMDK、または raw 形式 に変換し、Amazon S3 ストレージにアップロードできます。
前提条件
- Red Hat アカウント が作成されている。
- AWS アカウントにサインアップして設定した。
- awscli2 を使用して Amazon S3 バケット を作成し、RHEL イメージをアップロードする。
手順
qemu-imgを実行して、.qcow2イメージを.rawイメージ形式に変換します。# qemu-img convert -f qcow2 -O raw rhel-10.0-sample.qcow2 rhel-10.0-sample.rawイメージを Amazon S3 バケットにアップロードします。
$ aws s3 cp rhel-10.0-sample.raw s3://<example-s3-bucket-name>
検証
- AWS S3 Console をチェックして、アップロードが成功したことを確認します。
3.3.3. コマンドラインを使用して AWS 上の RHEL 仮想マシンを管理する リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) のコマンドラインインターフェイスである awscli2 ユーティリティーを使用すると、コマンドライン経由で AWS 上の Red Hat Enterprise Linux (RHEL) Elastic Cloud コンピュート (EC2) 仮想マシンを管理できます。RHEL EC2 イメージのスナップショットをインポートし、Amazon Machine Image (AMI) を作成して、RHEL EC2 インスタンスを起動し、接続することができます。
前提条件
- Red Hat アカウントが作成されている。
- AWS アカウントへの登録と設定が完了しました。
-
awscli2パッケージをインストールし、アカウントの AWS 認証情報を設定しました。
手順
vmimportロールを使用する:$ aws iam create-role --role-name vmimport \ --assume-role-policy-document file://<example_vmimport_trust_policy_file>vmimportロールポリシーファイルを使用して、インラインポリシー文書を埋め込む。$ aws iam put-role-policy --role-name vmimport \ --policy-name vmimport-access \ --policy-document file://<example_vmimport_role_policy_file>また、
vmie.amazonaws.comの信頼ポリシーを持つ IAM ロール (通常はvmimportという名前) を作成し、AWS ガイドにある JSON ポリシーを添付することで、仮想マシンのインポート/エクスポート権限を付与することもできます。RHEL イメージをスナップショットとしてインポートする:
$ aws ec2 import-snapshot --disk-container file://<example_containers_json_file>スナップショットのインポートが
完了ステータスで正常に完了したことを確認してください。$ aws ec2 describe-import-snapshot-tasks --import-task-ids <example_import_task_id>Amazon S3 から RHEL 仮想マシンイメージをスナップショットとして Amazon EC2 にインポートできます。S3 バケットとオブジェクトキーを指定する
<example_containers_json_file>ファイルを用意し、インポートを開始して、コマンドが返すタスク ID を監視します。完了したスナップショットから RHEL AMI を登録する:
$ aws ec2 register-image \ --name <example_rhel_custom_ami_name> \ --architecture x86_64 \ --virtualization-type hvm \ --root-device-name /dev/sda1 \ --block-device-mappings "[{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"SnapshotId\": \"<example_snapshot_id>\"}}]" \ --ena-supportRHEL EC2 インスタンス用のキーペアを作成します。
$ aws ec2 create-key-pair --key-name <example_key_pair_name> \ --query 'KeyMaterial' --output text > <example_key_file>.pemこのキーペアはリージョンごとに作成され、
.pemファイルに保存されます。キーファイルへのアクセス権限を制限する:
$ chmod 400 <example_key>.pem登録済みの AMI から RHEL EC2 インスタンスを起動します。
$ aws ec2 run-instances \ --image-id <example_registered_ami_id> \ --instance-type <example_instance_type> \ --key-name <example_key_pair_name>デフォルトユーザーが
ec2-userである RHEL EC2 インスタンスに接続します。$ ssh -i <example_key>.pem ec2-user@<instance_public_dns_or_ip>
検証
スナップショットのインポートが
完了ステータスで正常に完了したことを確認してください。$ aws ec2 describe-import-snapshot-tasks --import-task-ids <example_import_task_id>AMI が
利用可能状態であることを確認してください。$ aws ec2 describe-images --image-ids <example_registered_ami_id>インスタンスが
実行状態であることを確認してください。$ aws ec2 describe-instances --instance-ids <example_instance_id>インスタンスの起動が完了すると、
State.Name の値はrunning になります。SSH 接続が正常に機能することを確認してください。
$ ssh -i <example_key>.pem ec2-user@<instance_public_dns_or_ip> 'echo connected'
3.3.4. Red Hat サブスクリプションの割り当て リンクのコピーリンクがクリップボードにコピーされました!
Red Hat サブスクリプションを RHEL インスタンスに登録して関連付けるには、subscription-manager コマンドを使用できます。
前提条件
- アクティブな Red Hat アカウント がある。
手順
システムを登録します。
# subscription-manager registerサブスクリプションを割り当てます。
- アクティベーションキーを使用して、サブスクリプションを割り当てることができます。詳細は、Red Hat カスタマーポータルのアクティベーションキーの作成を 参照してください。
- それ以外の場合は、サブスクリプションプール ID を使用して 、ホストベースのサブスクリプションをハイパーバイザーに 手動で添付できます。
オプション: Red Hat Hybrid Cloud Console でインスタンスに関するさまざまなシステムメトリクスを収集するには、インスタンスを Red Hat Lightspeed に登録できます。
# insights-client register --display-name <display_name_value>
検証
システムが登録され、正しいサブスクリプションに接続されていることを確認してください。
# subscription-manager list --consumed
3.3.5. AWS ゴールドイメージの自動登録のセットアップ リンクのコピーリンクがクリップボードにコピーされました!
RHEL のゴールドイメージを使用することで、Amazon Web Services (AWS) 上に Red Hat Enterprise Linux (RHEL) 仮想マシン (VM) をより効率的にデプロイできます。これにより、仮想マシンが Red Hat Subscription Manager (RHSM) に自動的に登録されます。
前提条件
- Red Hat アカウント が作成されている。
- AWS アカウントにサインアップして設定した。
AWS 用の最新の RHEL ゴールドイメージをダウンロードしている。詳細は、AWS でのゴールドイメージの使用を 参照してください。
注記AWS アカウントは、一度に 1 つの Red Hat アカウントにしか割り当てできません。そのため、AWS アカウントを Red Hat アカウントに割り当てる前に、他のユーザーが AWS アカウントへのアクセスを必要としていないことを確認してください。
手順
ゴールドイメージを AWS にアップロードします。詳細は、以下のいずれかを参照してください。
- アップロードされたイメージを使用して仮想マシンを作成します。RHSM 設定が正しければ、RHSM に自動的にサブスクライブされます。
検証
上記の手順を使用して作成された RHEL 仮想マシンで、
subscription-manager identityコマンドを実行して、システムが RHSM に登録されていることを確認します。登録に成功したシステムでは、システムの UUID が表示されます。以下に例を示します。# subscription-manager identity system identity: fdc46662-c536-43fb-a18a-bbcb283102b7 name: 192.168.122.222 org name: 6340056 org ID: 6340056
3.4. AWS コンソールを使用して RHEL イメージを AWS にアップロードする リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) で RHEL インスタンスを実行するには、まず RHEL イメージを AWS にアップロードする必要があります。AWS 上の RHEL EC2 インスタンスを設定および管理するには、awscli2 ユーティリティーを使用します。
3.4.1. AWS コンソールを使用してイメージを変換して S3 にプッシュする リンクのコピーリンクがクリップボードにコピーされました!
qemu-img ユーティリティーを使用すると、qcow2 イメージ形式の RHEL イメージを OVA、VHD、VHDX、VMDK、または raw に変換し、AWS コンソールを使用して Amazon S3 ストレージにアップロードできます。
前提条件
- Red Hat アカウント が作成されている。
- AWS アカウントにサインアップして設定した。
- Amazon S3 コンソールを使用して Amazon S3 バケット を作成し、RHEL イメージをアップロードする。
手順
qemu-imgを実行して、.qcow2イメージを.rawイメージ形式に変換します。# qemu-img convert -f qcow2 -O raw rhel-10.0-sample.qcow2 rhel-10.0-sample.raw- Amazon S3 console を使用して S3 バケットにイメージをアップロードする。
検証
- AWS S3 Console をチェックして、アップロードが成功したことを確認します。
3.4.2. AWS コンソールを使用して AWS 上の RHEL 仮想マシンを管理する リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) 上の RHEL Elastic Cloud コンピュート (EC2) 仮想マシン (VM) は、AWS コンソールを使用して管理できます。RHEL EC2 イメージのスナップショット作成、Amazon Machine Image (AMI) の管理、RHEL EC2 インスタンスの起動および接続が可能です。
前提条件
- Red Hat アカウントが作成されている。
- AWS アカウントへの登録と設定が完了しました。
- AWS コンソールを使用して、RHEL イメージを Amazon S3 バケットにプッシュした。
手順
-
AWS マネジメントコンソールを開きます。
IAMを検索し、IAM を開き、[ロール] を選択して、[vmimportの ロールを作成] を選択します。 信頼されたエンティティーの種類 フィールドで、カスタム信頼ポリシー を選択します。仮想マシンインポート/エクスポートのドキュメントから
vmie.amazonaws.com の信頼ポリシーを貼り付け、[次へ] を選択します。アクセス許可を追加します。次にインライン仮想マシンインポート/エクスポートポリシーを追加する場合は、管理ポリシーをスキップします。そうでない場合は、必要なポリシーを添付してから 次へ をクリックします。
ロール名
vmimport、ロールを作成します。権限を追加する場合は、ロールを開いてください。権限 タブを選択し、権限の追加 を選択し、インラインポリシーの作成 を選択してから、JSON タブを選択します。
vmimportアクセスポリシーに S3 バケット ARN を貼り付けて、[ポリシーの作成] を 選択します。ツールバーまたはグローバル検索から CloudShell を 開きます。
CloudShell ペインで、リージョン セレクターを S3 オブジェクトと同じリージョンに設定します。
CloudShell (コンソールの 検索 フィールドではなく、シェルが
awsコマンドを受け付ける場所) で、ディスクコンテナーファイルとともにaws ec2 import-snapshotと入力し、インポートステータスが完了するまでaws ec2 describe-import-snapshot-tasks と入力します。Amazon EC2 コンソールで、Elastic Block Store を 開き、スナップショット を選択して、スナップショット ID を確認します。
スナップショット でスナップショットを選択し、アクション を開いて スナップショットからイメージを作成 を選択し、ウィザードを完了します。
- イメージ を開き、AMI を選択し、AMI を選択して、AMI からインスタンスを起動 を選択し、ウィザードを完了します。
キーペアが必要な場合は、[ネットワークとセキュリティー]、[キーペア]、[キーペアの作成] の順に選択し、
[.pem]を選択します。<example_key> .pem ファイルを制限付きファイル権限で保存します。- インスタンス を選択し、インスタンスを選択して 接続 を選択し、EC2 インスタンス接続 または SSH クライアント を開きます。
- インスタンス上で、Red Hat のサブスクリプションを登録します。
検証
スナップショットのインポートが
完了ステータスで正常に完了したことを確認してください。$ aws ec2 describe-import-snapshot-tasks --import-task-ids <example_import_task_id>AMI が
利用可能状態であることを確認してください。$ aws ec2 describe-images --image-ids <example_registered_ami_id>インスタンスが
実行状態であることを確認してください。$ aws ec2 describe-instances --instance-ids <example_instance_id>インスタンスの起動が完了すると、
State.Name の値はrunning になります。SSH 接続が正常に機能することを確認してください。
$ ssh -i <example_key>.pem ec2-user@<instance_public_dns_or_ip> 'echo connected'
第4章 AWS での Red Hat High Availability クラスターの設定 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) 上で Red Hat Enterprise Linux (RHEL) ノードをグループ化し、ノード障害発生時にワークロードを自動的に再分散するには、AWS 上に高可用性 (HA) クラスターを設定します。AWS 上で HA クラスターをセットアップするプロセスは、従来のクラウド以外の HA 設定とほぼ同じです。
4.1. パブリッククラウドプラットフォームで高可用性クラスターを使用する利点 リンクのコピーリンクがクリップボードにコピーされました!
高可用性 (HA) クラスターは、複数のコンピューター (ノード) を使用して、冗長性を確保しながらワークロードを実行します。ノードに障害が発生した場合、Pacemaker のリソースマネージャーはワークロードを自動的に正常なノードに移行し、ダウンタイムを最小限に抑え、手動による介入なしにサービスを利用可能に保ちます。
HA クラスターはパブリッククラウドプラットフォームで実行することもできます。この場合、クラウド内の仮想マシン (VM) インスタンスを個々のクラスターノードとして使用します。パブリッククラウドプラットフォーム上で HA クラスターを使用することには、以下の利点があります。
- 可用性の向上: VM に障害が発生した場合、ワークロードがすぐに他のノードに再分散されるため、実行中のサービスが中断されません。
- スケーラビリティー: 需要が高いときに追加のノードを起動し、需要が低いときにノードを停止することができます。
- 費用対効果: 従量課金制の料金設定では、実行中のノードに対して料金を支払うだけで済みます。
- 管理の単純化: 一部のパブリッククラウドプラットフォームでは、HA クラスターの設定を容易にする管理インターフェイスが提供されています。
RHEL システムで HA を有効にするために、Red Hat は HA アドオンを提供しています。Red Hat HA アドオンを使用して RHEL クラスターを設定し、RHEL サーバーのグループが含まれる HA クラスターを管理できます。Red Hat HA アドオンを使用すると、統合された効率的なツール群を利用できます。クラスターリソースマネージャー、フェンシングエージェント、リソースエージェントを使用すると、自動化のためにクラスターをセットアップおよび設定できます。Red Hat HA アドオンは、自動化のために次のコンポーネントを提供します。
-
Pacemaker は、多数のノードをサポートするために、コマンドラインユーティリティー (pcs) と GUI(pcsd) の両方を提供するクラスターリソースマネージャーです。 -
CorosyncとKronosnet を使用して、HA クラスターを作成および管理します。 - カスタムアプリケーションの設定と管理を行うためのリソースエージェント。
- フェンシングエージェントは、ベアメタルサーバーや仮想マシンなどのプラットフォーム上でクラスターを使用します。
Red Hat HA アドオンは、重要なタスクを処理します。
- ノード障害。
- 負荷分散
- ノードの状態チェックを行い、耐障害性とシステム信頼性を確保します。
始める前に、次の手順を必ず完了してください。
- Red Hat アカウントが作成されている。
- クラウドサービスプロバイダーのアカウントに登録し、設定が完了しました。
-
Red Hat Enterprise Linux 10 Server:
rhel-10-server-rpms/10/x86_64 -
Red Hat Enterprise Linux 10 Server (高可用性):
rhel-10-server-ha-rpms/10/x86_64 - プロジェクトに、個々のユーザーではなく、仮想マシンインスタンスに属するサービスアカウントがある。
- 別のサービスアカウントを作成する代わりに、デフォルトのサービスアカウントを使用できます。
自分またはプロジェクト管理者がカスタムサービスアカウントを作成する場合は、サービスアカウントに次のロールを設定してください。
- Cloud Trace Agent
- Compute Admin
- Compute Network Admin
- Cloud Datastore User
- Logging Admin
- Monitoring Editor
- Monitoring Metric Writer
- Service Account Administrator
- ストレージ管理者
4.2. 高可用性パッケージおよびエージェントのインストール リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) 上に Red Hat High Availability クラスターを設定するには、クラスター内の各ノードに High Availability パッケージとエージェントをインストールします。
前提条件
- Red Hat アカウント が作成されている。
- AWS アカウントにサインアップして設定した。
- コマンドラインを使用して RHEL イメージを AWS にアップロードする 設定がされている。
手順
AWS Red Hat Update Infrastructure (RHUI) クライアントを削除します。
# dnf -y remove rh-amazon-rhui-client仮想マシンを Red Hat に登録します。
# subscription-manager registerすべてのリポジトリーを無効にします。
# subscription-manager repos --disable=Red Hat Enterprise Linux (RHEL) 10 Server HA リポジトリーを有効にします。
# subscription-manager repos --enable=rhel-10-for-x86_64-highavailability-rpmsRHEL AWS インスタンスを更新します。
# dnf update -yHigh Availability チャネルから、Red Hat High Availability Add-On ソフトウェアパッケージと AWS フェンスエージェントをインストールします。
# dnf install pcs pacemaker fence-agents-aws前のステップで
pcsおよびpacemakerをインストールした際に、ユーザーhaclusterが作成されます。すべてのクラスターノードにhaclusterのパスワードを作成します。すべてのノードに同じパスワードを使用します。# passwd haclusterfirewalld.serviceがインストールされている場合は、RHEL ファイアウォールにhigh availabilityサービスを追加します。# firewall-cmd --permanent --add-service=high-availability# firewall-cmd --reloadpcsサービスを開始し、起動時に自動的に開始されるように設定してください。# systemctl enable --now pcsd.service-
/etc/hostsファイルを編集し、RHEL のホスト名と内部 IP アドレスを追加してください。詳細は、RHEL クラスターノードに /etc/hosts ファイルを設定する を参照してください。
検証
pcsサービスが実行していることを確認します。# systemctl status pcsd.servicepcsd.service - PCS GUI and remote configuration interface Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2018-03-01 14:53:28 UTC; 28min ago Docs: man:pcsd(8) man:pcs(8) Main PID: 5437 (pcsd) CGroup: /system.slice/pcsd.service └─5437 /usr/bin/ruby /usr/lib/pcsd/pcsd > /dev/null & Mar 01 14:53:27 ip-10-0-0-48.ec2.internal systemd[1]: Starting PCS GUI and remote configuration interface… Mar 01 14:53:28 ip-10-0-0-48.ec2.internal systemd[1]: Started PCS GUI and remote configuration interface.
4.3. 高可用性クラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat High Availability Add-On クラスターを作成できます。この例では、z1.example.com ノードと z2.example.com ノードを使用します。
前提条件
Red Hat アカウント が作成されました。
注記pcsコマンドのパラメーターとそれらのパラメーターの説明を表示するには、pcsコマンドの-hオプションを使用します。
手順
pcsを実行するノードでクラスター内の各ノードのpcsユーザーhaclusterを認証します。[root@z1 ~]# pcs host auth z1.example.com z2.example.comUsername: hacluster Password: z1.example.com: Authorized z2.example.com: Authorizedこのコマンドは、
z1.example.comとz2.example.comで設定される 2 ノードクラスターの両方のノードに対して、z1.example.com上でユーザーhacluster を認証します。z1.example.comノードから以下のコマンドを実行して、z1.example.comとz2.example.comの 2 つのノードからなるクラスターmy_clusterを作成します。[root@z1 ~]# pcs cluster setup my_cluster --start z1.example.com z2.example.comこれにより、クラスター設定ファイルが、クラスターの両ノードに伝搬されます。このコマンドには
--startオプションが含まれます。このオプションを使用すると、クラスターの両ノードでクラスターサービスが起動します。ノード起動時に、クラスター内の各ノードでクラスターサービスが実行されるように設定してください。
注記特定の環境要件がある場合は、クラスターサービスを無効のままにすることで、この手順を省略できます。有効の場合にノードがダウンすると、ノードがクラスターに再参加する前に、クラスターまたはリソースに関する問題は解決されます。クラスターサービスを無効にしたままにする場合は、ノードを再起動する際に、そのノードで
pcs cluster startコマンドを実行して、サービスを手動で起動してください。[root@z1 ~]# pcs cluster enable --all
検証
作成したクラスターの状態を表示します。
[root@z1 ~]# pcs cluster statusCluster Status: Stack: corosync Current DC: z2.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum Last updated: Thu Oct 11 16:11:18 2018 Last change: Thu Oct 11 16:11:00 2018 by hacluster via crmd on z2.example.com 2 Nodes configured 0 Resources configured ...pcs cluster setupコマンドの--startオプションを使用してクラスターサービスを開始した場合、クラスターが起動して動作するまでに若干の遅延が発生する可能性があります。以降の操作を実行する前に、クラスターが起動して正常に動作していることを確認してください。
4.4. Red Hat High Availability クラスターでのフェンシングの設定 リンクのコピーリンクがクリップボードにコピーされました!
ノードが応答しなくなった場合、クラスターはデータ破損を防ぐためにそのノードを分離する必要があります。ノードに直接接続できないため、フェンシングを設定してください。外部フェンスデバイスは、ノードの共有リソースへのアクセスを遮断するか、ハードリブートを実行します。
フェンスデバイスがない場合、切断されたノードがリソースを解放したかどうかを知ることはできません。これにより、他のノード上でサービスが実行されなくなる可能性があります。逆に、システムがリソースが解放されたと誤って判断し、データ破損につながる可能性もあります。その結果、データの整合性は保証されず、クラスター設定はサポート対象外となります。
フェンス設置作業中は、他のクラスター操作の実行は許可されません。クラスターノードの再起動後にフェンシングが完了するか、クラスターノードがクラスターに再度参加するまで、クラスターの通常の動作を再開することができません。
4.4.1. 使用可能なフェンスエージェントと、そのオプションの表示 リンクのコピーリンクがクリップボードにコピーされました!
使用できるフェンシングエージェントと、特定のフェンシングエージェントで使用できるオプションを確認できます。
システムのハードウェアによって、クラスターに使用するフェンシングデバイスのタイプが決まります。サポートされているプラットフォームとアーキテクチャー、およびさまざまなフェンシングデバイスの詳細は、Red Hat ナレッジベースのアーティクル記事 Support Policies for RHEL High Availability Clusters の Cluster Platforms and Architectures のセクションを参照してください。
使用可能なすべてのフェンスエージェントのリストを表示するには、次のコマンドを実行します。フィルターを指定すると、フィルターに一致するフェンスエージェントのみが表示されます。
# pcs stonith list [filter]
指定したフェンスエージェントのオプションを表示するには、次のコマンドを実行します。
# pcs stonith describe [stonith_agent]
たとえば、次のコマンドでは Telnet または SSH 経由の APC 用フェンスエージェントのオプションを表示します。
# pcs stonith describe fence_apc
Stonith options for: fence_apc
ipaddr (required): IP Address or Hostname
login (required): Login Name
passwd: Login password or passphrase
passwd_script: Script to retrieve password
cmd_prompt: Force command prompt
secure: SSH connection
port (required): Physical plug number or name of virtual machine
identity_file: Identity file for ssh
switch: Physical switch number on device
inet4_only: Forces agent to use IPv4 addresses only
inet6_only: Forces agent to use IPv6 addresses only
ipport: TCP port to use for connection with device
action (required): Fencing Action
verbose: Verbose mode
debug: Write debug information to given file
version: Display version information and exit
help: Display help and exit
separator: Separator for CSV created by operation list
power_timeout: Test X seconds for status change after ON/OFF
shell_timeout: Wait X seconds for cmd prompt after issuing command
login_timeout: Wait X seconds for cmd prompt after login
power_wait: Wait X seconds after issuing ON/OFF
delay: Wait X seconds before fencing is started
retry_on: Count of attempts to retry power on
method オプションを提供するフェンスエージェントでは、fence_sbd エージェントを除き、cycle の値はサポートされていません。データが破損する可能性があるため、この値は指定しないでください。ただし、fence_sbd の場合でもメソッドは指定せず、デフォルト値を使用する必要があります。
4.4.2. フェンスデバイスの作成 リンクのコピーリンクがクリップボードにコピーされました!
pcs stonith create コマンドを使用してフェンスデバイスを作成します。使用可能なすべての作成オプションを表示するには、pcs stonith -h コマンドを使用します。
手順
フェンスデバイスを作成します。
# pcs stonith create stonith_id stonith_device_type [stonith_device_options] [op operation_action operation_options]以下のコマンドは、1 つのノードに対して、1 つのフェンシングデバイスを作成します。
# pcs stonith create MyStonith fence_virt pcmk_host_list=f1 op monitor interval=30s1 つのノードのみをフェンスできるフェンスデバイスや、複数のノードをフェンスできるデバイスもあります。フェンシングデバイスの作成時に指定するパラメーターは、フェンシングデバイスが対応しているか、必要としているかにより異なります。
- 一部のフェンス装置は、どのノードをフェンスするかを自動的に判断できます。
-
フェンシングデバイスの作成時に
pcmk_host_listパラメーターを使用すると、フェンシングデバイスで制御されるすべてのマシンを指定できます。 -
フェンスデバイスによっては、フェンスデバイスが理解する仕様へのホスト名のマッピングが必要となるものがあります。フェンシングデバイスの作成時に、
pcmk_host_mapパラメーターを使用して、ホスト名をマッピングできます。
4.4.3. フェンシングデバイスの一般的なプロパティー リンクのコピーリンクがクリップボードにコピーされました!
デバイス固有のオプションとクラスター全体のプロパティーを使用して、フェンシング動作を設定します。デバイスオプションでは、IP アドレスなどのエージェント設定や、遅延などのメタデータを定義します。クラスタープロパティーは、タイムアウトや stonith-enabled パラメーターなどのグローバルロジックを管理します。
クラスターノードは、フェンスリソースが開始しているかどうかに関わらず、フェンスデバイスでその他のクラスターノードをフェンスできます。以下の例外を除き、リソースが開始しているかどうかは、デバイスの定期的なモニターのみを制御するものとなり、使用可能かどうかは制御しません。
-
フェンシングデバイスは、
pcs stonith disable stonith_idコマンドを実行して無効にできます。これにより、ノードがそのデバイスを使用できないように設定できます。 -
特定のノードがフェンシングデバイスを使用できないようにするには、
pcs constraint location … avoidsコマンドで、フェンシングリソースの場所制約を設定できます。 -
stonith-enabled=falseを設定すると、フェンシングがすべて無効になります。ただし、実稼働環境でフェンシングを無効にすることは適していないため、フェンシングが無効になっている場合は、Red Hat ではクラスターがサポートされないことに注意してください。
以下の表は、フェンシングデバイスに設定できる一般的なプロパティーを説明します。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
|
| 文字列 |
ホスト名を、ホスト名に対応していないデバイスのポート番号へマッピングします。たとえば、 | |
|
| 文字列 |
このデバイスで制御するマシンのリストです ( | |
|
| 文字列 |
|
デバイスで制御するマシンを指定します。使用できる値は、 |
以下の表では、フェンシングデバイスに設定できるその他のプロパティーをまとめています。これらのオプションは高度な設定を行う場合にのみ使用されます。
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
|
| 文字列 | port |
port の代替パラメーターです。デバイスによっては、標準の port パラメーターに対応していない場合や、そのデバイス固有のパラメーターも提供している場合があります。このパラメーターを使用して、デバイス固有の代替パラメーターを指定します。これは、フェンシングするマシンを示します。クラスターが追加パラメーターを提供しないようにする場合は、 |
|
| 文字列 | reboot |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 |
タイムアウト期間内に、 |
|
| 文字列 | off |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 | タイムアウト期間内に、off コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker によるオフ動作の再試行回数を変更する場合に使用します。 |
|
| 文字列 | list |
|
|
| 時間 | 60s | list 操作にタイムアウトを指定します。デバイスによって、この操作が完了するのにかかる時間が、通常と大きく異なる場合があります。このパラメーターを使用して、list 操作にデバイス固有のタイムアウトを指定します。 |
|
| 整数 | 2 |
タイムアウト期間内に、 |
|
| 文字列 | monitor |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 |
タイムアウト期間内に、 |
|
| 文字列 | status |
|
|
| 時間 | 60s |
|
|
| 整数 | 2 | タイムアウト期間内に、status コマンドを再試行する回数の上限です。複数の接続に対応していないデバイスもあります。デバイスが別のタスクでビジー状態になると操作が失敗する場合があるため、タイムアウトに達していなければ、Pacemaker が操作を自動的に再試行します。Pacemaker による status 動作の再試行回数を変更する場合に使用します。 |
|
| 文字列 | 0s |
フェンシング操作のベース遅延を有効にし、ベース遅延の値を指定します。 |
|
| 時間 | 0s |
フェンシング操作のランダム遅延を有効にし、ベース遅延とランダム遅延を組み合わせた最大値である最大遅延を指定します。たとえば、ベース遅延が 3 で、 |
|
| 整数 | 1 |
このデバイスで並行して実行できる操作の上限です。最初に、クラスタープロパティーの |
|
| 文字列 | on |
高度な使用のみ - |
|
| 時間 | 60s |
高度な使用のみ - |
|
| 整数 | 2 |
高度な使用のみ - タイムアウト期間内に、 |
個々のフェンスデバイスに設定できるプロパティーのほかにも、以下の表で説明しているように、フェンス動作を判断するクラスタープロパティーも設定できます。
| オプション | デフォルト | 説明 |
|---|---|---|
|
| true |
障害が発生したノードと、停止できないリソースが含まれるノードをフェンスする必要があることを示します。データを保護するには、
Red Hat は、この値が |
|
| reboot |
フェンシングデバイスに送信するアクション。使用できる値は |
|
| 60s | STONITH アクションが完了するのを待つ時間。 |
|
| 10 | クラスターがすぐに再起動できなくなるまで、ターゲットでフェンシングが失敗する回数。 |
|
| ノードがハードウェアウォッチドッグによって強制終了するまで待機する最大時間。この値は、ハードウェアウォッチドッグのタイムアウト値の 2 倍に設定することが推奨されます。このオプションは、ウォッチドッグのみの SBD 設定がフェンシングに使用される場合にのみ必要です。 | |
|
| true | フェンシング操作を並行して実行できるようにします。 |
|
| stop |
独自のフェンシングの通知を受信した場合は、クラスターノードがどのように反応するかを決定します。クラスターノードは、フェンシングの設定が間違っている場合に独自のフェンシングの通知を受信するか、ファブリックフェンシングがクラスター通信を遮断しない状態である可能性があります。許可される値は、Pacemaker をすぐに停止し、停止したままにする
このプロパティーのデフォルト値は |
|
| 0 (無効) | フェンシング遅延を設定すると、スプリットブレインが発生した場合に、リソースの実行数が最も少ない、または実行中のリソースの重要性が最も低いノードがフェンスされるように、2 ノードクラスターを設定できます。フェンシング遅延パラメーターとその相互作用に関する一般的な情報は、フェンシング遅延 を参照してください。 |
クラスタープロパティーの設定方法については、*リンク: クラスタープロパティーの設定を 参照してください。
4.4.4. フェンシング遅延 リンクのコピーリンクがクリップボードにコピーされました!
2 ノードクラスターでは、通信障害が同時に発生すると、ノード同士が互いにフェンシングし、クラスター全体が停止する可能性があります。この競合状態を防ぐために、フェンシング遅延を設定します。大規模なクラスターでは、クォーラムによってフェンシングの権限が決定されるため、遅延は必要ありません。
システム要件に応じて、さまざまなタイプのフェンシング遅延を設定できます。
静的フェンシング遅延
静的フェンシング遅延は、事前に定義された固定の遅延です。1 つのノードに静的遅延を設定すると、そのノードがフェンシングされる可能性が高くなります。これは、通信の切断を検出した後、他のノードが先にフェンシングを開始する可能性が高まるためです。active/passive クラスターでは、passive ノードに遅延を設定すると、通信が切断されたときに passive ノードがフェンスされる可能性が高くなります。静的遅延を設定するには、
pcmk_delay_baseインスタンス属性を使用します。異なる遅延時間を設定するには、各ノードごとに個別のフェンスデバイスでこの属性を設定してください。すべてのノードに単一のフェンスデバイスを使用する場合は、この属性をホストマップに設定できます。たとえば、node1:0s;node2:5s のように設定します。動的フェンシング遅延
動的フェンシング遅延はランダムです。この遅延は変化する可能性があり、フェンシングが必要なタイミングで決定されます。
pcmk_delay_maxインスタンス属性を使用して、ランダム遅延を設定し、基本遅延とランダム遅延を合わせた最大値を指定します。各ノードのフェンシング遅延がランダムの場合、どのノードがフェンスされるかもランダムです。クラスターがアクティブ/アクティブ設定で、すべてのノードに対して単一のフェンスデバイスを使用している場合、この機能が役立つ可能性があります。優先フェンシング遅延
優先フェンシング遅延は、アクティブなリソースの優先度に基づきます。すべてのリソースの優先度が同じ場合、実行中のリソースが最も少ないノードがフェンスされます。ほとんどの場合、遅延関連のパラメーターは 1 つしか使用しませんが、複数のパラメーターを組み合わせることも可能です。遅延関連のパラメーターを組み合わせると、リソースの優先度の値が加算されて、総遅延となります。優先フェンシング遅延は、
priority-fencing-delayクラスタープロパティーを使用して設定します。この機能を使用すると、ノード間の通信が失われたときに、実行中のリソースが最も少ないノードがフェンスされる可能性が高くなるため、active/active クラスター設計で役立つ場合があります。
pcmk_delay_base インスタンス属性
pcmk_delay_base インスタンス属性は、フェンシングの基本遅延値を指定します。
pcmk_delay_base インスタンス属性に加えて pcmk_delay_max インスタンス属性を設定すると、全体の遅延はランダムな遅延値とこの静的な遅延を組み合わせたものとなり、合計値は最大遅延値以下に抑えられます。pcmk_delay_base を設定しても pcmk_delay_max を設定しない場合は、遅延にランダムな要素はなく、遅延は pcmk_delay_base の値になります。
pcmk_delay_base インスタンス属性を使用すると、ノードごとに異なる値を指定できます。これにより、ノードごとに異なる遅延を使用して、単一のフェンスデバイスを 2 ノードクラスターで使用できます。別個の遅延を使用するために 2 つの別個のデバイスを設定する必要はありません。ノードごとに異なる値を指定するには、pcmk_host_map と同様の構文を使用して、ホスト名をそのノードの遅延値にマップします。たとえば、node1:0;node2:10s は、node1 をフェンシングするときに遅延を使用せず、node2 をフェンシングするときに 10 秒の遅延を使用します。
pcmk_delay_maxインスタンス属性pcmk_delay_baseインスタンス属性を使用して、フェンシングアクションの基本遅延と最大遅延 (基本遅延とランダム遅延を組み合わせた最大値) を指定します。たとえば、ベース遅延が 3 で、pcmk_delay_maxが 10 の場合、ランダム遅延は 3 - 10 になります。pcmk_delay_maxインスタンス属性に加えてpcmk_delay_baseインスタンス属性を設定すると、全体の遅延は、この静的遅延にランダムな遅延値が加算されて算出され、合計値が最大遅延を下回るように調整されます。pcmk_delay_maxを設定し、pcmk_delay_baseを設定しない場合は、遅延に静的なコンポーネントは含まれません。
priority-fencing-delay クラスタープロパティー
priority-fencing-delay クラスタープロパティーを設定すると、スプリットブレインが発生した場合に、リソースの実行数が最も少ない、または実行中のリソースの重要性が最も低いノードがフェンスされるように、2 ノードクラスターを設定できます。
priority-fencing-delay プロパティーは期間に設定できます。このプロパティーのデフォルト値は 0 (無効) です。このプロパティーがゼロ以外の値に設定されている場合や、priority メタ属性が 1 つ以上のリソースに対して設定されている場合は、スプリットブレインが発生すると、実行中の全リソースの合計優先度が最も高いノードが稼働状態を維持する可能性が高くなります。たとえば、pcs resource defaults update priority=1 と pcs property set priority-fencing-delay=15s を設定し、他の優先度が設定されていない場合には、最も多くのリソースを実行するノード以外はフェンシングを開始するまで 15 秒間待機するため、最も多くのリソースを実行するノードが稼働状態を維持する可能性が高くなります。特定のリソースが他のリソースよりも重要である場合は、優先度を高く設定できます。
昇格可能なクローンに優先度が設定されている場合、そのクローンのプロモートロールを実行しているノードの優先度が 1 ポイント追加されます。
フェンシング遅延の相互作用
複数のタイプのフェンシング遅延を設定すると、以下のようになります。
-
priority- フェンシング -delayプロパティーで設定された遅延は、pcmk_delay_baseおよびpcmk_delay_maxインスタンス属性からの遅延に加算されます。この動作により、両方のノードの優先度が同等の場合、またはノードの損失以外の理由で両方のノードをフェンシングする必要がある場合 (たとえば、on-fail=fencingがリソースモニター操作用に設定されている場合)、ある程度の遅延を許容します。これらの遅延を組み合わせて設定する場合は、優先ノードが優先されるよう、priority-fencing-delayプロパティーを、pcmk_delay_baseおよびpcmk_delay_maxの最大遅延よりもはるかに大きい値に設定します。このプロパティーを 2 倍の値に設定すると、常に安全です。 -
Pacemaker 自体がスケジュールしたフェンシングしか、フェンシング遅延を監視しません。
dlm_controldなどの外部コードでスケジュールされるフェンシングや、pcs stonith fenceコマンドで実装されるフェンシングは、フェンスデバイスに必要な情報を提供しません。 -
一部のフェンスエージェントは、エージェントによって名前が決定される遅延パラメーターを実装しています。この遅延は、
pcmk_delay_*インスタンス属性で設定された遅延とは独立しています。両方の遅延が設定されている場合は、その両方が一緒に追加され、通常は併用されません。
4.4.5. フェンスデバイスのテスト リンクのコピーリンクがクリップボードにコピーされました!
データ破損を防ぎ、ノード障害からクラスターを正常に復旧させるには、フェンスデバイスを検証してください。完全なテストストラテジーを実行するには、ネットワーク接続を確認し、フェンスエージェントスクリプトを実行し、クラスターマネージャーを介してフェンスアクションをトリガーし、物理ノードの障害をシミュレートします。
前提条件
- フェンシングの設定により、Pacemaker クラスターノードまたは Pacemaker リモートノードが、正常なシャットダウンではなく強制終了されるようになっています。
-
/etc/systemd/logind.confファイルで ACPI ソフトオフを無効にしているため、正常なシャットダウンの場合、電源ボタンが押された信号は無視されます。
手順
デバイスへの接続に使用する SSH、Telnet、HTTP などのリモートプロトコルを使用して、手動でログインしてフェンスデバイスをテストしたり、出力される内容を確認します。たとえば、IPMI 対応デバイスのフェンシングを設定する場合は、
ipmitoolを使用してリモートでのログインを試行します。手動でログインする際に使用するオプションに注意してください。これらのオプションは、フェンスエージェントを使用する際に必要になる場合があります。フェンシングデバイスにログインできない場合は、そのデバイスが ping 可能であること、ファイアウォール設定がフェンシングデバイスへのアクセスを妨げていないこと、フェンシングデバイスでリモートアクセスが有効になっていること、認証情報が正しいことなどを確認します。
フェンスエージェントスクリプトを使用して、フェンスエージェントを手動で実行します。フェンスエージェントを実行するのに、クラスターサービスが実行している必要はないため、デバイスをクラスターに設定する前にこのステップを完了できます。これにより、先に進む前に、フェンスデバイスが適切に応答することを確認できます。
注記これらの例では、iLO デバイスの
fence_ipmilanフェンスエージェントスクリプトを使用します。実際に使用するフェンスエージェントと、そのエージェントを呼び出すコマンドは、お使いのサーバーハードウェアによって異なります。指定するオプションを確認するには、フェンスエージェントの man ページを参照してください。通常は、フェンスデバイスのログイン、パスワードなどの情報と、その他のフェンスデバイスに関する情報を把握しておく必要があります。以下の例は、
-o statusパラメーターを指定してfence_ipmilanフェンスエージェントスクリプトを実行する場合に使用する形式を示しています。このコマンドを実行すると、フェンシングは実行せずに、別のノードのフェンスデバイスインターフェイスのステータスを確認します。ノードの再起動を試行する前にデバイスをテストして、動作させることができます。このコマンドを実行する際に、iLO デバイスの電源をオン/オフにするパーミッションを持つ iLO ユーザーの名前およびパスワードを指定します。# fence_ipmilan -a ipaddress -l username -p password -o status以下の例は、
-o rebootパラメーターを指定してfence_ipmilanフェンスエージェントスクリプトを実行するために使用する形式を示しています。このコマンドを 1 つのノードで実行すると、この iLO デバイスで管理するノードが再起動します。# fence_ipmilan -a ipaddress -l username -p password -o rebootフェンスエージェントがステータス、オフ、オン、または再起動の動作を適切に実行しない場合は、ハードウェア、フェンスデバイスの設定、およびコマンドの構文を確認する必要があります。さらに、デバッグ出力を有効にした状態で、フェンスエージェントスクリプトを実行できます。デバッグ出力は、一部のフェンスエージェントで、フェンスデバイスにログインする際に、フェンスエージェントスクリプトに問題が発生しているイベントシーケンスの場所を確認するのに役に立ちます。
# fence_ipmilan -a ipaddress -l username -p password -o status -D /tmp/$(hostname)-fence_agent.debug発生した障害を診断する際に、フェンスデバイスに手動でログインする際に指定したオプションが、フェンスエージェントスクリプトでフェンスエージェントに渡した内容と同一であることを確認する必要があります。
フェンスエージェントが、暗号化した接続に対応する場合は、証明書の検証で障害が生じているためにエラーが出力される場合があり、ホストを信頼することや、フェンスエージェントの
ssl-insecureパラメーターを使用することが求められます。同様に、ターゲットデバイスで SSL/TLS を無効にした場合は、フェンスエージェントに SSL パラメーターを設定する際に、これを考慮しないといけない場合があります。注記テスト対象のフェンスエージェントが
fence_dracまたはfence_iloの場合、もしくはその他の、継続して失敗しているシステム管理デバイスのフェンシングエージェントの場合は、フォールバックしてfence_ipmilanを試行します。大半のシステム管理カードは IPMI リモートログインに対応しており、フェンスエージェントとしてはfence_ipmilanだけに対応しています。フェンスデバイスを、手動で機能したオプションと同じオプションでクラスターに設定し、クラスターを起動したら、以下の例にあるように、任意のノードから
pcs stonith fenceコマンドを実行してフェンシングをテストします (または複数のノードから複数回実行します)。pcs stonith fenceコマンドは、CIB からクラスター設定を読み取り、設定済みのフェンスエージェントを呼び出してフェンスアクションを開始します。これにより、クラスター設定が正確であることが確認できます。# pcs stonith fence node_namepcs stonith fenceコマンドが正常に動作する場合は、フェンスイベントが発生したときにクラスターのフェンシング設定が機能することを意味します。このコマンドが失敗すると、クラスター管理が取得した設定でフェンスデバイスを起動することができません。以下の問題を確認し、必要に応じてクラスター設定を更新します。- フェンス設定を確認します。たとえば、ホストマップを使用したことがある場合は、指定したホスト名を使用して、システムがノードを見つけられるようにする必要があります。
- デバイスのパスワードおよびユーザー名に、bash シェルが誤って解釈する可能性がある特殊文字が含まれるかどうかを確認します。パスワードとユーザー名を引用符で囲んで入力すると、この問題に対処できます。
-
pcs stonithコマンドで指定したものとまったく同じ IP アドレスまたはホスト名を使用してデバイスに接続できるか確認します。たとえば、stonith コマンドでホスト名を指定し、IP アドレスを使用して行ったテストは有効ではありません。 フェンスデバイスが使用するプロトコルにアクセスできる場合は、そのプロトコルを使用してデバイスへの接続を試行します。たとえば、多くのエージェントが ssh または telnet を使用します。デバイスへの接続は、デバイスの設定時に指定した認証情報を使用して試行する必要があります。これにより、有効なプロンプトを取得し、そのデバイスにログインできるかどうかを確認できます。
すべてのパラメーターが適切であることが確認できたものの、フェンスデバイスには接続できない時に、フェンスデバイスでログ機能が使用できる場合は、ログを確認できます。これにより、ユーザーが接続したかどうかと、ユーザーが実行したコマンドが表示されます。
/var/log/messagesファイルで stonith やエラーを確認すれば、発生している問題のヒントが得られる可能性もあります。また、エージェントによっては、より詳細な情報が得られる場合があります。
フェンスデバイステストに成功し、クラスターが稼働したら、実際の障害をテストします。このテストでは、クラスターで、トークンの損失を生じさせる動作を実行します。
ネットワークを停止します。ネットワークの利用方法は、設定により異なります。ただし、多くの場合は、ネットワークケーブルまたは電源ケーブルをホストから物理的に抜くことができます。ネットワーク障害のシミュレーションの詳細は、Red Hat ナレッジベースソリューション What is the proper way to simulate a network failure on a RHEL Cluster? を参照してください。
注記ネットワークや電源ケーブルを物理的に切断せずに、ローカルホストのネットワークインターフェイスを無効にすることは、フェンシングのテストとしては推奨されません。実際に発生する障害を正確にシミュレートしていないためです。
ローカルのファイアウォールを使用して、corosync の受信トラフィックおよび送信トラフィックをブロックします。
以下の例では corosync をブロックします。ここでは、デフォルトの corosync ポートと、ローカルのファイアウォールとして
firewalldが使用されていることと、corosync が使用するネットワークインターフェイスがデフォルトのファイアウォールゾーンにあることが前提となっています。# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 2 -p udp --dport=5405 -j DROP # firewall-cmd --add-rich-rule='rule family="ipv4" port port="5405" protocol="udp" drop'sysrq-triggerでクラッシュをシミュレートし、マシンをクラッシュします。ただし、カーネルパニックを発生させると、データが損失する可能性があることに注意してください。クラッシュする前に、クラスターリソースを無効にすることが推奨されます。# echo c > /proc/sysrq-trigger
4.4.6. フェンスレベルの設定 リンクのコピーリンクがクリップボードにコピーされました!
Pacemaker は、フェンストポロジーと呼ばれる機能を用いて、複数デバイスでのノードのフェンシングに対応します。トポロジーを実装するには、通常の方法で各デバイスを作成し、設定のフェンストポロジーセクションでフェンスレベルを 1 つ以上定義します。
Pacemaker は、以下のようにフェンシングレベルを処理します。
- レベルは、1 から昇順で試行されていきます。
- デバイスに障害が発生すると、現在のレベルの処理が終了します。そのレベルの他のデバイスは試行されず、代わりに次のレベルが試行されます。
- すべてのデバイスのフェンシングが正常に完了すると、そのレベルは成功となり、他のレベルは試行されなくなります。
- いずれかのレベルで成功するか、すべてのレベルが試行され失敗すると、操作は終了します。
ノードにフェンスレベルを追加する場合は、次のコマンドを使用します。デバイスは、stonith ID をコンマ区切りのリストとして指定します。stonith ID が、指定したレベルで試行されます。
# pcs stonith level add level node devices
次の例では、デバイス my_ilo に障害が発生してノードをフェンスできない場合に、Pacemaker がデバイス my_apc の使用を試みるようにフェンスレベルを設定します。
前提条件
-
ノード
rh7-2にmy_iloという ilo フェンスデバイスを設定した。 -
ノード
rh7-2にmy_apcという apc フェンスデバイスを設定した。
手順
ノード
rh7-2のフェンスデバイスmy_iloにフェンシングレベル 1 を追加します。# pcs stonith level add 1 rh7-2 my_iloノード
rh7-2のフェンスデバイスmy_apcにフェンシングレベル 2 を追加します。# pcs stonith level add 2 rh7-2 my_apc現在設定されているフェンシングレベルをリスト表示します。
# pcs stonith levelNode: rh7-2 Level 1 - my_ilo Level 2 - my_apc
4.4.7. フェンスレベルの削除 リンクのコピーリンクがクリップボードにコピーされました!
特定のノードおよびデバイスのフェンスレベルを削除できます。ノードやデバイスを指定しないと、指定したフェンスレベルがすべてのノードから削除されます。
手順
特定のノードとデバイスのフェンスレベルを削除します。
# pcs stonith level remove level [node_id] [stonith_id] ... [stonith_id]
4.4.8. フェンスレベルのクリア リンクのコピーリンクがクリップボードにコピーされました!
特定のノードまたは stonith ID のフェンスレベルをクリアできます。ノードや stonith id を指定しないと、すべてのフェンスレベルが削除されます。
手順
特定のノードまたは stonith ID のフェンスレベルをクリアします。
# pcs stonith level clear [node]|stonith_id(s)]複数の stonith ID を指定する場合はコンマで区切って指定します。空白は入力しないでください。以下に例を示します。
# pcs stonith level clear dev_a,dev_b
4.4.9. フェンスレベルでのノードとデバイスの検証 リンクのコピーリンクがクリップボードにコピーされました!
フェンスレベルで指定されているすべてのフェンスデバイスとノードが存在することを確認できます。
手順
フェンスレベルで指定されているすべてのフェンスデバイスとノードが存在することを確認するには、次のコマンドを使用します。
# pcs stonith level verify
4.4.10. フェンシングトポロジーにおけるノードの指定 リンクのコピーリンクがクリップボードにコピーされました!
フェンストポロジーのノードは、ノード名に適用する正規表現と、ノードの属性 (およびその値) で指定できます。
手順
次のコマンドでは、ノード
node1、node2、およびnode3がフェンスデバイスapc1およびapc2を使用するように設定し、ノードnode4、node5、およびnode6がフェンスデバイスapc3およびapc4を使用するように設定します。# pcs stonith level add 1 "regexp%node[1-3]" apc1,apc2 # pcs stonith level add 1 "regexp%node[4-6]" apc3,apc4次のコマンドでは、ノード属性のマッチングを使用して同じ結果を実現します。
# pcs node attribute node1 rack=1 # pcs node attribute node2 rack=1 # pcs node attribute node3 rack=1 # pcs node attribute node4 rack=2 # pcs node attribute node5 rack=2 # pcs node attribute node6 rack=2 # pcs stonith level add 1 attrib%rack=1 apc1,apc2 # pcs stonith level add 1 attrib%rack=2 apc3,apc4
4.4.11. 冗長電源のフェンシング設定 リンクのコピーリンクがクリップボードにコピーされました!
冗長電源にフェンシングを設定する場合は、ホストを再起動するときに、クラスターが、最初に両方の電源をオフにしてから、いずれかの電源をオンにするようにする必要があります。
ノードの電源が完全にオフにならないと、ノードがリソースを解放しない場合があります。このとき、解放できなかったリソースに複数のノードが同時にアクセスして、リソースが破損する可能性があります。
各デバイスを一度だけ定義し、両方のデバイスがノードのフェンスに必要であると指定する必要があります。
手順
最初のフェンスデバイスを作成します。
# pcs stonith create apc1 fence_apc_snmp ipaddr=apc1.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"2 つ目のフェンスデバイスを作成します。
# pcs stonith create apc2 fence_apc_snmp ipaddr=apc2.example.com login=user passwd='7a4D#1j!pz864' pcmk_host_map="node1.example.com:1;node2.example.com:2"ノードをフェンスするには両方のデバイスが必要であることを指定します。
# pcs stonith level add 1 node1.example.com apc1,apc2 # pcs stonith level add 1 node2.example.com apc1,apc2
4.4.12. フェンスデバイスの管理 リンクのコピーリンクがクリップボードにコピーされました!
pcs コマンドラインインターフェイスは、フェンスデバイスを設定した後にそれらの管理に使用できるさまざまなコマンドを提供します。
4.4.12.1. 設定済みのフェンスデバイスの表示 リンクのコピーリンクがクリップボードにコピーされました!
以下のコマンドは、現在設定されているフェンスデバイスをすべて表示します。stonith_id が指定されている場合、コマンドはその設定されたフェンシングデバイスのみのオプションを表示します。--full オプションが指定されている場合、すべての設定されたフェンシングオプションが表示されます。
# pcs stonith config [stonith_id] [--full]
4.4.12.2. pcs コマンドとしてのフェンスデバイスのエクスポート リンクのコピーリンクがクリップボードにコピーされました!
pcs stonith config コマンドの --output-format=cmd オプションを使用して、別のシステムで設定されたフェンスデバイスを再作成するために使用できる pcs コマンドを表示できます。
次のコマンドは、fence_apc_snmp フェンスデバイスを作成し、デバイスを再作成するために使用できる pcs コマンドを表示します。
# pcs stonith create myapc fence_apc_snmp ip="zapc.example.com" pcmk_host_map="z1.example.com:1;z2.example.com:2" username="apc" password="apc"
# pcs stonith config --output-format=cmd
Warning: Only 'text' output format is supported for stonith levels
pcs stonith create --no-default-ops --force -- myapc fence_apc_snmp \
ip=zapc.example.com password=apc 'pcmk_host_map=z1.example.com:1;z2.example.com:2' username=apc \
op \
monitor interval=60s id=myapc-monitor-interval-60s
4.4.12.3. フェンスレベル設定のエクスポート リンクのコピーリンクがクリップボードにコピーされました!
pcs stonith config と pcs stonith level config コマンドは、フェンシングレベル設定を JSON 形式と pcs コマンドとしてエクスポートする --output-format= オプションをサポートしています。
-
--output-format=cmdを指定すると、フェンシングレベルを設定する現在のクラスター設定から作成されたpcsコマンドが表示されます。これらのコマンドを使用して、別のシステムで設定されたフェンシングレベルを再作成できます。 -
--output-format=jsonを指定すると、マシン解析に適した JSON 形式でフェンシングレベル設定が表示されます。
4.4.12.4. フェンスデバイスの修正と削除 リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドを使用して、現在設定されているフェンシングデバイスのオプションを変更または追加します。
# pcs stonith update stonith_id [stonith_device_options]
pcs stonith update コマンドを使用して SCSI フェンシングデバイスを更新すると、フェンシングリソースが実行されていたノードと同じノードで実行中のすべてのリソースが再起動されます。以下のコマンドのいずれかのバージョンを使用して、他のクラスターリソースを再起動しなくても SCSI デバイスを更新できます。SCSI フェンシングデバイスは、マルチパスデバイスとして設定できます。
# pcs stonith update-scsi-devices stonith_id set device-path1 device-path2
# pcs stonith update-scsi-devices stonith_id add device-path1 remove device-path2
現在の設定からフェンシングデバイスを削除する場合は次のコマンドを使用します。
# pcs stonith delete stonith_id
4.4.12.5. 手動によるクラスターノードのフェンシング リンクのコピーリンクがクリップボードにコピーされました!
次のコマンドで、ノードを手動でフェンスできます。--off オプションを指定すると、stonith への off API 呼び出しが使用され、ノードを再起動する代わりにノードをオフにします。
# pcs stonith fence node [--off]
ノードがアクティブでない場合でも、フェンスデバイスがそのノードをフェンスできない状況では、ノードのリソースをクラスターが復旧できない可能性があります。この場合は、ノードの電源が切れたことを手動で確認した後、次のコマンドを入力して、ノードの電源が切れたことをクラスターに確認し、そのリソースを回復のために解放できます。
指定したノードが実際にはオフになっていないが、クラスターによって通常制御されるクラスターソフトウェアまたはサービスを実行している場合は、データの破損とクラスター障害が発生します。
# pcs stonith confirm node
4.4.12.6. フェンスデバイスの無効化 リンクのコピーリンクがクリップボードにコピーされました!
フェンシングデバイスを無効にするには、pcs stonith disable コマンドを実行します。
以下のコマンドは、フェンスデバイス myapc を無効にします。
# pcs stonith disable myapc
4.4.12.7. ノードがフェンシングデバイスを使用しないように設定する手順 リンクのコピーリンクがクリップボードにコピーされました!
特定のノードがフェンシングデバイスを使用できないようにするには、フェンスリソースの場所の制約を設定します。
以下の例では、フェンスデバイスの node1-ipmi が、node1 で実行されないようにします。
# pcs constraint location node1-ipmi avoids node1
4.5. 統合フェンスデバイスで使用する ACPI の設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスターが統合フェンスデバイスを使用する場合は、即時かつ完全なフェンシングを実行できるように、ACPI (Advanced Configuration and Power Interface) を設定する必要があります。
クラスターノードが統合フェンスデバイスでフェンシングされるように設定されている場合は、そのノードの ACPI Soft-Off を無効にします。ACPI Soft-Off を無効にすると、統合フェンスデバイスは、クリーンなシャットダウン (たとえば、shutdown -h now) を試行するのではなく、ノードを即座に完全にオフにすることができます。一方で、ACPI Soft-Off が有効になっていると、統合フェンスデバイスがノードをオフにするのに 4 秒以上かかることがあります (以下の注記部分を参照してください)。さらに、ACPI Soft-Off が有効になっていて、ノードがシャットダウン時にパニック状態になるか、フリーズすると、統合フェンスデバイスがノードをオフにできない場合があります。このような状況では、フェンシングが遅延するか、失敗します。したがって、ノードが統合フェンスデバイスでフェンシングされ、ACPI Soft-Off が有効になっている場合は、クラスターが徐々に復元します。または管理者の介入による復旧が必要になります。
ノードのフェンシングにかかる時間は、使用している統合フェンスデバイスによって異なります。統合フェンスデバイスの中には、電源ボタンを押し続けるのと同じ動作を実行するものもあります。この場合は、ノードがオフになるのに 4 秒から 5 秒かかります。また、電源ボタンを押してすぐ離すのと同等の動作を行い、ノードの電源をオフにする行為をオペレーティングシステムに依存する統合フェンスデバイスもあります。この場合は、ノードがオフになるのにかかる時間は 4~ 5 秒よりも長くなります。
- ACPI ソフトオフを無効にする場合は、BIOS 設定を "instant-off" またはノードを遅延なくオフにする同等の設定に変更することが推奨されます。
システムによっては、BIOS で ACPI Soft-Off を無効にできません。お使いのクラスターでは、BIOS で ACPI Soft-Off を無効にできない場合に、以下のいずれかの方法で ACPI Soft-Off を無効にできます。
-
/etc/systemd/logind.confファイルでHandlePowerKey=ignoreを設定し、フェンスされたときにノードがすぐにオフになることを確認します。これが、ACPI Soft-Off を無効にする 1 つ目の代替方法です。 カーネル起動コマンドラインに
acpi=offを追加します。これは、ACPI Soft-Off を無効にする 2 つ目の代替方法です。この方法の使用が推奨される場合、または 1 つ目の代替方法が利用できない場合に使用してください。重要この方法は、ACPI を完全に無効にします。コンピューターの中には、ACPI が完全が無効になっているとシステムが正しく起動しないものもあります。お使いのクラスターに適した方法が他にない場合に 限り、この方法を使用してください。
4.5.1. BIOS での ACPI Soft-Off の無効化 リンクのコピーリンクがクリップボードにコピーされました!
各クラスターノードの BIOS を設定することで、ACPI Soft-Off を無効にできます。
BIOS で ACPI Soft-Off を無効にする手順は、サーバーシステムにより異なる場合があります。この手順は、お使いのハードウェアのドキュメントで確認する必要があります。
手順
-
ノードを再起動して
BIOS CMOS Setup Utilityプログラムを起動します。 - 電源メニュー (または同等の電源管理メニュー) に移動します。
電源メニューで、
Soft-Off by PWR-BTTN機能 (または同等) をInstant-Off(または、遅延なく電源ボタンでノードをオフにする同等の設定) に設定します。以下のBIOS CMOS Setup Utiliyの例は、ACPI FunctionがEnabledに設定され、Soft-Off by PWR-BTTNがInstant-Offに設定されている Power メニューを示しています。注記ACPI Function、Soft-Off by PWR-BTTN、およびInstant-Offに相当するものは、コンピューターによって異なります。ただし、この手順の目的は、電源ボタンを使用して遅延なしにコンピューターをオフにするように BIOS を設定することです。-
BIOS CMOS Setup Utilityプラグラムを終了します。BIOS 設定が保存されます。 - ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
例4.1 BIOS CMOS Setup Utility
`Soft-Off by PWR-BTTN` set to
`Instant-Off`
+---------------------------------------------|-------------------+
| ACPI Function [Enabled] | Item Help |
| ACPI Suspend Type [S1(POS)] |-------------------|
| x Run VGABIOS if S3 Resume Auto | Menu Level * |
| Suspend Mode [Disabled] | |
| HDD Power Down [Disabled] | |
| Soft-Off by PWR-BTTN [Instant-Off | |
| CPU THRM-Throttling [50.0%] | |
| Wake-Up by PCI card [Enabled] | |
| Power On by Ring [Enabled] | |
| Wake Up On LAN [Enabled] | |
| x USB KB Wake-Up From S3 Disabled | |
| Resume by Alarm [Disabled] | |
| x Date(of Month) Alarm 0 | |
| x Time(hh:mm:ss) Alarm 0 : 0 : | |
| POWER ON Function [BUTTON ONLY | |
| x KB Power ON Password Enter | |
| x Hot Key Power ON Ctrl-F1 | |
| | |
| | |
+---------------------------------------------|-------------------+
この例では、ACPI Function が Enabled に設定され、Soft-Off by PWR-BTTN が Instant-Off に設定されていることを示しています。
4.5.2. logind.conf ファイルでの ACPI Soft-Off の無効化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/systemd/logind.conf ファイルで電源キーの処理を無効にできます。
手順
/etc/systemd/logind.confファイルに、以下の設定を定義します。HandlePowerKey=ignoresystemd-logindサービスを再起動します。# systemctl restart systemd-logind.service
検証
- ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は フェンスデバイスのテスト を参照してください。
4.5.3. GRUB 2 ファイルでの ACPI の完全な無効化 リンクのコピーリンクがクリップボードにコピーされました!
ACPI Soft-Off は、カーネルの GRUB メニューエントリーに acpi=off を追加して無効にできます。
この方法は、ACPI を完全に無効にします。コンピューターの中には、ACPI が完全が無効になっているとシステムが正しく起動しないものもあります。お使いのクラスターに適した方法が他にない場合に 限り、この方法を使用してください。
手順
以下のように、
grubbyツールで、--argsオプションと--update-kernelオプションを使用して、各クラスターノードのgrub.cfgファイルを変更します。# grubby --args=acpi=off --update-kernel=ALL- ノードを再起動します。
検証
- ノードがフェンシングされるとすぐにオフになることを確認します。フェンスデバイスをテストする方法は、フェンスデバイスのテスト を参照してください。
4.6. AWS での IP アドレスリソースの設定 リンクのコピーリンクがクリップボードにコピーされました!
高可用性 (HA) クラスターにおけるフェイルオーバー時のクラスターリソースへのネットワークアクセスを管理するには、IP アドレスリソースを設定できます。Red Hat High Availability Add-On は、さまざまな Amazon Web Services (AWS) IP アドレスタイプに対応したリソースエージェントを提供します。
これには、インターネットに公開されているアドレス、単一ゾーンのアドレス、および複数ゾーンのアドレスが含まれます。
-
インターネットに公開する:
awseipネットワークリソースを使用します。 -
AWS アベイラビリティーゾーン (AZ) 1 つに制限する:
awsvipおよびIPaddr2ネットワークリソースを使用します。 同じ AWS リージョン内の多数の AWS AZ に再割り当てする:
aws-vpc-move-ipネットワークリソースを使用します。注記HA クラスターが IP アドレスを管理しない場合は、AWS 上の仮想 IP アドレスを管理するためのリソースエージェントは必要ありません。特定のデプロイメントに関する詳細なサポートが必要な場合は、AWS にお問い合わせください。
4.6.1. インターネットに公開されている IP アドレスを管理するための IP アドレスリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
高可用性 (HA) クライアントがパブリックインターネット接続を使用する Red Hat Enterprise Linux (RHEL) ノードにアクセスできるようにするには、Elastic IP アドレスを使用するように AWS セカンダリー Elastic IP アドレス (awseip) リソースを設定します。
前提条件
- クラスターが設定されている。
- クラスターノードが RHEL HA リポジトリーにアクセスできる。詳細は、高可用性パッケージとエージェントのインストール を参照してください。
- AWS CLI2 を設定している。詳細は、AWSCLI2 のインストール を参照してください。
手順
-
orderとcolocationの制約を適用するために、すでに作成した 同じグループ に 2 つのリソースを追加します。 resource-agentsパッケージをインストールします。# dnf install resource-agentsElastic IP アドレスを作成します。
[root@ip-10-0-0-48 ~]# aws ec2 allocate-address --domain vpc --output texteipalloc-4c4a2c45 vpc 35.169.153.122オプション:
awseipの詳細を表示します。これは、このエージェントのオプションとデフォルトの操作を示しています。# pcs resource describe awseip2 番目のステップで割り当てられた IP アドレスを使用して、セカンダリー Elastic IP アドレスリソースを作成します。
# pcs resource create <resource_id> awseip elastic_ip=<elastic_ip_address> allocation_id=<elastic_ip_association_id> --group networking-group以下に例を示します。
# pcs resource create elastic awseip elastic_ip=35.169.153.122 allocation_id=eipalloc-4c4a2c45 --group networking-group
検証
クラスターのステータスを確認し、リソースが利用可能であることを確認します。
[root@ip-10-0-0-58 ~]# pcs statusCluster name: newcluster Stack: corosync Current DC: ip-10-0-0-58 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Mon Mar 5 16:27:55 2018 Last change: Mon Mar 5 15:57:51 2018 by root via cibadmin on ip-10-0-0-46 3 nodes configured 4 resources configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Resource Group: networking-group vip (ocf::heartbeat:IPaddr2): Started ip-10-0-0-48 elastic (ocf::heartbeat:awseip): Started ip-10-0-0-48 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabledこの例では、
newclusterは、vipやelasticなどのリソースがnetworking-groupリソースグループの一部であるアクティブクラスターです。ローカルワークステーションから、すでに作成した Elastic IP アドレスへの SSH セッションを開始します。
$ ssh -l ec2-user -i ~/.ssh/cluster-admin.pem 35.169.153.122- SSH 接続されたホストが、エラスティックリソースを持つホストと同じであることを確認します。
4.6.2. 単一の AWS アベイラビリティーゾーンに限定されたプライベート IP アドレスを管理するための IP アドレスリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) のアベイラビリティーゾーン (AZ) では、プライベート IP アドレスを使用できます。このアドレスは、Red Hat Enterprise Linux (RHEL) 高可用性 (HA) クラスター内の該当ゾーンに限定されます。このアドレスを使用して、AWS セカンダリープライベート IP アドレス (awsvip) リソースを設定します。
前提条件
- クラスターが設定されている。
- クラスターノードが RHEL HA リポジトリーにアクセスできる。詳細は、高可用性パッケージとエージェントのインストール を参照してください。
- AWS CLI を設定している。詳細は、AWSCLI2 のインストール を参照してください。
手順
resource-agentsパッケージをインストールします。# dnf install resource-agentsオプション:
awsvipのオプションとデフォルトの操作を表示します。# pcs resource describe awsvipVPC CIDRブロック内の未使用のプライベート IP アドレスを使用して、セカンダリープライベート IP アドレスを作成します。[root@ip-10-0-0-48 ~]# pcs resource create privip awsvip secondary_private_ip=10.0.0.68 --group networking-groupセカンダリープライベート IP アドレスはリソースグループに含まれています。
vipリソース ID とnetworking-groupグループ名を持つ仮想 IP リソースを作成します。root@ip-10-0-0-48 ~]# pcs resource create vip IPaddr2 ip=10.0.0.68 --group networking-groupVirtual Private Cloud (VPC) の IP アドレスは、フェンスノードからフェイルオーバーノードにマッピングされ、サブネット内のフェンスノードの障害を隠蔽します。仮想 IP が、前の手順で作成したセカンダリープライベート IP アドレスと同じリソースグループに属していることを確認します。
検証
クラスターのステータスを確認し、リソースが利用可能であることを確認します。
[root@ip-10-0-0-48 ~]# pcs status Cluster name: newcluster Stack: corosync Current DC: ip-10-0-0-46 (version 1.1.18-11.el7-2b07d5c5a9) - partition with quorum Last updated: Fri Mar 2 22:34:24 2018 Last change: Fri Mar 2 22:14:58 2018 by root via cibadmin on ip-10-0-0-46 3 nodes configured 3 resources configured Online: [ ip-10-0-0-46 ip-10-0-0-48 ip-10-0-0-58 ] Full list of resources: clusterfence (stonith:fence_aws): Started ip-10-0-0-46 Resource Group: networking-group privip (ocf::heartbeat:awsvip): Started ip-10-0-0-48 vip (ocf::heartbeat:IPaddr2): Started ip-10-0-0-58 Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabledこの例では、
newclusterは、vipやelasticなどのリソースがnetworking-groupリソースグループの一部であるアクティブクラスターです。
4.6.3. 複数の AWS アベイラビリティーゾーン間で移動できる IP アドレスを管理するための IP アドレスリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) で elastic IP アドレスを使用するには、Red Hat Enterprise Linux (RHEL) Overlay IP (aws-vpc-move-ip) リソースエージェントを設定できます。aws-vpc-move-ip を使用すると、AWS の単一リージョン内の RHEL ノードを複数のアベイラビリティーゾーン (AZ) 間で移動し、クライアントの高可用性 (HA) を確保できます。
前提条件
- 設定済みのクラスターがある。
- クラスターノードが RHEL HA リポジトリーにアクセスできる。詳細は、高可用性パッケージとエージェントのインストールを 参照してください。
- AWS CLI を設定している。詳細は、AWSCLI2 のインストールを 参照してください。
次の権限を持つアイデンティティーおよびアクセス管理 (IAM) ユーザーをクラスターに設定した。
- ルーティングテーブルを変更する
- セキュリティーグループを作成する
- IAM ポリシーとロールを作成する
手順
resource-agentsパッケージをインストールします。# dnf install resource-agentsオプション:
awsvipのオプションとデフォルトの操作を表示します。# pcs resource describe aws-vpc-move-ipIAM ユーザーに対して
OverlayIPAgentIAM ポリシーを設定します。-
AWS コンソールで、Services → IAM → Policies → Create
OverlayIPAgentPolicy に移動します。 次の設定を入力します。<region>、<account_id>、<cluster_route_table_id> の値は、クラスターに合わせて変更します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1424870324000", "Effect": "Allow", "Action": "ec2:DescribeRouteTables", "Resource": "*" }, { "Sid": "Stmt1424860166260", "Action": [ "ec2:CreateRoute", "ec2:ReplaceRoute" ], "Effect": "Allow", "Resource": "arn:aws:ec2:_<region>_:_<account_id>_:route-table/_<cluster_route_table_id>_" } ] }
-
AWS コンソールで、Services → IAM → Policies → Create
AWS コンソールで、クラスター内のすべてのノードの
Source/Destination Check機能を無効にします。これを行うには、各ノードを右クリックして、Networking → Change Source/Destination Checks を選択します。表示されるポップアップメッセージで、Yes, Disable をクリックします。
クラスターのルートテーブルを作成します。これを行うには、クラスター内の 1 つのノードで次のコマンドを使用します。
# aws ec2 create-route --route-table-id <cluster_route_table_id> --destination-cidr-block <new_cidr_block_ip/net_mask> --instance-id <cluster_node_id>コマンドでは、値を次のように置き換えます。
-
ClusterRouteTableID: 既存クラスターの Virtual Private Cloud (VPC) ルートテーブルのルートテーブル ID。 -
NewCIDRblockIP: VPC Classless Inter-Domain Routing (CIDR) ブロック外の新しい IP アドレスとネットマスク。たとえば、VPC CIDR ブロックが172.31.0.0/16の場合、新しい IP アドレスまたはネットマスクは192.168.0.15/32になります。 -
ClusterNodeID: クラスター内の別のノードのインスタンス ID。
-
クラスター内のノードの 1 つで、クライアントがアクセスできる空き IP アドレスを使用する
aws-vpc-move-ipリソースを作成します。次の例では、IP192.168.0.15を使用するvpcipという名前のリソースを作成します。# pcs resource create vpcip aws-vpc-move-ip ip=192.168.0.15 interface=eth0 routing_table=<cluster_route_table_id>クラスター内のすべてのノードで、
/etc/hosts/ファイルを編集し、新しく作成されたリソースの IP アドレスを含む行を追加します。以下に例を示します。192.168.0.15 vpcip
検証
新しい
aws-vpc-move-ipリソースのフェイルオーバー機能をテストします。# pcs resource move vpcipフェイルオーバーが成功した場合は、
vpcipリソースの移動後に自動的に作成された制約を削除します。# pcs resource clear vpcip
第5章 セキュアブートを使用した AWS 上の RHEL の設定 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) 上の Red Hat Enterprise Linux (RHEL) インスタンスのブートセキュリティーを強化するには、セキュアブートを設定します。セキュアブートは、起動時にブートローダーやその他のコンポーネントのデジタル署名を検証し、信頼できるプログラムのみをロードできるようにし、不正なプログラムのロードをブロックします。
5.1. クラウド上の RHEL 向けセキュアブートの概要 リンクのコピーリンクがクリップボードにコピーされました!
セキュアブートは、改ざんされたコンポーネントや信頼できない組織によって署名されたコンポーネントを検出すると、ブートプロセスを中止します。この点が、従来のブートプロセスと異なる点です。セキュアブートは、機密仮想マシン (CVM) の設定において重要な役割を果たします。
これにより、信頼できるエンティティーのみがブートチェーンに参加することが保証されます。セキュアブートは、UEFI(Unified Extensible Firmware Interface) の機能です。これは、ブートローダーやカーネルなどのブートコンポーネントのデジタル署名を、ハードウェアに保存されている信頼できる鍵と照合して検証します。
セキュアブートは、起動時に不正なソフトウェアや改ざんされたソフトウェアが実行されることを防止し、悪意のあるコードからシステムを保護します。また、以下の点も挙げられます。
- 定義されたインターフェイスを介して特定のデバイスパスへのアクセスを認証します
- 最新の設定の使用を強制します
- 以前の設定を完全に上書きします
Red Hat Enterprise Linux (RHEL) カーネルがセキュアブートを有効にして起動すると、ロックダウンモードに入ります。このモードでは、信頼できるベンダーによって署名されたカーネルモジュールのみがロードできます。その結果、セキュアブートによってオペレーティングシステムのブートシーケンスのセキュリティーが強化されます。
- セキュアブートコンポーネント
セキュアブートメカニズムは、ファームウェア、署名データベース、暗号鍵、ブートローダー、ハードウェアモジュール、およびオペレーティングシステムで構成されます。以下は、UEFI の信頼済み変数の構成要素です。
-
Key Exchange Key データベース (KEK): RHEL オペレーティングシステムと仮想マシンファームウェア間の信頼を確立するための公開鍵の交換。これらの鍵を使用して、Allowed Signature データベース (
db) と Forbidden Signature データベース (dbx) を更新することもできます。 - Platform Key データベース (PK): 仮想マシンファームウェアとクラウドプラットフォーム間の信頼を確立するための自己署名のシングルキーデータベース。また、PK は KEK データベースを更新します。
-
許可された署名データベース (
db): 証明書またはバイナリーハッシュのリストを保持するデータベース。これらは、バイナリーファイルがシステム上で起動できるかどうかを定義します。さらに、dbからのすべての証明書は、RHEL カーネルの.platformキーリングにインポートされます。この機能を使用すると、ロックダウンモードで署名済みのサードパーティー製カーネルモジュールを追加およびロードできます。 Forbidden Signature データベース (
dbx): システム上で起動することが禁止されている証明書またはバイナリーハッシュのリストを保持するデータベース。注記バイナリーファイルは、
dbxデータベースと Secure Boot Advanced Targeting (SBAT) メカニズムに照らしてチェックされます。SBAT を使用すると、バイナリーに署名した証明書を有効なままに保ちながら、特定のバイナリーの古いバージョンを無効にできます。
- セキュアブート段階
RHEL インスタンスが統合カーネルイメージ (UKI) モードでセキュアブートを有効にして起動すると、クラウドサービスインフラストラクチャーと通信します。手順は以下のとおりです。
- 初期化: RHEL インスタンスが起動すると、クラウドでホストされているファームウェアが最初に起動し、セキュアブートメカニズムを実装します。
- 変数ストアの初期化: ファームウェアは、変数ストアから UEFI 変数を初期化します。これは、ファームウェアが起動プロセスと実行時操作を管理するために必要な情報を格納するための専用領域です。RHEL インスタンスが初めて起動すると、ストアは仮想マシンイメージに関連付けられたデフォルト値によって初期化されます。
ブートローダー: ブート時に、ファームウェアは第 1 段階のブートローダーをロードします。x86 UEFI 環境の RHEL インスタンスの場合、第 1 段階のブートローダーは shim です。シムブートローダーは認証を行い、ブートプロセスの次の段階をロードします。これは UEFI と GRUB の間の橋渡し役を果たします。
-
RHEL に含まれる shim x86 バイナリーは、
Microsoft Corporation の UEFI CA 2011証明書によって署名されています。 - RHEL インスタンスは、shim バイナリーを使用して、さまざまなハードウェアおよび仮想化プラットフォーム上でセキュアブート有効モードで起動します。
-
プラットフォームの許可された署名データベース (
db) にデフォルトの Microsoft 証明書があることを確認してください。 -
shim バイナリーは、Red Hat Secure Boot CA と、必要に応じて Machine Owner Key (
MOK) を使用して、信頼済み証明書のリストを拡張します。
-
RHEL に含まれる shim x86 バイナリーは、
UKI: shim バイナリーは、RHEL UKI (
kernel-uki-virtパッケージ) をロードします。対応する証明書 (x86_64 アーキテクチャーではRed Hat Secure Boot Signing 504) が UKI に署名します。-
この証明書は
redhat-sb-certsパッケージにあります。この証明書は Red Hat Secure Boot CA によって署名されているため、チェックは成功します。
-
この証明書は
-
UKI アドオン:RHEL カーネルは、UKI
コマンドライン拡張機能を使用する場合、db、MOK、および shim 証明書に対して署名を検証します。このプロセスにより、オペレーティングシステムベンダー、RHEL、またはユーザーのいずれかが拡張機能に署名していることが保証されます。
RHEL カーネルがセキュアブートモードで起動すると、ロックダウンモードに入ります。
ロックダウンモードに入ると、RHEL カーネルは以下の動作を実行します。
-
.platformキーリングにdbキーを追加します。 -
.machineキーリングにMOKキーを追加します。
カーネルのビルドプロセス中、ビルドシステムは秘密鍵と公開鍵からなる一時的な鍵ペアを使用します。ビルドシステムは、kernel-modules-core、kernel-modules、kernel-modules-extra などの標準の RHEL カーネルモジュールに署名します。
カーネルのビルドが完了するたびに、秘密鍵はサードパーティー製モジュールの署名には使用できなくなります。この署名のためには、db および MOK の証明書を使用できます。
5.2. セキュアブートを使用して AWS Marketplace で RHEL インスタンスを設定する リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) 上の Red Hat Enterprise Linux (RHEL) インスタンスでセキュアな起動プロセスを確保するには、RHEL インスタンスでセキュアブートを設定します。このインスタンスは、AWS Marketplace から入手した事前設定済みの Amazon Machine Image (AMI) から起動されます。
前提条件
RHEL AMI のブート設定で
uefi-preferredオプションが有効になっていることを確認しました。$ aws ec2 describe-images --image-id ami-0a951f007be151ff9 --region us-east-2 | grep -E '"ImageId"|"Name"|"BootMode"'"Name": "RHEL-10.1.0_HVM-20260217-x86_64-0-Hourly2-GP3", "BootMode": "uefi-preferred", "ImageId": "ami-0a951f007be151ff9",警告秘密鍵は、それを使用する RHEL インスタンスとは別に保管してください。侵入者がインスタンスにアクセスした場合、保存されている秘密情報を使用して特権を昇格させ、システムセキュリティーを侵害する可能性があります。
RHEL Marketplace AMI インスタンスのプラットフォームステータスを確認しました。
$ sudo mokutil --sb-stateSecureBoot disabled Platform is in Setup Modesetupモードでは、インスタンス内のセキュアブート UEFI 変数を更新できます。RHEL インスタンスに次のパッケージがインストールされている。
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
edk2-ovmf -
python3-virt-firmware
-
手順
カスタム証明書
custom_db.cerを生成します。$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 \ -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cervirt-fw-varsユーティリティーを使用して UEFI 変数ファイルを生成します。$ virt-fw-vars --enroll-redhat \ --add-db-cert OvmfEnrollDefaultKeys custom_db.cer \ --set-dbx /usr/share/edk2/ovmf/DBX* \ --output-auth詳細は、システム上の
virt-fw-vars(1)man ページを参照してください。UEFI 変数を Extensible Firmware Interface (EFI) Signature List (ESL) 形式に変換します。
$ for f in PK KEK db dbx; do tail -c +41 $f.auth > $f.esl; done注記各 GUID は割り当てられた値であり、EFI パラメーターを表します。
-
8be4df61-93ca-11d2-aa0d-00e098032b8c:EFI_GLOBAL_VARIABLE_GUID -
d719b2cb-3d3a-4596-a3bc-dad00e67656f:EFI_IMAGE_SECURITY_DATABASE_GUID
EFI_GLOBAL_VARIABLE_GUIDパラメーターは、ブート可能なデバイスとブートマネージャーの設定を保持します。一方、EFI_IMAGE_SECURITY_DATABASE_GUIDパラメーターは、セキュアブート変数であるdb、dbx、および必要な鍵と証明書を保存するためのイメージセキュリティーデータベースを表します。-
データベース証明書をターゲットインスタンスに転送し、
efivarユーティリティーを使用して UEFI 環境変数を管理します。PK.eslを転送するには、次のように入力します。$ sudo efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-PK -f PK.eslKEK.eslを転送するには、次のように入力します。$ sudo efivar -w -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-KEK -f KEK.esldb.eslを転送するには、次のように入力します。$ sudo efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-db -f db.eslx64 アーキテクチャー用の
dbx.eslUEFI 失効リストファイルを転送するには、次のように入力します。$ sudo efivar -w -n d719b2cb-3d3a-4596-a3bc-dad00e67656f-dbx -f dbx.esl
- AWS コンソールからインスタンスを再起動します。
検証
セキュアブートが有効になっているかどうかを確認します。
$ sudo mokutil --sb-stateSecureBoot enabledkeyctlユーティリティーを使用して、カスタム証明書のカーネルキーリングを確認します。$ sudo keyctl list %:.platform7 keys in keyring: 741159788: ---lswrv 0 0 asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53 941772267: ---lswrv 0 0 asymmetric: Red Hat Secure Boot CA 8: e1c6c580aa1e21d585aad9bf20f3929e5ec1f08b 979739129: ---lswrv 0 0 asymmetric: Red Hat Secure Boot CA 5: cc6fa5e72868ba494e939bbd680b9144769a9f8f 303712700: ---lswrv 0 0 asymmetric: Signature Database key: 7dff9c7433d40daa6cb2cdbdb4c2b7c93f5252a4 747313470: ---lswrv 0 0 asymmetric: Microsoft UEFI CA 2023: 81aa6b3244c935bce0d6628af39827421e32497d 710788326: ---lswrv 0 0 asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4 163192: ---lswrv 0 0 asymmetric: Microsoft Corporation: Windows UEFI CA 2023: aefc5fbbbe055d8f8daa585473499417ab5a5272
5.3. セキュアブートを使用してカスタム RHEL イメージから RHEL インスタンスを設定する リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) 上で Red Hat Enterprise Linux (RHEL) インスタンスをセキュアブートするには、カスタム RHEL Amazon Machine Image (AMI) を登録する際にセキュアブートを設定します。この AMI は事前に保存された UEFI 変数で構成されているため、そこから起動されたインスタンスは初回起動時にセキュアブートの仕組みを使用します。
前提条件
- AWS AMI イメージを作成してアップロードした。詳細は、AWS AMI の準備とアップロード を参照してください。
次のパッケージがインストールされている。
-
awscli2 -
python3 -
openssl -
efivar -
keyutils -
python3-virt-firmware
-
手順
カスタム証明書
custom_db.cerを生成します。$ openssl req -quiet \ -newkey rsa:3072 \ -nodes -keyout custom_db.key \ -new -x509 -sha256 \ -days 3650 -subj "/CN=Signature Database key/" \ --outform DER -out custom_db.cervirt-fw-varsユーティリティーを使用して、キー、データベース証明書、および UEFI 変数ストアからaws_blob.binバイナリーファイルを生成します。$ virt-fw-vars --enroll-redhat \ --add-db-cert OvmfEnrollDefaultKeys custom_db.cer \ --set-dbx /usr/share/edk2/ovmf/DBX* \ --output-aws aws_blob.binカスタマイズされた Blob は次のもので構成されます。
-
edk2-ovmfパッケージに含まれるPK.cer、KEK.cer、db、およびdbx -
custom_db.cer生成された証明書
-
awscli2ユーティリティーを使用して、必要なセキュアブート変数を含むディスクスナップショットから AMI を作成し、登録します。$ aws ec2 register-image \ --name rhel-10.0-secure-boot \ --architecture x86_64 \ --virtualization-type hvm \ --root-device-name "/dev/sda1" \ --block-device-mappings "{\"DeviceName\": \"/dev/sda1\",\"Ebs\": {\"SnapshotId\": \"<snap-02d4db3813ff9b98e>\"}}" \ --ena-support --boot-mode uefi \ --region eu-central-1 \ --uefi-data $(cat aws_blob.bin) --output json{ "ImageId": "example-ami-id" }- AWS コンソールからインスタンスを再起動します。
検証
セキュアブート機能を検証します。
$ sudo mokutil --sb-stateSecureBoot enabledkeyctlユーティリティーを使用して、カスタム証明書のカーネルキーリングを確認します。$ sudo keyctl list %:.platform7 keys in keyring: 741159788: ---lswrv 0 0 asymmetric: Microsoft Windows Production PCA 2011: a92902398e16c49778cd90f99e4f9ae17c55af53 941772267: ---lswrv 0 0 asymmetric: Red Hat Secure Boot CA 8: e1c6c580aa1e21d585aad9bf20f3929e5ec1f08b 979739129: ---lswrv 0 0 asymmetric: Red Hat Secure Boot CA 5: cc6fa5e72868ba494e939bbd680b9144769a9f8f 303712700: ---lswrv 0 0 asymmetric: Signature Database key: 7dff9c7433d40daa6cb2cdbdb4c2b7c93f5252a4 747313470: ---lswrv 0 0 asymmetric: Microsoft UEFI CA 2023: 81aa6b3244c935bce0d6628af39827421e32497d 710788326: ---lswrv 0 0 asymmetric: Microsoft Corporation UEFI CA 2011: 13adbf4309bd82709c8cd54f316ed522988a1bd4 163192: ---lswrv 0 0 asymmetric: Microsoft Corporation: Windows UEFI CA 2023: aefc5fbbbe055d8f8daa585473499417ab5a5272
第6章 AMD SEV SNP を使用したパブリッククラウドプラットフォーム上の RHEL の設定 リンクのコピーリンクがクリップボードにコピーされました!
仮想マシンの整合性に基づく攻撃を防ぎ、メモリー整合性違反を減らすために、パブリッククラウド上の Red Hat Enterprise Linux (RHEL) インスタンスで、AMD Secure Encrypted Virtualization with Secure Nested Paging (SEV-SNP) を設定してください。AMD SEV-SNP は、仮想マシン (VM) データをハイパーバイザーおよびクラウドサービスプロバイダーから分離します。
6.1. AMD SEV SNP の概要 リンクのコピーリンクがクリップボードにコピーされました!
AMD Secure Encrypted Virtualization with Secure Nested Paging (SEV-SNP) は、パブリッククラウドプラットフォーム上の仮想マシン (VM) およびそこに保存されているデータのセキュリティーを向上させることを目的としています。
AMD プロセッサーは、SEV、SEV-ES、SEV-SNP という 3 つのハードウェアベースのセキュリティーメカニズムを提供します。
- SEV: SEV メカニズムは、仮想マシン (VM) のメモリーを暗号化して、ハイパーバイザーが仮想マシンのデータにアクセスできないようにします。
- SEV-ES: SEV with Encrypted State (SEV-ES) は、SEV を拡張したものであり、CPU レジスターの状態を暗号化します。このメカニズムにより、ハイパーバイザーが仮想マシンの CPU レジスターにアクセスしたり変更したりすることが防止されます。ハイパーバイザーと仮想マシン間の隔離を実現しますが、メモリー整合性攻撃に対しては依然として脆弱です。
- SEV-SNP: SEV-SNP は、SEV-ES の拡張機能であり、仮想マシンの暗号化に加えて、メモリー整合性の保護機能を追加したものです。この仕組みにより、ハイパーバイザーがページテーブルを変更して仮想マシンメモリーへのアクセスをリダイレクトすることを防止します。リプレイ攻撃やメモリー改ざんから保護します。
- SEV SNP コンポーネント
-
Secure Processor: AMD
EPYCプロセッサーには、Secure Processor (SP) サブシステムが統合されています。AMD SP は、鍵管理と暗号化操作を行うための専用ハードウェアコンポーネントです。 メモリーの整合性: メモリー管理ユニット (MMU) は、ページテーブルを使用して仮想アドレスをゲスト物理アドレスに変換します。
- SEV-SNP は、ゲストの物理アドレスをホストの物理アドレスに変換するために、ネストされたページテーブルを使用します。
- 一度定義されたネストされたページテーブルは、ハイパーバイザーまたはホストによって変更することはできません。これにより、仮想マシンが異なるページにアクセスするのを防ぎ、メモリーの整合性を保護します。
- SEV-SNP はこの方法を使用して、リプレイ攻撃、メモリー整合性違反、および仮想マシンメモリーへの悪意のある改変に対する保護を提供します。
-
メモリー暗号化: AMD
EPYCプロセッサーはメモリー暗号鍵を隠蔽します。この鍵は、ホストと仮想マシンの両方から隠蔽された状態で維持されます。 検証用アテステーション書レポート:CPU によって生成されたレポートには、認証された暗号化形式で RHEL インスタンス情報が含まれています。本レポートは、RHEL インスタンスおよび AMD プロセッサーの初期 CPU およびメモリー状態の真正性と信頼性を確認するものです。
注記ハイパーバイザーが仮想マシンのプライマリーメモリーや CPU レジスターの状態を作成したとしても、その仮想マシンの初期化後は、それらのデータは隠蔽され、ハイパーバイザーからはアクセスできない状態が維持されます。
- AMD SEV SNP セキュアブートプロセス
初期化と測定: SEV-SNP 対応ハイパーバイザーが、仮想マシンの初期状態を設定します。
- このハイパーバイザーは、ファームウェアバイナリーを仮想マシンメモリーにロードし、初期レジスター状態を設定します。
- AMD Secure Processor (SP) が仮想マシンの初期状態を測定し、仮想マシンの初期状態を検証するための詳細を提供します。
ファームウェア: 仮想マシンが UEFI ファームウェアを初期化します。ファームウェアには、ステートフルまたはステートレスな Virtual Trusted Platform Module (vTPM) 実装が含まれる場合があります。
- ステートフル vTPM は、仮想マシンの再起動や移行後も永続的な暗号化状態を維持します。
- ステートレス vTPM は、永続性なしに、仮想マシンセッションごとに新しい暗号化状態を生成します。
- vTPM は、Virtual Machine Privilege Levels (VMPL) テクノロジーによってゲストから隔離されます。
- VMPL は、各仮想マシンコンポーネントとハイパーバイザー間のハードウェアによる特権分離を提供します。
vTPM: ステートフルな vTPM 実装の場合、UEFI ファームウェアがリモートアテステーションを実行する可能性があります。
- これは、ご利用のクラウドサービスプロバイダーによって異なります。アテステーションは、vTPM の永続状態を復号化します。
vTPM はブートプロセスに関する情報も測定します
- セキュアブート状態
- ブート署名に使用される証明書アーティファクト
- UEFI バイナリーハッシュ
Shim: UEFI ファームウェアは、初期化プロセスを完了すると、拡張ファームウェアインターフェイス (EFI) システムパーティションを検索します。
- UEFI ファームウェアは、そこから最初のステージのブートローダーを検証して実行します。
-
RHEL の場合、これは
shimです。shimプログラムは、Microsoft 以外のオペレーティングシステムが、EFI システムパーティションから第 2 段階のブートローダーを読み込むことを可能にします。 -
shimは Red Hat の証明書を使用して、第 2 段階のブートローダー (grub) または Red Hat Unified Kernel Image (UKI) を検証します。 -
grubまたはUKIは、Linux カーネルと初期 RAM ファイルシステム (initramfs)、およびカーネルコマンドラインを展開、検証、実行します。 - このプロセスにより、Linux カーネルが信頼できる安全な環境でロードされることが保証されます。
Initramfs:
initramfsの処理中、フルディスク暗号化テクノロジーが使用されている場合、暗号化されたルートパーティションのロックが vTPM の情報によって自動的に解除されます。-
ルートボリュームが使用可能になると、
initramfsは実行フローをルートボリュームへ移行します。
-
ルートボリュームが使用可能になると、
アテステーション: 仮想マシンテナントはシステムへのアクセス権を取得します。彼らはリモートでアテステーションを実行して、VM が改ざんされていない機密仮想マシン (CVM) であることを確認できます。
- アテステーションは、AMD SP および vTPM からの情報に基づいて実行されます。
- このプロセスにより、RHEL インスタンスおよび AMD プロセッサーの初期 CPU とメモリーの状態の真正性と信頼性が確認されます。
- TEE: このプロセスでは、仮想マシンが信頼できるセキュアな環境で起動されるように、Trusted Execution Environment (TEE) を構築します。
6.2. AMD SEV SNP を使用して Amazon Web Services 上で RHEL インスタンスを設定する リンクのコピーリンクがクリップボードにコピーされました!
信頼できるブート環境を作成するには、Amazon Web Services (AWS) 上の Red Hat Enterprise Linux (RHEL) インスタンスに対して、AMD Secure Encrypted Virtualization with Secure Nested Paging (SEV-SNP) を設定します。SEV-SNP は、仮想マシンデータをハイパーバイザーおよび AWS から分離する機能であり、AMD EPYC プロセッサー搭載ホストでのみサポートされています。
前提条件
-
awscli2、openssh、openssh-clientsパッケージがインストールされている。 - サポート対象リストにある AMD EPYC プロセッサー搭載マシンタイプを使用して、AWS EC2 インスタンスが作成されている。詳細は、サポートされているインスタンスタイプ を参照してください。
RHEL インスタンスで SEV-SNP が有効になっているかどうかを確認しました。
$ aws ec2 describe-instances --instance-ids <example_instance_id> \ --region <example_region>... "CpuOptions": { "CoreCount": 2, "ThreadsPerCore": 2, "AmdSevSnp": "enabled" }, ...注記AWS 上で AMD SEV-SNP を使用して RHEL インスタンスを設定する前に、クラウドサービスプロバイダーに確認してください。ご使用の RHEL インスタンスタイプのサポート状況と認証状況を確認してください。
手順
SEV-SNP が有効になっていない場合に、RHEL AMI の ID を取得する:
$ aws ec2 describe-images \ --owners 309956199498 \ --query 'sort_by(Images, &Name)[*].[CreationDate,Name,ImageId]' \ --filters "Name=name,Values=RHEL-10*" \ --region us-east-1... "RHEL-10.0_HVM-amd64-..", "ami-0a1b2c3d4e5f67890" ...警告コマンドオプション
--owners 309956199498は変更しないでください。これは、Red Hat イメージを表示するためのアカウント ID です。AWS GovCloud のイメージをリスト表示する必要がある場合は、--region us-gov-west-1と--owners 219670896067を使用します。AMD SEV-SNP を有効にした RHEL インスタンスを起動します。
$ aws ec2 run-instances \ --image-id <example-rhel-10-ami-id> \ --instance-type m6a.4xlarge \ --key-name <example_key_pair_name> \ --subnet-id <example_subnet_id> \ --cpu-options AmdSevSnp=enabled
検証
カーネルログを確認して、SEV-SNP のステータスを検証します。
$ dmesg | grep -i sev... [ 7.509546] Memory Encryption Features active: AMD SEV SEV-ES SEV-SNP [ 8.469487] SEV: Using SNP CPUID table, 64 entries present. [ 9.433348] SEV: SNP guest platform device initialized. [ 33.314380] sev-guest sev-guest: Initialized SEV guest driver (using vmpck_id 0) ...
第7章 UKI を使用したパブリッククラウドプラットフォーム上での RHEL の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux (RHEL) インスタンスが信頼できないストレージからセキュアなブートプロセスを実行するようにするには、Unified Kernel Image (UKI) を使用します。これは、パブリッククラウドプラットフォーム上の機密仮想マシン (CVM) に適用されます。
7.1. 統合カーネルイメージの概要 リンクのコピーリンクがクリップボードにコピーされました!
セキュアブート保護をブートチェーン全体に拡張するには、Unified Kernel Image (UKI) を使用します。
- UKI コンポーネント
統合カーネルイメージ (UKI) は、統合拡張ファームウェアインターフェイス (UEFI) ポータブル実行可能ファイル (PE) バイナリーです。これは、UEFI 環境向けオペレーティングシステムの必須コンポーネントをまとめてパッケージ化したものです。UKI バイナリーコンポーネントは、initramfs とカーネルコマンドラインを含めることで、セキュアブートの適用範囲を拡張します。Initramfs は Linux の起動プロセスの一部です。カーネルコマンドラインでは、パラメーターを定義するためのアクセスが制限されています。UKI バイナリーに含まれる主なコンポーネントは以下のとおりです。
-
.linuxセクションには Linux カーネルイメージが格納されます。 -
.initrdセクションには、初期 RAM ファイルシステムinitramfsが格納されます。 -
.cmdlineセクションにはカーネルコマンドラインが格納されます。 -
.sbatなどの追加セクション。 - Red Hat の署名。
- プリビルド済みの
initramfsを搭載した RHEL UKI の機能
- ブートチェーン内のオブジェクトを、悪意のあるエージェントまたはコンポーネントが変更することを禁止します。
-
プリビルド済みの
initramfsがあるため、ユーザーは独自のinitramfsを構築する必要がなく、結果としてカーネルのインストールが高速化されます。 -
仮想マシン (VM)、コンテナー、クラウドインスタンスなど、すべてのインストール環境で同様の設定になっているため、事前に構築された
initramfsシステムをサポートします。 -
x86_64アーキテクチャーをサポートします。 -
kernel-uki-virtパッケージが含まれています。 - 仮想マシンおよびクラウドインスタンス向けに構築されています。
- ブートプロセスの柔軟性の低下による UKI の制限
-
UKI を構築する際、オペレーティングシステムのベンダーは
initramfsを作成します。その結果、リストされているカーネルモジュールと含まれているカーネルモジュールは静的なものです。この制限に対処するには、systemdのシステム拡張機能と設定拡張機能を使用できます。 - カーネルのコマンドラインパラメーターは静的であるため、異なるインスタンスサイズやデバッグオプションのためのパラメーターの使用が制限されます。
この制限を回避するには、UKI コマンドライン拡張機能を使用できます。
- UKI セキュアブートプロセス
起動時にシステムが不正に変更されないようにするには、Unified Kernel Image (UKI) のセキュアブートメカニズムを使用します。セキュアブートで UKI を使用する場合、システムはブートチェーン内の各コンポーネントを検証し、システムの整合性を確保し、悪意のあるコードの実行を防止します。クラウド上の Red Hat Enterprise Linux (RHEL) のセキュアブートプロセスは以下のとおりです。
UEFI ファームウェア: ブートプロセスは、UEFI (Unified Extensible Firmware Interface) ファームウェアから始まります。
- 従来の basic input/output system (BIOS) ファームウェアはサポートされていないため、Red Hat Enterprise Linux (RHEL) UKI の起動には UEFI ファームウェアが必要です。
Shim ブートローダー:UEFI ファームウェアから UKI (PE バイナリー) を直接起動するのではなく、
shimブートローダーを使用して起動します。-
shimには、Machine Owner Key (MOK) やセキュアブートアドバンストターゲティング (SBAT) などの追加のセキュリティーメカニズムが含まれています。
-
署名検証 (セキュアブート UEFI メカニズム): ブート中に、
shim はUKI バイナリーを読み取り、セキュアブート UEFI メカニズムが UKI の署名を検証します。-
この署名検証は、システムのセキュアブート許可署名データベース (
db)、MOKデータベース、およびshimバイナリーの組み込みデータベースに保存されている信頼できる鍵に対して行われます。 - 署名キーが有効であれば、検証は成功します。
-
この署名検証は、システムのセキュアブート許可署名データベース (
SBAT 検証: 署名検証の直後、
shimブートローダーは起動時に SBAT ルールを検証します。-
SBAT 検証中、システムは、
.sbatセクションを使用して、UKI に組み込まれているsystemd.rhelやlinux.rhelなどのコンポーネントの世代番号を、shimブートローダーの値と比較します。 shim内のコンポーネントの世代番号が UKI の世代番号よりも大きい場合、信頼できる鍵で署名されていても、バイナリーは自動的に破棄されます。世代番号は、
shimやgrubなどの UEFI アプリケーションのバージョン識別子であることに注意してください。
-
SBAT 検証中、システムは、
-
展開と実行: 検証が成功すると、制御は
shimから UKI 内のsystemd-stubコードに渡され、ブートプロセスが続行されます。 systemd-stub アドオン: 実行時に、
systemd-stubは、.cmdlineセクション (プレーンテキストのカーネルコマンドライン) と.initrdセクション (一時的なルートファイルシステム) の内容を展開して、ブートプロセスに使用します。systemd-stubは、PE バイナリーでもある UKI アドオンを読み込み、その署名を検証し、アドオンの.cmdlineコンテンツを追加して UKI のカーネルコマンドラインを安全に拡張することに注意してください。systemd-stubは、アドオンを 2 つの場所から読み込みます。-
Extensible Firmware Interface (EFI) システムパーティション (ESP) 上の
/loader/addons/ディレクトリーにあるグローバル (UKI 非依存) アドオン。 -
ESP 上の
/EFI/Linux/<UKI-name>.extra.d/ディレクトリーからの UKI ごとのアドオン。
-
Extensible Firmware Interface (EFI) システムパーティション (ESP) 上の
制御は
systemd-stubから Linux カーネルに渡され、オペレーティングシステムの起動プロセスが続行されます。ここから先は、UKI メカニズムを使用したセキュアブートは、標準的なカーネルブートプロセスに従います。