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

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

EventBridge에서 규칙이 트리거되면 이 규칙과 연관된 모든 대상들이 호출됩니다. 호출은 AWS Lambda 함수를 호출하여 Amazon SNS 주제에 게시하고 Kinesis 스트림에 이벤트를 릴레이합니다. 소유하고 있는 리소스에 대해 API 호출을 수행할 수 있으려면 EventBridge가 해당되는 권한을 가지고 있어야 합니다. Lambda, Amazon SNS, Amazon SQS 및 Amazon CloudWatch Logs 리소스에서 EventBridge는 리소스 기반 정책을 따릅니다. Kinesis 스트림에서 EventBridge는 IAM 역할을 따릅니다.

다음과 같은 권한을 사용하여 EventBridge 규칙과 연관된 대상을 호출할 수 있습니다. 다음 절차는 AWS CLI를 사용하여 대상에 권한을 추가합니다. AWS CLI의 설치 및 구성 방법에 대한 자세한 내용은 AWS Command Line Interface 사용 설명서AWS Command Line Interface 초기 설정을 참조하십시오.

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": "TrustCWEToInvokeMyLambdaFunction" }

EventBridge가 Lambda 함수를 호출하도록 허용하는 권한을 추가하려면

  • 명령 프롬프트에서 다음 명령을 입력합니다.

    aws lambda add-permission --statement-id "TrustCWEToInvokeMyLambdaFunction" \ --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 Developer GuideAddPermission예약된 이벤트에서 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 주제의 모든 속성을 반환합니다. 다음 예제는 새로 생성된 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\",\"SNS:Receive\"],\"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. 다음 단계로 다음 명령문을 문자열로 변환하고 "Policy" 속성 내의 "Statement" 모음에 이를 추가합니다.

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

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

    {\"Sid\":\"TrustCWEToPublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:region:account-id:topic-name\"}
  3. 명령문 모음에 명령문 문자열을 추가하고 난 후에 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\",\"SNS:Receive\"],\"Resource\":\"arn:aws:sns:region:account-id:topic-name\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"account-id\"}}}, {\"Sid\":\"TrustCWEToPublishEventsToMyTopic\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"arn:aws:sns:region:account-id:topic-name\"}]}"

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

Amazon SQS 권한

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

EventBridge 규칙이 SQS 대기열을 호출하도록 허용하는 권한을 추가하려면

  1. 먼저, SQS 대기열 속성을 나열합니다. 명령 프롬프트에서 다음을 입력합니다.

    aws sqs get-queue-attributes \ --queue-url https://sqs.region.amazonaws.com/account-id/queue-name \ --attribute-names Policy

    새로운 SQS 대기열에서 정책은 기본적으로 비어 있습니다. 명령문을 추가하는 것 외에도 이 명령문이 포함된 정책을 생성해야 합니다.

  2. 아래 명령문은 EventBridge가 SQS 대기열에 메시지를 전송하도록 해줍니다.

    { "Sid": "TrustCWEToSendEventsToMyQueue", "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" } } }
  3. 그런 다음 위의 명령문을 문자열로 변환합니다. 정책이 문자열로 변환되면 다음과 유사하게 화면에 나타납니다.

    {\"Sid\": \"TrustCWEToSendEventsToMyQueue\", \"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\": \"TrustCWEToSendEventsToMyQueue\", \"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

    SQS 대기열에 이미 정책이 있는 경우에는 원래 정책을 복사해서 set-queue-attributes.json 파일에 있는 새 명령문과 결합하고 앞에 나온 명령을 실행해서 정책을 업데이트해야 합니다.

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

CloudWatch Logs 권한

CloudWatch Logs가 이 규칙의 대상일 경우, EventBridge는 로그 스트림을 생성하며 CloudWatch Logs는 로그 항목으로 트리거된 이벤트에서 텍스트를 저장합니다. EventBridge에서 로그 스트림을 생성하고 이벤트를 기록하도록 허용하려면 CloudWatch Logs에 EventBridge가 CloudWatch Logs에 기록할 수 있도록 허용하는 리소스 기반 정책이 포함되어야 합니다. AWS Management 콘솔을 사용하여 CloudWatch Logs를 규칙의 대상으로 추가하는 경우, 이 정책은 자동으로 생성됩니다. AWS CLI를 사용하여 대상을 추가하는 경우, 정책이 이미 존재하지 않을 경우, 이 정책을 생성해야 합니다. 다음 예는 필요한 정책을 보여줍니다. 이 예제는 EventBridge가 /aws/events/로 시작하는 이름을 가진 모든 로그 그룹에 기록하도록 허용합니다. 이러한 종류의 로그에 대해 다른 로그 그룹 명명 정책을 사용하는 경우, 정책을 이에 따라 조정해야 합니다.

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

자세한 내용은 IAM 사용 설명서리소스에 대한 액세스 제어를 참조하십시오.