2017-12-27 299 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