【AWSサービス 基礎編】AWS Service Catalog でセルフサービスポータルを構築する

目次

概要

AWS Service Catalog は、組織で承認された IT サービスのカタログを作成・管理し、エンドユーザーがセルフサービスでリソースをプロビジョニングできる仕組みを提供するサービスです。管理者が CloudFormation テンプレートを「製品」として登録し、ユーザーはカタログから必要な製品を選んで起動するだけで、承認済みの構成でリソースを作成できます。

組織が大きくなると、各チームが自由に AWS リソースを作成することでセキュリティやコンプライアンスの基準を満たさない構成が生まれるリスクがあります。Service Catalog を使うことで、管理者が事前に承認した構成のみをユーザーに提供し、ガバナンスを維持しながらリソースのプロビジョニングを効率化できます。

本記事では、Service Catalog でポートフォリオと製品を作成し、エンドユーザーが製品を起動する一連の流れを体験します。

Service Catalog の全体像(管理者がポートフォリオ・製品を作成し、エンドユーザーがカタログから製品を起動する流れ)の図解
Service Catalog の全体像(管理者がポートフォリオ・製品を作成し、エンドユーザーがカタログから製品を起動する流れ)の図解

この記事のメリット

  • AWS Service Catalog の基本概念と、組織のガバナンスにおける役割を理解できる
  • ポートフォリオと製品の関係性を把握できる
  • CloudFormation テンプレートを製品として登録する手順を習得できる
  • エンドユーザーとして製品を起動する体験ができる
  • 制約機能を使ったガバナンスの強化方法を学べる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

AWS Service Catalog の主要概念

クラウドおさる

とひさん、AWS Service Catalog って名前だけ聞くとショッピングサイトみたいですけど、どういうサービスですか?

土肥

いい質問だね。Service Catalog は、組織で承認された AWS リソースの構成を「カタログ」として管理して、エンドユーザーがそこから選んで起動できる仕組みなんだ。いくつかの概念で構成されているから、まず全体像を見てみよう。

ポートフォリオ、製品、プロビジョニング済み製品の階層関係を示す図
ポートフォリオ、製品、プロビジョニング済み製品の階層関係を示す図
概念説明
ポートフォリオ製品のコレクション。アクセス権限やガバナンス設定の単位
製品CloudFormation テンプレートで定義された AWS リソースのセット
プロビジョニングアーティファクト製品のバージョン。テンプレートの各バージョンに対応
プロビジョニング済み製品ユーザーが起動した製品のインスタンス(作成された CloudFormation スタック)
制約製品の起動条件やパラメータを制限するルール
クラウドおさる

ポートフォリオが入れ物で、その中に製品が入っていて、ユーザーが製品を起動するとプロビジョニング済み製品になる…という流れですね。

土肥

そのとおり。プロビジョニングアーティファクトっていうのは製品のバージョン管理の仕組みで、テンプレートを更新したら新しいバージョンとして登録できるんだ。

クラウドおさる

「制約」っていうのは何ですか?

土肥

制約は製品の起動条件やパラメータを制限するルールだよ。これについては後で詳しく説明するね。

ポートフォリオ

クラウドおさる

ポートフォリオについてもう少し詳しく教えてください。ただの製品のグループなんですか?

土肥

製品のグループなんだけど、ポートフォリオ単位でいろいろ管理できるのがポイントなんだ。主に3つの機能があるよ。

  • アクセス管理: IAM ユーザー、グループ、ロールに対してポートフォリオへのアクセスを付与
  • 制約の設定: 製品の起動ロールやパラメータの制限を定義
  • 共有: 他の AWS アカウントや Organizations と共有可能
クラウドおさる

なるほど、誰がどの製品を使えるかをポートフォリオ単位で制御するんですね。

土肥

そうだね。例えば「開発チーム用ポートフォリオ」と「データサイエンスチーム用ポートフォリオ」を分けて、それぞれに適切な製品とアクセス権限を設定する、といった使い方ができるよ。さらに他のアカウントや Organizations と共有もできるから、マルチアカウント環境でも使いやすいんだ。

製品

クラウドおさる

製品は CloudFormation テンプレートがベースになるんですよね?

土肥

そうだよ。製品は CloudFormation テンプレートをベースとした AWS リソースの定義なんだ。1つの製品に対して複数のバージョン、つまりプロビジョニングアーティファクトを持つことができるよ。

クラウドおさる

テンプレートを改良したら新しいバージョンとして追加すればいいんですね。

土肥

