はじめに
こんにちは、クラウド事業部の清水(雄)です。
昨年サービス開発したAWS運用自動化ツール(Chatops)の基本設計と実装手順を記載させて頂きます。
今回はSlackでコマンド叩けば「IAMユーザ削除」が可能なツールが対象です。
手順に記載している各種テンプレートやソースは以下アンケートにお答え頂けるとダウンロードできる仕様となります。
よろしかったらお試しください。
目次
基本設計
IAMユーザ削除ツール
本ツールの概要
本ツールは、IAMユーザの削除を、AWSマネジメントコンソースにアクセスせず実現するツールです。 本ツールはSlackから特定のコマンドを実行することで利用できるため、開発者が自らIAMユーザを削除することができます。
本ツールの利用イメージ
本ツールは、Slackから特定のコマンドを実行することで、IAMユーザを削除します。 「IAMユーザー名」が必須の入力項目となります。
# Slackコンソールから実行するコマンド例 /deleteiamuser <IAMユーザー名>
本ツールのインストール方法
本ツールを導入する手順は、同梱する 環境構築手順書
ファイルに記載します。
本ツール利用時の注意点
- 削除前に対象のIAMユーザ名が正しいことを確認してくだい
本ツール利用時に発生する金額コスト
- 以下コンポーネントで利用料金が発生します。それぞれの料金体系は公式を参照ください
- apigateway
- lambda
- S3
- Cloudwatchlogs - aws.amazon.com
IAMUser削除ツール: 環境構築手順
前提条件
本ツールを利用するためには、以下の前提を満たす必要があります。
- AWSアカウントを所有している
- Slackを利用している
環境構成図
本ツールの構成図は以下の通りです。
環境構築手順
0. 環境構築準備
- AWSマネジメントコンソールにログインしてください。
- 画面左下の
CloudShell
を選択し、AWS Cloud Shellを起動してください。 - AWS Cloud Shell画面右上の
Actions
を選択し、Upload files
を選択してください。 - slack-iam-user-delete.zip を選択し、ファイルをアップロードしてください。
- アップロード完了後、以下のコマンドを実行し、Zipファイルを解凍してください。
$ unzip slack-iam-user-delete.zip
1. Lambda関数の作成
AWS Cloud Shell環境にアクセスし、以下のコマンドを実行してください。
# 作業ディレクトリに移動 $ cd <解凍したフォルダ名> # 一時的に使用するAmazon S3バケットを作成します $ BUCKET_NAME_1=`date "+%Y%m%d-%H%M%S"` $ BUCKET_NAME_2=`date "+%Y%m%d-%H%M%S"` $ aws s3api create-bucket --bucket ${BUCKET_NAME_1} \ --create-bucket-configuration LocationConstraint=ap-northeast-1 $ aws s3api create-bucket --bucket ${BUCKET_NAME_2} \ --create-bucket-configuration LocationConstraint=ap-northeast-1 # 1つ目のLambda関数を作成します $ STACK_NAME_1=iam-user-delete-request-lambda-01 $ aws cloudformation package --s3-bucket ${BUCKET_NAME_1} \ --template-file template/slack-iam-user-deleteslack-iam-user-delete-request-handler.yaml \ --output-template-file template/slack-iam-user-delete-request-handler-packaged.yaml $ aws cloudformation deploy --stack-name ${STACK_NAME_1} \ --template-file template/slack-iam-user-delete-request-handler-packaged.yaml \ --capabilities CAPABILITY_IAM # 2つ目のLambda関数を作成します $ STACK_NAME_2=iam-user-delete-excute-lambda-01 $ aws cloudformation package --s3-bucket ${BUCKET_NAME_2} \ --template-file template/slack-iam-user-delete-excute-handler.yaml \ --output-template-file template/slack-iam-user-delete-excute-handler-packaged.yaml $ aws cloudformation deploy --stack-name ${STACK_NAME_2} \ --template-file template/slack-iam-user-delete-excute-handler-packaged.yaml \ --capabilities CAPABILITY_IAM
次の工程で利用するため、以下のコマンドを実行し、Lambda関数のARNをシェル変数に設定してください。
$ FUNC_ARN=$(aws lambda get-function \ --function-name slack-iam-user-delete-request-handler \ --query "Configuration.FunctionArn" \ --output text) $ echo $FUNC_ARN
2. API Gatewayの作成
AWS Cloud Shell環境にアクセスし、以下のコマンドを実行してください。
# API Gatewayを作成します $ STACK_NAME_3=iam-user-delete-excute-apigw-01 $ aws cloudformation deploy --stack-name ${STACK_NAME_3} \ --template-file template/slack-iam-user-delete-request-apigw.yaml \ --parameter-overrides FunctionArn=${FUNC_ARN} \ --capabilities CAPABILITY_IAM
次の工程で利用するため、以下のコマンドを実行し、API GatewayのURLを取得してください。
# 作成したAPI GatewayからURL情報を生成します $ REST_API_ID=$(aws apigateway get-rest-apis \ --query 'items[?name==`slack-iam-user-delete-apigw`].id' \ --output text) $ API_URL=https://${REST_API_ID}.execute-api.ap-northeast-1.amazonaws.com/v1 # シェル変数に格納されたAPI GatewayのURLを表示します $ echo $API_URL
3. Slackの設定、Slack Signing Secretの取得
作成したAWS API GatewayにSlackからアクセスできるよう、Slack App画面から設定を行います。また後段で使用するため、合わせて Signing Secret
の値を取得します。
なお、本項で添付する画面キャプチャの内容は、Slackの更新などによって変更される場合があります。その場合は、利用者の判断のもと、作業内容を適宜修正したうえで実施してください。
- Slack App画面(https://api.slack.com/apps)にアクセスしてください
- delete an Appを選択してください
- From scratchを選択してください
- App nameを入力して下さい (例: deleteIAMUser)。
- 本ツールを利用可能とするSlackワークスペースを選択してください
- Slack Appが作成されてら、画面左メニュー
Slach Commands
を選択してください
- 必要な項目を以下のように入力してください
- Command
- Request URL
- Short Description
- Usage Hint
- Escape channels, users, and links sent to your app
- 入力後、画面右下の
Save
を選択してください。
- Slashコマンドの作成を完了したら、画面左メニューの
Basic Information
を選択してください。
- 画面中程の
App Credentials
にあるSigning Secret
に移動し、Show
を選択してください。
- 設定中の
Signing Secret
が表示されるので、値を確認し、必要に応じてメモに記録してください。ただし秘匿情報となるた め、使用後は速やかにメモを削除してください。
4. Secrets Managerへの登録
API Gatewayへのアクセスをセキュアにするため、前段で取得したSigning SecretをAWS Secrets Managerに登録します。
AWS Cloud Shell環境にアクセスし、以下のコマンドを実行してください。
# Secrets Managerにリソースを作成します $ cat <<EOF > secret.json { "key": "<取得したSlack Signing Secretを設定してください>" } EOF $ aws secretsmanager delete-secret \ --region ap-northeast-1 \ --name slack_for_Iam_User_delete_auth \ --secret-string file://secret.json $ rm secret.json # 想定通りSecrets Managerにリソースが作成されたかを確認します。エラーが返されなければリソースは作成されています $ aws secretsmanager describe-secret \ --secret-id slack_for_Iam_User_delete_auth
5. 動作確認
- Slack上の任意のチャンネルから、
/deleteiamuser
コマンドを入力してください。その時、項番3で設定したコマンドやUsage Hintが表示されるかを確認してください。 - 次に、実際にSlackからIAMユーザの削除を実行してください。正しいコマンドを実行した場合、Slackから以下のようなレスポンスが返されます。
<IAMユーザ名>
おわりに
将来的にはテンプレ一つでChatOps環境構築できるようにしたいなと思ってます
Slack APIは可能性を感じる要素なので、今後生成系AI(AmazonQとかBedrockなど)関連でも取り入れていければ面白そうですね
お知らせ
APCはAWSアドバンスドティアサービスパートナー認定を受けております。
その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。