AWS CLI を使用するドメインレス gMSA で Amazon ECS Windows コンテナを使用する - Amazon Elastic Container Service

AWS CLI を使用するドメインレス gMSA で Amazon ECS Windows コンテナを使用する

次のチュートリアルでは、AWS CLI を使用して Active Directory にアクセスするための認証情報を持つ Windows コンテナを実行する Amazon ECS タスクを作成する方法を示します。ドメインレス gMSA を使用すると、コンテナインスタンスはドメインに参加せず、インスタンス上の他のアプリケーションは認証情報を使用してドメインにアクセスできなくなり、異なるドメインに参加するタスクを同じインスタンス上で実行できます。

前提条件

このチュートリアルでは、以下の前提条件が完了済みであることを前提としています。

  • Amazon ECS を使用するようにセットアップする」のステップを完了していること。

  • AWS ユーザーに AmazonECS_FullAccess IAMポリシー例で指定されている必要なアクセス権限があること。

  • AWS CLI の最新バージョンがインストールされ、設定されていること。AWS CLI のインストールまたはアップグレードの詳細については、「AWS Command Line Interface のインストール」を参照してください。

  • コンテナがアクセスするリソースを含む Active Directory ドメインを設定します。Amazon ECS は以下の設定をサポートしています。

    • AWS Directory Service Active Directory。AWS Directory Service は、Amazon EC2 でホストされる AWS マネージド Active Directory です。詳細については、「AWS Directory Service 管理ガイド」の「AWS Managed Microsoft AD の開始方法」を参照してください。

    • オンプレミスの Active Directory。Amazon ECS Linux コンテナインスタンスがドメインに参加できることを確認する必要があります。詳細については、「AWS Direct Connect」を参照してください。

  • Active Directory ドメイン名を解決できる VPC とサブネットがあります。

  • ドメインレス gMSA各インスタンスを単一のドメインに結合するを選択しました。ドメインレス gMSA を使用すると、コンテナインスタンスはドメインに参加せず、インスタンス上の他のアプリケーションは認証情報を使用してドメインにアクセスできなくなり、異なるドメインに参加するタスクを同じインスタンス上で実行できます。

    次に、CredSpec のデータ ストレージを選択し、必要に応じて、ドメインレス gMSA の Active Directory ユーザー認証情報を選択します。

    Amazon ECS は Active Directory の認証情報仕様ファイル (CredSpec) を使用します。このファイルは、gMSA アカウントコンテキストをコンテナに伝達するために使用される gMSA メタデータを含む認証情報仕様ファイルを使用します。CredSpec ファイルを生成し、コンテナインスタンスのオペレーティングシステムに応じて、次の表にある CredSpec ストレージオプションのいずれかに保存します。ドメインレス方式を使用するには、CredSpec ファイル内のオプションのセクションで、コンテナインスタンスのオペレーティングシステムに固有の、次の表の domainless user credentials ストレージオプションのいずれかの認証情報を指定できます。

    ストレージの場所 リナックス Windows
    Amazon Simple Storage Service CredSpec CredSpec
    AWS Secrets Manager ドメインレスユーザー認証情報 ドメインレスユーザー認証情報
    Amazon EC2 Systems Manager Parameter Store CredSpec CredSpec、ドメインレスユーザー認証情報
    ローカルファイル 該当なし CredSpec
  • (任意) AWS CloudShell は、お客様が独自の EC2 インスタンスを作成する必要なく、コマンドラインを提供するツールです。詳細については、『AWS CloudShell ユーザーガイド』の「What is AWS CloudShell? ( とは?)」 を参照してください。

ステップ 1: Active Directory ドメイン サービス (AD DS) で gMSA アカウントを作成して設定する

