チュートリアル: EC2 インスタンスでのパスワードと SSH キーのリセット - AWS Systems Manager

チュートリアル: EC2 インスタンスでのパスワードと SSH キーのリセット

AWSSupport-ResetAccess ランブックを使用して、Windows Server 用の Amazon Elastic Compute Cloud Amazon EC2 インスタンスでローカル管理者パスワード生成を自動的に再有効化し、Linux 用の EC2 インスタンスで新しい SSH キーを生成できます。AWSSupport-ResetAccess ランブックは、AWS Systems Manager アクション、AWS CloudFormation アクション、および AWS Lambda 関数の組み合わせを実行することで、ローカル管理者パスワードのリセットに通常必要なステップを自動化するよう設計されています。

AWS Systems Manager の一機能である Automation を使用して、AWSSupport-ResetAccess ランブックで、以下の問題を解決できます。

Windows

EC2 キーペアを紛失した場合: この問題を解決するには、AWSSupport-ResetAccess ランブックを使用して現在のインスタンスからパスワード対応の AMI を作成し、この AMI から新しいインスタンスを起動して、所有するキーペアを選択します。

ローカル管理者パスワードを紛失した場合: この問題を解決するには、AWSSupport-ResetAccess ランブックを使用して、現在の EC2 キーペアで復号できる新しいパスワードを生成できます。

Linux

EC2 キーペアを紛失したか、インスタンスへの SSH アクセスを設定したキーを紛失した場合: この問題を解決するには、AWSSupport-ResetAccess ランブックを使用し、現在のインスタンス用に新しい SSH キーを作成することで、インスタンスに再接続できます。

注記

Windows Server の EC2 インスタンスが Systems Manager 用に設定されている場合、EC2Rescue と AWS Systems Manager Run Command を使用してローカル管理者パスワードをリセットすることもできます。詳細については、Windows インスタンス用の Amazon EC2 ユーザーガイドの「EC2Rescue for Windows Server を Systems Manager の Run Command で使用する」を参照してください。

仕組み

Automation と AWSSupport-ResetAccess ランブックによるインスタンスのトラブルシューティングは、次のように機能します。

  • インスタンスの ID を指定して、ランブックを実行します。

  • システムは一時 VPC を作成し、一連の Lambda 関数を実行して VPC を設定します。

  • システムは元のインスタンスと同じアベイラビリティーゾーン内で一時 VPC のサブネットを識別します。

  • システムは一時的な、SSM を有効にした ヘルパーインスタンスを起動します。

  • システムは元のインスタンスを停止して、バックアップを作成します。次に、元のルートボリュームをヘルパーインスタンスにアタッチします。

  • システムは、Run Command を使用してヘルパーインスタンスで EC2Rescue を実行します。Windows の場合、EC2Rescue は、アタッチされた元のルートボリュームで EC2Config または EC2Launch を使用することで、ローカル管理者のパスワード生成を有効にします。Linux の場合、EC2Rescue は新しい SSH キーを生成して挿入し、プライベートキーで暗号化して Parameter Store に保存します。完了すると、EC2Rescue は元のインスタンスにルートボリュームを再アタッチします。

  • パスワード生成が有効になっているため、システムはインスタンスの新しい Amazon Machine Image (AMI) を作成します。この AMI を使用して新しい EC2 インスタンスを作成し、必要に応じて新しいキーペアを関連付けます。

  • システムは元のインスタンスを再起動して、一時インスタンスを削除します。また、一時 VPC と、自動化の開始時に作成された Lambda 関数を削除します。

  • Windows: インスタンスでは、それに割り当てられている現在のキーペアを使用して Amazon EC2 コンソールから復号できる新しいパスワードを生成します。

    Linux: SSH を通じてインスタンスと通信できます。そのために、Systems Manager Parameter Store に保存されている SSH キー (/ec2rl/openssh/instance_id/key) を使用します。

開始する前に

次の自動化を実行する前に、以下の操作を行います。

  • 管理者パスワードをリセットするインスタンスのインスタンス ID をコピーします。この ID は次の手順で指定します。

  • オプションとして、到達不可能なインスタンスと同じアベイラビリティーゾーンのサブネットの ID を収集します。このサブネットに EC2Rescue インスタンスが作成されます。サブネットを指定しないと、Automation により、新しい一時 VPC が に作成されます AWS アカウント AWS アカウント に、少なくとも 1 つの利用可能な VPC があることを確認します。デフォルトでは、リージョンで最大 5 つの VPC を作成できます。リージョンですでに 5 つの VPC を作成した場合、自動化は失敗し、インスタンスへの変更は行われません。Amazon VPC クォータの詳細については、Amazon VPC ユーザーガイドの「VPC とサブネット」を参照してください。

  • 必要に応じて、自動化用の AWS Identity and Access Management (IAM) ロールを作成および指定できます。このロールを指定しない場合、自動化はそれを実行したユーザーのコンテキストで実行されます。自動化用のロールの作成の詳細については、「IAM サービスロールを使用して、オートメーションを実行する」を参照してください。

