Amazon EventBridge에서 IAM 정책 조건 사용
권한을 부여하려면 정책 설명에서 IAM 정책 언어를 사용하여 정책이 적용되는 조건을 지정합니다. 예를 들어 특정 날짜 이후에만 적용되는 정책이 있을 수 있습니다.
정책 조건은 키-값 페어로 구성됩니다. 조건 키에는 대/소문자가 구분되지 않습니다.
단일 조건에 여러 조건이나 키를 지정하는 경우 EventBridge가 권한을 부여하려면 모든 조건 및 키를 충족해야 합니다. 조건 하나에서 키 하나에 여러 값을 지정하면 EventBridge는 값 중 하나가 충족되면 권한을 부여합니다.
조건을 지정할 때 자리 표시자나 정책 변수를 사용할 수 있습니다. 자세한 내용은 IAM 사용 설명서에서 정책 변수를 참조하십시오. IAM 정책 언어에서의 조건 지정에 관한 자세한 내용은 IAM 사용 설명서의 조건을 참조하세요.
기본적으로 IAM 사용자와 역할은 계정의 이벤트에 전혀 액세스할 수 없습니다. 이벤트에 액세스하려면 PutRule
API 작업에 대해 허가를 받아야 합니다. IAM 사용자 또는 역할에 events:PutRule
작업에 대한 권한이 부여되면 특정 이벤트와 일치하는 규칙을 생성할 수 있습니다. 그러나 규칙이 유용하려면 사용자에게 events:PutTargets
작업에 대한 권한도 있어야 합니다. 규칙이 CloudWatch 지표 게시하는 것 이상의 작업을 수행하도록 하려면 규칙에 대상도 추가해야 하기 때문입니다.
사용자나 역할이 특정한 소스 세트 및 세부 유형에만 일치하는 규칙을 생성할 수 있도록 IAM 사용자 또는 역할의 정책 명령문에 조건을 제공할 수 있습니다. 특정 소스 및 유형의 이벤트에 대한 액세스 권한을 부여하려면 events:source
및 events: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 |
|
계정 ID, Null |
aws:SourceArn |
이벤트를 전송하는 규칙의 ARN입니다. |
ARN, Null |
events:creatorAccount |
|
creatorAccount, Null |
events:detail-type |
여기서 |
세부 유형, Null |
events: detail.eventTypeCode |
|
eventTypeCode, Null |
events: detail.service |
|
service, Null |
events: detail.userIdentity.principalId |
|
보안 주체 ID, Null |
events:eventBusInvocation |
|
eventBusInvocation, Null |
events:ManagedBy |
AWS 서비스에서 내부적으로 사용합니다. 사용자를 대신하여 AWS 서비스에서 생성된 규칙의 경우 값은 규칙을 생성한 서비스의 보안 주체 이름입니다. |
고객 정책에 사용할 수 없습니다. |
events:source |
|
소스, Null |
events:TargetArn |
예를 들어 |
ArrayOfARN, Null |
EventBridge용 예제 정책 명령문은 Amazon EventBridge 리소스에 대한 액세스 권한 관리 단원을 참조하세요.
주제
- EventBridge 파이프 세부 사항
- 예: creatorAccount 조건 사용
- 예: eventBusInvocation 조건 사용
- 예제: 특정 소스에 대한 액세스 제한
- 예제: 이벤트 패턴에서 개별적으로 사용할 수 있는 소스를 여러 개 정의
- 예제: 이벤트 패턴에서 사용할 수 있는 소스 및 DetailType 정의
- 예제: 소스가 이벤트 패턴에 정의되어 있는지 확인
- 예제: 소스가 여러 개인 이벤트 패턴에서 허용되는 소스의 목록을 정의
- 예: detail.service에 의한 PutRule 액세스 제한
- 예: detail.eventTypeCode에 의한 PutRule 액세스 제한
- 예: 특정 PrincipalId의 API 직접 호출에 대해 AWS CloudTrail 이벤트만 허용되도록 설정
- 예제: 대상에 대한 액세스 제한
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" } } } ] }
EventPattern
은 PutRule
에 대한 필수 인수입니다. 따라서 정책 B의 사용자가 다음과 같은 이벤트 패턴을 통해 PutRule
을 호출하는 경우에는
{ "source": [ "aws.ec2" ] }
정책이 이러한 특정 소스(예: "aws.ec2"
)를 허용하기 때문에 규칙을 생성할 수 있습니다. 그러나 정책 B를 사용하는 사용자가 다음과 같은 이벤트 패턴으로 PutRule
을 호출하면 정책이 이 특정 소스(즉, "aws.s3"
)를 허용하지 않으므로 규칙 생성이 거부됩니다.
{ "source": [ "aws.s3" ] }
기본적으로 정책 B의 사용자만 Amazon EC2에서 호출된 이벤트와 일치하는 규칙을 생성할 수 있습니다. 따라서 이들만 Amazon EC2에서 이벤트 액세스가 허용됩니다.
정책 A와 정책 B를 비교하려면 다음 표를 참고하십시오.
이벤트 패턴 | 정책 A에서 허용 | 정책 B에서 허용 |
---|---|---|
|
예 |
예 |
|
예 |
아니요(소스 aws.s3이 허용되지 않음) |
|
예 |
예 |
|
예 |
아니요(소스를 지정해야 함) |
예제: 이벤트 패턴에서 개별적으로 사용할 수 있는 소스를 여러 개 정의
다음 정책은 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" ] } } } ] }
다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.
이벤트 패턴 | 정책에서 허용 |
---|---|
|
예 |
|
예 |
|
아니요 |
|
아니요 |
|
아니요 |
예제: 이벤트 패턴에서 사용할 수 있는 소스 및 DetailType
정의
다음 정책은 DetailType
가 EC2 instance state change notification
인 aws.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" } } } ] }
다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.
이벤트 패턴 | 정책에서 허용 |
---|---|
|
아니요 |
|
아니요 |
|
예 |
|
아니요 |
|
아니요 |
예제: 소스가 이벤트 패턴에 정의되어 있는지 확인
다음 정책은 사용자가 소스 필드가 있는 EventPatterns
으로 규칙만 생성하도록 허용합니다. 이 정책을 사용하면 IAM 사용자나 역할은 특정 소스를 제공하지 않는 EventPattern
으로는 규칙을 생성할 수 없습니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutRuleIfSourceIsSpecified", "Effect": "Allow", "Action": "events:PutRule", "Resource": "*", "Condition": { "Null": { "events:source": "false" } } } ] }
다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.
이벤트 패턴 | 정책에서 허용 |
---|---|
|
예 |
|
예 |
|
아니요 |
예제: 소스가 여러 개인 이벤트 패턴에서 허용되는 소스의 목록을 정의
다음 정책은 사용자가 여러 소스가 포함된 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" } } } ] }
다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.
이벤트 패턴 | 정책에서 허용 |
---|---|
|
예 |
|
예 |
|
아니요 |
|
아니요 |
예: 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" ] } } } ] }
다음 표에는 이 정책에서 허용 또는 거부되는 이벤트 패턴의 몇 가지 예를 보여줍니다.
이벤트 패턴 | 정책에서 허용 |
---|---|
|
아니요 |
|
예 |
|
아니요 |
예제: 대상에 대한 액세스 제한
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:*" } } } ] }