【问题标题】:What is the access control model for DynamoDB?DynamoDB 的访问控制模型是什么?
【发布时间】:2019-07-05 02:57:45
【问题描述】:

在传统的 MySql Server 情况下,作为数据库的所有者,我创建了一个 User 并从 数据库 授予对 User 对象的某些访问权限。然后,应用程序可以(并且只能)通过为用户提供密码来访问数据库。

在授予对 DynamoDB 表的访问权限时,我很困惑并且看不到类似情况。在 DynamoDB 表页面中,我找不到授予 IAM 用户访问表的权限的方法。有一个访问控制选项卡,但似乎是为 Facebook/Google 用户提供的。

我阅读了有关附加政策的信息,但进一步感到困惑。如果任何人都可以创建可以访问所有表的策略,那么如何控制访问?

我错过了什么?我只想为 Node 应用程序创建一个“登录”来访问我的 DynamoDB 表。

【问题讨论】:

标签: amazon-web-services amazon-dynamodb amazon-iam


【解决方案1】:

如果您的 AWS 账户中的任何人都可以创建 IAM 策略,那么您就遇到了真正的安全问题。

只有少数帐户应该这样做(创建 IAM 策略)

DynamoDB 访问与您所说的 IAM 用户一起工作,因此,您需要执行以下操作:

  • 创建 IAM 组以对您的 IAM 用户进行分类,例如,dbas 的 DBAGroup、开发人员 的 DEVGroup 等等。
  • 创建 IAM 策略以授予对每个组的 DynamoDB 表的特定访问权限。
  • 将策略应用于特定组以授予访问权限。

出于登录目的,您需要开发一个模块来使用 IAM 服务验证凭证,因此您需要执行 IAM API 调用。该模块可以部署在 EC2 中,可以是对 API 网关端点的 Javascript 调用以及 Lambda 函数等。

你需要做什么:

  • 在 IAM 服务上创建一个帐户,该帐户将能够对 IAM 服务执行 API 调用以验证凭据(登录名和密码)。
  • 此帐户应仅具有执行此操作的权限(验证用户登录名和密码)。
  • 使用 API 凭据能够执行 API 调用。

如果您不想为登录目的创建自己的模块,请查看Amazon Cognito

Amazon Cognito 可让您快速轻松地将用户注册/登录和访问控制添加到您的 Web 和移动应用程序。 Cognito 可扩展到数百万用户,并支持通过 SAML 2.0 与 Facebook、Google 和 Amazon 等社交身份提供商以及企业身份提供商进行登录。

最后一步是您的模块如何执行对 IAM 服务的 API 调用?您可能知道,我们需要 API 凭证。因此,使用登录用户的凭据,您将能够执行 API 调用以从表中读取数据、执行 CRUD 操作等。

【讨论】:

  • 我认为 OP 的意思是应用服务器用于连接数据库的凭据意义上的“登录”,而不是用户登录。
【解决方案2】:

要像在 SQL Server 中那样为某些表设置特定权限,您必须这样做:

Identity and Access Management (IAM) 中创建一个new security policy on the JSON tab:

  • 使用以下 JSON 作为示例以允许完整的 CRUD或删除“操作”部分中的项目以仅允许所需的项目

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListAndDescribe",
            "Effect": "Allow",
            "Action": [
                "dynamodb:List*",
                "dynamodb:DescribeReservedCapacity*",
                "dynamodb:DescribeLimits",
                "dynamodb:DescribeTimeToLive"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SpecificTable",
            "Effect": "Allow",
            "Action": [
                "dynamodb:BatchGet*",
                "dynamodb:DescribeStream",
                "dynamodb:DescribeTable",
                "dynamodb:Get*",
                "dynamodb:Query",
                "dynamodb:Scan",
                "dynamodb:BatchWrite*",
                "dynamodb:CreateTable",
                "dynamodb:Delete*",
                "dynamodb:Update*",
                "dynamodb:PutItem"
            ],
            "Resource": "arn:aws:dynamodb:*:*:table/MyTable"
        }
    ]
}

为策略命名并保存。

之后,前往Identity and Access Management (IAM) Users screencreate a new user,如下图所示。

  • 记得将字段**访问类型**设置为*程序访问*,不需要将用户添加到组中,点击“直接附加现有策略”并添加之前创建的政策。

完成!您已经拥有将应用程序连接到 Dynamodb 所需的一切。

【讨论】:

  • 我的问题更多的是:如果我在Resource 字段中输入your 数据库的arn 会发生什么?
  • @OldGeezer 对不起,我现在明白你的意思了。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多