IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현 - 아마존 EventBridge

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현

권한을 부여하려면 정책 설명에서 IAM 정책 언어를 사용하여 정책이 적용되는 조건을 지정합니다. 예를 들어 특정 날짜 이후에만 적용되는 정책이 있을 수 있습니다.

정책 조건은 키-값 페어로 구성됩니다. 조건 키에는 대/소문자가 구분되지 않습니다.

단일 조건에 여러 조건이나 키를 지정하는 경우 EventBridge가 권한을 부여하려면 모든 조건 및 키를 충족해야 합니다. 조건 하나에서 키 하나에 여러 값을 지정하면 EventBridge는 값 중 하나가 충족되면 권한을 부여합니다.

조건을 지정할 때 자리 표시자나 정책 변수를 사용할 수 있습니다. 자세한 내용은 IAM 사용 설명서에서 정책 변수를 참조하십시오. IAM 정책 언어에서의 조건 지정에 관한 자세한 내용은 IAM 사용 설명서조건을 참조하세요.

기본적으로 IAM 사용자와 역할은 계정의 이벤트에 전혀 액세스할 수 없습니다. 이벤트에 액세스하려면 PutRule API 작업에 대해 허가를 받아야 합니다. IAM 사용자 또는 역할에 events:PutRule 작업에 대한 권한이 부여되면 특정 이벤트와 일치하는 규칙을 생성할 수 있습니다. 그러나 규칙이 유용하려면 사용자에게 events:PutTargets 작업에 대한 권한도 있어야 합니다. 규칙이 CloudWatch 지표 게시하는 것 이상의 작업을 수행하도록 하려면 규칙에 대상도 추가해야 하기 때문입니다.

사용자나 역할이 특정한 소스 세트 및 세부 유형에만 일치하는 규칙을 생성할 수 있도록 IAM 사용자 또는 역할의 정책 명령문에 조건을 제공할 수 있습니다. 특정 소스 및 유형의 이벤트에 대한 액세스 권한을 부여하려면 events:sourceevents:detail-type 조건 키를 사용하십시오.

사용자나 역할이 계정의 특정 리소스에만 일치하는 규칙을 생성할 수 있도록 IAM 사용자 또는 역할의 정책 명령문에 조건을 제공할 수 있습니다. 특정 리소스에 대한 액세스 권한을 부여하려면 events:TargetArn 조건 키를 사용하십시오.

다음 예제는 사용자가 PutRule API 작업에 대한 거부 명령문을 사용하여 EventBridge의 Amazon EC2 이벤트를 제외한 모든 이벤트에 액세스할 수 있도록 허용하는 정책입니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyPutRuleForAllEC2Events", "Effect": "Deny", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } } ] }

EventBridge 조건 키

다음 표에는 EventBridge의 정책에서 사용할 수 있는 조건 키와 키-값 페어가 나와 있습니다.

조건 키 키-값 페어: 평가 유형

aws:SourceAccount

aws:SourceArn에서 지정한 규칙이 존재하는 계정입니다.

계정 ID, Null

aws:SourceArn

이벤트를 전송하는 규칙의 ARN입니다.

ARN, Null

events:creatorAccount

"events:creatorAccount":"creatorAccount"

creatorAccount의 경우 규칙을 생성한 계정의 계정 ID를 사용합니다. 이 조건을 사용하면 특정 계정의 규칙에 대한 API 직접 호출을 승인할 수 있습니다.

creatorAccount, Null

events:detail-type

"events:detail-type":"detail-type "

여기서 detail-type"AWS API Call via CloudTrail""EC2 Instance State-change Notification"과 같은 이벤트의 detail-type 필드에 대한 리터럴 문자열입니다.

세부 유형, Null

events: detail.eventTypeCode

"events:detail.eventTypeCode":"eventTypeCode"

eventTypeCode의 경우 이벤트의 detail.eventTypeCode 필드에 대한 리터럴 문자열(예: "AWS_ABUSE_DOS_REPORT")을 사용합니다.

