Session Manager에 대한 추가 IAM 정책 샘플 - AWS Systems Manager

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_StreamsessionType이 있는 세션 문서만 지원됩니다. 자세한 내용은 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-idaws: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": [ "*" ] } ] }