2017-12-27 350 views

回答

1

您应该可以在相关API操作中添加MFA条件。例如,以下是一个IAM策略,允许承载者自由调用EC2操作,但在调用StopInstances或TerminateInstances时需要MFA。

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
    "Effect": "Allow", 
    "Action": ["ec2:*"], 
    "Resource": ["*"] 
    },{ 
    "Effect": "Deny", 
    "Action": ["ec2:StopInstances", "ec2:TerminateInstances"], 
    "Resource": ["*"], 
    "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": false}} 
    }] 
} 

有关更详细的示例,请参见here

1

确切的用例是不可能的。但是,您可以提供必要的权限,例如将StopInstances设置为IAM角色,并仅为IAM用户授予角色if and only if the user uses MFA的权限。角色的信任策略将是如下:

{ 
    "Version": "2012-10-17", 
    "Statement": { 
    "Effect": "Allow", 
    "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, 
    "Action": "sts:AssumeRole", 
    "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } 
    } 
} 

所以在使用控制台,IAM用户将签署与证书和MFA令牌,将能够承担该角色来停止实例。

在使用CLI时,您可以使用named profiles with "mfa_serial"变量,并且当用户尝试使用指定的配置文件参数停止实例时,CLI会询问MFA代码(请注意返回的凭据将缓存在CLI中)。

或者,您可以使用由jarmod提供的建议,并使用自定义脚本,因为您需要调用GetSessionToken并传递MFA令牌。有一个示例Python和C#脚本here