因此,我试图从一个步骤中找出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';
通配符和列出所有服务之间应该没有区别,对吧?
2条答案
按热度按时间1rhkuytd1#
这应该是可行的-就像我不知道有什么不同,但是如果你不打算限制任何东西,为什么还要麻烦列出服务呢。
我强烈建议使用策略模拟器来测试iam配置文件和api调用-请参阅https://policysim.aws.amazon.com.
我还建议将s3概要文件从dynamodb概要文件中分离出来,并使用多个语句。
可能是缺少服务或未正确指定资源。从iam的Angular 来看,来自实际api调用的错误消息和错误代码并不总是有用的,这就是我建议使用policysim工具的原因。
下面是一个对我来说适用于dynamodb并限制特定资源的示例。
q7solyqu2#
原来是记忆问题。
我们不知道到底发生了什么,但是这个集群是一个带有m1.medium的emr集群,因为我们只是在测试。嗯,我没有想到要点击错误日志输出,因为我正在更改权限,所以我假设是权限错误(以前的失败是权限错误),但在查看错误日志后,他们说“内存不足”。
所以我不知道到底发生了什么,但听起来我们是如此接近使用所有的内存,列出所有的权限与使用一个通配符用尽了剩下的内存。只是其中一个你从未预料到的错误()