17.2. チュートリアル: AWS STS を使用する ROSA の説明
このチュートリアルでは、Red Hat OpenShift Service on AWS (ROSA) がユーザーの Amazon Web Services (AWS) アカウント内のリソースと対話できるようにする方法を 2 つ紹介します。ここでは、Security Token Service (STS) を使用する ROSA が必要な認証情報の取得に使用するコンポーネントとプロセスについて詳しく説明します。また、STS を使用する ROSA がよりセキュアで推奨される方法である理由も説明します。
このコンテンツは現在、AWS STS を使用した ROSA Classic を扱っています。AWS STS を使用した ROSA with Hosted Control Plane (HCP) については、AWS STS と ROSA with HCP の説明 を参照してください。
このチュートリアルでは次のことを行います。
2 つのデプロイ方法を示します。
- IAM ユーザーを使用する ROSA
- STS を使用する ROSA
- 2 つの方法の違いを説明します。
- STS を使用する ROSA がよりセキュアで推奨される方法である理由を説明します。
- STS を使用する ROSA がどのように機能するかを説明します。
17.2.1. ROSA をデプロイするための各種認証方法
Red Hat は、ROSA の一部として、お客様の AWS アカウント内のインフラストラクチャーリソースを管理します。そのため、Red Hat に必要な権限を付与する必要があります。必要な権限を付与する方法は、現在、次の 2 つのものがサポートされています。
AdministratorAccess
ポリシーで静的 IAM ユーザー認証情報を使用するこのチュートリアルでは、この方法を "IAM ユーザーを使用する ROSA" と呼びます。これは推奨される認証方法ではありません。
AWS STS と有効期間の短い動的トークンを使用する
このチュートリアルでは、この方法を "STS を使用する ROSA" と呼びます。これは推奨される認証方法です。
17.2.1.1. IAM ユーザーを使用する ROSA
ROSA のリリース当初、認証方法は IAM ユーザーを使用する ROSA だけでした。この方法では、AdministratorAccess
ポリシーを持つ IAM ユーザーに対して、ROSA を使用する AWS アカウントに必要なリソースを作成するためのフルアクセスを付与します。その後、必要に応じてクラスターで認証情報を作成および拡張できます。
17.2.1.2. STS を使用する ROSA
STS を使用する ROSA では、AWS アカウント内のリソースへの限定的かつ短期間のアクセスをユーザーに付与します。STS による方法では、事前定義されたロールとポリシーを使用して、IAM ユーザーまたは認証されたフェデレーションユーザーに一時的な最小限の権限を付与します。通常、認証情報は要求されてから 1 時間後に期限切れになります。有効期限が切れると、認証情報は AWS によって認識されなくなり、その認証情報を使用して実行される API 要求からアカウントにアクセスできなくなります。詳細は、AWS のドキュメント を参照してください。現在、IAM ユーザーを使用する ROSA と STS を使用する ROSA の両方が有効ですが、STS を使用する ROSA が優先および推奨される方法です。
17.2.2. STS を使用する ROSA のセキュリティー
STS を使用する ROSA は、以下に示すいくつかの重要な要素により、IAM ユーザーを使用する ROSA よりもセキュリティーが向上します。
- ユーザーが事前に作成する明示的かつ限定的なロールとポリシーのセット。要求されたすべての権限と使用されるすべてのロールをユーザーが把握することになります。
- サービスは、これらの権限以外の操作を一切行うことができません。
- サービスは、操作を実行する必要が生じるたびに、1 時間以内に期限切れになる認証情報を取得します。そのため、認証情報のローテーションや取り消しが不要になります。さらに、認証情報の有効期限により、認証情報の漏洩や再利用のリスクが軽減されます。
17.2.3. AWS STS の説明
ROSA は、AWS STS を使用して、短期間のセキュリティー認証情報を持つ最小限の権限を、分離された特定の IAM ロールに付与します。認証情報は、AWS の API 呼び出しを実行する各コンポーネントおよびクラスターに固有の IAM ロールに関連付けられます。この方法は、クラウドサービスのリソース管理における最小権限と安全なプラクティスの原則に沿ったものです。ROSA コマンドラインインターフェイス (CLI) ツールは、固有のタスクに割り当てられた STS のロールとポリシーを管理し、OpenShift 機能の一部として AWS リソースに対してアクションを実行します。
STS のロールとポリシーは、ROSA クラスターごとに作成する必要があります。これを容易にするために、インストールツールには、ロールをポリシーとして作成するために必要なすべてのコマンドおよびファイルと、CLI でロールとポリシーを自動的に作成できるようにするオプションが用意されています。さまざまな --mode
オプションの詳細は、カスタマイズを使用した STS を使用する ROSA クラスターの作成 を参照してください。
17.2.4. STS を使用する ROSA に固有のコンポーネント
- AWS インフラストラクチャー - クラスターに必要なインフラストラクチャーを提供します。これには、実際の EC2 インスタンス、ストレージ、ネットワークコンポーネントが含まれます。コンピュートノードでサポートされているインスタンスタイプと、コントロールプレーンとインフラストラクチャーノードの設定用に プロビジョニングされる AWS インフラストラクチャー を確認するには、AWS コンピュートタイプ を参照してください。
- AWS STS - 上記の認証方法のセクションを参照してください。
- OpenID Connect (OIDC) - クラスター Operator が AWS で認証し、信頼ポリシーを通じてクラスターのロールを引き受け、必要な API 呼び出しを実行するために STS から一時的な認証情報を取得するためのメカニズムを提供します。
ロールとポリシー - ロールとポリシーは、STS を使用する ROSA と IAM ユーザーを使用する ROSA の主な違いの 1 つです。STS を使用する ROSA の場合、ROSA で使用されるロールとポリシーは、アカウント全体のロールとポリシーと Operator のロールとポリシーに分類されます。
ポリシーは、各ロールに対して許可されるアクションを決定します。個々のロールとポリシーの詳細は、STS を使用する ROSA クラスターの IAM リソースについて を参照してください。
アカウント全体のロールは次のとおりです。
- ManagedOpenShift-Installer-Role
- ManagedOpenShift-ControlPlane-Role
- ManagedOpenShift-Worker-Role
- ManagedOpenShift-Support-Role
アカウント全体のポリシーは次のとおりです。
- ManagedOpenShift-Installer-Role-Policy
- ManagedOpenShift-ControlPlane-Role-Policy
- ManagedOpenShift-Worker-Role-Policy
- ManagedOpenShift-Support-Role-Policy
- ManagedOpenShift-openshift-ingress-operator-cloud-credentials [1]
- ManagedOpenShift-openshift-cluster-csi-drivers-ebs-cloud-credent [1]
- ManagedOpenShift-openshift-cloud-network-config-controller-cloud [1]
- ManagedOpenShift-openshift-machine-api-aws-cloud-credentials [1]
- ManagedOpenShift-openshift-cloud-credential-operator-cloud-crede [1]
ManagedOpenShift-openshift-image-registry-installer-cloud-creden [1]
- このポリシーは、下記のクラスター Operator ロールによって使用されます。Operator ロールは既存のクラスター名に依存しており、アカウント全体のロールと同時に作成できないため、2 番目のステップで作成されます。
Operator のロールは次のとおりです。
- <cluster-name\>-xxxx-openshift-cluster-csi-drivers-ebs-cloud-credent
- <cluster-name\>-xxxx-openshift-cloud-network-config-controller-cloud
- <cluster-name\>-xxxx-openshift-machine-api-aws-cloud-credentials
- <cluster-name\>-xxxx-openshift-cloud-credential-operator-cloud-crede
- <cluster-name\>-xxxx-openshift-image-registry-installer-cloud-creden
- <cluster-name\>-xxxx-openshift-ingress-operator-cloud-credentials
- 信頼ポリシーは、アカウント全体および Operator のロールごとに作成されます。
17.2.5. ROSA STS クラスターのデプロイ
以下の手順にリストされているリソースを最初から作成する必要はありません。ROSA CLI が必要な JSON ファイルを作成し、必要なコマンドを出力します。さらに、必要に応じて ROSA CLI にコマンドを実行させることもできます。
STS を使用する ROSA クラスターをデプロイする手順
- アカウント全体のロールとポリシーを作成します。
- 権限ポリシーを、対応するアカウント全体のロールに割り当てます。
- クラスターを作成します。
- Operator のロールとポリシーを作成します。
- 権限ポリシーを、対応する Operator のロールに割り当てます。
- OIDC プロバイダーを作成します。
ロールとポリシーは、ROSA CLI によって自動的に作成することも、ROSA CLI で --mode manual
フラグまたは --mode auto
フラグを利用して手動で作成することもできます。デプロイの詳細は、カスタマイズしたクラスターを作成する または クラスターのデプロイのチュートリアル を参照してください。
17.2.6. STS を使用する ROSA のワークフロー
ユーザーは、必要なアカウント全体のロールとアカウント全体のポリシーを作成します。詳細は、このチュートリアルのコンポーネントのセクションを参照してください。ロールの作成時に、クロスアカウント信頼ポリシーという信頼ポリシーが作成されます。このポリシーは、Red Hat 所有のロールがこのロールを引き受けることを許可するものです。また、EC2 サービス用の信頼ポリシーも作成されます。このポリシーは、EC2 インスタンス上のワークロードがロールを引き受けて認証情報を取得することを許可するものです。ユーザーは、対応する権限ポリシーを各ロールに割り当てることができます。
アカウント全体のロールとポリシーを作成した後、ユーザーはクラスターを作成できます。クラスターの作成を開始すると、クラスター Operator が AWS API 呼び出しを実行できるように、複数の Operator ロールが作成されます。これらのロールを、以前に作成された対応する権限ポリシーと、OIDC プロバイダーの信頼ポリシーに割り当てます。Operator ロールは、AWS リソースへのアクセスが必要な Pod を最終的に表すという点で、アカウント全体のロールとは異なります。ユーザーは IAM ロールを Pod に割り当てることができないため、Operator (ひいては Pod) が必要なロールにアクセスできるように、OIDC プロバイダーを使用して信頼ポリシーを作成する必要があります。
対応する権限ポリシーにロールを割り当てたら、最後のステップとして OIDC プロバイダーを作成します。
新しいロールが必要な場合、現在 Red Hat のロールを使用しているワークロードが AWS アカウントのロールを引き受け、AWS STS から一時的な認証情報を取得し、引き受けたロールの権限ポリシーに従ってお客様の AWS アカウント内の API 呼び出しを使用してアクションの実行を開始します。認証情報は一時的なもので、有効期間は最大 1 時間です。
ワークフロー全体を次の図に示します。
Operator は、次のプロセスを使用して、タスクを実行するために必要な認証情報を取得します。各 Operator には、Operator のロール、権限ポリシー、および OIDC プロバイダーの信頼ポリシーが割り当てられます。Operator は、ロールとトークンファイル (web_identity_token_file
) を含む JSON Web トークンを OIDC プロバイダーに渡すことによってロールを引き受けます。OIDC プロバイダーは署名された鍵を公開鍵で認証します。公開鍵はクラスターの作成時に作成され、S3 バケットに保存されます。次に、Operator は、署名されたトークンファイル内のサブジェクトがロール信頼ポリシー内のロールと一致することを確認します。このロールは、OIDC プロバイダーが許可されたロールのみを取得できるようにするためのものです。その後、OIDC プロバイダーが一時的な認証情報を Operator に返し、Operator が AWS API 呼び出しを実行できるようにします。視覚的に表した図を以下に示します。
17.2.7. STS を使用する ROSA のユースケース
クラスターのインストール時にノードを作成する
Red Hat のインストールプログラムは、RH-Managed-OpenShift-Installer
ロールと信頼ポリシーを使用して、お客様のアカウントの Managed-OpenShift-Installer-Role
ロールを引き受けます。このプロセスにより、AWS STS から一時的な認証情報が返されます。インストールプログラムは、STS から受け取った一時的な認証情報を使用して、必要な API 呼び出しの実行を開始します。インストールプログラムは必要なインフラストラクチャーを AWS に作成します。この認証情報は 1 時間以内に期限切れになり、インストールプログラムはお客様のアカウントにアクセスできなくなります。
このプロセスはサポートケースにも適用されます。サポートケースでは、インストールプログラムの代わりに Red Hat Site Reliability Engineer (SRE) がプロセスを実行します。
クラスターのスケーリング
machine-api-operator
は、AssumeRoleWithWebIdentity を使用して machine-api-aws-cloud-credentials
ロールを引き受けます。これにより、クラスター Operator が認証情報を受け取るシーケンスが開始します。その後、machine-api-operator
ロールが関連する API 呼び出しを実行して、クラスターに EC2 インスタンスをさらに追加できるようになります。