簡體   English   中英

Amazon ECS - 在 Docker 入口點上使用 IAM 角色時權限被拒絕

[英]Amazon ECS - Permission denied when using IAM role on Docker entrypoint

我正在尋找一種將機密/證書注入 Amazon ECS 容器的方法。 就我而言,它是一個簡單的 nginx 容器。

我一直在關注這篇文章,使用 AWS Parameter Store: https : //aws.amazon.com/blogs/compute/managing-secrets-for-amazon-ecs-applications-using-parameter-store-and-iam-roles - 任務/

這是基本要點:

  1. 在我的 Dockerfile 上,我在入口點附加了一個腳本,用於安裝 AWS 客戶端並從 AWS 參數存儲中獲取密鑰。

文件

FROM nginx:1.16.0

...
ENTRYPOINT ["/var/run/fetch.sh", "nginx", "-g", "daemon off;"]

獲取.sh

        aws ssm get-parameter \
            --name ${key} \
            --with-decryption \
            --region us-east-1 \
            --output text \
            --query Parameter.Value
  1. 任務定義承擔一個 IAM 角色,該角色有權訪問所需的服務(kms + 參數存儲)。 我可以驗證這是否有效,因為如果我通過 SSH 連接到服務器並在容器上運行腳本,我可以從 Parameter Store 獲取密鑰。
  {
    "portMappings": [
      {
        "hostPort": 0,
        "protocol": "tcp",
        "containerPort": 443
      }
    ],
    "cpu": 0,
    "environment": [],
    "mountPoints": [],
    "memoryReservation": 256,
    "memory": 512,
    "volumesFrom": [],
    "image": "url/some_image:latest",
    "essential": true,
    "name": "my-container"
  }
  1. 當 ECS 運行此任務時,它應該命中從參數存儲中獲取密鑰並保存它們的入口點

我可以通過 docker exec 手動運行來獲取正在運行的任務上的密鑰,但是在啟動任務時我無法獲取它們(特別是當我在入口點附加腳本時,如上面的代碼一樣)。

ECS 任務是否可以訪問入口點的 IAM 角色? 它何時實際承擔 IAM 角色?

您現在可以使用任務定義的containerDefinitions中的secrets輕松地從 SSM 或 Secrets Manager 注入機密。 使用此解決方案,您不必再運行/管理您的自定義腳本來獲取您的機密。

它看起來像這樣:

{
    "containerDefinitions": [{
        "secrets": [{
            "name": "environment_variable_name",
            "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
        }]
    }]
}
{
    "containerDefinitions": [{
        "secrets": [{
            "name": "environment_variable_name",
            "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
        }]
    }]
}

查看AWS 推出對 Amazon Elastic Container Service 的秘密支持指定敏感數據

您必須具有任務執行角色並在您的任務定義中引用它。 示例政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:ssm:<region>:<aws_account_id>:parameter/parameter_name",
        "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name",
        "arn:aws:kms:<region>:<aws_account_id>:key/key_id"
      ]
    }
  ]
}

Amazon ECS 密鑰所需的 IAM 權限中的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM