Amazon EC2: 특정 EC2 작업에 MFA(GetSessionToken) 요구하기
Amazon EC2: 특정 EC2 작업에 MFA(GetSessionToken) 요구하기
이 예시는 Amazon EC2의 모든 AWS API 작업에 대한 전체 액세스를 허용하는 자격 증명 기반 정책을 만드는 방법을 보여드려요. 다만 사용자가 다중 인증(MFA)으로 인증되지 않았다면 StopInstances와 TerminateInstances API 작업에 대한 액세스를 명시적으로 거부해요.
프로그래매틱하게 이 작업을 하려면 사용자가 GetSessionToken 작업을 호출할 때 선택 사항인 SerialNumber와 TokenCode 값을 함께 포함해야 해요. 이 작업은 MFA로 인증된 임시 자격 증명을 반환해요. GetSessionToken에 대해 더 알아보려면 Requesting credentials for users in untrusted environments 문서를 참고하세요.
출처: 문서
본문
이 정책이 하는 일
AllowAllActionsForEC2 스테이트먼트는 모든 Amazon EC2 액션을 허용해요.
DenyStopAndTerminateWhenMFAIsNotPresent 스테이트먼트는 MFA 컨텍스트가 없을 때 StopInstances와 TerminateInstances 액션을 거부해요. 즉 다중 인증 컨텍스트가 없을 때(MFA를 사용하지 않았을 때) 이 액션들이 거부돼요. 거부(deny)는 허용(allow)을 덮어써요.
참고
Deny 스테이트먼트의 MultiFactorAuthPresent에 대한 조건 검사는 {"Bool":{"aws:MultiFactorAuthPresent":false}}로 하면 안 돼요. MFA를 사용하지 않으면 그 키가 존재하지 않아 평가할 수 없기 때문이에요. 대신 BoolIfExists 검사를 사용해서 값을 확인하기 전에 키가 존재하는지부터 확인하세요. 자세한 내용은 ...IfExists condition operators 문서를 참고하세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowAllActionsForEC2",
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Sid": "DenyStopAndTerminateWhenMFAIsNotPresent",
"Effect": "Deny",
"Action": [
"ec2:StopInstances",
"ec2:TerminateInstances"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {"aws:MultiFactorAuthPresent": false}
}
}
]
}