そのとおり。古いバージョンも残しておけるから、必要に応じて特定のバージョンを使い続けることもできるんだ。

制約

クラウドおさる

さっき出てきた「制約」について詳しく教えてもらえますか?

土肥

制約はポートフォリオ内の製品に対して設定するルールだよ。いくつかのタイプがあるんだ。

制約タイプ説明
起動制約製品起動時に使用する IAM ロールを指定。ユーザーに直接リソース作成権限がなくても製品を起動可能にする
テンプレート制約CloudFormation パラメータの値を制限する(例: インスタンスタイプを t3.micro のみに制限)
通知制約製品のイベントを SNS トピックに通知する
タグ更新制約プロビジョニング済み製品のタグ更新を許可または禁止する
クラウドおさる

テンプレート制約を使えば、ユーザーが高額なインスタンスタイプを選べないようにする、みたいなことができるんですね。

土肥

そうそう。コスト管理やセキュリティポリシーの観点で、パラメータの選択肢を絞りたいときに便利だよ。通知制約を使えばイベントを SNS に飛ばして監視もできるしね。

起動制約の重要性

クラウドおさる

制約の中でも「起動制約」が特に重要だと聞いたんですが、なぜですか?

土肥

これはガバナンスの要だよ。起動制約を設定しない場合、エンドユーザーは製品内の AWS リソースを作成するための IAM 権限を直接持っている必要があるんだ。

クラウドおさる

それだと、ユーザーに強い権限を渡さないといけなくなりますね…。

土肥

そうなんだ。でも起動制約を設定すれば、製品起動時に指定した IAM ロールが使われるから、エンドユーザー自身の権限は最小限でOKなんだよ。ユーザーには Service Catalog を操作する権限だけ渡しておいて、実際のリソース作成は起動制約で指定したロールが行う、という仕組みだね。

クラウドおさる

なるほど、最小権限の原則を守りながらセルフサービスを実現できるわけですね。

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

前提条件

  • リージョン: ap-northeast-1(東京)
  • 以下の IAM ロールが作成済みであること
リソース種別リソース名用途
IAM ロールSCLaunchRole製品起動時に Service Catalog が引き受けるロール。信頼されたエンティティは servicecatalog.amazonaws.com、AmazonS3FullAccess と AWSCloudFormationFullAccess をアタッチ

手順内で作成するリソースは以下のとおりです。

リソース種別リソース名用途
ポートフォリオEngineering-Portfolio製品を管理するポートフォリオ
製品S3-BucketS3 バケットを作成する製品
プロビジョニング済み製品my-s3-bucketエンドユーザーとして起動した製品

CloudFormation テンプレートを準備する

製品として登録するための CloudFormation テンプレートを用意します。以下の内容を sc-s3-bucket.yaml としてローカルに保存します。パラメータの説明(Description)に日本語を使うと、製品起動画面で文字化けして表示されることがあるため、英語で記述しています。

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Service Catalog - S3 Bucket'
Parameters:
  BucketName:
    Type: String
    Description: 'S3 bucket name (prefix)'
  Environment:
    Type: String
    Default: 'dev'
    AllowedValues:
      - dev
      - stg
      - prod
    Description: 'Environment name'
Resources:
  S3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: !Sub '${BucketName}-${Environment}'
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
Outputs:
  BucketArn:
    Value: !GetAtt S3Bucket.Arn
    Description: 'ARN of the created S3 bucket'

ポートフォリオを作成する

  • AWSマネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します
  • 上部の検索バーに Service Catalog と入力し、表示された「Service Catalog」を選択します
  • 左側ナビゲーションの「管理者」→「ポートフォリオ」を選択し、「ポートフォリオの作成」をクリックします
  • 以下の項目を入力します
  • ポートフォリオ名: Engineering-Portfolio
  • ポートフォリオの説明: エンジニアリングチーム向けの承認済みリソースカタログ
  • 所有者: Engineering-Team(チーム名や担当者名)
  • 「作成」をクリックします
ポートフォリオ作成画面(名前、説明、所有者の入力)
ポートフォリオ作成画面(名前、説明、所有者の入力)
  • ポートフォリオの一覧に戻り、「ポートフォリオが正常に作成されました」と表示され、Engineering-Portfolio が一覧に追加されます
ポートフォリオ作成完了画面(一覧に Engineering-Portfolio が表示された状態)
ポートフォリオ作成完了画面(一覧に Engineering-Portfolio が表示された状態)

