

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

# 在 Fargate 上為 Linux 容器使用 gMSA
<a name="fargate-linux-gmsa"></a>

Amazon ECS 透過名為*群組受管服務帳戶* (gMSA) 的特殊類型服務帳戶，支援為 Fargate 上的 Linux 容器提供 Active Directory 身分驗證。

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

## 考量事項
<a name="fargate-linux-gmsa-considerations"></a>

在 Fargate 上為 Linux 容器使用 gMSA 之前，請考量以下事項：
+ 您必須執行平台版本 1.4 或更新版本。
+ 您可能需要加入網域的 Windows 電腦才能完成先決條件。例如，您可能需要加入網域的 Windows 電腦，才能在使用 PowerShell 的 Active Directory 中建立 gMSA。RSATActive Director PowerShell 工具僅適用於 Windows。如需詳細資訊，請參閱[安裝 Active Directory 管理工具](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_install_ad_tools.html)。
+ 您必須使用**無網域 gMSA**。

  Amazon ECS 使用 Active Directory 憑證規格檔案 (CredSpec)。此檔案包含用於將 gMSA 帳戶內容傳播至容器的 gMSA 中繼資料。您可以產生 CredSpec 檔案，然後將其儲存於 Amazon S3 儲存貯體中。
+ 一個任務只能支援一個 Active Directory。

## 先決條件
<a name="fargate-linux-gmsa-prerequisites"></a>

在搭配 Amazon ECS 使用 Linux 容器功能適用的 gMSA 之前，請先完成下列各項：
+ 您可以使用您希望容器存取的資源來設定 Active Directory 網域。Amazon ECS 支援下列設定：
  +  Directory Service Active Directory. Directory Service 是在 Amazon EC2 上託管的 AWS 受管 Active Directory。如需詳細資訊，請參閱《 *AWS Directory Service 管理指南*》中的 [AWS Managed Microsoft AD 入門](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html)。
  + 內部部署 Active Directory。您必須確認 Amazon ECS Linux 容器執行個體可以加入網域。如需詳細資訊，請參閱[AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect-network-to-amazon.html)。
+ 您在 Active Directory 中有一個現存的 gMSA 帳戶，也有一個具備存取 gMSA 服務帳戶許可的使用者。如需詳細資訊，請參閱[建立無網域 gMSA 的 Active Directory 使用者](#fargate-linux-gmsa-initial-domainless)。
+ 您已有 Amazon S3 儲存貯體。如需詳細資訊，請參閱 *Amazon S3 User Guide* 中的 [Creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

## 在 Amazon ECS 上設定能夠使用 gMSA 功能的 Linux 容器
<a name="fargate-linux-gmsa-setup"></a>
<a name="linux-gmsa-setup-infra"></a>
**準備基礎設施**  
下列步驟是執行一次的考量和設定。
+ <a name="fargate-linux-gmsa-initial-domainless"></a>

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

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

  此功能與 *gMSA support for non-domain-joined container hosts* 功能類似。如需有關 Windows 功能的詳細資訊，請參閱 Microsoft Learn 網站上的 [gMSA 架構和改進](https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/manage-serviceaccounts#gmsa-architecture-and-improvements)。

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

  1. 您擁有可以解析 Active Directory 網域的 VPC 和子網路。設定 VPC 時，需在 DHCP 選項中設定指向 Active Directory 服務名稱的網域名稱。如需有關為 VPC 設定 DHCP 選項的資訊，請參閱 *Amazon Virtual Private Cloud User Guide* 中的 [Work with DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/DHCPOptionSet.html)。

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

  1. 建立憑證規格檔案。

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

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

1. 成為 Active Directory 使用者之後，請在其中建立秘密 AWS Secrets Manager。如需詳細資訊，請參閱[建立 AWS Secrets Manager 祕密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

1. 將使用者的使用者名稱、密碼和網域分別輸入到名為 `username`、`password` 和 `domainName` 的 JSON 鍵值組中。

   ```
   {"username":"username","password":"passw0rd", "domainName":"example.com"}
   ```

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

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue"
               ],
               "Resource": [
               "arn:aws:secretsmanager:us-east-1:111122223333:secret:MySecret"
               ]
           }
       ]
   }
   ```

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

1. <a name="linux-gmsa-credspec-ssm"></a>將憑證規格新增至 Amazon S3 儲存貯體。然後，在任務定義的 `credentialSpecs` 欄位中參考 Amazon S3 儲存貯體的 Amazon Resource Name (ARN)。

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

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

------
#### [ JSON ]

****  

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

------

## 憑證規格檔案
<a name="fargate-linux-gmsa-credentialspec"></a>

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"
            }
        }
    }
}
```
<a name="fargate-linux-gmsa-credentialspec-create"></a>
**建立 CredSpec 並將其上傳至 Amazon S3**  
您可以在加入網域的 Windows 電腦上使用 CredSpec PowerShell 模組來建立 CredSpec。請依照 Microsoft Learn 網站上[建立憑證規格](https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/manage-serviceaccounts#create-a-credential-spec)中的步驟進行。

在建立憑證規格檔案之後，請將其上傳至 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
```