目次
はじめに
こんにちは、omkです。
AWS Service Catalog使ってますか?
私はあんまり使っていないのでちょっと使い方を考えているところです。
さて、Service Catalogの魅力の一つにリソース作成の権限を製品単位で出来る点があると思います。
これにより個別のユーザーやグループに対してのIAM権限を絞ることができ、不要なリソースの権限をつけなくて良い、逆に必要な権限がService Catalogから提供されるという点で非常に優れていると思います。
では、自身のIAM権限を絞られているユーザーに関しては、Catalogの利用者としてはService Catalogの画面で操作が完結すると嬉しいですよね。
そんなわけでService Catalogで作成したリソースに対するオペレーションもService Catalogで完結させるべく、手始めにEC2インスタンスの起動と停止から出来るようにしてみます。
やってみた
Service Catalogでは「サービスアクション」というものが作成でき、登録したSSMドキュメントを関連付けた製品に対して実行することができます。
今回はユーザーには個別のAWSサービスへの変更権限を与えず(ReadOnlyAccessレベルを想定)、ServiceCatalogの権限を有している想定で、サービスアクションにIAMロールを割り当てて利用します。
サービスアクションにIAMロールを割り当てることで割り当てたロールの権限にもとづいてアクションが実行されます。
これにより対象の製品の利用者は自身のIAM権限を持たずとも定められたアクションを実行することが出来ます。
EC2インスタンスを作成する製品がすでに存在しており、ユーザーにて製品を起動している前提で進めます。
IAMロールの作成
ユースケースを「ServiceCatalog」にしてロールを作ります。
今回はこんな感じでポリシーを設定しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:DescribeInstanceStatus",
"ssm:*"
],
"Resource": "*"
}
]
}
これでロールは完成です。
サービスアクションの作成
Service Catalogのコンパネから「サービスのアクション」を選択してアクションを作成します。
SSMドキュメントを「AWS-StartEC2Instance」と「AWS-StopEC2Instance」の2パターンで、先程作成したロールを設定してそれぞれのアクションを作成します。
パラメータはデフォルトの「InstanceId」を利用します。これを用いることで起動停止するインスタンスを指定できます。
行いたいことに対してSSMドキュメントが存在しない場合はSSMドキュメントを作成することで利用できます。
内部的にSSMのAutomationを実行しているようです。
SSMのオートメーションの実行の画面から実行した内容が確認できます。
アクションの関連付け
作成したアクションを操作の対象となる製品バージョンに関連付けます。
これで作成したアクションをユーザー側で利用できるようになります。
アクションの実施
ユーザー側で「プロビジョニングされた製品」を見ることで作成したリソースを確認することができます。
ここから起動停止するインスタンスのインスタンスIDを確認します。
ここで「アクション」を選択することで作成したサービスアクションが選択できます。
あとはインスタンスIDを指定して(インスタンスが1つだけなら自動で入ってる)実行するだけでインスタンスの起動・停止ができました。
おわりに
簡単に対象製品のインスタンスを起動停止できました。
権限管理としても利用者としても楽だと感じます。
また、EC2インスタンスが乱立しているような環境ではEC2のコンパネを利用する場合だとタグ等で検索してから対象を選択して停止することになると思いますが、Service Catalkogは製品単位でまとまっているので画面としても見やすく他環境との区別もし易いように思いました。
今後どんどん使っていきたいサービスです。
以上、最後までお付き合いありがとうございました。
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!