在 Fargate 上使用 gMSA 做為Linux容器 - Amazon Elastic Container Service

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

在 Fargate 上使用 gMSA 做為Linux容器

Amazon ECS 透過稱為群組受管服務帳戶 () 的特殊服務帳戶,支援 Fargate 上 Linux 容器的 Active Directory 身分驗證gMSA。

.NET Core 應用程式等以 Linux 為基礎的網路應用程式,可使用 Active Directory 來促進使用者和服務之間的身分驗證和授權管理。您可以透過設計與 Active Directory 整合並在加入網域的伺服器上執行的應用程式來使用此功能。但是,由於 Linux 容器無法加入網域,因此您需要設定 Linux 容器來執行 gMSA。

考量事項

在 Fargate 上使用 Linux gMSA容器之前,請考慮下列事項:

  • 您必須執行平台 1.4 版或更新版本。

  • 您可能需要加入網域的 Windows 電腦才能完成先決條件。例如,您可能需要加入網域的 Windows 電腦,才能在使用 PowerShell 的 Active Directory 中建立 gMSA。RSATActive Director PowerShell 工具僅適用於 Windows。如需詳細資訊,請參閱安裝 Active Directory 管理工具

  • 您必須使用無網域 gMSA

    Amazon ECS 使用 Active Directory 憑證規格檔案 (CredSpec)。此檔案包含用於將 gMSA 帳戶內容傳播至容器的 gMSA 中繼資料。您可以產生 CredSpec 檔案,然後將其存放在 Amazon S3 儲存貯體中。

  • 任務只能支援一個 Active Directory。

必要條件

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

  • 您可以使用您希望容器存取的資源來設定 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 中有現有的gMSA帳戶,以及具有存取gMSA服務帳戶許可的使用者。如需詳細資訊,請參閱建立無網域 gMSA 的 Active Directory 使用者

  • 您有 Amazon S3 儲存貯體。如需詳細資訊,請參閱《Amazon S3 使用者指南》中的建立儲存貯體。

在 Amazon ECS 上設定能夠使用 gMSA 功能的 Linux 容器

準備基礎設施

下列步驟是執行一次的考量和設定。

  • 建立無網域 gMSA 的 Active Directory 使用者

    當您使用無網域 時gMSA,容器不會加入網域。在容器上執行的其他應用程式無法使用 登入資料來存取網域。使用不同網域的任務可以在相同的容器上執行。您可以在 CredSpec 檔案中提供 AWS Secrets Manager 中的秘密名稱。祕密必須包含使用者名稱、密碼和要登入的網域。

    此功能與 gMSA support for non-domain-joined container hosts 功能類似。如需有關 Windows 功能的詳細資訊,請參閱 Microsoft Learn 網站上的 gMSA 架構和改進

    1. 在 Active Directory 網域中設定使用者。Active Directory 中的使用者必須具有存取您在任務中使用的gMSA服務帳戶的許可。

    2. 您擁有可以解析 Active Directory 網域的 VPC 和子網路。使用指向 Active Directory 服務名稱的網域名稱,使用 DHCP 選項設定 VPC。如需有關如何設定 VPC DHCP 選項的詳細資訊,請參閱《Amazon Virtual Private Cloud 使用者指南》中的使用 DHCP 選項集

    3. 在 中建立秘密 AWS Secrets Manager。

    4. 建立登入資料規格檔案。

設定許可和祕密

針對每個應用程式和每個任務定義執行下列步驟一次。我們建議您使用授予最低權限的最佳實務,並縮減政策中使用的許可。這樣一來,每個任務都只能讀取所需的祕密。

  1. 在 Active Directory 網域中建立使用者。Active Directory 中的使用者必須具有存取您在任務中使用之 gMSA 服務帳戶的權限。

  2. 在您成為 Active Directory 使用者之後,請在 中建立秘密 AWS Secrets Manager。如需詳細資訊,請參閱建立 AWS Secrets Manager 祕密

  3. 將使用者的使用者名稱、密碼和網域分別輸入到名為 usernamepassworddomainName 的 JSON 鍵值組中。

    {"username":"username","password":"passw0rd", "domainName":"example.com"}
  4. 您必須將以下許可作為內嵌政策新增至任務執行 IAM 角色。這樣做可讓 credentials-fetcher 常駐程式存取 Secrets Manager 的祕密。將 MySecret 替換為在 Resource 清單中含有祕密的 Amazon Resource Name (ARN) 的範例。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" ] } ] }
    注意

    如果您使用自己的 KMS 金鑰來加密秘密,則必須將必要的許可新增至此角色,並將此角色新增至 AWS KMS 金鑰政策。

  5. 將憑證規格新增至 Amazon S3 儲存貯體。然後,在任務定義的 credentialSpecs 欄位中參考 Amazon S3 儲存貯體的 Amazon Resource Name (ARN)。

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

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

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

憑證規格檔案

Amazon ECS 使用 Active Directory 憑證規格檔案 (CredSpec)。此檔案包含用於將 gMSA 帳戶內容傳播至容器 Linux 的 gMSA 中繼資料。您會產生 CredSpec,並在任務定義的 credentialSpecs 欄位中參考該檔案。CredSpec 檔案不包含任何祕密。

以下是範例 CredSpec 檔案。

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "example.com", "DnsName": "example.com", "NetBiosName": "example" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "example.com" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } } } }
建立 CredSpec 並將其上傳至 Amazon S3

您可以在加入網域的 Windows 電腦上使用 CredSpec PowerShell 模組來建立 CredSpec。請依照 Microsoft Learn 網站上建立憑證規格中的步驟進行。

建立登入資料規格檔案後,請將其上傳至 Amazon S3 儲存貯體。將 CredSpec 檔案複製至正在執行 AWS CLI 命令的電腦或環境中。

執行下列 AWS CLI 命令,將 CredSpec 上傳至 Amazon S3。將 amzn-s3-demo-bucket 取代為您的 Amazon S3 儲存貯體的名稱。您可以將檔案作為物件儲存在任何儲存貯體和位置,但必須在附加至任務執行角色的政策中允許存取該儲存貯體和位置。

對於 PowerShell,請使用下列命令:

$ Write-S3Object -BucketName "amzn-s3-demo-bucket" -Key "ecs-domainless-gmsa-credspec" -File "gmsa-cred-spec.json"

下列 AWS CLI 命令使用 sh和相容 Shell 所使用的反斜線接續字元。

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