APC 技術ブログ

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

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

【初心者向け】AWS Systems Managerのステートマネージャーを試してみた

目次

はじめに

こんにちは、クラウド事業部の山下です。

AWS Systems Manager(SSM)には運用管理のための便利な機能が多数ありますが、まだあまり使いこなせていません。
今回はSSMのステートマネージャーについて試してみたのでご紹介します。

どんなひとに読んで欲しい

  • Systems Managerの機能について理解を深めたいひと
  • ステートマネージャーの設定方法を知りたいひと

関連記事

SSM変更管理の4機能について、下記記事にて紹介しています。

techblog.ap-com.co.jp

techblog.ap-com.co.jp

ステートマネージャーとは

マネージドインスタンス(SSMで管理可能なサーバー)やAWSリソースの設定を定義し、その定義された状態を維持するプロセスを自動化する機能です。
ユースケースとしては、ウイルス対策ソフトなどがインストール・設定されている状態にする、インスタンスを起動・停止する、AMIにパッチを適用する、などが挙げられます。

ステートマネージャーの主な機能として State Manager関連付け があります。
関連付けとはマネージドインスタンスやAWSリソースに割り当てる設定のことで、この設定の中で維持したい状態を定義します。
関連付けは以下3つのコンポーネントを含みます。

  • ドキュメント:定義した設定・状態を維持するためのアクション(AWSによって事前定義されているドキュメントも指定可能)
  • ターゲット:マネージドインスタンス、その他のAWSリソース(リソースグループやタグでの指定も可能)
  • スケジュール :一度のみの実行、CRON/Rate式の設定が可能

サービスのより詳細の説明は公式ドキュメントをご参照ください。
docs.aws.amazon.com

料金

ステートマネージャーは無料で利用できます。

前提

実際にコンソールから操作してみます。
今回はステートマネージャーの関連付けで「AWS-DisablePublicAccessForSecurityGroup」のランブックを指定して、SSH(もしくはRDP)が 0.0.0.0/0に全開放されていない状態を維持します。

ランブック:AWS-DisablePublicAccessForSecurityGroupは公式ドキュメントにて以下のように説明されています。

このランブックは、すべての IP アドレスに対して開かれている、デフォルトの SSH および RDP ポートを無効にします

AWS-DisablePublicAccessForSecurityGroup - AWS Systems Manager オートメーションランブックリファレンス


* 検証で使用したEC2インスタンスは、SSM Agentが元々インストールされているAmazon Linux 2023のAMIを利用。
* EC2インスタンスはパブリックサブネットに配置。
* EC2インスタンスのIAMロールに SSMManagedInstanceCore のポリシーを設定済み。

試してみた

IAMロール作成

IAMロールの作成画面で、ユースケース:Systems Managerを選択します。
許可ポリシー:AmazonSSMAutomationRoleを選択し、任意のロール名を記載したらロールを作成します。
ロールが作成できたらARNをコピーして、「許可を追加」から「インラインポリシーを作成」に進みます。
サービス:IAM、アクセス許可:PassRoleを選択します。
リソースの「ARNを追加」から先ほどコピーしたおいたIAMロールのARNをリソースARN欄に貼り付けます。
リクエスト条件の「別の条件を追加」から以下のように選択し、「条件を追加」を押下します。

条件キー:iam:PassedToService
演算子:StringLike(存在する場合にチェックを入れる)
値:ssm.amazonaws.com

※ここまでの手順は、過去の記事にて画面キャプチャ付きで説明しています。

上記設定のIAMロールでこの先の手順を実行したところ、権限不足によるエラーが出たのでセキュリティグループのインバウンドルールを削除できる権限のあるポリシーを作成してアタッチしました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ec2:RevokeSecurityGroupIngress",
            "Resource": "*"
        }
    ]
}


ステートマネージャー関連付けの作成

関連付けを作成する前に、ターゲットのセキュリティグループのインバウンドルールに以下を追加しておきます。

  • タイプ:SSH、ソース:0.0.0.0/0
  • タイプ:SSH、ソース:マイip(自宅のIPアドレス)


Systems Managerのステートマネージャーに移動し、「関連付けを作成」を押下します。
ドキュメントは「AWS-DisablePublicAccessForSecurityGroup」を指定します。


入力パラメーターのGroupidにはターゲットのセキュリティグループIDを入力します。
AutomationAssumeRoleには作成済みのIAMロールを指定します。


スケジュールは毎時00分と30分の30分ごとに実行される「デフォルト」を選択してみました。
画面下部の「関連付けを作成」を押下すると、作成時に関連付けが実行されます。


関連付けのステータスが「成功」になったらターゲットのセキュリティグループを確認します。
0.0.0.0/0 からのSSHを許可するルールは削除され、自宅IPからのSSH許可は残ったままとなるはずです。
0.0.0.0/0 からのSSHを許可するルールのみ削除されました!


30分ごとに実行されるスケジュールとしているため、再度0.0.0.0/0 からのSSH許可のルールを追加したところ、次の実行タイミングでも同様にSSH全開放のインバウンドルールが削除されていることが確認できました。

おまけ:メンテナンスウィンドウとの違い

ステートマネージャーとメンテナンスウィンドウはどちらも同様のタスクを実行可能です。
公式ドキュメントによると、下記のような用途で使い分けると良いとされています。

  • ステートマネージャー:定義された状態を維持するためのプロセスを自動化する
  • メンテナンスウィンドウ:タイムウィンドウ内で時間的制約のあるタスクを自動化する


詳細はドキュメント内に記載されていますので、ご参照ください。

docs.aws.amazon.com


おわりに

今回はSSMステートマネージャーの機能概要とその設定手順についてご紹介しました。
ステートマネージャーをうまく活用できれば、誤って設定を変更してしまっても事前に定義した状態を維持するアクションを任意のタイミングで実行してくれるので便利だなと感じました!
最後までお読みいただきありがとうございました。

お知らせ

APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。

その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp

https://www.ap-com.co.jp/service/utilize-aws/

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

www.ap-com.co.jp