Amazon EventBridge에 리소스 기반 정책 사용 - 아마존 EventBridge

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

Amazon EventBridge에 리소스 기반 정책 사용

EventBridge에서 규칙이 실행되면 이 규칙과 연관된 모든 대상이 간접 호출됩니다. 규칙은 AWS Lambda 함수를 간접 호출하거나, Amazon SNS 주제에 게시하거나, 이벤트를 Kinesis 스트림으로 중계할 수 있습니다. 소유하고 있는 리소스에 대해 API 직접 호출을 수행하려면 EventBridge에 적절한 권한이 필요합니다. Lambda, Amazon SNS, Amazon SQS 및 Amazon CloudWatch Logs 리소스의 경우 EventBridge는 리소스 기반 정책을 사용합니다. Kinesis 스트림의 경우 EventBridge는 자격 증명 기반 정책을 사용합니다.

AWS CLI를 사용하여 대상에 권한을 추가할 수 있습니다. AWS CLI의 설치 및 구성 방법에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서AWS Command Line Interface로 설정을 참조하세요.

Amazon API Gateway 권한

EventBridge 규칙을 사용하여 Amazon API Gateway 엔드포인트를 간접 호출하려면 API Gateway 엔드포인트의 정책에 다음 권한을 추가하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "execute-api:Invoke", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region:account-id:rule/rule-name" } }, "Resource": [ "execute-api:/stage/GET/api" ] } ] }

CloudWatch Logs 권한

CloudWatch Logs가 규칙의 대상인 경우 EventBridge는 로그 스트림을 생성하며 CloudWatch Logs는 이벤트의 텍스트를 로그 항목으로 저장합니다. EventBridge가 로그 스트림을 생성하고 이벤트를 기록하도록 허용하려면 CloudWatch Logs에 EventBridge가 CloudWatch Logs에 기록할 수 있도록 허용하는 리소스 기반 정책이 포함되어야 합니다.

AWS Management Console을 사용하여 CloudWatch Logs를 규칙의 대상으로 추가하면 리소스 기반 정책이 자동으로 생성됩니다. AWS CLI를 사용하여 대상을 추가하고 정책이 아직 존재하지 않는 경우 정책을 생성해야 합니다.

다음 예에서는 EventBridge가 이름이 /aws/events/로 시작하는 모든 로그 그룹에 기록하도록 허용합니다. 이러한 종류의 로그에 대해 다른 명명 정책을 사용하는 경우, 그에 따라 예제를 조정해야 합니다.

{ "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow", "Principal": { "Service": ["events.amazonaws.com", "delivery.logs.amazonaws.com"] }, "Resource": "arn:aws:logs:region:account:log-group:/aws/events/*:*", "Sid": "TrustEventsToStoreLogEvent" } ], "Version": "2012-10-17" }

자세한 내용은 CloudWatch Logs API 참조 가이드에서 PutResourcePolicy를 참조하세요.

AWS Lambda 권한

EventBridge 규칙을 사용하여 AWS Lambda 함수를 간접 호출하려면 Lambda 함수의 정책에 다음 권한을 추가합니다.

{ "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:region:account-id:function:function-name", "Principal": { "Service": "events.amazonaws.com" }, "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name" } }, "Sid": "InvokeLambdaFunction" }
EventBridge가 AWS CLI를 사용하여 Lambda 함수를 간접 호출할 수 있도록 하는 위의 권한을 추가하려면
  • 명령 프롬프트에서 다음 명령을 입력합니다.

    aws lambda add-permission --statement-id "InvokeLambdaFunction" \ --action "lambda:InvokeFunction" \ --principal "events.amazonaws.com" \ --function-name "arn:aws:lambda:region:account-id:function:function-name" \ --source-arn "arn:aws:events:region:account-id:rule/rule-name"

EventBridge가 Lambda 함수를 간접 호출할 수 있도록 하는 권한 설정에 대한 자세한 내용은 AWS Lambda 개발자 안내서AddPermission예약된 이벤트와 함께 Lambda 사용을 참조하십시오.

Amazon SNS 권한

EventBridge가 Amazon SNS 주제에 게시하도록 허용하려면 aws sns get-topic-attributesaws sns set-topic-attributes 명령을 사용합니다.

참고

EventBridge의 Amazon SNS 주제 정책에서는 Condition 블록을 사용할 수 없습니다.