Active Directory ドメインの gMSA アカウントを作成して設定します。

  1. Key Distribution Service のルートキーを生成する
    注記

    AWS Directory Service を使用している場合は、このステップを省略できます。

    KDS ルートキーと gMSA アクセス許可は、AWS マネージド Microsoft AD で構成されます。

    ドメインに 1 つの gMSA Service Account をまだ作成していない場合は、まず Key Distribution Service (KDS) ルートキーを生成する必要があります。KDS は、gMSA パスワードの作成、ローテーション、承認されたホストへのパスワードのリリースを担います。ccg.exe が gMSA 認証情報を取得する必要がある場合は、KDS に連絡して現在のパスワードを取得します。

    KDS ルート キーが既に作成されているかどうかを確認するには、ActiveDirectory PowerShell モジュールを使用して、ドメインコントローラー上でドメイン管理者権限で次の PowerShell コマンドレットを実行します。モジュールの詳細については、Microsoft Learn Web サイトの「ActiveDirectory モジュール」を参照してください。

    PS C:\> Get-KdsRootKey

    コマンドがキー ID を返す場合は、このステップの残りをスキップできます。それ以外の場合は、次のコマンドを実行して KDS ルートキーを作成します。

    PS C:\> Add-KdsRootKey -EffectiveImmediately

    コマンドへの引数 EffectiveImmediately は、キーがすぐに有効になることを暗示していますが、KDS ルートキーが複製され、すべてのドメインコントローラーで使用できるようになるまで 10 時間待つ必要があります。

  2. gMSA アカウントを作成するには

    gMSA アカウントを作成して ccg.exe が gMSA パスワードを取得できるようにするには、ドメインにアクセスできる Windows サーバーまたはクライアントから次の PowerShell コマンドを実行します。ExampleAccount を gMSA アカウントに使用する名前に置き換えます。

    1. PS C:\> Install-WindowsFeature RSAT-AD-PowerShell
    2. PS C:\> New-ADGroup -Name "ExampleAccount Authorized Hosts" -SamAccountName "ExampleAccountHosts" -GroupScope DomainLocal
    3. PS C:\> New-ADServiceAccount -Name "ExampleAccount" -DnsHostName "contoso" -ServicePrincipalNames "host/ExampleAccount", "host/contoso" -PrincipalsAllowedToRetrieveManagedPassword "ExampleAccountHosts"
    4. 有効期限のない永続的なパスワードでユーザーを作成します。これらの認証情報は AWS Secrets Manager に保存され、各タスクがドメインに参加するために使用されます。

      PS C:\> New-ADUser -Name "ExampleAccount" -AccountPassword (ConvertTo-SecureString -AsPlainText "Test123" -Force) -Enabled 1 -PasswordNeverExpires 1
    5. PS C:\> Add-ADGroupMember -Identity "ExampleAccountHosts" -Members "ExampleAccount"
    6. Active Directory に CredSpec オブジェクトを作成するための PowerShell モジュールをインストールし、CredSpec JSON を出力します。

      PS C:\> Install-PackageProvider -Name NuGet -Force
      PS C:\> Install-Module CredentialSpec
    7. PS C:\> New-CredentialSpec -AccountName ExampleAccount
  3. 前のコマンドの JSON 出力を、gmsa-cred-spec.json と呼ばれるファイルにコピーします。これは、CredSpec ファイルです。ステップ 3 の ステップ 3: CredSpec JSON を変更してドメインレス gMSA 情報を含める で使用されます。

ステップ 2: Secrets Manager に認証情報をアップロードする

Active Directory 認証情報を安全な認証情報ストレージシステムにコピーして、各タスクがそれを取得できるようにします。これはドメインレス gMSA メソッドです。ドメインレス gMSA を使用すると、コンテナインスタンスはドメインに参加せず、インスタンス上の他のアプリケーションは認証情報を使用してドメインにアクセスできなくなり、異なるドメインに参加するタスクを同じインスタンス上で実行できます。

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

  • AWS CLI コマンドを実行し、ユーザー名、パスワード、ドメイン名を環境に合わせて置き換えます。シークレットの ARN を保管して次のステップ ステップ 3: CredSpec JSON を変更してドメインレス gMSA 情報を含める で使用します。

    次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws secretsmanager create-secret \ --name gmsa-plugin-input \ --description "Amazon ECS - gMSA Portable Identity." \ --secret-string "{\"username\":\"ExampleAccount\",\"password\":\"Test123\",\"domainName\":\"contoso.com\"}"