eventTypeCode, Null

events: detail.service

"events:detail.service":"service"

service는 이벤트의 detail.service 필드에 대한 리터럴 문자열(예: "ABUSE")을 사용합니다.

service, Null

events: detail.userIdentity.principalId

"events:detail.userIdentity.principalId":"principal-id"

principal-id의 경우 "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName."과 같은 detail-type "AWS API Call via CloudTrail"이 있는 이벤트의 detail.userIdentity.principalId 필드에 리터럴 문자열을 사용합니다.

보안 주체 ID, Null

events:eventBusInvocation

"events:eventBusInvocation":"boolean"

boolean의 경우 규칙이 다른 계정의 이벤트 버스인 대상으로 이벤트를 보내는 경우 true를 사용합니다. PutEvents API 직접 호출을 사용할 때는 false를 사용하십시오.

eventBusInvocation, Null

events:ManagedBy

AWS 서비스에서 내부적으로 사용합니다. 사용자를 대신하여 AWS 서비스에서 생성된 규칙의 경우 값은 규칙을 생성한 서비스의 보안 주체 이름입니다.

고객 정책에 사용할 수 없습니다.

events:source

"events:source":"source "

"aws.ec2" 또는 "aws.s3" 같은 이벤트의 소스 필드를 위한 리터럴 문자열에 source를 사용합니다. source에 사용 가능한 값을 더 보려면 서비스의 이벤트 AWS 단원에서 예제 이벤트를 참조하십시오.

소스, Null

events:TargetArn

"events:TargetArn":"target-arn "

예를 들어 target-arn의 경우 대상의 ARN을 규칙에 사용합니다(예: "arn:aws:lambda:*:*:function:*").

ArrayOfARN, Null

EventBridge용 예제 정책 명령문은 Amazon EventBridge 리소스에 대한 액세스 권한 관리 단원을 참조하십시오.

EventBridge 파이프 세부 사항

EventBridge 파이프는 추가 IAM 정책 조건 키를 지원하지 않습니다.

예: creatorAccount 조건 사용

다음 예제 정책 설명은 정책에서 creatorAccount 조건을 사용하여 creatorAccount로 지정된 계정이 규칙을 만든 계정인 경우에만 규칙을 만들도록 허용하는 방법을 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForOwnedRules", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEqualsIfExists": { "events:creatorAccount": "${aws:PrincipalAccount}" } } } ] }

예: eventBusInvocation 조건 사용

eventBusInvocation는 간접 호출이 교차 계정 대상에서 시작되었는지 아니면 PutEvents API 요청에서 시작되었는지를 나타냅니다. 대상이 다른 계정의 이벤트 버스인 경우와 같이 교차 계정 대상이 포함된 규칙에서 간접 호출이 발생한 경우 이 값은 true입니다. PutEvents API 요청으로 인한 간접 호출 결과인 경우 이 값은 false입니다. 다음 예는 교차 계정 대상으로부터의 간접 호출을 나타냅니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountInvocationEventsOnly", "Effect": "Allow", "Action": "events:PutEvents", "Resource": "*", "Condition": { "BoolIfExists": { "events:eventBusInvocation": "true" } } } ] }

예제: 특정 소스에 대한 액세스 제한

다음은 IAM 사용자에게 연결할 수 있는 정책의 예제입니다. 정책 A는 모든 이벤트에서 PutRule API 작업을 허용하는 반면, 정책 B는 생성 중인 규칙의 이벤트 패턴이 Amazon EC2 이벤트와 일치하는 경우에만 PutRule을 허용합니다.

정책 A: 모든 이벤트 허용

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEvents", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*" } ] }

정책 B: —Amazon EC2의 이벤트만 허용

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleForAllEC2Events", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2" } } } ] }

EventPatternPutRule에 대한 필수 인수입니다. 따라서 정책 B의 사용자가 다음과 같은 이벤트 패턴을 통해 PutRule을 호출하는 경우에는

{ "source": [ "aws.ec2" ] }