EventBridge가 SNS 주제를 게시하도록 허용하는 권한을 추가하려면
  1. SNS 주제의 속성을 나열하려면 다음 명령을 사용합니다.

    aws sns get-topic-attributes --topic-arn "arn:aws:sns:region:account-id:topic-name"

    다음 예제는 새 SNS 주제의 결과를 보여줍니다.

    { "Attributes": { "SubscriptionsConfirmed": "0", "DisplayName": "", "SubscriptionsDeleted": "0", "EffectiveDeliveryPolicy": "{\"http\":{\"defaultHealthyRetryPolicy\":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3,\"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0,\"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}", "Owner": "account-id", "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\"],\"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id\"}}}]}", "TopicArn": "arn:aws:sns:region:account-id:topic-name", "SubscriptionsPending": "0" } }
  2. JSON-문자열 변환기를 사용하여 다음 명령문을 문자열로 변환합니다.

    { "Sid": "PublishEventsToMyTopic", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:region:account-id:topic-name" }

    이 명령문이 문자열로 변환되면 다음 예시와 유사하게 화면에 나타납니다.

    {\"Sid\":\"PublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:region:account-id:topic-name\"}
  3. 이전 단계에서 만든 문자열을 "Policy" 속성 내 "Statement" 컬렉션에 추가합니다.

  4. aws sns set-topic-attributes 명령을 사용하여 새 정책을 설정합니다.

    aws sns set-topic-attributes --topic-arn "arn:aws:sns:region:account-id:topic-name" \ --attribute-name Policy \ --attribute-value "{\"Version\":\"2012-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\"],\"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id\"}}}, {\"Sid\":\"PublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:region:account-id:topic-name\"}]}"

자세한 내용은 Amazon Simple Notification Service API 참조SetTopicAttributes 작업을 참조하십시오.

Amazon SQS 권한

EventBridge 규칙이 Amazon SQS 대기열을 간접 호출하도록 허용하려면 aws sqs get-queue-attributesaws sqs set-queue-attributes 명령을 사용합니다.

SQS 대기열의 정책이 비어 있는 경우 먼저 정책을 생성한 다음 권한 설명을 추가할 수 있습니다. 새 SQS 대기열에는 빈 정책이 있습니다.

SQS 대기열에 이미 정책이 있는 경우 원본 정책을 복사하고 새 명령문과 결합하여 권한 설명을 추가해야 합니다.

EventBridge 규칙이 SQS 대기열을 간접 호출하도록 허용하는 권한을 추가하려면
  1. SQS 대기열 속성을 나열하려면 명령 프롬프트에서 다음 명령을 입력합니다.

    aws sqs get-queue-attributes \ --queue-url https://sqs.region.amazonaws.com/account-id/queue-name \ --attribute-names Policy
  2. 다음 명령문을 추가합니다.

    { "Sid": "AWSEvents_custom-eventbus-ack-sqs-rule_dlq_sqs-rule-target", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:region:account-id:queue-name", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region:account-id:rule/bus-name/rule-name" } } }
  3. JSON-문자열 변환기를 사용하여 앞의 명령문을 문자열로 변환합니다. 정책이 문자열로 변환되면 다음과 유사하게 화면에 나타납니다.

    {\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:region:account-id:queue-name\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region:account-id:rule/rule-name\"}}
  4. 다음 콘텐츠를 통해 set-queue-attributes.json이라는 파일을 생성합니다.

    { "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"arn:aws:sqs:region:account-id:queue-name/SQSDefaultPolicy\",\"Statement\":[{\"Sid\": \"EventsToMyQueue\", \"Effect\": \"Allow\", \"Principal\": {\"Service\": \"events.amazonaws.com\"}, \"Action\": \"sqs:SendMessage\", \"Resource\": \"arn:aws:sqs:region:account-id:queue-name\", \"Condition\": {\"ArnEquals\": {\"aws:SourceArn\": \"arn:aws:events:region:account-id:rule/rule-name\"}}}]}" }
  5. 다음 명령과 같이 방금 생성한 set-queue-attributes.json 파일을 입력으로 사용하여 정책 속성을 설정합니다.

    aws sqs set-queue-attributes \ --queue-url https://sqs.region.amazonaws.com/account-id/queue-name \ --attributes file://set-queue-attributes.json

자세한 내용은 Amazon Simple Queue Service 개발자 안내서Amazon SQS 정책 예를 참조하세요.

EventBridge 파이프 세부 사항

EventBridge 파이프는 리소스 기반 정책을 지원하지 않으며 리소스 기반 정책 조건을 지원하는 API도 없습니다.