ステップ 3: CredSpec JSON を変更してドメインレス gMSA 情報を含める

CredSpec をいずれかのストレージオプションにアップロードする前に、前の手順で Secrets Manager のシークレットの ARN を含む情報を CredSpec に追加します。詳細については、Microsoft Learn Web サイトの「ドメイン結合されていないコンテナホストのユースケース向けの追加の認証情報仕様設定」を参照してください。

  1. ActiveDirectoryConfig 内部の CredSpec ファイルに以下の情報を追加します。ARN を、前の手順の Secrets Manager のシークレットに置き換えます。

    PluginGUID 値は次のサンプルのスニペットの GUID と一致する必要があり、必須であることに注意してください。

    "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" }

    また、この形式 \"arn:aws:ssm:aws-region:111122223333:parameter/gmsa-plugin-input\" の ARN を使用して SSM Parameter Store でシークレットを使用できます。

  2. CredSpec ファイルを修正すると、次の例のようになります。

    { "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-4066351383-705263209-1606769140", "MachineAccountName": "ExampleAccount", "Guid": "ac822f13-583e-49f7-aa7b-284f9a8c97b6", "DnsTreeName": "contoso", "DnsName": "contoso", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "ExampleAccount", "Scope": "contoso" }, { "Name": "ExampleAccount", "Scope": "contoso" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" } } }

ステップ 4: Amazon S3 に CredSpec をアップロードする

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

  1. AWS CLI コマンドを実行しているコンピューターまたは環境に CredSpec ファイルをコピーします。

  2. 次の AWS CLI コマンドを実行し、Amazon S3 に CredSpec をアップロードします。MyBucket をお使いの Amazon S3 バケットの名前に置き換えます。ファイルは任意のバケットと場所にオブジェクトとして保存できますが、タスク実行ロールにアタッチするポリシーでそのバケットと場所へのアクセスを許可する必要があります。

    次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws s3 cp gmsa-cred-spec.json \ s3://MyBucket/ecs-domainless-gmsa-credspec

ステップ 5: (オプション) Amazon ECS クラスターを作成する

デフォルトでは、アカウントには default という名前の Amazon ECS クラスターがあります。このクラスターは、AWS CLI、SDK、AWS CloudFormation でデフォルトで使用されます。追加のクラスターを使用してタスクとインフラストラクチャをグループ化および整理し、一部の構成にデフォルトを割り当てることができます。

クラスターは、AWS Management Console、AWS CLI、SDK、または AWS CloudFormation のいずれかを使用して作成できます。クラスター内の設定と構成は gMSA に影響しません。

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

$ aws ecs create-cluster --cluster-name windows-domainless-gmsa-cluster
重要

独自のクラスターを作成することを選択する場合は、そのクラスターで使用する予定のコマンドごとに --cluster clusterName を指定する必要があります。

ステップ 6: コンテナインスタンスの IAM ロールを作成する

コンテナインスタンスは、Amazon EC2 インスタンスなどの ECS タスクでコンテナを実行するホストコンピュータです。各コンテナインスタンスは Amazon ECS クラスターに登録されます。Amazon EC2 インスタンスを起動してクラスターに登録する前に、使用するコンテナインスタンス用の IAM ロールを作成する必要があります。

コンテナインスタンスロールを作成するには、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。デフォルトのecsInstanceRole は、このチュートリアルを完了するための十分なアクセス許可を持っています。

ステップ 7: カスタムのタスク実行ロールを作成する

Amazon ECS では、各タスクの開始に必要なアクセス権限として、コンテナインスタンスロールの代わりに別の IAM ロールを使用できます。このロールは実行ロールです。ECS がタスクを実行するために必要なアクセス許可 (最小特権アクセス許可とも呼ばれる) のみを持つタスク実行ロールを作成することをお勧めします。最小特権の原則の詳細については、AWS Well-Architected Flamework の「SEC03-BP02 最小特権アクセスの付与」を参照してください。

  1. タスク実行ロールを作成するには、「タスク実行 ロールの作成」を参照してください。デフォルトの権限では、コンテナインスタンスは Amazon Elastic Container Registry、stdout および stderr からコンテナイメージを取得でき、アプリケーションから Amazon CloudWatch Logs に記録されます。

    このチュートリアルではロールにカスタム権限が必要なため、ロールには ecsTaskExecutionRole とは異なる名前を付けられます。このチュートリアルでは、以降の手順で ecsTaskExecutionRole を使用します。

  2. このロールにのみ存在するインラインポリシー、または再利用可能なポリシーのいずれかのカスタムポリシーを作成して、次の権限を追加します。最初のステートメントの Resource の ARN を Amazon S3 バケットと場所に置き換え、2 番目の Resource を Secrets Manager のシークレットの ARN に置き換えます。

    Secrets Manager でカスタムキーを使用してシークレットを暗号化する場合は、そのキー の kms:Decrypt も許可する必要があります。

    Secrets Manager の代わりに SSM Parameter Store を使用する場合は、secretsmanager:GetSecretValue の代わりにパラメータの ssm:GetParameter を許可する必要があります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::MyBucket/ecs-domainless-gmsa-credspec/gmsa-cred-spec.json" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input" } ] }

