KNOWLEDGE - COLUMN ナレッジ - コラム

【エバンジェリスト・ボイス】AWSのすゝめ ~Service Catalog編~

関連するソリューション

ID-Cross/クラウドサービス

サイバー・セキュリティ・ソリューション(CSS)部
エバンジェリスト 松岡 政之     matsuoka2_274x380

こんにちは。 CSS 部エバンジェリストの松岡です。

花粉が煩わしい季節になり、電車内やオフィスでもマスクをしていたりくしゃみが響いたりといった光景が多く見られるようになりました。
私も花粉症でして、マスクや目薬、鼻のど飴等いろいろ対策していますが、つらい日々が続きますね。
調べて驚いたのですが、なんと東京都内ではスギ花粉症の人が約半数にも上るそうです。
これだけたくさんの人が発症しているのですから、もっと国を挙げて環境整備から対策を進めてほしいですね。

それでは、本題に入ります。

AWS を運用していてユーザに特定のパラメータでの操作のみを許可したいことはないでしょうか。
例えば、 S3 バケットを作成する際にリージョンを指定させたり必ずプライベートでの作成のみとしたり、 EC2 インスタンスを作成する際に決まったサブネットやセキュリティグループを選ばせたりなどです。
特に金融系などでは海外リージョンにデータを置くことが禁止されていたりするかと思います。
EC2 インスタンス作成時に指定したサブネット以外を選んだ際に権限エラーで作成させないことくらいなら IAM ポリシーで制御することはできますが、 S3 バケット作成時のパラメータなどは IAM の設定だけでは指定させることができません。
CloudFormation のテンプレートを作って配布したとしても、結局は権限周りで思い悩むことになるでしょう。
CloudFormation については以前のコラムで紹介していますのでそちらをご参照ください。

【エバンジェリスト・ボイス】クラウドのすゝめ ~ AWS 自動化 (CloudFormation) 編~

そこで登場するのが今回のタイトルにある Service Catalog です。
Service Catalog はそれだけで何かできるサービスではなく、また個人で AWS を利用する際にはあまり必要ないサービスのため触れたことがない方も多いのではないでしょうか。
では何ができるのかというと、 CloudFormation で作成したテンプレートを登録しそのテンプレートをユーザに利用させることが出来るサービスです。
これだけ書くと何が嬉しいのかわからないですが、 Service Catalog の嬉しいところは利用ユーザに対象サービスの利用権限を直接割り当てなくても、登録したテンプレートを利用させることができる点です。

Service Catalog の利用に必要なものは以下の 3 つです。
IAMユーザ(またはロール、グループ)に割り当てるService Catalogの利用権限
② ③ のテンプレートを利用するための権限を割り当てたロール
ユーザに利用させるCloudFormationテンプレート

まず についてですが、これには管理者用の権限と利用者用の権限があります。
以下で簡単に説明しますが、詳細は AWS のドキュメントをご参照ください。

外部サイト: AWS Service Catalog のセットアップ

管理者用の権限については AdministratorAccess を割り当てられているユーザなら問題ないので割愛します。
利用者用の権限については「 ServiceCatalogEndUserAcess 」が必要になります。
このポリシーには ServiceCatalog の製品の利用権限および CloudFormation の限定的な実行権限が含まれています。
ここでポイントなのは「 Condition 」で「 "servicecatalog:userLevel": "self" 」の部分です。
これは、ユーザが Service Catalog からテンプレートを実行した後に「プロビジョニングされた製品」という CloudFormation のスタックと同等のものができるのですが、これを参照・操作できる範囲を指定するものです。

userLevel 」以外に「 accountLevel 」「 roleLevel 」が指定できますがそれぞれ以下の通りです。
userLevel :作成したユーザのみ参照・操作可能
accountLevel :作成したユーザが属するアカウントのユーザーは参照可能
roleLevel :作成したユーザが属するロールを使用しているユーザーは参照可能

続いて ですが、今回はバケット作成時に暗号化を強制する例を使用します。
その場合、 S3 バケットの作成権限を持つロールを作成します。
ここで作成したロールは で使用します。

最後に ですが、今回の例では以下のようなテンプレートを準備します。

