Amazon ECS의 EC2 Windows 컨테이너에 대해 gMSA를 사용하는 방법 알아보기 - Amazon Elastic Container Service

Amazon ECS의 EC2 Windows 컨테이너에 대해 gMSA를 사용하는 방법 알아보기

Amazon ECS는 그룹 관리형 서비스 계정(gMSA)이라는 특수한 종류의 서비스 계정을 통해 Windows 컨테이너에 대한 Active Directory 인증을 지원합니다.

.NET 애플리케이션과 같은 Windows 기반 네트워크 애플리케이션은 종종 Active Directory를 사용하여 사용자와 서비스 간의 인증 및 권한 부여 관리를 용이하게 합니다. 개발자는 일반적으로 이러한 목적으로 Active Directory와 통합되고 도메인에 가입된 서버에서 실행되도록 애플리케이션을 설계합니다. Windows 컨테이너는 도메인에 가입할 수 없으므로 gMSA와 함께 실행되도록 Windows 컨테이너를 구성해야 합니다.

gMSA로 실행 중인 Windows 컨테이너는 호스트 Amazon EC2 인스턴스에 의존하여 Active Directory 도메인 컨트롤러에서 gMSA 자격 증명을 검색하고 이를 컨테이너 인스턴스에 제공합니다. 자세한 내용은 Windows 컨테이너용 gMSA 생성 섹션을 참조하세요.

참고

이 기능은 Fargate의 Windows 컨테이너에서 지원되지 않습니다.

고려 사항

Windows 컨테이너에 gMSA를 사용할 때는 다음 사항을 고려해야 합니다.

  • 컨테이너 인스턴스에 Amazon ECS 최적화 Windows Server 2016 Full AMI를 사용할 경우 컨테이너 호스트 이름은 자격 증명 사양 파일에 정의된 gMSA 계정 이름과 같아야 합니다. 컨테이너에 대한 호스트 이름을 지정하려면 hostname 컨테이너 정의 파라미터를 사용합니다. 자세한 내용은 네트워크 설정 단원을 참조하십시오.

  • 도메인 없는 gMSA각 인스턴스를 단일 도메인에 가입 중에서 선택할 수 있습니다. 도메인 없는 gMSA를 사용하면 컨테이너 인스턴스는 도메인에 가입되지 않고, 인스턴스의 다른 애플리케이션은 보안 인증을 사용하여 도메인에 액세스할 수 없고, 다른 도메인에 가입하는 작업은 동일한 인스턴스에서 실행될 수 있습니다.

    그런 다음 CredSpec 및 선택적으로 도메인 없는 gMSA에 대한 Active Directory 사용자 보안 인증으로 데이터 스토리지를 선택합니다.

    Amazon ECS는 Active Directory 보안 인증 사양 파일(CredSpec)을 사용합니다. 이 파일은 gMSA 계정 컨텍스트를 컨테이너에 전파하는 데 사용되는 gMSA 메타데이터를 포함합니다. CredSpec 파일을 생성하고 다음 표의 컨테이너 인스턴스의 운영 체제별 CredSpec 스토리지 옵션 중 하나에 저장합니다. 도메인 없는 방법을 사용하려면 CredSpec 파일의 선택적 섹션에서 다음 표의 컨테이너 인스턴스의 운영 체제별 domainless user credentials스토리지 옵션 중 하나에 보안 인증을 지정할 수 있습니다.

    운영 체제별 gMSA 데이터 스토리지 옵션
    스토리지 위치 Linux Windows
    Amazon Simple Storage Service(S3) CredSpec CredSpec
    AWS Secrets Manager 도메인 없는 사용자 보안 인증 도메인 없는 사용자 보안 인증
    Amazon EC2 Systems Manager Parameter Store CredSpec CredSpec, 도메인 없는 사용자 보안 인증
    로컬 파일 N/A CredSpec

필수 조건

Amazon ECS에서 Windows 컨테이너 기능에 gMSA를 사용하려면 먼저 다음 사항을 충족해야 합니다.

  • 컨테이너에서 액세스할 리소스를 포함하는 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에 기존 gMSA 계정이 있습니다. 자세한 내용은 Windows 컨테이너용 gMSA 생성 섹션을 참조하세요.

  • 도메인 없는 gMSA 또는 Amazon ECS를 사용하도록 선택한 경우 Amazon ECS 작업을 호스팅하는 Windows 컨테이너 인스턴스는 Active Directory에 ‘도메인 가입’되어 있어야 하며 gMSA 계정에 액세스할 수 있는 Active Directory 보안 그룹의 구성원이어야 합니다.

    도메인 없는 gMSA를 사용하면 컨테이너 인스턴스는 도메인에 가입되지 않고, 인스턴스의 다른 애플리케이션은 보안 인증을 사용하여 도메인에 액세스할 수 없고, 다른 도메인에 가입하는 작업은 동일한 인스턴스에서 실행될 수 있습니다.

  • 필요한 IAM 권한을 추가했습니다. 필요한 권한은 초기 보안 인증 및 보안 인증 사양 저장을 위해 선택하는 방법에 따라 달라집니다.

    • 초기 보안 인증에 도메인 없는 gMSA를 사용하는 경우 AWS Secrets Manager에 대한 IAM 권한이 Amazon EC2 인스턴스 역할에 필요합니다.

    • 보안 인증 사양을 SSM Parameter Store에 저장하는 경우 Amazon EC2 Systems Manager Parameter Store에 대한 IAM 권한이 작업 실행 역할에 필요합니다.

    • 보안 인증 사양을 Amazon S3에 저장하는 경우에는 Amazon Simple Storage Service에 대한 IAM 권한이 작업 실행 역할에 필요합니다.

