如何將機密或敏感資訊安全地傳遞至 Amazon ECS 任務中的容器?

2 分的閱讀內容
0

我想將秘密或敏感資訊安全地傳遞至 Amazon 彈性容器服務 (Amazon ECS) 任務中的容器。

簡短描述

以純文字格式傳遞敏感資料可能會導致安全問題,因為這些資料可在 AWS 管理主控台或透過 AWS API (例如 DescribeTaskDefinitionDescribeTasks) 探索。

安全性最佳作法是將敏感資訊當做環境變數傳遞至容器。您可以在 Amazon ECS 任務定義的容器定義中參考存放在 AWS Systems Manager Parameter StoreAWS Secrets Manager 中的值,將資料安全地插入容器。然後,您可以將敏感資訊公開為環境變數或容器的記錄組態中。

AWS 僅支援下列項目的資料插入:

解決方案

完成先決條件

1.   將您的敏感資訊存放在 AWS Systems Manager Parameter Store 或 Secrets Manager 中。

對於 AWS Systems Manager Parameter Store,請執行下列命令。用您自己的參數替換 awsExampleParameter 參數,並用您的安全值替換 awsExampleValue 值:

aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue

若為密碼管理員,請執行下列命令。用您自己的參數替換 awsExampleParameter 參數,並用您的密鑰值替換 awsExampleValue 值:

aws secretsmanager create-secret --name awsExampleParameter --secret-string awsExampleValue

**注意:**Amazon ECS 容器代理程式使用任務執行 AWS 身分和存取管理 (IAM) 角色,從 AWS Systems Manager Parameter Store 或 Secrets Manager 擷取資訊。任務執行 IAM 角色必須授予以下動作的許可:ssm:GetParameterssecretsmanager:GetSecretValuekms:Decrypt

2.   開啟 IAM 主控台,然後為 ecs-tasks.amazonaws.com 建立具有信任關係的角色。例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.   若要在 IAM 主控台中為您的角色建立內嵌政策,請選擇角色,選取您在步驟 2 中建立的角色,然後在權限索引標籤上選擇新增內嵌政策。選擇 JSON索引標籤,然後使用下列程式碼建立原則。以存放參數的 AWS 區域和帳戶取代 us-east-1awsExampleAccountID 。以您在步驟 1 中建立的參數名稱取代 awsExampleParameter 參數:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter",
        "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter*"
      ]
    }
  ]
}

注意: 如果您使用客戶受管 KMS 金鑰來加密 AWS Systems Manager Parameter Store 或 Secrets Manager 中的資料,您必須取得 kms:Decrypt 的許可。

4.   (選擇性) 將受管理原則 AmazonECSTaskExecutionRolePolicy 附加至您在步驟 2 中建立的角色。

重要事項: 對於使用存放在 Amazon 彈性容器登錄 (Amazon ECR) 中的映像或將日誌傳送到 Amazon CloudWatch 的任務,則需要使用受管政策。

在 ECS 任務定義中參照敏感資訊

從 AWS 管理主控台:

1.   開啟 Amazon ECS 主控台

2.   從導覽窗格中選擇工作定義,然後選擇建立新工作定義

3.   選擇您的啟動類型,然後選擇下一步

4.對於工作執行角色,請選擇您先前建立的工作執行 IAM 角色。

5.   在容器定義區段中,選擇新增容器

6.   在環境下的環境變數區段中,在 Key 輸入環境變數的金鑰。

7.   在下拉式清單中,選擇值來源

8.   在金鑰的文字方塊中,輸入參數存放區或秘密管理員資源的 Amazon 資源名稱 (ARN)。

注意: 您也可以在記錄驅動程式組態中指定密碼。

從 AWS Command Line Interface (AWS CLI):

注意: 如果您在執行 AWS CLI 命令時收到錯誤訊息,請確定您使用的是最新版本的 AWS CLI

1.使用秘密部分,將任務定義中的 AWS Systems Manager Parameter Store 或 Secrets Manager 資源參考為環境變數,或使用秘密選項部分做為日誌組態選項。在以下範例中,將 us-east-1awsExampleAccountID 取代為您的 AWS 區域和帳戶 ID。使用您先前建立的參數取代 awsExampleParameter。以您先前建立的角色取代 awsExampleRoleName

{
  "requiresCompatibilities": [
    "EC2"
  ],
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "web",
      "image": "httpd",
      "memory": 128,
      "essential": true,
      "portMappings": [
        {
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "splunk",
        "options": {
          "splunk-url": "https://sample.splunk.com:8080"
        },
        "secretOptions": [
          {
            "name": "splunk-token",
            "valueFrom": "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter"
          }
        ]
      },
      "secrets": [
        {
          "name": "DATABASE_PASSWORD",
          "valueFrom": "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter"
        }
      ]
    }
  ],
  "executionRoleArn": "arn:aws:iam::awsExampleAccountID:role/awsExampleRoleName"
}

2.若要註冊工作定義,請執行下列命令:

aws ecs register-task-definition --family-name yourTaskDefinitionFamily --cli-input-json file://pathToYourJsonFile

使用您建立的任務定義啟動任務時,Amazon ECS 容器代理程式會自動解析密碼,並將這些值做為環境變數注入容器。

重要事項: 當容器初始啟動時,會將敏感資料插入您的容器中。如果密碼或參數存放區參數已更新或輪換,容器不會自動接收更新的值。您必須啟動新任務。如果您的任務屬於服務的一部分,請更新服務。然後,使用強制新部署選項強制服務啟動全新工作。

若要強制執行新部署:

1.   開啟 Amazon ECS 主控台

2.選擇叢集,然後選取您服務的叢集。

3.選取強制新部署核取方塊,然後選擇更新服務

注意: 若要從 AWS CLI 強制執行新部署,請使用 --force-new-deployment 旗標執行 update-service 命令。


AWS 官方
AWS 官方已更新 2 年前