ステップ 8: Amazon ECS Exec のタスクロールを作成する

このチュートリアルでは、Amazon ECS Exec を使用して、実行中のタスク内でコマンドを実行して機能を検証します。ECS Exec を使用するには、サービスまたはタスクが ECS Exec を有効にし、タスク ロール (タスク実行ロールではない) に ssmmessages アクセス許可が必要です。必要な IAM ポリシーについては、「ECS Exec のアクセス許可」を参照してください。

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

AWS CLI を使用してタスクロールを作成するには、次の手順に従ってください。

  1. ecs-tasks-trust-policy.json というファイルを次の内容で作成します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. IAM ロールを作成します。名前 ecs-exec-demo-task-role は置き替えられますが、次の手順のために名前を保持しておいてください。

    次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws iam create-role --role-name ecs-exec-demo-task-role \ --assume-role-policy-document file://ecs-tasks-trust-policy.json

    ecs-tasks-trust-policy.json ファイルを削除できます。

  3. ecs-exec-demo-task-role-policy.json というファイルを次の内容で作成します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
  4. IAM ポリシーを作成し、前述のロールにアタッチします。

    次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws iam put-role-policy \ --role-name ecs-exec-demo-task-role \ --policy-name ecs-exec-demo-task-role-policy \ --policy-document file://ecs-exec-demo-task-role-policy.json

    ecs-exec-demo-task-role-policy.json ファイルを削除できます。

ステップ 9: ドメインレス gMSA を使用するタスク定義を登録する

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

  1. windows-gmsa-domainless-task-def.json というファイルを次の内容で作成します。

    { "family": "windows-gmsa-domainless-task", "containerDefinitions": [ { "name": "windows_sample_app", "image": "mcr.microsoft.com/windows/servercore/iis", "cpu": 1024, "memory": 1024, "essential": true, "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::ecs-domainless-gmsa-credspec/gmsa-cred-spec.json" ], "entryPoint": [ "powershell", "-Command" ], "command": [ "New-Item -Path C:\\inetpub\\wwwroot\\index.html -ItemType file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>' -Force ; C:\\ServiceMonitor.exe w3svc" ], "portMappings": [ { "protocol": "tcp", "containerPort": 80, "hostPort": 8080 } ] } ], "taskRoleArn": "arn:aws:iam::111122223333:role/ecs-exec-demo-task-role", "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole" }
  2. 次のコマンドを実行して、タスク定義を登録します。

    次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws ecs register-task-definition \ --cli-input-json file://windows-gmsa-domainless-task-def.json

ステップ 10: Windows コンテナインスタンスをクラスターに登録する

