AWS CLI를 사용하여 도메인이 없는 gMSA로 Amazon ECS Windows 컨테이너 사용
다음 자습서에서는 AWS CLI를 사용하여 Active Directory에 액세스할 수 있는 보안 인증이 있는 Windows 컨테이너를 실행하는 Amazon ECS 작업을 생성하는 방법을 보여 줍니다 도메인 없는 gMSA를 사용하면 컨테이너 인스턴스는 도메인에 가입되지 않고, 인스턴스의 다른 애플리케이션은 보안 인증을 사용하여 도메인에 액세스할 수 없고, 다른 도메인에 가입하는 작업은 동일한 인스턴스에서 실행될 수 있습니다.
주제
- 사전 조건
- 1단계: Active Directory 도메인 서비스(AD DS)에서 gMSA 계정 생성 및 구성
- 2단계: Secrets Manager로 보안 인증 업로드
- 3단계: 도메인이 없는 gMSA 정보를 포함하도록 CredSpec JSON 수정
- 4단계: Amazon S3에 CredSpec 업로드
- 5단계: (선택 사항) Amazon ECS 클러스터 생성
- 6단계: 컨테이너 인스턴스에 대한 IAM 역할 생성
- 7단계: 사용자 지정 작업 실행 역할 생성
- 8단계: Amazon ECS Exec에 대한 작업 역할 생성
- 9단계: 도메인 없는 gMSA를 사용하는 작업 정의 등록
- 10단계: 클러스터에 Windows 컨테이너 인스턴스 등록
- 11단계: 컨테이너 인스턴스 확인
- 12단계: Windows 작업 실행
- 13단계: 컨테이너에 gMSA 보안 인증이 있는지 확인
- 14단계: 정리
- 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 관리형 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스토리지 옵션 중 하나에 보안 인증을 지정할 수 있습니다.
스토리지 위치 Linux Windows Amazon Simple Storage Service(S3) CredSpec CredSpec AWS Secrets Manager 도메인 없는 사용자 보안 인증 도메인 없는 사용자 보안 인증 Amazon EC2 Systems Manager Parameter Store CredSpec CredSpec, 도메인 없는 사용자 보안 인증 로컬 파일 N/A CredSpec -
(선택 사항) AWS CloudShell은 고객에게 자체 EC2 인스턴스를 생성할 필요 없이 명령줄을 제공하는 도구입니다. 자세한 내용은 AWS CloudShell 사용 설명서의 AWS CloudShell이란 무엇입니까? 섹션을 참조하세요.
1단계: Active Directory 도메인 서비스(AD DS)에서 gMSA 계정 생성 및 구성
Active Directory 도메인에서 gMSA 계정을 생성하고 구성합니다.
-
키 배포 서비스 루트 키 생성
참고
AWS Directory Service를 사용할 경우 이 단계를 건너뛸 수 있습니다.
KDS 루트 키와 gMSA 권한은 AWS 관리형 Microsoft AD를 사용하여 구성됩니다.
도메인에서 아직 gMSA 서비스 계정을 생성하지 않았다면 먼저 키 배포 서비스(KDS) 루트 키를 생성해야 합니다. KDS는 gMSA 암호를 생성하고 교체하여 승인된 호스트에 배포하는 역할을 합니다.
ccg.exe
는 gMSA 보안 인증을 검색해야 하는 경우 KDS에 연락하여 현재 암호를 검색합니다.KDS 루트 키가 이미 생성되었는지 확인하려면
ActiveDirectory
PowerShell 모듈을 사용하여 도메인 컨트롤러에서 도메인 관리자 권한으로 다음 PowerShell cmdlet을 실행합니다. 모듈에 대한 자세한 내용은 Microsoft Learn 웹 사이트의 ActiveDirectory Module을 참조하세요. PS C:\>
Get-KdsRootKey
명령에서 키 ID를 반환하는 경우 이 단계의 나머지 부분은 건너뛸 수 있습니다. 그렇지 않으면 다음 명령을 실행하여 KDS 루트 키를 생성합니다.
PS C:\>
Add-KdsRootKey -EffectiveImmediately
명령의 인수
EffectiveImmediately
는 키가 즉시 유효함을 의미하지만 KDS 루트 키가 복제되어 모든 도메인 컨트롤러에서 사용할 수 있으려면 10시간을 기다려야 합니다. -
gMSA 계정 생성
gMSA 계정을 생성하고
ccg.exe
에서 gMSA 암호를 검색하도록 허용하려면 도메인에 대한 액세스 권한이 있는 Windows Server 또는 클라이언트에서 다음 PowerShell 명령을 실행합니다.ExampleAccount
를 gMSA 계정에 사용하려는 이름으로 바꿉니다.-
PS C:\>
Install-WindowsFeature RSAT-AD-PowerShell
-
PS C:\>
New-ADGroup -Name "
ExampleAccount
Authorized Hosts" -SamAccountName "ExampleAccount
Hosts" -GroupScope DomainLocal -
PS C:\>
New-ADServiceAccount -Name "
ExampleAccount
" -DnsHostName "contoso
" -ServicePrincipalNames "host/ExampleAccount
", "host/contoso
" -PrincipalsAllowedToRetrieveManagedPassword "ExampleAccount
Hosts" -
만료되지 않는 영구 암호로 사용자를 생성합니다. 이러한 보안 인증은 AWS Secrets Manager에 저장되며 각 작업에서 도메인에 가입하는 데 사용됩니다.
PS C:\>
New-ADUser -Name "
ExampleAccount
" -AccountPassword (ConvertTo-SecureString -AsPlainText "Test123
" -Force) -Enabled 1 -PasswordNeverExpires 1 -
PS C:\>
Add-ADGroupMember -Identity "
ExampleAccount
Hosts" -Members "ExampleAccount
" -
액티브 디렉터리에 CredSpec 개체를 생성하기 위한 PowerShell 모듈을 설치하고 CredSpec JSON을 출력합니다.
PS C:\>
Install-PackageProvider -Name NuGet -Force
PS C:\>
Install-Module CredentialSpec
-
PS C:\>
New-CredentialSpec -AccountName
ExampleAccount
-
-
이전 명령의 JSON 출력을
gmsa-cred-spec.json
이라는 파일에 복사합니다. 이는 CredSpec 파일입니다. 3단계 3단계: 도메인이 없는 gMSA 정보를 포함하도록 CredSpec JSON 수정에서 사용됩니다.
2단계: Secrets Manager로 보안 인증 업로드
Active Directory 보안 인증을 안전한 자격 증명 스토리지 시스템에 복사하여 각 작업에서 검색할 수 있도록 합니다. 이는 도메인 없는 gMSA 방법입니다. 도메인 없는 gMSA를 사용하면 컨테이너 인스턴스는 도메인에 가입되지 않고, 인스턴스의 다른 애플리케이션은 보안 인증을 사용하여 도메인에 액세스할 수 없고, 다른 도메인에 가입하는 작업은 동일한 인스턴스에서 실행될 수 있습니다.
이 단계에서는 AWS CLI를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
-
다음 AWS CLI 명령을 실행하고 환경에 맞게 사용자 이름, 암호 및 도메인 이름을 변경합니다. 보안 암호의 ARN을 보관하고 다음 단계 3단계: 도메인이 없는 gMSA 정보를 포함하도록 CredSpec JSON 수정에서 사용합니다.
다음 명령은
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단계: 도메인이 없는 gMSA 정보를 포함하도록 CredSpec JSON 수정
CredSpec를 스토리지 옵션 중 하나에 업로드하기 전에 이전 단계의 Secrets Manager에 있는 보안 암호의 ARN을 사용하여 CredSpec에 정보를 추가합니다. 자세한 내용은 Microsoft Learn 웹 사이트에서 Additional credential spec configuration for non-domain-joined container host use case
-
다음 정보를 CredSpec 파일의
ActiveDirectoryConfig
안에 추가합니다. 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:
)의 ARN을 사용하여 SSM Parameter Store의 보안 암호를 사용할 수도 있습니다.aws-region
:111122223333:parameter/gmsa-plugin-input
\" -
수정한 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를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
-
AWS CLI 명령을 실행 중인 컴퓨터나 환경에 CredSpec 파일을 복사합니다.
-
다음 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를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
$
aws ecs create-cluster --cluster-name windows-domainless-gmsa-cluster
중요
자체 클러스터를 생성하는 경우, 해당 클러스터에 사용할 각 명령에 --cluster
clusterName
을 지정해야 합니다.
6단계: 컨테이너 인스턴스에 대한 IAM 역할 생성
컨테이너 인스턴스는 ECS 작업에서 컨테이너를 실행하는 호스트 컴퓨터입니다(예: Amazon EC2 인스턴스). 각 컨테이너 인스턴스는 Amazon ECS 클러스터에 등록합니다. Amazon EC2 인스턴스를 시작해 클러스터에 등록하기 전에 사용할 컨테이너 인스턴스의 IAM 역할을 생성해야 합니다.
컨테이너 인스턴스 역할을 생성하려면 Amazon ECS 컨테이너 인스턴스 IAM 역할을 참조하세요. 기본값 ecsInstanceRole
에는 이 자습서를 완료하기에 충분한 권한이 있습니다.
7단계: 사용자 지정 작업 실행 역할 생성
Amazon ECS는 각 작업을 시작하는 데 필요한 권한에 대해 컨테이너 인스턴스 역할 대신 다른 IAM 역할을 사용할 수 있습니다. 이 역할을 작업 실행 역할이라고 합니다. ECS에서 작업을 실행하는 데 필요한 권한(최소 권한 권한이라고도 함)만 포함된 작업 실행 역할을 생성하는 것이 좋습니다. 최소 권한 원칙에 대한 자세한 내용은 AWS Well-Architected Framework의 SEC03-BP02 Grant least privilege access를 참조하세요.
-
작업 실행 역할을 생성하려면 작업 실행 역할 생성을 참조하세요. 기본 권한을 사용하면 컨테이너 인스턴스가 Amazon Elastic Container Registry와 애플리케이션의
stdout
및stderr
에 컨테이너 이미지를 풀하고 Amazon CloudWatch Logs에 기록할 수 있습니다.이 자습서에서는 역할에 사용자 지정 권한이 필요하므로 역할에
ecsTaskExecutionRole
과 다른 이름을 지정할 수 있습니다. 이 자습서의 이후 단계에서는ecsTaskExecutionRole
을 사용합니다. -
이 역할에만 존재하는 인라인 정책이나 재사용할 수 있는 정책으로 사용자 지정 정책을 생성하여 다음 권한을 추가합니다. 첫 번째 명령문에서
Resource
의 ARN을 Amazon S3 버킷 및 위치로 바꾸고, 두 번째 명령문에서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를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
AWS CLI를 사용하여 작업 역할을 생성하려면 다음 단계를 따릅니다.
-
다음 콘텐츠로
ecs-tasks-trust-policy.json
이라는 파일을 생성합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
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
을 삭제할 수 있습니다. -
다음 콘텐츠로
ecs-exec-demo-task-role-policy.json
이라는 파일을 생성합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
-
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를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
-
다음 콘텐츠로
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" }
-
다음 명령을 실행하여 작업 정의를 등록합니다.
다음 명령은
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는 작업이 시작되는 클러스터에 등록된 컨테이너 인스턴스에서 작업을 실행합니다.
-
AWS Management Console에서 Amazon ECS용으로 구성된 Amazon EC2 Windows 인스턴스를 시작하려면 Amazon ECS Windows 컨테이너 인스턴스 시작를 참조하세요. 사용자 데이터에 대한 단계에서 중지합니다.
-
gMSA의 경우 ECS 컨테이너 에이전트를 시작하기 전에 사용자 데이터에서 환경 변수
ECS_GMSA_SUPPORTED
를 설정해야 합니다.ECS Exec의 경우 에이전트는
-EnableTaskIAMRole
인수로 시작해야 합니다.작업이 EC2 IMDS 웹 서비스에 도달하여 역할 보안 인증을 검색하는 것을 방지하여 인스턴스 IAM 역할을 보호하려면
-AwsvpcBlockIMDS
인수를 추가합니다. 이는awsvpc
네트워크 모드를 사용하는 작업에만 적용됩니다.<powershell> [Environment]::SetEnvironmentVariable("ECS_GMSA_SUPPORTED", $TRUE, "Machine") Import-Module ECSTools Initialize-ECSAgent -Cluster
windows-domainless-gmsa-cluster
-EnableTaskIAMRole -AwsvpcBlockIMDS </powershell> -
요약 패널에서 인스턴스 구성 요약을 검토하고 준비가 되면 인스턴스 시작을 선택합니다.
11단계: 컨테이너 인스턴스 확인
AWS Management Console을 사용하여 클러스터에 컨테이너 인스턴스가 있는지 확인할 수 있습니다. 하지만 gMSA의 경우 속성으로 표시되는 추가 기능이 필요합니다. 이러한 속성은 AWS Management Console에 표시되지 않으므로 이 자습서에서는 AWS CLI를 사용합니다.
이 단계에서는 AWS CLI를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
-
클러스터의 컨테이너 인스턴스를 나열합니다. 컨테이너 인스턴스의 ID는 EC2 인스턴스의 ID와 다릅니다.
$
aws ecs list-container-instances
출력:
{ "containerInstanceArns": [ "arn:aws:ecs:
aws-region
:111122223333:container-instance/default
/MyContainerInstanceID
" ] }예를 들어
526bd5d0ced448a788768334e79010fd
는 유효한 컨테이너 인스턴스 ID입니다. -
이전 단계의 컨테이너 인스턴스 ID를 사용하여 컨테이너 인스턴스의 세부 정보를 가져옵니다.
MyContainerInstanceID
를 ID로 바꿉니다.다음 명령은
sh
및 호환 셸에서 사용되는 백슬래시 연속 문자를 사용합니다. 이 명령은 PowerShell과 호환되지 않습니다. PowerShell에서 사용하려면 명령을 수정해야 합니다.$
aws ecs describe-container-instances \ ----container-instances MyContainerInstanceID
참고로 출력 내용이 매우 깁니다.
-
attributes
목록에name
이라는 키와ecs.capability.gmsa-domainless
값을 갖는 개체가 있는지 확인합니다. 다음은 이 개체의 예입니다.출력:
{ "name": "ecs.capability.gmsa-domainless" }
12단계: Windows 작업 실행
Amazon ECS 작업을 실행합니다. 클러스터에 컨테이너 인스턴스가 1개만 있는 경우 run-task
를 사용할 수 있습니다. 컨테이너 인스턴스가 여러 개 있는 경우 start-task
을 사용하고 작업을 실행할 컨테이너 인스턴스 ID를 지정한 다음 작업 정의에 배치 제약을 추가하여 이 작업이 실행되는 컨테이너 인스턴스의 유형을 제어하는 것이 더 쉬울 수 있습니다.
이 단계에서는 AWS CLI를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
-
다음 명령은
sh
및 호환 셸에서 사용되는 백슬래시 연속 문자를 사용합니다. 이 명령은 PowerShell과 호환되지 않습니다. PowerShell에서 사용하려면 명령을 수정해야 합니다.aws ecs run-task --task-definition windows-gmsa-domainless-task \ --enable-execute-command --cluster windows-domainless-gmsa-cluster
명령에서 반환된 작업 ID를 메모합니다.
-
다음 명령을 실행하여 작업이 시작되었는지 확인합니다. 이 명령은 대기하며 작업이 시작될 때까지 셸 프롬프트를 반환하지 않습니다.
MyTaskID
을 전 단계의 작업 ID로 바꿉니다.$
aws ecs wait tasks-running --task MyTaskID
13단계: 컨테이너에 gMSA 보안 인증이 있는지 확인
작업의 컨테이너에 Kerberos 토큰 gMSA가 있는지 확인합니다.
이 단계에서는 AWS CLI를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
-
다음 명령은
sh
및 호환 셸에서 사용되는 백슬래시 연속 문자를 사용합니다. 이 명령은 PowerShell과 호환되지 않습니다. PowerShell에서 사용하려면 명령을 수정해야 합니다.$
aws ecs execute-command \ --task MyTaskID \ --container windows_sample_app \ --interactive \ --command powershell.exe
PowerShell 프롬프트가 출력됩니다.
-
컨테이너 내의 PowerShell 터미널에서 다음 명령을 실행합니다.
PS C:\>
klist get ExampleAccount$
출력에서
Principal
이 이전에 생성한 것인지 확인합니다.
14단계: 정리
이 자습서로 완료를 한 후에 사용하지 않는 리소스에 대해 요금이 발생하는 것을 방지하기 위해 연결된 리소스를 정리해야 합니다.
이 단계에서는 AWS CLI를 사용합니다. 기본 셸 bash
의 AWS CloudShell에서 이러한 명령을 실행할 수 있습니다.
-
작업을 중지합니다.
MyTaskID
를 12단계 12단계: Windows 작업 실행의 작업 ID로 바꿉니다.$
aws ecs stop-task --task
MyTaskID
-
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
-
Amazon S3에서 CredSpec 파일을 삭제합니다.
MyBucket
을 Amazon S3 버킷 이름으로 바꿉니다.$
aws s3api delete-object --bucket
MyBucket
--keyecs-domainless-gmsa-credspec/gmsa-cred-spec.json
-
Secrets Manager에서 보안 암호를 삭제합니다. SSM Parameter Store를 대신 사용한 경우 파라미터를 삭제합니다.
다음 명령은
sh
및 호환 셸에서 사용되는 백슬래시 연속 문자를 사용합니다. 이 명령은 PowerShell과 호환되지 않습니다. PowerShell에서 사용하려면 명령을 수정해야 합니다.$
aws secretsmanager delete-secret --secret-id
gmsa-plugin-input
\ --force-delete-without-recovery -
작업 정의를 등록 취소하고 삭제합니다. 작업 정의를 등록 취소하면 시작하는 데 사용할 수 없도록 비활성으로 표시됩니다. 그려면 작업 정의를 삭제할 수 있습니다.
-
버전을 지정하여 작업 정의를 등록 취소합니다. ECS는 1부터 시작하는 번호를 지정하여 작업 정의 버전을 자동으로 만듭니다. 컨테이너 이미지의 레이블과 같은 형식으로 버전을 참조합니다(예:
:1
)$
aws ecs deregister-task-definition --task-definition
windows-gmsa-domainless-task:1
-
작업 정의를 삭제합니다.
$
aws ecs delete-task-definitions --task-definition
windows-gmsa-domainless-task:1
-
-
(선택 사항) 클러스터를 생성한 경우 ECS 클러스터를 삭제합니다.
$
aws ecs delete-cluster --cluster
windows-domainless-gmsa-cluster
Windows 컨테이너에 대한 Amazon ECS 도메인 없는 gMSA 디버깅
- Amazon ECS 작업 상태
-
ECS는 작업 시작을 정확히 한 번 시도합니다. 문제가 있는 모든 작업은 중지되고
STOPPED
상태로 설정됩니다. 작업과 관련된 문제에는 두 가지 일반적인 유형이 있습니다. 첫 번째는 시작할 수 없는 작업입니다. 둘째, 컨테이너 중 하나에서 애플리케이션이 중지된 작업입니다. 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 웹사이트의 Troubleshoot gMSAs for Windows containers를 참조하세요. - ECS 에이전트 gMSA 플러그인
-
Windows 컨테이너 인스턴스의 ECS 에이전트용 gMSA 플러그인에 대한 로깅은
C:/ProgramData/Amazon/gmsa-plugin/
디렉터리에 있습니다. 이 로그에서 도메인 없는 사용자 보안 인증이 Secrets Manager와 같은 스토리지 위치에서 다운로드되었는지, 보안 인증 형식을 올바르게 읽었는지 확인합니다.