APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【さらば、コンソール作業、、】~AWS運用自動化ツール:IAMユーザ削除編~

はじめに

こんにちは、クラウド事業部の清水(雄)です。

昨年サービス開発したAWS運用自動化ツール(Chatops)の基本設計と実装手順を記載させて頂きます。
今回はSlackでコマンド叩けば「IAMユーザ削除」が可能なツールが対象です。
手順に記載している各種テンプレートやソースは以下アンケートにお答え頂けるとダウンロードできる仕様となります。
よろしかったらお試しください。

www.ap-com.co.jp

目次

基本設計

IAMユーザ削除ツール

本ツールの概要

本ツールは、IAMユーザの削除を、AWSマネジメントコンソースにアクセスせず実現するツールです。 本ツールはSlackから特定のコマンドを実行することで利用できるため、開発者が自らIAMユーザを削除することができます。

本ツールの利用イメージ

本ツールは、Slackから特定のコマンドを実行することで、IAMユーザを削除します。 「IAMユーザー名」が必須の入力項目となります。

# Slackコンソールから実行するコマンド例
/deleteiamuser <IAMユーザー名>

本ツールのインストール方法

本ツールを導入する手順は、同梱する 環境構築手順書 ファイルに記載します。

本ツール利用時の注意点

  • 削除前に対象のIAMユーザ名が正しいことを確認してくだい

本ツール利用時に発生する金額コスト

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の更新などによって変更される場合があります。その場合は、利用者の判断のもと、作業内容を適宜修正したうえで実施してください。

  • 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/

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: y-shimizu
AWSをメインにインフラ系のご支援を担当しています。 https://www.credly.com/users/giiiiiyu777/badges