我想使用ec2实例配置文件允许我的python程序访问DynamoDb表。我已经通过直接分配给用户来测试策略。现在,我将与实例配置文件相同的策略分配给运行我的作业的ec2实例。 这是政策。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:*"
],
"Resource": "arn:aws:dynamodb:us-east-2:913580688765:table/users"
}
]
}
我还为用户分配了一个策略,使其能够传递ec2角色。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AssociateIamInstanceProfile",
"ec2:ReplaceIamInstanceProfileAssociation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ec2:DescribeIamInstanceProfileAssociations",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*"
}
]
}
但这不起作用。 我在这里想念什么?
答案 0 :(得分:2)
我没有确切的答案,但是我对您的进步有建议。首先,让我们回顾一下(您能仔细检查一下这一切吗):
1)您正在运行一个EC2实例,该实例已分配给IAM角色。
2)IAM角色信任关系包含ec2.amazonaws.com
。
3)策略授予"dynamodb:*"
附加在角色上。
如果这样做,则意味着应正确配置所有内容。
在这一点上,我建议您ssh to the EC2 instance并测试权限。这可以通过使用AWS CLI's dynamodb API进行列表/描述/获取API调用来确认它们在实例上可以完成来完成。如果它们有效,则意味着该实例具有访问dynamodb的权限,并且您使用实例配置文件的方式可能有问题。
值得注意的是,并不是"arn:aws:dynamodb:us-east-2:913580688765:table/users"
上的所有操作都可以使用,因为它是一个特定的表而不是所有表,例如"arn:aws:dynamodb:us-east-2:913580688765:table/*"
。如果资源是特定表,则list-tables
之类的API调用将不起作用。您可以在documentation here中找到有关dynamodb api调用和天气的列表,它们是否支持特定的表。