我为角色创建并附加了一个策略MyRole以创建快照,这就是策略:
{
"Version": "2010-10-10",
"Statement": [
{
"Action": [
"ec2:CreateSnapshot",
"ec2:CreateSnapshots",
],
"Resource": "*",
"Effect": "Allow",
"Sid": "CreateSnapshot"
},
]
}
但是,运行时:
aws --profile my_profile iam simulate-principal-policy --policy-source-arn arn:aws:iam::777777777777:role/MyRole --action-names ec2:CreateSnapshot --resource-arns "arn:aws:ec2:eu-west-1:777777777777:i-6a6aa66aa66aa6666"
我得到:
{
"EvaluationResults": [
{
"EvalActionName": "ec2:CreateSnapshot",
"EvalResourceName": "arn:aws:ec2:eu-west-1:777777777777:i-6a6aa66aa66aa6666",
"EvalDecision": "implicitDeny",
"MatchedStatements": [],
"MissingContextValues": [],
"OrganizationsDecisionDetail": {
"AllowedByOrganizations": false
}
}
]
}
我使用AWS CLI在这个实例上创建了一个快照,并成功了。这与模拟器输出相矛盾,模拟器输出决定该操作不能执行
我创建了这样的快照:
aws --profile my_profile ec2 create-snapshot --volume-id vol-xxxxxxxxxxxxxxxxx --tag-specifications 'ResourceType=snapshot,Tags=[{Key=MyTag,Value=true}]'
这里发生了什么事?为什么模拟器返回错误的结果
您用于获取快照的Updated CLI命令不会作为您创建的role
(MyRole
(执行。
而是以用户身份执行(--profile my_profile
(。
要以MyRole
的身份从CLI执行快照命令,您应该首先担任此角色,然后通过担任此角色使用收到的新凭据执行命令
aws sts assume-role --role-arn arn:aws:iam::777777777777:role/MyRole --role-session-name SOME_NAME
这给你类似的东西:
{
"Credentials": {
"AccessKeyId": "XXXX",
"SecretAccessKey": "XXXX",
"SessionToken": "XXXX",
"Expiration": "XXXX"
}
}
你可以做
export AWS_ACCESS_KEY_ID="XXXX"
export AWS_SECRET_ACCESS_KEY="XXXX"
export AWS_SESSION_TOKEN="XXXX"
然后
aws ec2 create-snapshot --volume-id vol-xxxxxxxxxxxxxxxxx --tag-specifications 'ResourceType=snapshot,Tags=[{Key=MyTag,Value=true}]'
记住,在最后一个命令中不要指定--profile
。该CLI作为MyRole
执行
或者,您可以按照本文档的要求在AWS CLI中使用IAM角色-这将自动为您承担角色