AWS STSを使ったROSAのデプロイ

こんにちは、Red Hatでソリューションアーキテクトをしている石川です。 これまでにも何度かこちらのブログでROSA(Red Hat OpenShift on AWS)についての記事を扱ってきましたが、今回はAWS STSを使ったROSAのデプロイについてご紹介したいと思います。

過去のROSA関連記事はこちら rheb.hatenablog.com rheb.hatenablog.com rheb.hatenablog.com

AWS STSとは?

AWS STSとはAWS Security Token Serviceの略称です。STSの説明としてAWSのこちらのドキュメントには以下のように記載されています。(一部抜粋)

AWS リソースへのアクセスをコントロールできる一時的セキュリティ認証情報を持つ、
信頼されたユーザーを作成および提供することができます。 

つまり特定のAWSのリソースを使用するために、一時的な認証情報を発行する事ができるサービスです。 またSTSによる一時的な認証情報の利点について、ドキュメントには以下のように記載されています。

これらの違いから、一時的認証情報を使用する利点は次のようになります。
・アプリケーションの長期の AWS セキュリティ認証情報を配布したり埋め込んだりする必要がありません。
・ユーザーに対して AWS ID を定義せずに AWS リソースへのアクセスを許可できます。
 一時的認証情報はロールおよび ID フェデレーションの基本となります。
・一時的セキュリティ認証情報の有効期限は限られているので、認証情報が不要になった際に
 ローテーションしたり、明示的に取り消したりする必要がありません。一時的セキュリティ認証情報の
 有効期限が切れると、再利用することはできません。認証情報が有効な期間を、最大限度まで指定できます。

AWS STSを利用することで、永続的ではない一時的な認証情報によりAWSをよりセキュアに使うことが可能となります。
ROSAにおいてはSTSを使用することで利用者のアカウントにIAMユーザーを新規追加することなく、クラスタを作成、運用することができるようになります。そのため社内のポリシー等でユーザー作成が難しい場合でもROSAをお使い頂くことができるようになります。

ROSAでのSTS活用

過去記事でも紹介されているように、ROSAのクラスタ作成はrosa CLI使用して行います。
STSを使用しない場合、クラスタ作成のrosaコマンド実行時にIAMユーザー『osdManagedAdmin』が作成され、そこに『AdministratorAccess』というポリシーが付与されます。 f:id:jpishikawa:20210922161849p:plain

またクラスタ作成が完了すると、ROSAクラスタのOperatorが使用する複数のユーザーが作成され、それぞれ必要なポリシーが付与されます。 f:id:jpishikawa:20210922161923p:plain

STSを使用する場合のIAMロール、ポリシーの作成

STSを使用する場合、クラスタ作成に際してIAMユーザーの作成は行いません。 通常のROSAクラスタ作成ではまずrosa initコマンドを実行しますが、STSの場合以下のコマンドを実行し、必要なIAMロールとポリシーの作成を行います。

rosa create account-roles --version 4.8 --prefix ManagedOpenShift

作成されたロール
f:id:jpishikawa:20210922161952p:plain

作成されたポリシー f:id:jpishikawa:20210922162025p:plain

作成されるロールとポリシーの詳細については以下のドキュメントをご参照下さい。 access.redhat.com

IAMロールの確認

作成されたロールのうち、ROSAのインストールに用いられるロール『ManagedOpenShift-Installer-Role』を見てみましょう。 こちらのロールにはポリシー『ManagedOpenShift-Installer-Role-Policy』がアタッチされています。このポリシーでROSAクラスタのインストールに必要なアクションを定義しています。 f:id:jpishikawa:20210922162055p:plain

またここで信頼関係タブを開くと、このロールを利用してインストールを行うRed Hatのアカウントと、STSを利用するための"sts:AssumeRole"が設定されているのが確認できます。
f:id:jpishikawa:20210922162119p:plain

ユーザーアカウントとRed Hatアカウント、STSの関係性を図示すると以下のようなイメージとなります。
Red HatアカウントがSTSを介して一時的な認証情報を得ることで、ROSAクラスタの構築や運用が可能となります。

f:id:jpishikawa:20210922162150p:plain

STSを使ったクラスタの作成

必要なロールとポリシーが作成された状態で以下のコマンドを実行すると、STSを使用したクラスタ作成が開始されます。

rosa create cluster --cluster-name ${name} --sts

クラスタ作成の開始後、追加で以下二つのコマンドを実行します。
それぞれROSAクラスタのOperatorが利用するIAMロールの作成と、OIDCプロバイダの設定を追加するコマンドとなっています。

rosa create operator-roles -c $name --mode auto --yes
rosa create oidc-provider -c $name --mode auto --yes

STSを使用しない場合、Operator用に専用のIAMユーザーが追加されていましたが、STSを使うことで、ユーザーを追加せずに必要なアクションを実行可能なロールのみ作成することとなります。

上記のコマンドを実行するとSTSを使ったROSAクラスタの作成に必要な操作は完了です。あとは以下のコマンドを実行し、構築の状況を見ながら40分程度待つとクラスタ作成が完了します。 クラスタ作成完了後は通常のROSAと同様に使い始めることができます。

rosa logs install --cluster=$name  --watch

クラスタを削除する場合は、以下のコマンドを実行します。

rosa delete cluster -c $name

この際、IAMロール、ポリシーについては自動的に削除されないため、AWSのコンソールかCLIから削除を実施して下さい。

まとめ

AWS STSを使ったROSAのデプロイいかがだったでしょうか。 AWSに慣れていないとIAMやSTSの仕組みを理解するのが中々大変ですが、ROSAのデプロイ自体は今回ご紹介したコマンドから簡単に実施することができます。 是非一度デプロイしてみてSTSを使ったROSAを体験してみて下さい。

参考ドキュメント

access.redhat.com

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。