Fargate 和 SSM 的 AWS 权限

AWS permissions for Fargate and SSM

我正在尝试为我在 AWS 上使用 AWS Fargate 构建的服务创建一些基础设施。我将 SSM 用作我的某些应用程序配置的值存储,因此我需要 Fargate 的常规权限以及 SSM 的额外权限。然而,在我的头撞到这个特定的墙上一段时间后,我得出的结论是我只是不了解一般的 AWS IAM 或特别是这个问题,所以我来这里寻求帮助。

我的 IAM 代码的基础来自链接到该教程的 github 存储库中的 this tutorial; the IAM code is actually not in that tutorial but rather in this file。我想我需要为某些东西保留 STS 许可,尽管我不完全确定是什么。

我已将教程中的 IAM 代码转换为 JSON 文档,因为我发现 JSON 比 Terraform 本机代码更易于使用。这是我想出的。它不起作用。我想知道为什么它不起作用以及如何解决它。请ELI5(像我5岁一样解释)因为我对此一无所知。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue",
        "kms:Decrypt",
        "sts:AssumeRole"
      ],
      "Principal": {
        "Service": ["ecs-tasks.amazonaws.com"]
      }
    }
  ]
}

您的 ECS 任务至少应具有以下权限:

  1. 担任角色的能力
  2. 资源级权限

在您提到的 example 中,使用以下内容创建了一个 IAM 角色:

  • 已附加信任关系。 <-- 使 ECS 任务承担 IAM 角色

  • 已附加 AWS 托管策略 AmazonECSTaskExecutionRolePolicy。 <-- 资源权限

因此,为了检索 SSM 参数值,请添加以下资源权限。

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "ssm:Describe*",
            "ssm:Get*",
            "ssm:List*"
        ],
        "Resource": [
            "arn:aws:ssm:*:*:parameter/{your-path-hierarchy-to-parameter}/*"
        ]
    }
  ]
}

如果您的机密使用 KMS,则授予必要的 kms 权限 (kms:Decrypt)。参考specifying-sensitive-data参考。