インスタンスでアクションを実行するための AWSSupport-EC2Rescue アクセス許可の付与

EC2Rescue では、オートメーション中にインスタンスで一連のアクションを実行するためのアクセス許可が必要です。これらのアクションでは、AWS Lambda、IAM、および Amazon EC2 サービスを呼び出して、インスタンスの問題の安全な修正を試みます。 AWS アカウント 、VPC、またはその両方で管理者レベルのアクセス許可がある場合は、このセクションで説明しているように、アクセス許可を設定することなく自動化を実行できることがあります。管理者レベルのアクセス許可がない場合は、ユーザーまたは管理者が、次のいずれかのオプションを使用してアクセス許可を設定する必要があります。

IAM ポリシーを使用したアクセス許可の付与

次の IAM ポリシーを IAM ユーザーアカウント、グループ、またはロールにインラインポリシーとしてアタッチするか、新しい IAM 管理ポリシーを作成し、ユーザーアカウント、グループ、またはロールにアタッチできます。ユーザーアカウント、グループ、またはロールへのインラインポリシーの追加の詳細については、「インラインポリシーの使用」を参照してください。新しい管理ポリシーの作成の詳細については、「管理ポリシーの使用」を参照してください。

注記

新しい IAM 管理ポリシーを作成する場合、AmazonSSMAutomationRole 管理ポリシーもアタッチし、インスタンスが Systems Manager API と通信できるようにする必要があります。

AWSSupport-ResetAccess 用の IAM ポリシー

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:aws-account-id:function:AWSSupport-EC2Rescue-*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::awssupport-ssm.*/*.template", "arn:aws:s3:::awssupport-ssm.*/*.zip" ], "Effect": "Allow" }, { "Action": [ "iam:CreateRole", "iam:CreateInstanceProfile", "iam:GetRole", "iam:GetInstanceProfile", "iam:PutRolePolicy", "iam:DetachRolePolicy", "iam:AttachRolePolicy", "iam:PassRole", "iam:AddRoleToInstanceProfile", "iam:RemoveRoleFromInstanceProfile", "iam:DeleteRole", "iam:DeleteRolePolicy", "iam:DeleteInstanceProfile" ], "Resource": [ "arn:aws:iam::aws-account-id:role/AWSSupport-EC2Rescue-*", "arn:aws:iam::aws-account-id:instance-profile/AWSSupport-EC2Rescue-*" ], "Effect": "Allow" }, { "Action": [ "lambda:CreateFunction", "ec2:CreateVpc", "ec2:ModifyVpcAttribute", "ec2:DeleteVpc", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:DetachInternetGateway", "ec2:DeleteInternetGateway", "ec2:CreateSubnet", "ec2:DeleteSubnet", "ec2:CreateRoute", "ec2:DeleteRoute", "ec2:CreateRouteTable", "ec2:AssociateRouteTable", "ec2:DisassociateRouteTable", "ec2:DeleteRouteTable", "ec2:CreateVpcEndpoint", "ec2:DeleteVpcEndpoints", "ec2:ModifyVpcEndpoint", "ec2:Describe*" ], "Resource": "*", "Effect": "Allow" } ] }

AWS CloudFormation テンプレートを使用したアクセス権限の付与

AWS CloudFormation は事前設定されたテンプレートを使用して、IAM ロールとポリシーを作成するプロセスを自動化します。 を使用して、EC2Rescue の Automation に必要な IAM ロールとポリシーを作成するには、次の手順を使用しますAWS CloudFormation

EC2Rescue に必要な IAM ロールとポリシーを作成するには

  1. AWSSupport-EC2RescueRole.zip をダウンロードし、AWSSupport-EC2RescueRole.json ファイルをローカルマシン上のディレクトリに展開します。

  2. AWS アカウント が特殊なパーティションにある場合は、テンプレートを編集して、ARN 値をパーティションの ARN 値に変更します。

    例えば、中国リージョンの場合は、arn:aws のすべてのケースを arn:aws-cn に変更します。

  3. AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  4. [スタックの作成] を選択し、[With new resources (standard) (新しいリソースの使用 (標準))] を選択します。

  5. [スタックの作成] ページの [Prerequisite - Prepare template (前提条件 - テンプレートの準備)] で、[Template is ready (テンプレートの準備完了)] を選択します。

  6. [Specify template (テンプレートの指定)] で、[Upload a template file (テンプレートファイルのアップロード)] を選択します。

  7. [Choose file (ファイルを選択)] を選択し、展開したディレクトリから AWSSupport-EC2RescueRole.json ファイルを参照して選択します。

  8. [Next] を選択します。

  9. [Specify stack details (スタックの詳細の指定)] ページの [Stack Name (スタック名)] フィールドに、このスタックを識別する名前を入力し、[次へ] を選択します。

  10. (オプション) [タグ] 領域で、1 つ以上のタグキーの名前と値のペアをスタックに適用します。

    タグは、リソースに割り当てるオプションのメタデータです。タグを使用すると、目的、所有者、環境などのさまざまな方法でリソースを分類できます。たとえば、スタックにタグを付けると、スタックが実行するタスクのタイプ、関連するターゲットまたはその他のリソースのタイプ、およびスタックが実行される環境を識別できます。

  11. [次へ] を選択します

  12. [確認] ページでスタックの詳細を確認し、下にスクロールして、[AWS CloudFormation によって IAM リソースが作成される場合があることを了承する] オプションを選択します。

  13. AWS CloudFormation は、[CREATE_IN_PROGRESS] ステータスを数分間表示します。スタックを作成すると、ステータスは [CREATE_COMPLETE] に変わります。更新アイコンを選択して、作成プロセスのステータスを確認することもできます。

  14. スタックリストで、先ほど作成したスタックの横にあるオプションを選択し、[Outputs] タブを選択します。

  15. [Value] をコピーします。これは AssumeRole の ARN です。自動化を実行するときに、この ARN を指定します。

