了解如何將 GMA 用於適用於 Amazon ECS 的 EC2 視窗容器 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

了解如何將 GMA 用於適用於 Amazon ECS 的 EC2 視窗容器

Amazon ECS 透過名為群組受管服務帳戶 (gMSA) 的特殊類型的服務帳戶,支援對 Windows 容器的 Active Directory 身分驗證。

.NET 應用程式之類的以 Windows 為基礎的網路應用程式通常會使用 Active Directory 來促進使用者和服務之間的身分驗證和授權管理。開發人員通常會針對此目的設計其應用程式,以與 Active Directory 整合,並在已加入網域的伺服器上執行。由於以 Windows 為基礎的容器無法加入網域,因此您必須將 Windows 容器設定為與 gMSA 搭配執行。

使用 gMSA 執行的 Windows 容器依賴其主機 Amazon EC2 執行個體,以從 Active Directory 網域控制站擷取 gMSA 登入資料,並將這些資料提供給容器執行個體。如需詳細資訊,請參閱 為 Windows 容器建立 gMSA

注意

Fargate 上的 Windows 容器不支援此功能。

考量事項

針對 Windows 容器使用 gMSA 時,應考慮下列事項:

  • 針對您的容器執行個體使用 Amazon ECS 最佳化 Windows Server 2016 Full AMI 時,容器主機名稱必須與登入資料規格檔案中定義的 gMSA 帳戶名稱相同。若要指定容器的主機名稱,請使用 hostname 容器定義參數。如需詳細資訊,請參閱 Network settings (網路設定)

  • 您可以選擇無網域 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 CredSpec CredSpec
    AWS Secrets Manager 無網域使用者憑證 無網域使用者憑證
    Amazon EC2 Systems Manager 參數存放區 CredSpec CredSpec,無網域使用者憑證
    本機檔案 N/A CredSpec

必要條件

在搭配 Amazon ECS 使用 Windows 容器功能適用的 gMSA 之前,請先完成下列各項:

  • 您可以使用您希望容器存取的資源來設定 Active Directory 網域。Amazon ECS 支援下列設定:

  • 您在 Active Directory 中擁有現有的 gMSA 帳戶。如需詳細資訊,請參閱 為 Windows 容器建立 gMSA

  • 您已選擇使用無網域 gMSA 或託管 Amazon ECS 任務的 Amazon ECS Windows 容器執行個體必須是加入 Active Directory 的網域,並且是具有 gMSA 帳戶存取權的 Active Directory 安全群組成員。

    使用無網域 gMSA 時,容器執行個體不會加入網域,執行個體上的其他應用程式無法使用憑證來存取網域,而加入不同網域的任務則可在相同的執行個體上執行。

  • 您已新增必要的 IAM 許可 所需的許可取決於您為初始憑證選擇的方法以及儲存憑證規格的方法:

    • 如果您使用無網域作gMSA為初始登入資料,則 Amazon EC2 執行個體角色需要的 IAM 許可。 AWS Secrets Manager

    • 如果您將憑證規格存放在 SSM 參數存放區中,則任務執行角色需要 Amazon EC2 Systems Manager 參數存放區的 IAM 許可。

    • 如果您將憑證規格存放在 Amazon S3 中,則任務執行角色需要 Amazon Simple Storage Service 的 IAM 許可。

在 Amazon ECS 上設定 Windows 容器的 gMSA

若要在 Amazon ECS 上設定 Windows 容器的 gMSA,您可以遵循包含設定先決條件 使用 Amazon ECS 視窗容器搭配無網域gMSA使用 AWS CLI 的完整教學課程。

以下章節詳細介紹了 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 參數存放區中祕密的 ARN 將資訊新增 CredSpec。如需詳細資訊,請參閱 Microsoft Learn 網站上的 non-domain-joined容器主機使用案例的其他認證規格組態

    無網域 gMSA 憑證格式

    以下是您 Active Directory 的無網域 gMSA 憑證的 JSON 格式。將憑證儲存在 Secrets Manager 或 SSM 參數存放區中。

    { "username":"WebApp01", "password":"Test123!", "domainName":"contoso.com" }
  2. 將下列資訊新增至 ActiveDirectoryConfig 內的 CredSpec 檔案。將 ARN 替代為 Secrets Manager 或 SSM 參數存放區中的祕密。

    請注意,PluginGUID 值必須與下列範例程式碼片段中的 GUID 相符,且為必要值。

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

    您也可以透過使用以下格式的 ARN,在 SSM 參數存放區中使用祕密:\"arn:aws:ssm:aws-region:111122223333:parameter/gmsa-plugin-input\"

  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 Resource Name (ARN)。

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

您也必須新增下列許可做為 Amazon ECS 任務執行 IAM 角色的內嵌政策,讓任務能夠存取 Amazon S3 儲存貯體。

{ "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 參數存放區參數

將憑證規格新增至 SSM 參數存放區參數,然後在任務定義的 credentialSpecs 欄位中參考 SSM 參數存放區參數的 Amazon Resource Name (ARN)。

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

您也必須新增下列許可做為 Amazon ECS 任務執行 IAM 角色的內嵌政策,讓任務能夠存取 SSM 參數存放區參數。

{ "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" ], ... } ], ... }