製品を作成してポートフォリオに追加する

  • 一覧の Engineering-Portfolio をクリックして詳細画面を開き、「製品」タブで「製品を作成」をクリックします
  • 「製品の詳細」で以下の項目を入力します
  • 製品タイプ: CloudFormation(デフォルト)
  • 製品名: S3-Bucket
  • 製品の説明: 暗号化とパブリックアクセスブロックが設定された S3 バケットを作成します
  • 所有者: Engineering-Team
  • 「バージョンの詳細」で以下を設定します
  • バージョンソース: 「テンプレートファイルの使用」を選択
  • 「ファイルの選択」から準備した sc-s3-bucket.yaml をアップロードします
  • バージョン名: v1.0
  • その他の項目はデフォルトのままにし、「製品を作成」をクリックします
製品作成画面(製品名、説明、テンプレートのアップロード設定)
製品作成画面(製品名、説明、テンプレートのアップロード設定)
  • ポートフォリオの詳細画面に戻り、「製品」タブに S3-Bucket が追加されます(表示されない場合はページを再読み込みします)
製品作成完了画面(ポートフォリオの製品タブに S3-Bucket が表示された状態)
製品作成完了画面(ポートフォリオの製品タブに S3-Bucket が表示された状態)

ポートフォリオにアクセスを付与する

  • ポートフォリオ詳細画面の「アクセス」タブを選択し、「アクセス権の付与」をクリックします
  • アクセスタイプは「IAM Principal」(デフォルト)のままにします
  • 「グループ」「ロール」「ユーザー」のタブから、アクセスを付与する IAM エンティティを選択します。ここでは「ユーザー」タブで、いま操作している IAM ユーザーにチェックを入れます(後の手順でこのユーザーが製品を起動します)
  • 「アクセス権を付与」をクリックします
アクセス権の付与画面(ユーザータブで IAM ユーザーを選択した状態)
アクセス権の付与画面(ユーザータブで IAM ユーザーを選択した状態)

起動制約を追加する

  • ポートフォリオ詳細画面の「制約」タブを選択し、「制約を作成」をクリックします
  • 以下の項目を設定します
  • 製品: S3-Bucket を選択
  • 制約タイプ: 起動 を選択
  • 「起動の制約」セクションで以下を設定します
  • メソッド: 「IAM ロールを選択」(デフォルト)
  • IAM ロール: SCLaunchRole を選択
  • 「作成」をクリックします
起動制約の作成画面(製品、制約タイプ、IAM ロールの選択)
起動制約の作成画面(製品、制約タイプ、IAM ロールの選択)

エンドユーザーとして製品を起動する

  • 左側ナビゲーションの「プロビジョニング」→「製品」を選択します
  • エンドユーザー向けの製品リストに S3-Bucket が表示されます
  • S3-Bucket をクリックし、「製品を起動」をクリックします
  • 以下の項目を入力します
  • プロビジョニングされた製品の名前: my-s3-bucket
  • 製品バージョン: v1.0(1 つしかないため選択済み)
  • パラメータ BucketName: 一意になるバケット名のプレフィックス(例: csl-service-catalog-demo-2026)
  • パラメータ Environment: dev(デフォルト)
  • 「製品を起動」をクリックします
製品起動画面(パラメータの入力)
製品起動画面(パラメータの入力)

プロビジョニング結果を確認する

  • プロビジョニングされた製品 my-s3-bucket の詳細画面に遷移します。「ステータス」は最初「変更中」で、1〜2 分ほどで「使用可能」になります
  • 「出力」タブで、作成された S3 バケットの ARN(BucketArn)を確認できます。バケット名は <BucketName>-dev のようにパラメータから組み立てられています
  • 「リソース」タブでは、裏側で作成された CloudFormation スタックのリソース(S3Bucket)を確認できます
プロビジョニングされた製品の詳細画面(ステータスが使用可能、出力タブにバケット ARN が表示)
プロビジョニングされた製品の詳細画面(ステータスが使用可能、出力タブにバケット ARN が表示)

まとめ

  • AWS Service Catalog は承認済みの IT サービスをカタログとして提供するサービス
  • ポートフォリオで製品をグループ化し、アクセス管理と制約を設定できる
  • 製品は CloudFormation テンプレートで定義し、バージョン管理が可能
  • 起動制約により、エンドユーザーに最小権限を付与しながらリソース作成を許可できる
  • テンプレート制約でパラメータの値を制限し、ガバナンスを強化できる
  • エンドユーザーはカタログから製品を選ぶだけで、承認済みの構成でリソースをプロビジョニングできる

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次