AWSTemplateFormatVersion: 2010-09-09

Parameters:
  BucketName:
    Description: Bucket Name
    Type: String

Resources:
  CreateBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          -
            ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      BucketName: !Ref BucketName

上記テンプレートではバケット名を入力パラメータとして、バケットの暗号化とバケット名だけを指定するテンプレートです。
記載していないその他のパラメータについてはデフォルトで作成されます。(デフォルト値については AWS のドキュメントに記載されています。)
実際に利用する場合はバケット名の入力欄に入力規則を設けたりバージョニング、バケットの公開 / 非公開等の入力パラメータが必要になるかと思いますが、簡略化のために割愛します。

テンプレートを準備したら、次にこのテンプレートを Service Catalog の「製品リスト」に登録します。
続けて「ポートフォリオ」を作成し、先ほどテンプレートを登録した製品をポートフォリオに登録します。
ポートフォリオに製品が登録されたら「制約」を追加します。
制約では先ほど選択した製品と、制約タイプから「起動」を選択します。
すると IAM ロールを選択する欄がありますので、 で作成したロールを登録します。
これでこの製品は②で作成したロールの権限によって起動するようになります。

最後に「ユーザー、グループ、またはロール」から、①でポリシーを割り当てたユーザー等を追加します。
ここで一つ注意が必要なのは、ポートフォリオの料金はポートフォリオにユーザー、ロール、グループを一つでも割り当てた時点から発生します。
テストなどをする際、不必要にたくさんのポートフォリオにユーザー等を割り当ててしまうと想定外の料金が請求されてしまうかもしれません。

以上で管理者側の操作は完了です。

続けてユーザー側としては、まずメニューに表示されるのが管理者とは異なり「製品リスト」と「プロビジョニングされた製品のリスト」のみです。
操作としては製品リストから起動する製品を選択します。
製品の選択後は CloudFormation でスタックを作る際と同様にパラメータを指定して実行します。
すると、今回の例では暗号化されたバケットが指定したバケット名で作成されます。
バケットを削除したい場合はプロビジョニングされた製品のリストから CloudFormation のスタックを削除するのと同じように削除すれば、バケットもろともリストから削除されます。

最後に、今回のミソとしてユーザには S3 バケットの作成・削除の権限を与えないでください。
それでも、 Service Catalog から S3 バケットの作成・削除は行えます。
その上、直接 S3 からバケットの作成が出来なければ暗号化されていないバケットを作られる心配もありません。(実際にはバケットの設定を変える権限についても別途注意が必要ですが)

余談ですが、導入部分で S3 バケットを指定したリージョンに作成させたいことはないかという例を挙げましたが、実は CloudFormation のテンプレートでは S3 バケットのリージョンを指定することができません。
その代わり、スタックを作成したリージョンにバケットが作成される仕様となります。
そのため、 Service Catalog では S3 バケットの作成先として指定したいリージョンに製品を登録することでバケットのリージョン指定を実現できます。

これで、簡単ですが Service Catalog の紹介は終わりです。
CloudFormation に対応していないサービスでは利用できない欠点はありますが、 CloudFormation に対応したサービスならほぼ管理者の思い通りの操作のみユーザに許可することができます。
実際にユーザに権限を付与する必要がないため AWS の権限設定でお悩みのことがあれば、 Service Catalog を使えば解決できるかもしれません。
運用の強力なサポートツールとして Service Catalog の利用を検討してみてはいかがでしょうか。
それではよいクラウドライフを!

当サイトの内容、テキスト、画像等の転載・転記・使用する場合は問い合わせよりご連絡下さい。

エバンジェリストによるコラムやセミナー情報、
IDグループからのお知らせなどをメルマガでお届けしています。

メルマガ登録ボタン

松岡 政之

株式会社インフォメーション・ディベロプメント デジタルソリューション営業部 エバンジェリスト

この執筆者の記事一覧

関連するソリューション

ID-Cross/クラウドサービス

関連するナレッジ・コラム

ITエンジニアの現地作業 ミスを減らす!作業本番のポイントとは

NTTのIP網移行と、通信の未来とは

ITエンジニアの現地作業 ミスを減らす!事前準備のポイントとは