選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

在 Amazon ECS 上使用 gMSA for EC2 Linux容器 EC2

焦點模式
在 Amazon ECS 上使用 gMSA for EC2 Linux容器 EC2 - Amazon Elastic Container Service

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

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

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

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

使用 gMSA 執行的 Linux 容器依賴在容器主機 Amazon EC2 執行個體上執行的 credentials-fetcher 常駐程式。也就是說,常駐程式會從 Active Directory 網域控制站擷取 gMSA 憑證,然後將這些憑證傳輸到容器執行個體。如需有關服務帳戶的詳細資訊,請參閱 Microsoft Learn 網站上的針對 Windows 容器建立 gMSAs

考量事項

針對 Linux 容器使用 gMSA 前,請考慮以下事項:

  • 如果您的容器在 EC2 上執行,則可以針對 Windows 容器和 Linux 容器使用 gMSA。如需如何在 Fargate 上使用 gMSA Linux 容器的詳細資訊,請參閱 在 Fargate 上使用 gMSA 做為Linux容器

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

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

必要條件

在搭配 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 帳戶。如需詳細資訊,請參閱在 Amazon ECS 上使用 gMSA for EC2 Linux容器 EC2

  • 您已在 Amazon ECS Linux 容器執行個體上安裝並執行 credentials-fetcher 常駐程式。您也將一組初始的憑證新增至 credentials-fetcher 常駐程式,以便透過 Active Directory 進行身分驗證。

    注意

    credentials-fetcher 常駐程式僅適用於 Amazon Linux 2023 和 Fedora 37 及更新版本。該常駐程式不適用於 Amazon Linux 2。如需詳細資訊,請參閱 GitHub 上的 aws/credentials-fetcher

  • 您可以設定 credentials-fetcher 常駐程式的憑證,以便使用 Active Directory 進行身分驗證。憑證必須是具有 gMSA 帳戶存取權的 Active Directory 安全群組的成員。決定是否要將執行個體加入網域,或是要使用無網域 gMSA。 中有多個選項。

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

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

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

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

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

準備基礎設施

下列步驟是執行一次的考量和設定。完成這些步驟後,您可以自動建立容器執行個體以重複使用此組態。

決定如何提供初始憑證,並在可重複使用的 EC2 啟動範本中設定 EC2 使用者資料以安裝 credentials-fetcher 常駐程式。

  1. 決定是否要將執行個體加入網域,或是要使用無網域 gMSA。
    • 將 EC2 執行個體加入 Active Directory 網域

      • 透過使用者資料加入執行個體

        在 EC2 啟動範本中新增將 Active Directory 網域加入 EC2 使用者資料的步驟。多個 Amazon EC2 Auto Scaling 群組可以使用相同的啟動範本。

        您可以在 Fedora 文件中使用這些步驟加入 Active Directory 或 FreeIPA 網域

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

      credentials-fetcher 常駐程式具有稱為無網域 gMSA 的功能。此功能需要網域,但 EC2 執行個體不需要加入網域。使用無網域 gMSA 時,容器執行個體不會加入網域,執行個體上的其他應用程式無法使用憑證來存取網域,而加入不同網域的任務則可在相同的執行個體上執行。相反地,您會在 CredSpec 檔案中提供 AWS Secrets Manager 祕密的名稱。祕密必須包含使用者名稱、密碼和要登入的網域。

      此功能受到支援,可與 Linux 和 Windows 容器搭配使用。

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

      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. 將組態新增至服務帳戶的 CredSpec 檔案。其他的 HostAccountConfig 包含 Secrets Manager 祕密的 Amazon Resource Name (ARN)。

        在 Windows 上,PluginGUID 必須符合下列範例程式碼片段中的 GUID。在 Linux 上,會忽略 PluginGUID。將 MySecret 替換為含有祕密的 Amazon Resource Name (ARN) 的範例。

        "ActiveDirectoryConfig": { "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": { "CredentialArn": "arn:aws:secretsmanager:aws-region:111122223333:secret:MySecret" } }
      5. 無網域 gMSA 功能需要任務執行角色中的其他許可。請遵循步驟 (選用) 無網域 gMSA 祕密

  2. 設定執行個體並安裝 credentials-fetcher 常駐程式

    您可以在 EC2 啟動範本中使用使用者資料指令碼來安裝 credentials-fetcher 常駐程式。以下範例示範兩種類型的使用者資料、cloud-config YAML 或 bash 指令碼。這些範例適用於 Amazon Linux 2023 (AL2023)。將 MyCluster 替換為您想要這些執行個體加入的 Amazon ECS 叢集的名稱。

    • cloud-config YAML
      Content-Type: text/cloud-config package_reboot_if_required: true packages: # prerequisites - dotnet - realmd - oddjob - oddjob-mkhomedir - sssd - adcli - krb5-workstation - samba-common-tools # https://github.com/aws/credentials-fetcher gMSA credentials management for containers - credentials-fetcher write_files: # configure the ECS Agent to join your cluster. # replace MyCluster with the name of your cluster. - path: /etc/ecs/ecs.config owner: root:root permissions: '0644' content: | ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true runcmd: # start the credentials-fetcher daemon and if it succeeded, make it start after every reboot - "systemctl start credentials-fetcher" - "systemctl is-active credentials-fetcher && systemctl enable credentials-fetcher"
    • bash 指令碼

      如果您比較習慣 bash 指令碼,並且有多個要寫入 /etc/ecs/ecs.config 的變數,請使用以下 heredoc 格式。此格式會將開頭為 catEOF 之行間的所有項目寫入組態檔案。

      #!/usr/bin/env bash set -euxo pipefail # prerequisites timeout 30 dnf install -y dotnet realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation samba-common-tools # install https://github.com/aws/credentials-fetcher gMSA credentials management for containers timeout 30 dnf install -y credentials-fetcher # start credentials-fetcher systemctl start credentials-fetcher systemctl is-active credentials-fetcher && systemctl enable credentials-fetcher cat <<'EOF' >> /etc/ecs/ecs.config ECS_CLUSTER=MyCluster ECS_GMSA_SUPPORTED=true EOF

    選用組態變數適用於 credentials-fetcher 常駐程式,您可以在 /etc/ecs/ecs.config 中設定該變數。我們建議您在 YAML 區塊或與先前範例類似的 heredoc 內的使用者資料中設定變數。這樣做可防止多次編輯檔案時可能會發生的部分組態問題。如需有關 ECS 代理程式組態的詳細資訊,請參閱 GitHub 上的 Amazon ECS 容器代理程式

    • 或者,如果您變更 credentials-fetcher 常駐程式組態,將通訊端移至其他位置,您也可以使用變數 CREDENTIALS_FETCHER_HOST

設定許可和祕密

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

  1. (選用) 無網域 gMSA 祕密

    如果您使用執行個體未加入網域的無網域方法,請依照此步驟執行。

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

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

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

  2. 決定您要使用 SSM 參數存放區或 S3 來存放 CredSpec

    Amazon ECS 支援以下方法,在任務定義的 credentialSpecs 欄位中參考檔案路徑。

    如果您將執行個體加入單一網域,請在字串中在 ARN 開頭使用 credentialspec: 作為字首。如果您使用無網域 gMSA,請使用 credentialspecdomainless:

    如需 CredSpec 的詳細資訊,請參閱 憑證規格檔案

    • Amazon S3 儲存貯體

      將憑證規格新增至 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:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/{object}" ] } ] }
    • SSM 參數存放區參數

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

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

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

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

憑證規格檔案

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

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

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。