Amazon EventBridge 이벤트 버스에 대한 권한 - 아마존 EventBridge

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

Amazon EventBridge 이벤트 버스에 대한 권한

AWS 계정의 기본 이벤트 버스는 한 계정의 이벤트만 허용합니다. 리소스 기반 정책을 이벤트 버스에 연결하여 추가 권한을 이벤트 버스에 부여할 수 있습니다. 리소스 기반 정책을 사용하면 다른 계정의 PutEvents, PutRulePutTargets API 직접 호출을 허용할 수 있습니다. 또한 정책의 IAM 조건을 사용하여 조직에 권한을 부여하거나, 태그를 적용하거나, 특정 규칙 또는 계정의 조직에만 이벤트를 필터링할 수 있습니다. 이벤트 버스 생성 시 또는 이후에 이벤트 버스에 대한 리소스 기반 정책을 설정할 수 있습니다.

PutRule, PutTargets, DeleteRule, RemoveTargets, DisableRuleEnableRule 등의 이벤트 버스 Name 파라미터를 허용하는 EventBridge API는 이벤트 버스 ARN도 허용합니다. 이러한 파라미터를 사용하여 API를 통해 교차 계정 또는 교차 리전 이벤트 버스를 참조합니다. 예를 들어 PutRule를 호출하면 역할을 맡을 필요 없이 다른 계정의 이벤트 버스에 규칙을 생성할 수 있습니다.

이 주제의 정책 예제를 IAM 역할에 연결하여 이벤트를 다른 계정이나 리전으로 전송할 권한을 부여할 수 있습니다. IAM 역할을 사용하여 사용자 계정에서 다른 계정으로 이벤트를 전송할 수 있는 사람에 대한 조직 제어 정책 및 경계를 설정합니다. 규칙의 대상이 이벤트 버스인 경우 항상 IAM 역할을 사용하는 것이 좋습니다. PutTarget 호출을 사용하여 IAM 역할을 연결할 수 있습니다. 이벤트를 다른 계정이나 리전으로 전송하는 규칙을 생성하는 방법에 대한 자세한 내용은 AWS 계정 간 Amazon EventBridge 이벤트 전송 및 수신 섹션을 참조하세요.

이벤트 버스 권한 관리

기존 이벤트 버스에 대한 권한을 수정하려면 다음 절차를 따릅니다. AWS CloudFormation을 사용해 이벤트 버스 정책을 생성하는 방법에 대한 자세한 내용은 AWS::Events::EventBusPolicy를 참조하세요.

기존 이벤트 버스에 대한 권한을 관리하려면
  1. https://console.aws.amazon.com/events/에서 Amazon EventBridge 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 이벤트 버스를 선택합니다.

  3. 이름에서 권한을 관리할 이벤트 버스의 이름을 선택합니다.

    리소스 정책이 이벤트 버스에 연결된 경우 해당 정책이 표시됩니다.

  4. 권한 관리를 선택하고 다음 중 하나를 수행합니다.

    • 이벤트 버스에 부여할 권한이 포함된 정책을 입력합니다. 다른 소스의 정책을 붙여넣거나 정책에 대한 JSON을 입력할 수 있습니다.

    • 정책에 템플릿을 사용하려면 템플릿 로드를 선택합니다. 환경에 맞게 정책을 수정하고 정책에서 보안 주체에게 사용 권한을 부여하는 추가 작업을 추가합니다.

  5. 업데이트를 선택합니다.

템플릿은 계정과 환경에 맞게 사용자 지정할 수 있는 예제 정책 구문을 제공합니다. 템플릿은 유효한 정책이 아닙니다. 사용 사례에 맞게 템플릿을 수정하거나 정책 예제 중 하나를 복사하여 사용자 지정할 수 있습니다.

템플릿은 계정에 PutEvents 작업을 사용할 권한을 부여하는 방법, 조직에 권한을 부여하는 방법, 계정의 규칙을 관리할 수 있는 권한을 계정에 부여하는 방법에 대한 예가 포함된 정책을 로드합니다. 특정 계정에 맞게 템플릿을 사용자 지정하고 템플릿에서 다른 섹션을 삭제할 수 있습니다. 더 많은 정책 예제는 이 주제의 뒷부분에 나와 있습니다.

버스에 대한 권한을 업데이트하려고 시도했지만 정책에 오류가 있는 경우 오류 메시지에 정책의 특정 문제가 나타납니다.

### Choose which sections to include in the policy to match your use case. ### ### Be sure to remove all lines that start with ###, including the ### at the end of the line. ### ### The policy must include the following: ### { "Version": "2012-10-17", "Statement": [ ### To grant permissions for an account to use the PutEvents action, include the following, otherwise delete this section: ### { "Sid": "AllowAccountToPutEvents", "Effect": "Allow", "Principal": { "AWS": "<ACCOUNT_ID>" }, "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/default" }, ### Include the following section to grant permissions to all members of your AWS Organizations to use the PutEvents action ### { "Sid": "AllowAllAccountsFromOrganizationToPutEvents", "Effect": "Allow", "Principal": "*", "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/default", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-yourOrgID" } } }, ### Include the following section to grant permissions to the account to manage the rules created in the account ### { "Sid": "AllowAccountToManageRulesTheyCreated", "Effect": "Allow", "Principal": { "AWS": "<ACCOUNT_ID>" }, "Action": [ "events:PutRule", "events:PutTargets", "events:DeleteRule", "events:RemoveTargets", "events:DisableRule", "events:EnableRule", "events:TagResource", "events:UntagResource", "events:DescribeRule", "events:ListTargetsByRule", "events:ListTagsForResource"], "Resource": "arn:aws:events:us-east-1:123456789012:rule/default", "Condition": { "StringEqualsIfExists": { "events:creatorAccount": "<ACCOUNT_ID>" } } }] }

