
関連するソリューション

マネージドサービス(運用・保守)
サイバー・セキュリティ・ソリューション(CSS)部
エバンジェリスト 松岡 政之
こんにちは。
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グループからのお知らせなどをメルマガでお届けしています。