在策略中列出 dynamo 的所有权限将不起作用,但通配符会 dynamodb:*
Listing all permissions for dynamo in a policy won't work but wildcard does dynamodb:*
所以我试图从一个步骤中找出 EMR 集群创建配置单元 table 所需的最低权限。我发现它需要来自 dynamodb 的东西,因为它不会工作,除非策略中有 "dynamodb:*"(它确实在集群上设置了一致的视图)。我想知道它需要的特定权限,而不是通配所有权限。一种蛮力的方法是我使用一个列出所有 dynamodb 操作的策略,然后我将它们一个一个地删除并在集群上的一个步骤中再次制作 table 以查看它是否失败或不。但是当我使用通配符时它起作用了,但是把它们全部列出来却不起作用。
当我使用时:
{
"Version": "2012-10-17",
"Statement": [
...(other stuff)
{
"Effect": "Allow",
"Resource": "*",
"Action": [
"dynamodb:*",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:ListBucket"
]
}
]
}
它可以很好地创建 table。但是当我列出每个资源时(来自这里:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/api-permissions-reference.html),它无法创建 table。
看起来像这样:
...
{
"Effect": "Allow",
"Resource": "*",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
...
table 只是一个示例 table,犯罪数据如下所示:
CREATE EXTERNAL TABLE crimes (
id string,
...
case_location string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
LOCATION 's3://<path>/crimes/data';
通配符和列出所有服务应该没有区别吧?
这应该行得通 - 因为我不知道有什么区别,但是如果你不打算限制任何东西,为什么还要费心列出服务。
我强烈建议使用策略模拟器来测试 IAM 配置文件和 API 调用 - 请参阅 https://policysim.aws.amazon.com。
我还建议将 S3 配置文件与 DynamoDB 配置文件分开并使用多个语句。
可能是缺少服务或未正确指定资源。从 IAM 的角度来看,来自实际 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"
]
}
原来是内存问题。
我们不知道到底发生了什么,但该集群是一个带有 m1.medium 的 EMR 集群,因为我们只是在测试。好吧,我不想点击错误日志输出,因为我正在更改权限,所以我假设权限错误(之前的失败是权限错误)但是在查看错误日志后,他们说 'out of memory' .
所以我不知道到底发生了什么,但听起来我们几乎用完了列出所有权限的所有内存,而不是使用通配符用完了剩余的内存。只是其中一个你意想不到的错误 = )
所以我试图从一个步骤中找出 EMR 集群创建配置单元 table 所需的最低权限。我发现它需要来自 dynamodb 的东西,因为它不会工作,除非策略中有 "dynamodb:*"(它确实在集群上设置了一致的视图)。我想知道它需要的特定权限,而不是通配所有权限。一种蛮力的方法是我使用一个列出所有 dynamodb 操作的策略,然后我将它们一个一个地删除并在集群上的一个步骤中再次制作 table 以查看它是否失败或不。但是当我使用通配符时它起作用了,但是把它们全部列出来却不起作用。
当我使用时:
{
"Version": "2012-10-17",
"Statement": [
...(other stuff)
{
"Effect": "Allow",
"Resource": "*",
"Action": [
"dynamodb:*",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:ListBucket"
]
}
]
}
它可以很好地创建 table。但是当我列出每个资源时(来自这里:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/api-permissions-reference.html),它无法创建 table。 看起来像这样:
...
{
"Effect": "Allow",
"Resource": "*",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
...
table 只是一个示例 table,犯罪数据如下所示:
CREATE EXTERNAL TABLE crimes (
id string,
...
case_location string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
LOCATION 's3://<path>/crimes/data';
通配符和列出所有服务应该没有区别吧?
这应该行得通 - 因为我不知道有什么区别,但是如果你不打算限制任何东西,为什么还要费心列出服务。
我强烈建议使用策略模拟器来测试 IAM 配置文件和 API 调用 - 请参阅 https://policysim.aws.amazon.com。
我还建议将 S3 配置文件与 DynamoDB 配置文件分开并使用多个语句。
可能是缺少服务或未正确指定资源。从 IAM 的角度来看,来自实际 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"
]
}
原来是内存问题。
我们不知道到底发生了什么,但该集群是一个带有 m1.medium 的 EMR 集群,因为我们只是在测试。好吧,我不想点击错误日志输出,因为我正在更改权限,所以我假设权限错误(之前的失败是权限错误)但是在查看错误日志后,他们说 'out of memory' .
所以我不知道到底发生了什么,但听起来我们几乎用完了列出所有权限的所有内存,而不是使用通配符用完了剩余的内存。只是其中一个你意想不到的错误 = )