跳至內容

我該如何管理 Amazon ECS 任務和服務的密碼和存取金鑰?

2 分的閱讀內容
0

我已設定 Amazon Elastic Container Service (Amazon ECS) 來存取敏感訊息,例如資料庫憑證或 API 金鑰。我想安全地管理和擷取非硬編碼的密碼。

解決方法

若要管理非硬編碼的密碼和存取金鑰,請使用 AWS Secrets Manager 或 Parameter Store (AWS Systems Manager 的功能)。

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

建立密碼

若要建立密碼,請使用 Secrets Manager 主控台AWS CLI。若要使用 Parameter Store 儲存密碼,請執行以下 put-parameter 命令:

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

**注意:**將 awsExampleParameter 替換為您的參數,並將 awsExampleValue 替換為您的密碼。

允許 Amazon ECS 任務存取您的密碼

Amazon ECS 使用 AWS Identity and Access Management (IAM) 任務執行角色,從 Secrets Manager 或 Parameter Store 取得密碼資訊。為具有所需最低權限的角色建立 IAM 政策。如果您使用 Secrets Manager,則 IAM 角色必須有 secretsmanager:GetSecretValue 權限。如果您使用 Parameter Store,則 IAM 角色必須有 ssm:GetParameterskms:Decrypt 權限。

Secrets Manager 政策範例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
    }
  ]
}

**注意:**將 arn:aws:secretsmanager:region:account-id:secret:secret-name 替換為您的密碼 ARN。

Parameter Store 政策範例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:GetParameters",
                "ssm:GetParameterHistory"
            ],
            "Resource": "arn:aws:ssm:region:account-id:parameter/parameter-name"
        },
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:region:account-id:key/kms-key-id"
        }
    ]
}

**注意:**將 arn:aws:ssm:region:account-id:parameter/parameter-name 替換為您的參數的 ARN,並將 arn:aws:kms:region:account-id:key/kms-key-id 替換為您的 AWS Key Management Service (KMS) 金鑰。

將 IAM 政策附加到 Amazon ECS 任務執行角色。

存取您的 Amazon ECS 任務密碼

您可以將敏感資料 (例如 API 金鑰或憑證) 作為參數或環境變數傳遞。首先,修改您的 Amazon ECS 任務定義,以包含您的環境變數或密碼對應。

任務定義中的密碼對應範例:

{
  "name": "MY_SECRET",
  "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
}

然後,將環境變數傳遞給 Amazon ECS 容器

任務定義中的 containerDefinitions 範例:

  - name: my-container
    environment:
      - name: Example_PASSWORD
        valueFrom: arn:aws:ssm:us-west-2:123456789012:parameter/my-app/example-password

使用 CI/CD 來管理您的密碼

在持續整合和持續交付 (CI/CD) 部署期間,使用環境變數動態傳遞密碼。從部署指令碼中的 Secrets Manager 或 Parameter Store 取得密碼。請勿在任務定義中對密碼進行硬編碼。而是使用參數或預留位置。如需了解更多資訊和最佳實務,請參閱使用 AWS Secrets Manager、AWS KMS 和 AWS Certificate Manager 強化 DevOps 管線並保護資料

例如,如果您使用 AWS CodePipeline,請設定一個建置步驟,使用 AWS CLI 來取得密碼:

bashCopy codeaws secretsmanager get-secret-value --secret-id secret-name --query 'SecretString' --output text

**注意:**將 secret-name 替換為您的密碼。

對密碼管理的問題進行疑難排解

如果您在 Amazon ECS 中使用密碼時發生問題,請採取以下措施:

  • 確保 Amazon ECS 任務的 IAM 角色具有正確的 secretsmanager:GetSecretValuessm:GetParameter 權限。

  • 如果您收到拒絕錯誤,請確保 IAM 政策已附加到正確的 Amazon ECS 任務執行角色。另外,請確認 IAM 政策的密碼 ARN 是準確的。

  • 如果 Amazon ECS 無法取得密碼,請確認您使用的是正確的 AWS 區域和密碼。若要測試密碼,請在 Amazon ECS 外部執行以下 get-secret-value 命令:

    aws secretsmanager get-secret-value --secret-id secret-name --region region-code

    **注意:**將 secret-name 替換為您的密碼,並將 region-code 替換為您的區域。

AWS 官方已更新 2 年前