정책이 이러한 특정 소스(예: "aws.ec2")를 허용하기 때문에 규칙을 생성할 수 있습니다. 그러나 정책 B를 사용하는 사용자가 다음과 같은 이벤트 패턴으로 PutRule을 호출하면 정책이 이 특정 소스(즉, "aws.s3")를 허용하지 않으므로 규칙 생성이 거부됩니다.

{ "source": [ "aws.s3" ] }

기본적으로 정책 B의 사용자만 Amazon EC2에서 호출된 이벤트와 일치하는 규칙을 생성할 수 있습니다. 따라서 이들만 Amazon EC2에서 이벤트 액세스가 허용됩니다.

정책 A와 정책 B를 비교하려면 다음 표를 참고하십시오.

이벤트 패턴 정책 A에서 허용 정책 B에서 허용
{ "source": [ "aws.ec2" ] }

{ "source": [ "aws.ec2", "aws.s3" ] }

아니요(소스 aws.s3이 허용되지 않음)

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

아니요(소스를 지정해야 함)

예제: 이벤트 패턴에서 개별적으로 사용할 수 있는 소스를 여러 개 정의

다음 정책은 IAM 사용자 또는 역할이 EventPattern의 소스가 Amazon EC2 또는 Amazon ECS인 규칙을 생성할 수 있도록 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2OrECS", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": [ "aws.ec2", "aws.ecs" ] } } } ] }

다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.

이벤트 패턴 정책에서 허용
{ "source": [ "aws.ec2" ] }

{ "source": [ "aws.ecs" ] }

{ "source": [ "aws.s3" ] }

아니요

{ "source": [ "aws.ec2", "aws.ecs" ] }

아니요

{ "detail-type": [ "AWS API Call via CloudTrail" ] }

아니요

예제: 이벤트 패턴에서 사용할 수 있는 소스 및 DetailType 정의

다음 정책은 DetailTypeEC2 instance state change notificationaws.ec2 소스에서 나온 이벤트만 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsEC2AndDetailTypeIsInstanceStateChangeNotification", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:source": "aws.ec2", "events:detail-type": "EC2 Instance State-change Notification" } } } ] }

다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.

이벤트 패턴 정책에서 허용
{ "source": [ "aws.ec2" ] }

아니요

{ "source": [ "aws.ecs" ] }

아니요

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance Health Failed" ] }

아니요

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

아니요

예제: 소스가 이벤트 패턴에 정의되어 있는지 확인

다음 정책은 사용자가 소스 필드가 있는 EventPatterns으로 규칙만 생성하도록 허용합니다. 이 정책을 사용하면 IAM 사용자나 역할은 특정 소스를 제공하지 않는 EventPattern으로는 규칙을 생성할 수 없습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecified", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "Null": { "events:source": "false" } } } ] }

다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.

이벤트 패턴 정책에서 허용
{ "source": [ "aws.ec2" ], "detail-type": [ "EC2 Instance State-change Notification" ] }

{ "source": [ "aws.ecs", "aws.ec2" ] }

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

아니요

예제: 소스가 여러 개인 이벤트 패턴에서 허용되는 소스의 목록을 정의

다음 정책은 사용자가 여러 소스가 포함된 EventPatterns으로 규칙을 생성하는 것을 허용합니다. 이벤트 패턴의 각 소스는 해당 조건에서 제공되는 목록의 구성원이어야 합니다. ForAllValues 조건을 사용할 때는 이 조건의 항목 중 적어도 하나가 반드시 정의되어 있어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecifiedAndIsEitherS3OrEC2OrBoth", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "events:source": [ "aws.ec2", "aws.s3" ] }, "Null": { "events:source": "false" } } } ] }

다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.

이벤트 패턴 정책에서 허용
{ "source": [ "aws.ec2" ] }

{ "source": [ "aws.ec2", "aws.s3" ] }

{ "source": [ "aws.ec2", "aws.autoscaling" ] }

아니요

{ "detail-type": [ "EC2 Instance State-change Notification" ] }

