在策略中列出dynamo的所有权限将不起作用,但通配符会影响dynamodb:*

wgmfuz8q  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(404)

因此,我试图从一个步骤中找出emr集群创建配置单元表所需的最小权限。我发现它需要来自dynamodb的一些东西,因为除非策略中有“dynamodb:*”(它在集群上设置了一致的视图),否则它将无法工作。我想知道它需要的具体权限,而不是通配符。一种暴力方式是,我使用一个列出所有dynamodb操作的策略,然后逐个删除它们,并在集群上的一个步骤中再次生成表,以查看它是否失败。但是当我使用通配符时,它是有效的,但是列出它们却不行。
当我使用:

{
"Version": "2012-10-17",
"Statement": [
...(other stuff)
    {
        "Effect": "Allow",
        "Resource": "*",
        "Action": [
            "dynamodb:*",
            "s3:PutObjectAcl",
            "s3:GetObject",
            "s3:ListBucket"
        ]
    }
  ]
}

它可以很好地创建表。但是当我列出每个资源时(从这里:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/api-permissions-reference.html)它无法创建表。看起来是这样的:

...
{
        "Effect": "Allow",
        "Resource": "*",
        "Action": [
            "dynamodb:BatchGetItem",
            "dynamodb:BatchWriteItem",
            ...

该表只是一个包含犯罪数据的示例表,如下所示:

CREATE EXTERNAL TABLE crimes (
id string,
...
case_location string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
LOCATION 's3://<path>/crimes/data';

通配符和列出所有服务之间应该没有区别,对吧?

1rhkuytd

1rhkuytd1#

这应该是可行的-就像我不知道有什么不同,但是如果你不打算限制任何东西,为什么还要麻烦列出服务呢。
我强烈建议使用策略模拟器来测试iam配置文件和api调用-请参阅https://policysim.aws.amazon.com.
我还建议将s3概要文件从dynamodb概要文件中分离出来,并使用多个语句。
可能是缺少服务或未正确指定资源。从iam的Angular 来看,来自实际api调用的错误消息和错误代码并不总是有用的,这就是我建议使用policysim工具的原因。
下面是一个对我来说适用于dynamodb并限制特定资源的示例。

{
        "Action": [
            "dynamodb:BatchGetItem",
            "dynamodb:BatchWriteItem",
            "dynamodb:DeleteItem",
            "dynamodb:DescribeTable",
            "dynamodb:GetItem",
            "dynamodb:GetRecords",
            "dynamodb:ListTables",
            "dynamodb:PutItem",
            "dynamodb:Query",
            "dynamodb:Scan",
            "dynamodb:UpdateItem",
            "dynamodb:CreateTable",
            "dynamodb:UpdateTable"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:dynamodb:*:*:table/Foo",
            "arn:aws:dynamodb:*:*:table/Bar"
        ]
    }
q7solyqu

q7solyqu2#

原来是记忆问题。
我们不知道到底发生了什么,但是这个集群是一个带有m1.medium的emr集群,因为我们只是在测试。嗯,我没有想到要点击错误日志输出,因为我正在更改权限,所以我假设是权限错误(以前的失败是权限错误),但在查看错误日志后,他们说“内存不足”。
所以我不知道到底发生了什么,但听起来我们是如此接近使用所有的内存,列出所有的权限与使用一个通配符用尽了剩下的内存。只是其中一个你从未预料到的错误()

相关问题