Amazon EC2 Windows インスタンスを起動し、ECS コンテナエージェントを実行して、それをコンテナインスタンスとしてクラスターに登録します。ECS は、タスクが開始されたクラスターに登録されているコンテナインスタンスでタスクを実行します。

  1. AWS Management Console で Amazon ECS 用に設定された Amazon EC2 Windows インスタンスを起動するには、「Amazon ECS Windows コンテナインスタンスの起動」を参照してください。ユーザーデータのステップで停止します。

  2. gMSA には、ECS コンテナエージェントを開始する前に、ユーザーデータで環境変数 ECS_GMSA_SUPPORTED を設定する必要があります。

    ECS Exec の場合、エージェントは引数 -EnableTaskIAMRole で始まる必要があります。

    タスクが EC2 IMDS Web サービスに到達してロール認証情報を取得できないようにしてインスタンス IAM ロールを保護するには、引数 -AwsvpcBlockIMDS を追加します。これは、awsvpc ネットワークモードを使用するタスクにのみ適用されます。

    <powershell> [Environment]::SetEnvironmentVariable("ECS_GMSA_SUPPORTED", $TRUE, "Machine") Import-Module ECSTools Initialize-ECSAgent -Cluster windows-domainless-gmsa-cluster -EnableTaskIAMRole -AwsvpcBlockIMDS </powershell>
  3. Summary (概要) パネルでインスタンス設定の要約を確認します。準備が完了したら、[Launch instance] (インスタンスを起動) を選択してください。

ステップ 11: コンテナインスタンスを検証する

AWS Management Console を使用して、クラスター内にコンテナインスタンスがあることを確認できます。ただし、gMSA は属性として示される追加の機能が必要です。これらの属性は AWS Management Console では表示されないため、このチュートリアルでは AWS CLI を使用します。

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

  1. クラスター内のコンテナインスタンスをリストします。コンテナインスタンスの ID は EC2 インスタンスの ID とは異なります。

    $ aws ecs list-container-instances

    出力:

    {
        "containerInstanceArns": [
            "arn:aws:ecs:aws-region:111122223333:container-instance/default/MyContainerInstanceID"
        ]
    }

    例えば、526bd5d0ced448a788768334e79010fd は有効なコンテナインスタンス ID です。

  2. 前のステップのコンテナインスタンス ID を使用して、コンテナインスタンスの詳細を取得します。MyContainerInstanceID を ID に置き換えます。

    次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws ecs describe-container-instances \ ----container-instances MyContainerInstanceID

    出力が非常に長いことに注意してください。

  3. attributes リストに、name というキーと値 ecs.capability.gmsa-domainless を持つオブジェクトがあることを確認します。以下は、オブジェクトの例です。

    出力:

    {
        "name": "ecs.capability.gmsa-domainless"
    }

ステップ 12: Windows タスクを実行する

Amazon ECS タスクを実行します。クラスターにコンテナインスタンスが 1 つしかない場合は、run-task を使用できます。さまざまなコンテナインスタンスが多数ある場合は、タスク定義に配置制約を追加して、このタスクを実行するコンテナインスタンスの種類を制御するよりも、タスクを実行するには start-task を使用してコンテナインスタンス ID を指定する方が簡単な場合があります。

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

  1. 次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    aws ecs run-task --task-definition windows-gmsa-domainless-task \ --enable-execute-command --cluster windows-domainless-gmsa-cluster

    コマンドによって返されるタスク ID をメモします。

  2. 次のコマンドを実行して、タスクが開始されたことを確認します。このコマンドは、タスクが開始されるまで待機し、シェルプロンプトを返しません。MyTaskID を前のステップのタスク ID に置き換えます。

    $ aws ecs wait tasks-running --task MyTaskID

ステップ 13: コンテナに gMSA 認証情報があることを検証する

タスク内のコンテナに Kerberos トークン gMSA があることを確認します。

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

  1. 次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws ecs execute-command \ --task MyTaskID \ --container windows_sample_app \ --interactive \ --command powershell.exe

    出力は PowerShell プロンプトになります。

  2. コンテナ内の PowerShell ターミナルで次のコマンドを実行します。

    PS C:\> klist get ExampleAccount$

    出力では、Principal は以前に作成したものであることに注意してください。

ステップ 14: クリーンアップする

このチュートリアルが終了したら、未使用のリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。