예제 정책: 다른 계정의 기본 버스로 이벤트 전송

다음 예제 정책은 계정 111122223333에 이벤트를 계정 123456789012의 기본 이벤트 버스에 게시할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "sid1", "Effect": "Allow", "Principal": {"AWS":"arn:aws:iam::111112222333:root"}, "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/default" } ] }

예제 정책: 다른 계정의 사용자 지정 버스로 이벤트 전송

다음 예제 정책은 계정 111122223333에 이벤트를 계정 123456789012의 central-event-bus에 게시할 수 있는 권한을 부여합니다. 단, 소스 값이 com.exampleCorp.webStore로 설정되고 detail-typenewOrderCreated로 설정된 이벤트에만 적용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "WebStoreCrossAccountPublish", "Effect": "Allow", "Action": [ "events:PutEvents" ], "Principal": { "AWS": "arn:aws:iam::111112222333:root" }, "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/central-event-bus", "Condition": { "StringEquals": { "events:detail-type": "newOrderCreated", "events:source": "com.exampleCorp.webStore" } } } ] }

예제 정책: 동일한 계정의 이벤트 버스로 이벤트 전송

CustomBus1이라는 이벤트 버스에 연결된 다음 예제 정책은 이벤트 버스가 동일한 계정 및 리전에서 이벤트를 수신할 수 있도록 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutEvents" ], "Resource": [ "arn:aws:events:us-east-1:123456789:event-bus/CustomBus1" ] } ] }

예제 정책: 동일한 계정으로 이벤트를 전송하고 업데이트 제한

다음 예제 정책은 계정 123456789012에 규칙을 생성, 삭제, 업데이트, 비활성화 및 활성화하고 대상을 추가 또는 제거할 수 있는 권한을 부여합니다. 이 정책은 소스가 com.exampleCorp.webStore인 이벤트와 일치하는 규칙을 제한하고, 이러한 규칙 및 대상이 생성되면 계정 123456789012만 이를 수정할 수 있도록 "events:creatorAccount": "${aws:PrincipalAccount}"를 사용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InvoiceProcessingRuleCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": [ "events:PutRule", "events:DeleteRule", "events:DescribeRule", "events:DisableRule", "events:EnableRule", "events:PutTargets", "events:RemoveTargets" ], "Resource": "arn:aws:events:us-east-1:123456789012:rule/central-event-bus/*", "Condition": { "StringEqualsIfExists": { "events:creatorAccount": "${aws:PrincipalAccount}", "events:source": "com.exampleCorp.webStore" } } } ] }

예제 정책: 특정 규칙의 이벤트만 다른 리전의 버스로 전송

다음 예제 정책은 계정 123456789012에서 중동(바레인) 및 미국 서부(오레곤) 리전의 SendToUSE1AnotherAccount라는 규칙과 일치하는 이벤트를 미국 동부(버지니아 북부)의 CrossRegionBus라는 이벤트 버스로 전송할 수 있는 권한을 계정 111122223333에 부여합니다. 예제 정책은 계정 123456789012에 CrossRegionBus라는 이벤트 버스에 추가됩니다. 이 정책은 계정 111122223333의 이벤트 버스에 지정된 규칙과 일치하는 경우에만 이벤트를 허용합니다. Condition 구문은 이벤트를 지정된 규칙 ARN이 있는 규칙과 일치하는 이벤트로만 제한합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSpecificRulesAsCrossRegionSource", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111112222333:root" }, "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/CrossRegionBus", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:events:us-west-2:111112222333:rule/CrossRegionBus/SendToUSE1AnotherAccount", "arn:aws:events:me-south-1:111112222333:rule/CrossRegionBus/SendToUSE1AnotherAccount" ] } } } ] }

예제 정책: 특정 리전의 이벤트만 다른 리전으로 전송

다음 예제 정책은 중동(바레인) 및 미국 서부(오레곤) 리전에서 생성된 모든 이벤트를 미국 동부(버지니아 북부) 리전의 계정 123456789012에서 CrossRegionBus라는 이벤트 버스로 전송할 수 있는 권한을 계정 111122223333에 부여합니다. 계정 111122223333에는 다른 리전에서 생성된 이벤트를 전송할 권한이 없습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossRegionEventsFromUSWest2AndMESouth1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111112222333:root" }, "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/CrossRegionBus", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:events:us-west-2:*:*", "arn:aws:events:me-south-1:*:*" ] } } } ] }

예제 정책: 특정 리전의 이벤트 전송 거부

계정 123456789012의 CrossRegionBus라는 이벤트 버스에 연결된 다음 예제 정책은 이벤트 버스가 계정 111122223333에서 이벤트를 수신할 수 있는 권한을 부여하지만 미국 서부(오레곤) 리전에서 생성된 이벤트는 허용하지 않습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "1AllowAnyEventsFromAccount111112222333", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111112222333:root" }, "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/CrossRegionBus" }, { "Sid": "2DenyAllCrossRegionUSWest2Events", "Effect": "Deny", "Principal": { "AWS": "*" }, "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-1:123456789012:event-bus/CrossRegionBus", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:events:us-west-2:*:*" ] } } } ] }