自動化の実行

次の手順では、AWS Systems Manager コンソールを使用して AWSSupport-ResetAccess ランブックを実行する方法について説明します。

重要

次のオートメーションではインスタンスを停止します。インスタンスを停止すると、アタッチされたインスタンスストアボリュームのデータが失われます (存在する場合)。また、インスタンスを停止すると、Elastic IP が関連付けられていない場合、そのパブリック IP アドレスも変更されます。これらの設定変更を避けるには、Run Command を使用してアクセスをリセットします。詳細については、Windows インスタンス用の Amazon EC2 ユーザーガイドの「EC2Rescue for Windows Server を Systems Manager の Run Command で使用する」を参照してください。

AWSSupport-ResetAccess の自動化を実行するには

  1. AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。

  2. ナビゲーションペインで [自動化] を選択します。

    -または-

    AWS Systems Manager ホームページが最初に開く場合は、メニューアイコン ( ) を選択してナビゲーションペインを開き、[オートメーション] を選択します。

  3. [Execute automation] を選択します。

  4. [Automation document (オートメーションドキュメント)] セクションで、リストから [Owned by Amazon (Amazon が所有)] を選択します。

  5. ランブックリストで、[AWSSupport-ResetAccess] のカードのボタンを選択し、[Next (次へ)] を選択します。

  6. [Execute automation document (オートメーションドキュメントの実行)] ページで、[Simple execution (シンプルな実行)] を選択します。

  7. [Document details (ドキュメント詳細)] セクションで、[Document version (ドキュメントバージョン)] が最大のデフォルトバージョンに設定されていることを確認します。たとえば、[$DEFAULT] または [3 (default) (3 (デフォルト))] のように指定します。

  8. [Input parameters] セクションで、以下のパラメータを指定します。

    1. [InstanceID] で、到達不可能なインスタンスの ID を指定します。

    2. [SubnetId] で、指定したインスタンスと同じアベイラビリティーゾーンの既存の VPC のサブネットを指定します。デフォルトでは、Systems Manager によって新しい VPC が作成されますが、必要に応じて既存の VPC のサブネットを指定できます。

      注記

      サブネット ID を指定するオプションが表示されない場合は、最新のデフォルトバージョンのランブックを使用していることを確認します。

    3. [EC2RescueInstanceType] で、EC2Rescue インスタンスのインスタンスタイプを指定します。デフォルトのインスタンスタイプは t2.small です。

    4. [AssumeRole] で、AWS CloudFormation コンソールでメモした AssumeRole ARN を指定します (この Automation 用のロールをこのトピックで前述した AWS CloudFormation の手順を使用して作成している場合)。

  9. (オプション) [Tags (タグ)] 領域で、オートメーションを識別するためにタグキーの名前と値のペアを 1 つ以上適用します。たとえば、Key=Purpose,Value=ResetAccess です。

  10. [Execute] を選択します。

  11. オートメーションの進捗をモニタリングするには、実行中のオートメーションを選択し、[Steps] タブを選択します。オートメーションが終了したら、[Descriptions] タブを選択し、[View output] を選択して結果を表示します。個別のステップの出力を表示するには、[Steps] タブを選択し、ステップの横にある [View Outputs] を選択します。

ランブックは、オートメーションの一環としてバックアップ AMI とパスワード対応の AMI を作成します。オートメーションで作成された他のすべてのリソースは自動的に削除されますが、これらの AMIs はアカウントに残ります。AMIs の名前は次の命名規則に従います。

  • バックアップ AMI: AWSSupport-EC2Rescue:InstanceId

  • パスワード対応の AMI: AWSSupport-EC2Rescue: InstanceId のパスワード対応の AMI

これらの AMIs は、Automation の実行 ID で検索することで見つけることができます。

Linux の場合、インスタンスの新しい SSH プライベートキーは暗号化されて Parameter Store に保存されます。パラメータ名は /ec2rl/openssh/instance_id/key です。