아니요

예: detail.service에 의한 PutRule 액세스 제한

IAM 사용자 또는 역할에 대해 events:details.service 필드에 특정 값이 있는 이벤트에 대해서만 규칙을 생성하도록 제한할 수 있습니다. events:details.service의 값이 반드시 AWS 서비스의 이름일 필요는 없습니다.

이 정책 조건은 보안 또는 위반과 관련된 AWS Health의 이벤트를 사용할 때 유용합니다. 이 정책 조건을 사용하면 이러한 기밀 경보에 대한 액세스를, 해당 경보를 볼 필요가 있는 사용자로만 제한할 수 있습니다.

예를 들어 다음 정책은 events:details.service 값이 ABUSE인 경우에만 이벤트에 대한 규칙 생성을 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleEventsWithDetailServiceEC2", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail.service": "ABUSE" } } } ] }

예: detail.eventTypeCode에 의한 PutRule 액세스 제한

IAM 사용자 또는 역할에 대해 events:details.eventTypeCode 필드에 특정 값이 있는 이벤트에 대해서만 규칙을 생성하도록 제한할 수 있습니다. 이 정책 조건은 보안 또는 위반과 관련된 AWS Health의 이벤트를 사용할 때 유용합니다. 이 정책 조건을 사용하면 이러한 기밀 경보에 대한 액세스를, 해당 경보를 볼 필요가 있는 사용자로만 제한할 수 있습니다.

예를 들어 다음 정책은 events:details.eventTypeCode 값이 AWS_ABUSE_DOS_REPORT인 경우에만 이벤트에 대한 규칙 생성을 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleEventsWithDetailServiceEC2", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail.eventTypeCode": "AWS_ABUSE_DOS_REPORT" } } } ] }

예: 특정 PrincipalId의 API 직접 호출에 대해 AWS CloudTrail 이벤트만 허용되도록 설정

모든 AWS CloudTrail 이벤트는 이벤트의 detail.userIdentity.principalId 경로에서 API 직접 호출을 수행한 사용자의 PrincipalId를 가지고 있습니다. events:detail.userIdentity.principalId 조건 키를 사용하여 IAM 사용자나 역할이 특정 계정에서 들어오는 호출에 대한 CloudTrail 이벤트만 액세스할 수 있도록 제한할 수 있습니다.

"Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleOnlyForCloudTrailEventsWhereUserIsASpecificIAMUser", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "StringEquals": { "events:detail-type": [ "AWS API Call via CloudTrail" ], "events:detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] } } } ] }

다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.

이벤트 패턴 정책에서 허용
{ "detail-type": [ "AWS API Call via CloudTrail" ] }

아니요

{ "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AIDAJ45Q7YFFAREXAMPLE" ] }

{ "detail-type": [ "AWS API Call via CloudTrail" ], "detail.userIdentity.principalId": [ "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName" ] }

아니요

예제: 대상에 대한 액세스 제한

IAM 사용자나 역할이 events:PutTargets 권한을 가지고 있는 경우에는 동일한 계정을 가진 모든 대상을 액세스를 허용하는 규칙에 추가할 수 있습니다. 다음 정책은 사용자가 특정 규칙(123456789012 계정 하의 MyRule)에만 대상을 추가하도록 제한합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutTargetsOnASpecificRule", "Effect": "Allow", "Action": "events:PutTargets", "Resource": "arn:aws:events:us-east-1:123456789012:rule/MyRule" } ] }

규칙에 추가할 수 있는 대상을 제한하려면 events:TargetArn 조건 키를 사용합니다. 다음 예제에서와 같이 Lambda 함수로만 대상을 제한할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutTargetsOnASpecificRuleAndOnlyLambdaFunctions", "Effect": "Allow", "Action": "events:PutTargets", "Resource": "arn:aws:events:us-east-1:123456789012:rule/MyRule", "Condition": { "ArnLike": { "events:TargetArn": "arn:aws:lambda:*:*:function:*" } } } ] }