限制从 EC2 实例访问 DynamoDB

Restrict access to DynamoDB from EC2 instance

我有一个长期 运行 职位的服务。每个作业都有一个 GUID。我将有关该作业的信息存储在 dynamodb 中,并将作业 GUID 用作分区键。每个作业都有一个 EC2 实例(EC2 实例上还有一些极其不可信的代码 运行)。 我想让与特定作业关联的 EC2 实例只能访问与该作业关联的 dynamodb 中的条目。

我之前尝试的是用作业 GUID 标记 EC2 实例,然后使用类似下面的内容将 dynamodb 前导密钥与 EC2 标记进行比较。

{
    "Sid": "UpdateDynamo",
    "Effect": "Allow",
    "Action": "dynamodb:UpdateItem",
    "Resource": "arn:aws:dynamodb:us-east-1:720911909616:table/test",
    "Condition": {
        "ForAllValues:StringEquals": {
            "dynamodb:LeadingKeys": [
                "${aws:PrincipalTag/job_guid}"
            ]
        }
    }
}

这不起作用,因为“PrincipalTag”指的是 IAM 角色,不是EC2 实例。

有什么好的解决方案?

您将无法使用单个 policy/role 实现此目的,因为没有 AWS-wide 条件键可以计算出您可以用来比较的 EC2 实例的标签dynamodb:LeadingKeys.

鉴于您的用例,我因此建议设置一个无服务器解决方案(可能是 Lambda 函数),对于每个作业:

  • 创建角色
  • 创建一个策略,只允许 dynamodb:UpdateItem 特定作业的 GUID
  • 将角色分配给适当的 EC2 实例