AWS 入門ブログリレー 2024 〜AWS Service Catalog編〜

2024.05.30

こんにちは、AWS 事業本部の鈴木純です。

当エントリは弊社 AWS 事業本部による『AWS 入門ブログリレー 2024』の 56 日目のエントリです。

このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。

AWS をこれから学ぼう! という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2024 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。

では、さっそくいってみましょう。今回のテーマは『AWS Service Catalog』です。

AWS Service Catalogとは

Service Catalog は、AWS で承認された IT サービスのカタログを作成および管理できるサービスです。

ここの IT サービスとは AWS サービスで、EC2 や VPC、RDS など普段利用しているサービスをカタログ化することでユーザーに使いやすい形で提供できます。

このカタログは CloudFormation テンプレート、もしくは Terraform Cloud を使って作成できます。

AWS Service Catalogの概要

Service Catalog には複数の構成要素があり、すこし複雑なため簡単に説明していきます。

登場人物

まず、登場人物としてカタログ管理者とエンドユーザーが存在します。

カタログ管理者

カタログ管理者はエンドユーザーに利用してもらうための製品作成やアクセス権限などを包括的に管理する人です。

権限としては「AWSServiceCatalogAdminFullAccess」相当のポリシーが必要となります。

このカタログ管理者が Service Catalog の設定全てを行う必要があるため、後述する Service Catalog の構成要素については、しっかりと理解しておきましょう。

エンドユーザー

エンドユーザーはアクセスを許可されている製品を起動するだけです。権限は「AWSServiceCatalogEndUserFullAccess」相当の権限を持っている必要があります。

必要な権限を持っていたとしても、カタログ管理者からポートフォリオへのアクセス許可を付与されていないと利用できない点は注意しましょう。

Service Catalogの構成要素

Service Catalog における構成要素を簡単に説明します。

カタログ管理者がエンドユーザーにカタログを利用してもらうためには、以下の構成要素を理解しておく必要があります。

ポートフォリオ

ポートフォリオは製品の集合で、それに伴う設定情報(制約やアクセス許可など)を含みます。Service Catalog を利用する際は、このポートフォリオの単位で設定することになるため、全部まるっと含まれたものだと思ってください。

このポートフォリオの単位でエンドユーザーに配布されるので、エンドユーザーは配布されたポートフォリオの中から製品を選択して起動します。

今後登場する製品や制約など全てポートフォリオの中に含まれると覚えておいてください。他の AWS アカウントに共有する際もポートフォリオ単位で共有されます。

製品

CloudFormation テンプレートや Terafform Cloud から製品を作成でき、ポートフォリオに紐づけて利用します。

紐づけた製品は配布されたポートフォリオ内に含まれます。製品を起動することで AWS サービスがデプロイされます。

入門ライブラリという製品群があらかじめ用意されているため、そちらを活用可能です。

製品はバージョン管理が可能で、製品を更新するとエンドユーザーは利用中の製品を新しいバージョンに更新できます。

エンドユーザーが起動した製品は「プロビジョニングされた製品」から確認できます。

制約

製品単位に制限を追加できる機能です。この制約には以下のパターンがあります。

  • 起動
  • 通知
  • タグの更新
  • StackSet
  • テンプレート

これらを活用することで、製品を起動する時のパラメータを制御したり、起動するときの権限を指定できたりします。少し細かい話になるので、詳細は以下ブログを参照してください。

アクセス許可

ポートフォリオへのアクセス権限を付与します。利用できる IAM プリンシパル(ユーザー/グループ/ロール)、もしくはプリンシパル名でアクセス許可を割り当てることで、エンドユーザーが製品を起動できるようになります。

プリンシパル名でのアクセス許可を行う場合は、ワイルドカード(*?)を使った許可も可能です。

エンドユーザーは冒頭で説明した「AWSServiceCatalogEndUserFullAccess」相当の権限を持っていることが前提です。加えてカタログ管理者からのアクセス許可を付与されたユーザーが製品を起動できる点に注意してください。

共有

ポートフォリオを他 AWS アカウントに共有できます。AWS アカウント単位でも可能ですが、Organizations 環境であれば、組織内へ共有もできます。

組織に所属しない AWS アカウントへ共有した場合は、受信側でインポート対応が必要になります。

タグ

ポートフォリオに設定するタグです。このタグはあくまでポーロフォリオ自体に設定されるため、エンドユーザーが作成した製品の AWS リソースにタグを付与したい場合は、後述する TagOptions の機能を活用してください。

