Session Manager에 대한 추가 IAM 정책 샘플
다음 예제 정책을 참조하면 지원하려는 모든 Session Manager 사용자 액세스 시나리오에 대한 사용자 정의 AWS Identity and Access Management(IAM) 정책을 생성할 수 있습니다.
주제
예제 1: 콘솔의 문서 액세스 권한 부여
사용자가 Session Manager 콘솔을 사용하여 세션을 시작할 때 사용자 지정 문서를 지정하도록 허용할 수 있습니다. 다음 예제 IAM 정책에서는 지정된 AWS 리전 및 AWS 계정에서 이름이 SessionDocument-
로 시작하는 문서에 액세스하는 권한을 부여합니다.
이 정책을 사용하려면 각 예제 리소스 자리 표시자
를 자신의 정보로 바꿉니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetDocument", "ssm:ListDocuments" ], "Resource": [ "arn:aws:ssm:
region
:account-id
:document/SessionDocument-*" ], "Condition": { "BoolIfExists": { "ssm:SessionDocumentAccessCheck": "true" } } } ] }
참고
Session Manager 콘솔에서는 세션 기본 설정 정의에 사용되는 Standard_Stream
의 sessionType
이 있는 세션 문서만 지원됩니다. 자세한 내용은 Session 문서 스키마 단원을 참조하십시오.
예제 2: 특정 관리형 노드에 대한 액세스 제한
Session Manager로 사용자가 연결할 수 있는 관리형 노드를 정의하는 IAM 정책을 생성할 수 있습니다. 예를 들어, 다음 정책은 사용자에게 3개의 특정 노드에서 세션을 시작, 종료 및 재개할 수 있는 권한을 부여합니다. 이 정책은 사용자가 지정된 노드 이외의 노드에 연결하지 못하도록 제한합니다.
참고
페더레이션 사용자의 경우 예제 4: 사용자에게 자신이 시작한 세션만 종료하도록 허용 섹션을 참조하세요.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:us-east-2:123456789012:instance/i-1234567890EXAMPLE", "arn:aws:ec2:us-east-2:123456789012:instance/i-abcdefghijEXAMPLE", "arn:aws:ec2:us-east-2:123456789012:instance/i-0e9d8c7b6aEXAMPLE", "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:userid}-*" ] } ] }
예제 3: 태그에 따라 액세스 제한
특정 태그를 기준으로 관리형 노드에 대한 액세스 권한을 제한할 수 있습니다. 다음 예제에서 사용자는 관리형 노드가 Finance WebServer(ssm:resourceTag/Finance: WebServer
)인 상태에서 모든 관리형 노드(Resource:
arn:aws:ec2:
)에 대해 세션(region
:987654321098
:instance/*Effect: Allow, Action: ssm:StartSession,
ssm:ResumeSession
)을 시작하고 재개할 수 있습니다. 사용자가 태그 지정되지 않은 관리형 노드에 명령을 전송하거나 Finance: WebServer
이외의 태그가 있는 경우 명령 결과에 AccessDenied
가 포함됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:us-east-2:123456789012:instance/*" ], "Condition": { "StringLike": { "ssm:resourceTag/Finance": [ "WebServers" ] } } }, { "Effect": "Allow", "Action": [ "ssm:TerminateSession", "ssm:ResumeSession" ], "Resource": [ "arn:aws:ssm:*:*:session/${aws:userid}-*" ] }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] } ] }
사용자가 여러 태그로 지정된 관리형 노드에 대해 세션을 시작하도록 허용하는 IAM 정책을 생성할 수 있습니다. 다음 정책에서는 사용자가 관리형 노드에 적용된 태그를 둘 다 가지고 있는 인스턴스에 대한 세션을 시작하도록 합니다. 사용자가 두 태그 모두에 지정되지 않은 관리형 노드에 명령을 전송할 경우 명령 결과에 AccessDenied
가 포함됩니다.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:StartSession" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/tag-key1":[ "tag-value1" ], "ssm:resourceTag/tag-key2":[ "tag-value2" ] } } }, { "Effect": "Allow", "Action": [ "ssm:StartSession" ], "Resource": [ "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] } ] }
IAM 정책 생성에 대한 자세한 내용은 IAM 사용 설명서의 관리형 정책과 인라인 정책을 참조하세요. 관리형 노드 태그 지정에 대한 자세한 내용은 Amazon EC2 사용 설명서의 관리형 노드 태깅 및 Amazon EC2 리소스에 태그 지정을 참조하세요(콘텐츠는 Windows 및 Linux 관리형 노드에 적용됨). 관리형 노드에서 무단 루트 수준 명령에 대한 보안 태세를 강화하는 방법은 SSM Agent를 통한 루트 수준 명령에 대한 액세스 제한 섹션을 참조하세요.
예제 4: 사용자에게 자신이 시작한 세션만 종료하도록 허용
Session Manager에서는 AWS 계정의 페더레이션 사용자가 종료할 수 있는 세션을 제어하는 두 가지 방법이 제공됩니다.
-
AWS Identity and Access Management(IAM) 권한 정책에서
{aws:userid}
변수를 사용합니다. 페더레이션 사용자는 자신이 시작한 세션만 종료할 수 있습니다. 페더레이션 사용자가 아닌 사용자는{aws:userid}
대신에 변수{aws:username}
을 사용합니다. -
IAM 권한 정책에서 AWS 태그에서 제공하는 태그를 사용합니다. 정책에서, 사용자가 AWS에서 제공한 특정 태그로 태그 달린 세션만 종료할 수 있는 조건을 포함시킵니다. 이 방법은 페더레이션 ID를 사용하여 AWS에 대한 액세스 권한을 부여하는 계정을 포함하여 모든 계정에 작동합니다.
방법 1: 변수 {aws:username}
를 사용하여 TerminateSession에 권한 부여
다음 IAM 정책은 사용자가 계정에 있는 모든 세션의 ID를 볼 수 있도록 합니다. 그러나 사용자는 자신이 시작한 세션을 통해서만 관리형 노드와 상호 작용할 수 있습니다. 다음 정책이 할당된 사용자는 다른 사용자의 세션에 연결하거나 해당 세션을 종료할 수 없습니다. 이 정책은 변수 {aws:username}
를 사용하여 이와 같이 제한합니다.
참고
이 방법은 페더레이션 ID를 사용하여 AWS에 대한 액세스 권한을 부여하는 계정에는 적용되지 않습니다.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:DescribeSessions" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Action": [ "ssm:TerminateSession" ], "Effect": "Allow", "Resource": [ "arn:aws:ssm:*:*:session/${aws:username}-*" ] } ] }
방법 2: AWS에서 제공한 태그를 사용하여 TerminateSession에 권한 부여
IAM 정책에 조건부 태그 키 변수를 포함하여 사용자가 종료할 수 있는 세션을 제어할 수 있습니다. 조건은 사용자가 이러한 특정 태그 키 변수와 지정된 값 중 하나 또는 둘 다로 태그가 지정된 세션만 종료할 수 있도록 지정합니다.
AWS 계정의 사용자가 세션을 시작하면 Session Manager에서는 두 개의 리소스 태그를 세션에 적용합니다. 첫 번째 리소스 태그는 aws:ssmmessages:target-id
이며, 이 태그에서는 사용자가 종료할 수 있는 대상의 ID를 지정합니다. 다른 리소스 태그는 aws:ssmmessages:session-id
이며,
형식의 값입니다.role-id
:caller-specified-role-name
참고
Session Manager에서는 이 IAM 액세스 제어 정책에 대한 사용자 정의 태그를 지원하지 않습니다. 아래에 설명된 AWS에서 제공하는 리소스 태그를 사용해야 합니다.
-
aws:ssmmessages:target-id
-
이 태그 키를 사용하여 관리형 노드 ID를 값으로 정책에 포함시킵니다. 다음 정책 블록에서, 조건문을 사용하여 사용자가 i-02573cafcfEXAMPLE 노드만 종료할 수 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "*", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:target-id": [ "i-02573cafcfEXAMPLE" ] } } } ] }
사용자가 이
TerminateSession
권한이 부여되지 않은 세션을 종료하려고 시도하면AccessDeniedException
오류가 발생합니다. -
aws:ssmmessages:session-id
-
이 태그 키는 세션 ID에 대한 변수를 값으로 세션 시작 요청에 포함시킵니다.
다음 예제에서는 호출자 유형이
User
인 경우에 대한 정책을 보여줍니다.aws:ssmmessages:session-id
에 대해 제공하는 값은 사용자의 ID입니다. 이 예에서AIDIODR4TAW7CSEXAMPLE
은 AWS 계정에 있는 사용자의 ID를 나타냅니다. AWS 계정에서 사용자의 ID를 검색하려면 IAM 명령get-user
를 사용합니다. 자세한 내용은 IAM User Guide에서 AWS Identity and Access Management 섹션의 get-user를 참조하세요.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "*", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:session-id": [ "AIDIODR4TAW7CSEXAMPLE" ] } } } ] }
다음 예제에서는 호출자 유형이
AssumedRole
인 경우에 대한 정책을 보여줍니다.aws:ssmmessages:session-id
에서 제공한 값에{aws:userid}
변수를 사용할 수 있습니다. 또는aws:ssmmessages:session-id
에서 제공한 값에 대해 역할 ID를 하드코딩할 수 있습니다. 역할 ID를 하드코딩하는 경우 값을
형식으로 제공해야 합니다. 예를 들면role-id
:caller-specified-role-name
AIDIODR4TAW7CSEXAMPLE:MyRole
입니다.중요
시스템 태그를 적용하려면 제공하는 역할 ID에 다음 문자만 포함할 수 있습니다. 유니코드 문자, 0-9, 공백,
_
,.
,:
,/
,=
,+
,-
,@
및\
.AWS 계정의 역할에 대한 역할 ID를 검색하려면
get-caller-identity
명령을 사용합니다. 자세한 내용은 AWS CLI Command Reference의 get-caller-identity를 참조하세요.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "*", "Condition": { "StringLike": { "ssm:resourceTag/aws:ssmmessages:session-id": [ "${aws:userid}*" ] } } } ] }
사용자가 이
TerminateSession
권한이 부여되지 않은 세션을 종료하려고 시도하면AccessDeniedException
오류가 발생합니다. aws:ssmmessages:target-id
및aws:ssmmessages:session-id
-
또한 이 예제에 표시된 대로 사용자가 두 시스템 태그로 태그가 지정된 세션을 종료할 수 있도록 하는 IAM 정책을 생성할 수도 있습니다.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "ssm:TerminateSession" ], "Resource":"*", "Condition":{ "StringLike":{ "ssm:resourceTag/aws:ssmmessages:target-id":[ "i-02573cafcfEXAMPLE" ], "ssm:resourceTag/aws:ssmmessages:session-id":[ "${aws:userid}*" ] } } } ] }
예제 5: 모든 세션에 대한 전체(관리) 액세스 권한 허용
다음 IAM 정책은 사용자가 다른 모든 사용자가 생성한 관리형 노드 및 세션 모두와 완벽하게 상호 작용하도록 허용합니다. 이러한 권한은 조직의 Session Manager 활동을 완벽하게 제정해야 하는 관리자에게만 부여해야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:StartSession", "ssm:TerminateSession", "ssm:ResumeSession", "ssm:DescribeSessions", "ssm:GetConnectionStatus" ], "Effect": "Allow", "Resource": [ "*" ] } ] }