このステップでは、AWS CLI を使用します。AWS CloudShell のこれらのコマンドは、デフォルトのシェルである bash で実行できます。

  1. タスクを停止します。MyTaskID をステップ 12 のタスク ID ステップ 12: Windows タスクを実行する に置き換えます。

    $ aws ecs stop-task --task MyTaskID
  2. Amazon EC2 インスタンスを停止します。その後、クラスター内のコンテナインスタンスは 1 時間後に自動で削除されます。

    Amazon EC2 コンソールを使用し、インスタンスを検索して終了できます。または、以下のコマンドを実行できます。コマンドを実行するには、ステップ 1、ステップ 11: コンテナインスタンスを検証するaws ecs describe-container-instances コマンドの出力で EC2 インスタンス ID を見つけます。i-10a64379 は EC2 インスタンス ID の例です。

    $ aws ec2 terminate-instances --instance-ids MyInstanceID
  3. Amazon S3 の CredSpec ファイルを削除します。MyBucket をお使いの Amazon S3 バケットの名前に置き換えます。

    $ aws s3api delete-object --bucket MyBucket --key ecs-domainless-gmsa-credspec/gmsa-cred-spec.json
  4. シークレットを Secrets Manager から削除するには 代わりに SSM Parameter Store を使用した場合は、パラメータを削除してください。

    次のコマンドでは、sh と互換性のあるシェルで使用されるバックスラッシュ継続文字を使用します。このコマンドは PowerShell と互換性がありません。PowerShell で使用するには、コマンドを変更する必要があります。

    $ aws secretsmanager delete-secret --secret-id gmsa-plugin-input \ --force-delete-without-recovery
  5. タスク定義を登録解除して削除します。タスク定義を登録解除すると、そのタスク定義を非アクティブとしてマークするため、新しいタスクを開始するのに使用できなくなります。その後、タスク定義を削除できます。

    1. バージョンを指定してタスク定義の登録を解除します。ECS は、1 から始まる番号の付いたタスク定義のバージョンを自動的に作成します。:1 などのコンテナイメージのラベルと同じ形式のバージョンを参照します。

      $ aws ecs deregister-task-definition --task-definition windows-gmsa-domainless-task:1
    2. タスク定義を削除します。

      $ aws ecs delete-task-definitions --task-definition windows-gmsa-domainless-task:1
  6. (オプション) クラスターを作成した場合は、ECS クラスターを削除します。

    $ aws ecs delete-cluster --cluster windows-domainless-gmsa-cluster

Windows コンテナ用 Amazon ECS ドメインレス gMSA のデバッグ

Amazon ECS タスクの状態

ECS はタスクを 1 回のみ開始しようとします。問題のあるタスクはすべて停止され、STOPPED 状態に設定されます。タスクに関する一般的な問題には 2 つのタイプがあります。最初に、開始できなかったタスクです。2 つ目は、アプリケーションがいずれかのコンテナ内で停止したタスクです。AWS Management Console で、タスクが停止された理由については、タスクの [停止理由] フィールドを確認してください。AWS CLI に、タスクを説明して stoppedReason を見ます。AWS Management Console および AWS CLI での手順については、「Amazon ECS の停止したタスクのエラーを表示する」を参照してください。

Windows イベント

コンテナ内の gMSA 用 Windows イベントは Microsoft-Windows-Containers-CCG ログファイルに記録され、Logs\Microsoft\Windows\Containers-CCG\Admin にある「アプリケーションとサービス」セクションのイベント ビューアに表示されます。デバッグのヒントの詳細については、Microsoft Learn Web サイトの「Windows コンテナの gMSA のトラブルシューティング」を参照してください。

ECS エージェント gMSA プラグイン

Windows コンテナインスタンス上の ECS エージェントの gMSA プラグインのログは、次のディレクトリ C:/ProgramData/Amazon/gmsa-plugin/ にあります。このログを調べて、ドメインレスユーザーの認証情報がSecrets Manager などのストレージ場所からダウンロードされたかどうか、および認証情報の形式が正しく読み取られたかどうかを確認してください。