Amazon ECS에서 Windows 컨테이너에 대한 gMSA 설정

Amazon ECS에서 Windows 컨테이너에 대한 gMSA를 설정하려면 사전 조건 구성을 포함하는 전체 자습서 AWS CLI를 사용하여 도메인이 없는 gMSA로 Amazon ECS Windows 컨테이너 사용를 따르면 됩니다.

다음 섹션에서는 CredSpec 구성에 대해 자세히 설명합니다.

예: CredSpec

Amazon ECS는 gMSA 계정 컨텍스트를 Windows 컨테이너에 전파하는 데 사용되는 gMSA 메타데이터가 포함된 보안 인증 사양 파일을 사용합니다. 자격 증명 사양 파일을 생성하여 태스크 정의의 credentialSpec 필드에서 참조할 수 있습니다. 자격 증명 사양 파일에 암호가 포함되어 있지 않습니다.

다음은 자격 증명 사양 파일의 예입니다.

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "contoso.com", "DnsName": "contoso.com", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "contoso.com" } ] } }

도메인 없는 gMSA 설정

컨테이너 인스턴스를 단일 도메인에 가입시키는 대신 도메인 없는 gMSA를 사용하는 것이 좋습니다. 도메인 없는 gMSA를 사용하면 컨테이너 인스턴스는 도메인에 가입되지 않고, 인스턴스의 다른 애플리케이션은 보안 인증을 사용하여 도메인에 액세스할 수 없고, 다른 도메인에 가입하는 작업은 동일한 인스턴스에서 실행될 수 있습니다.

  1. CredSpec를 스토리지 옵션 중 하나에 업로드하기 전에 Secrets Manager 또는 SSM Parameter Store에서 보안 암호의 ARN을 사용하여 CredSpec에 정보를 추가합니다. 자세한 내용은 Microsoft Learn 웹 사이트에서 Additional credential spec configuration for non-domain-joined container host use case를 참조하세요.

    도메인 없는 gMSA 보안 인증 형식

    다음은 Active Directory에 대한 도메인 없는 gMSA 보안 인증의 JSON 형식입니다. 보안 인증을 Secrets Manager 또는 SSM Parameter Store에 저장합니다.

    { "username":"WebApp01", "password":"Test123!", "domainName":"contoso.com" }
  2. 다음 정보를 CredSpec 파일의 ActiveDirectoryConfig 안에 추가합니다. ARN을 Secrets Manager 또는 SSM Parameter Store의 보안 암호를 바꿉니다.

    단, 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의 보안 암호를 사용할 수도 있습니다.

  3. 수정한 CredSpec 파일은 다음 예제와 같아야 합니다.

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

태스크 정의에서 자격 증명 사양 파일 참조

Amazon ECS에서는 작업 정의의 credentialSpecs 필드에서 파일 경로를 참조하는 다음과 같은 방법을 지원합니다. 이러한 각 옵션에 컨테이너 인스턴스를 단일 도메인에 가입시키는지, 아니면 도메인 없는 gMSA를 사용하는지에 따라 각각 credentialspec: 또는 domainlesscredentialspec:를 입력할 수 있습니다.

Amazon S3 버킷

Amazon S3 버킷에 자격 증명 사양을 추가한 다음 태스크 정의의 credentialSpecs 필드에서 Amazon S3 버킷의 Amazon 리소스 이름(ARN)을 참조합니다.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::${BucketName}/${ObjectName}" ], ... } ], ... }

또한 작업에 Amazon S3 버킷에 대한 액세스 권한을 부여하려면 Amazon ECS 작업 실행 IAM 역할에 다음 권한을 인라인 정책으로 추가해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{bucket_name}", "arn:aws:s3:::{bucket_name}/{object}" ] } ] }

SSM Parameter Store 파라미터

SSM Parameter Store 파라미터에 자격 증명 사양을 추가한 다음 태스크 정의의 credentialSpecs 필드에서 SSM Parameter Store 파라미터의 Amazon 리소스 이름(ARN)을 참조합니다.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:ssm:region:111122223333:parameter/parameter_name" ], ... } ], ... }

또한 작업에 SSM Parameter Store 파라미터에 대한 액세스 권한을 부여하려면 Amazon ECS 작업 실행 IAM 역할에 다음 권한을 인라인 정책으로 추가해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:region:111122223333:parameter/parameter_name" ] } ] }

로컬 파일

로컬 파일의 자격 증명 사양 세부 정보를 사용하여 태스크 정의의 credentialSpecs 필드에 있는 파일 경로를 참조합니다. 참조되는 파일 경로는 C:\ProgramData\Docker\CredentialSpecs 디렉터리를 기준으로 해야 하며 백슬래시('\')를 파일 경로 구분자로 사용해야 합니다.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspec:file://CredentialSpecDir\CredentialSpecFile.json" ], ... } ], ... }