TagOptions

製品からデプロイされる AWS サービスにタグのテンプレート群です。作成した TagOption をポートフォリオに紐づけることで、エンドユーザーが起動した製品のリソースにタグを強制的に付与できます。

以下のようにポートフォリオに TagOption を関連付けます。

このポートフォリオから製品を起動すると、TagOptions で設定したタグが必須になります。

以上の項目がポートフォリオで設定できるものになります。

やってみる

構成要素で紹介した機能の数は多いですが、Service Catalog を利用する上で最低限必要なのは以下 3 つだけです。他の項目は必要に応じて利用してください。

  1. ポートフォリオの作成
  2. 製品の作成とポートフォリオへの紐付け
  3. エンドユーザーへのアクセス許可

どんなサービスなのかイメージしやすいように、最低限のポートフォリオと製品で起動してみます。

ポートフォリオの作成

Service Catalog のコンソールからポートフォリオを開いて、ポートフォリオを作成します。

ポートフォリオ名と所有者を入力します。所有者はポートフォリオの作成者を表すためのもので、明確な決まりはありません。運用に併せて部署名などを入力するケースもあります。

製品の作成とポートフォリオへの紐付け

次にポートフォリオに製品を追加します。自前の CloudFormation テンプレートで作成した製品を追加しても良いのですが、今回は入門ライブラリから製品を追加してみます。

入門ライブラリを開いて、検索窓にAmazon S3 Private Encrypted Bucketと検索して出てきた製品をポートフォリオに追加します。

既存のポートフォリオから先ほど作成したポートフォリオを選択して追加しましょう。これで製品がポートフォリオに紐づきました。

エンドユーザーへのアクセス許可

最後にエンドユーザーへ作成したポートフォリオのアクセス権限を付与していきます。今回はカタログ管理者が製品を起動したいエンドユーザーも兼ねているので、ログインしている IAM ロールに権限を付与していきます。

アクセス許可がない場合は、プロビジョニング > 製品を確認しても起動できる製品に出てきません。

作成したポートフォリオの詳細を開いて、アクセスタブからアクセス権を付与します。

アクセス権を付与したい IAM プリンシパルを選択して付与しましょう。

これでログインしている IAM ロールにポートフォリオへの権限を付与できました。

製品が起動できるようになっているか確認すると、ポートフォリオに紐づく製品が表示されるようになりました。

あとは製品を起動すれば、製品に紐づく CloudFormation テンプレートからリソースが作成されます。

組織内への共有

ここまでで基本の機能は説明しましたが、Service Catalog には Organizations 連携して活用するケースもあります。Service Catalog を利用するケースではマルチアカウント運用で活躍する場面もあるため、簡単に触れておきます。

Service Catalogの委任

他の AWS サービスと同様に Service Catalog にも管理者の委任が可能です。管理アカウントにはなるべく権限を持たせないのがベストプラクティスなので、委任しておくのがおすすめです。

委任管理者からの共有については以下公式ページを参照ください。

AWS Organizations との共有

プリンシパル名の共有

ポートフォリオを共有する際に、組織内へ共有する機能があります。組織内に共有する場合は、プリンシパル名を含めて共有が可能です。

プリンシパル名を共有することで、アクセス許可を付与したポートフォリオを共有できます。

プリンシパル名にはワイルドカードが使えるため、IAM Identity Center などで作成されたロール名も共有できます。その場合メンバーアカウント上でアクセス許可を付与しなくても製品を起動できるようになっています。

そのため、組織へ共有するポートフォリオを作成する場合は、エンドユーザーが利用するプリンシパルを踏まえて検討しましょう。

ポートフォリオを共有する際のプリンシパル名の共有

料金

Service Catalog は、アカウントが Service Catalog に対して行った API コールの数に応じて料金が決まります。

API 呼び出し数が 1~1000 件までは無料、それ以降は 0.0007USD となります。

詳細は公式ページを参照してください。

Service Catalog 自体はそれほど料金がかかることはないですが、デプロイしたリソースにはもちろん料金が発生するので注意しましょう。

おわりに

Service Catalog はアクセス権限の付与が独特で、若干取っ付きにくいサービスではありますが慣れればとても便利なサービスです。

ぜひ自分でよく使うテンプレートなどをカタログ化して活用していきましょう。

以上、「AWS 入門ブログリレー 2024」の「AWS Service Catalog」編でした。

次回、2024/5/30 は弊社 荒平 祐次(arap) による『AWS サポート』の予定です!

参考