目次
はじめに
こんにちは、AWSサービスしりとりリレー12日目担当アーキテクト課のomkです。
しりとりリレーもついに12日目、いよいよ大詰めといったところでしょうか。ラストスパートに向けて良いバトンをパス出来ればと思います。
昨日のしりとりリレーは「RDS」でしたので、「S」から始まる「Service Catalog(正式名称:AWS Service Catalog)」の記事を書きたいと思います。
私個人は今まで使ったことがなかったのでやってみた系の内容となります💦
AWS Service Catalogとは
AWS公式より引用。
AWS Service Catalog では、AWS での使用が承認された IT サービスのカタログを作成および管理できます。この IT サービスには、仮想マシンイメージ、サーバー、ソフトウェア、データベース、さらに包括的な多層アプリケーションアーキテクチャまで、あらゆるものが含まれます。AWS Service Catalog により、デプロイ済みの IT サービスやアプリケーション、リソース、さらにメタデータを、一元的に管理できるようになります。一貫したガバナンスを実現して、コンプライアンス要件を満たすために役立ちます。また、ユーザーが必要とする中で、承認済みの IT サービスのみをすばやくデプロイできるようにします。
AWS Service Catalogは、CloudFormationのテンプレートからなるサービス群をカタログとして管理したり、組織間で共有したり、特定のユーザーに対して承認されたリソースのみの作成権限を与えたりすることが出来るサービスです。
エンドユーザーと呼ばれる利用者は利用したいサービス(以下、製品)をカタログから選択して起動ボタンを押すだけで製品を利用できます(裏でCloudFormationが環境を作っています)。
例えば特定のCloudFormationテンプレートで作成される開発環境があるとして、カタログに登録しておけば欲しい環境を一覧からささっと選んで作成できるわけですね。
このとき、管理者は製品の実行に対して制約を付けることができます。
例えば起動できるEC2インスタンスを料金の安いものに限定したり、Cloud Formationの実行ロールを指定したりできます。
実行ロールを指定することで、エンドユーザーにはエンドユーザーとしての権限さえあればCloud Formationで作成される各リソースに対する権限が無くても製品を利用できるので、最低限のIAMユーザー権限に絞ることも可能です。
また、特定のユーザーやグループに絞って製品の利用を許可するので安全に製品を管理できます。
今回やること
今回はポートフォリオ(製品をまとめた単位)をアカウント間で共有します。
具体的にはアカウントAで定義した製品をアカウントBに共有してアカウントBの環境にデプロイします。
この時、アカウントB上でのリソースの作成をアカウントBのIAMロールを用いて実行してくれるようにアカウントAで設定を行います。
なお、「CFn StackSets」は今回は使わずに進めます。
やってみた
CFnテンプレート作成
まずポートフォリオに載せる製品となるCloud Formationのテンプレートを作成します。
今回内容は何でもいいのでWEBサーバ環境(VPC,EC2(Apacheインストール))を作るテンプレートを作成しました。
EC2はパラメータでSSH用のキーペアを要求するようにしています。
ポートフォリオ作成
アカウントAのコンソール上で操作を進めます。
「AWS Service Catalog」のコンソールの管理者欄から「ポートフォリオ」を選択します。
作成したポートフォリオはここで管理されます。
「ポートフォリオの作成」を選択します。
「ポートフォリオ名」、「説明」、「所有者」を入力して「作成」ボタンを押すことでポートフォリオが作成されます。
作成されました。
次に製品を作成してポートフォリオに登録します。
製品登録
ナビゲーションペインから「製品」(管理者の方)を選択して「新しい製品のアップロード」を選択します。
製品名や説明等の必要情報を入力して、作成したCFnテンプレートを設定して「確認」します。問題なければ「製品の作成」から作成を行います。
次に作成した製品をポートフォリオに登録します。
作成した製品を選択して「アクション」から「ポートフォリオへの製品の追加」を選択します。対象のポートフォリオを選択して「ポートフォリオへの製品の追加」を選択します。
これでポートフォリオに登録できました。
ポートフォリオを選択して、「新しい製品のアップロード」を選択することで予めポートフォリオを指定して製品を登録することも可能です。
次に本製品を起動する際に必要な権限をIAMロールから提供するように割り当てます。
IAMロール設定
まずIAMロールを作成します。
製品の起動に必要なIAMロールは以下です。
AWS公式より引用。
起動制約として製品に割り当てる IAM ロールには、以下を使用するアクセス権限が必要です。
Amazon CloudFormation
製品の Amazon CloudFormation テンプレート内のサービス
Amazon S3 の Amazon CloudFormation テンプレートへの読み取りアクセス
これを満たすIAMロールを作成します。
まず、ユースケースを「Service Catalog」に設定します。ポリシーには「AWSCloudFormationFullAccess」、「AmazonS3ReadOnlyAccess」、本製品で必要となる「AmazonVPCFullAccess」、「AmazonEC2FullAccess」の4つポリシーを割り当てます(適宜必要なポリシーを割り当ててください)。
これでロールは完成です。
Service Catalogのコンソールに戻りまして、ポートフォリオの「制約」から「制約を追加」を選択します。
「制約」では対象ポートフォリオにおける製品に対しての制約事項(通知設定やパラメータの指定など)を設定できます。
今回は起動時の制約として先ほど作成したIAMロールを割り当てます。
制約タイプを「起動」にしてIAMロールを指定しますが、この時のIAMロールの指定方法に注意です。
今回の目的はアカウントAからアカウントBにポートフォリオを共有してアカウントBで製品を起動することにあります。
IAMロールの指定方法で「IAMロールを選択」「ARNを入力」を使用するとアカウントAのIAMロールがアカウントBにおいても割り当てられます。
アカウントAのIAMロールを指定してしまうとアカウントAの環境にスタックが作成されてしまうので今回の希望からは逸れてしまいます。
アカウントBでは共有されたポートフォリオに対して制約を変更できないのでアカウントB上でアカウントBのIAMロールを指定することは不可能です。
アカウントBではアカウントBのIAMロールを使用したいので今回は「ロール名を入力」を選択します。これによりアカウントBではアカウントAで指定したIAMロールと同じ名前のIAMロールを用いて製品が作成されます。
ちなみにIAMロールを設定しないとエンドユーザー個々人の権限に基づいてリソースが作成されます。
IAMの指定を「ロール名を入力」を選択して、ロール名、説明を入力し、「作成」を選択します。
これでIAMロールの制約が完了です。
ポートフォリオ共有
では作成したポートフォリオをアカウントBに共有します。
ポートフォリオは特定のAWSアカウントか組織(組織全体もしくは特定組織単位(OU))に共有できます。
ポートフォリオの共有メニューから「共有」を選択します。
共有方法をAWSアカウントに設定して、共有したいアカウントID(アカウントBのID)を入力します。
「共有」を選択して、これでアカウントBでポートフォリオを認識できるようになります。
これでアカウントAの操作は終了です。
あとで使うのでポートフォリオIDをコピーしておいてください。
次はアカウントBにてポートフォリオをインポートします。
ポートフォリオのインポート
アカウントBにログインしてService Catalogコンソールのナビゲーションペインから「ポートフォリオ」を選択します。
ページ表示直後は「ローカルポートフォリオ」(自己所有)が表示されているので「インポートした」を選択します。
「アクション」から「ポートフォリオをインポート」を選択します。
先ほどコピーしておいたポートフォリオIDを入力してインポートします。
表示されました。
IAMロール作成
アカウントBでアカウントAで作成したIAMロールと同様のIAMロールを作成します。
作成したIAMロールは名前で参照されるのでアカウントBのService Catalogコンソール上では特に操作は不要です。
ユーザー割り当て
ポートフォリオのエンドユーザーを設定します。
共有されたポートフォリオの「グループ、ロール、およびユーザー」から、「グループ、ロール、またはユーザーの追加」を選択します。
今回は「ReadOnlyAccess」と「AWSServiceCatalogEndUserFullAccess」のIAMポリシーをアタッチしたユーザー「omk-user」に製品の利用を許可します(ユーザーにService Catalogのエンドユーザーとしての権限があることを確認しておきましょう)。
追加されました。
製品起動
では最後に許可したユーザーで製品を起動できることを確認します。
コンソールにログインして「製品」(管理者じゃない方)を選択します。
ユーザーに許可した製品が表示されます。
「製品を起動」から案内に沿ってこの製品を起動します。
アカウントB上でのCloud Formationの実行が完了してリソースにアクセス出来たので成功です。
まとめ
こんな感じで製品を共有してみました。
製品の管理を行う上でどういった制約を設けるかが大事になってきそうですね。
提供したいサービス内容と組織内の規定から最適な管理方法を構築しましょう!
以上、お付き合いありがとうございました!!
次のブログリレーは「Service Catalog」の「G」から始まる何かです~~~~。
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!