[1 섹션] Amazon EventBridge 및 AwsCDK를 사용하여 로그 S3 스토리지 배럴 및 스토리지 배럴 정책을 제공하는 방법

7233 단어 awscdkserverlessaws
에서 설명한 대로
  • 우리는 이미 S3통을 가지고 있는데, 이것은
  • 을 위해 설정한 확대이다
  • 현재, 파일이 이 버킷에 업로드될 때, 우리는 lambda 함수를 알려야 합니다. 우리는 그 중의 다른 Aws 서비스
  • 을 사용할 것입니다.

    아마존 사건 다리는 무엇입니까?


    Amazon EventBridge는 서버가 없는 이벤트 버스 서비스로 응용 프로그램과 각종 출처의 데이터를 쉽게 연결할 수 있다.EventBridge는 이전에 Amazon CloudWatch Events라고 불렸습니다.(aws docs)
    내 이해에 의하면
  • 자원에서 발생하는 모든 일은 events
  • events은 실제로 CloudTrail에서 생성된 json 형식의 로그 파일입니다.
  • EventBridge는 events의 관찰자입니다.
  • EventBrigde에게 무엇을 보고 싶은지 알려주세요 events (우리의 예에서 파일이 우리의 S3 저장소에 업로드되었을 때)
  • events에서 하고 싶은 일이 발생하면 EventBridge (우리의 예에서 Lambda 함수를 호출)
  • 우리가 해야 할 일은 다음과 같다.
  • S3 bucket을 정의하여 event(CloudTrail에서 생성된 로그 파일)
  • 을 저장합니다.
  • 이 S3 버킷의 버킷 정책 정의(bucket 정책)
  • EventBridge에서 보고 싶은 event 모드(EventRule)
  • 은 EventBridge에 event의 패턴이 발생하면 무엇을 원하는지 알려줍니다.(EventTarget)
  • 네, 어떻게 할까요?
    이 블로그에서 우리는 AWS CDK을 사용하여 위에서 정의한 모든 자원을 설정할 것이다.
    우리는 왜 CDK를 사용합니까?
    생각해 보면 AWS에는 160여 개의 서비스가 있습니다.필요한 것이 있을 때마다 AWS 관리 콘솔에서 하나씩 정의해야 합니다.콘솔에서 하나씩 서비스를 찾아야 하는 데 시간이 많이 걸립니다.
    아니오, 우리는 이렇게 하지 않습니다.AWS CDK를 사용하여 코드를 작성했습니다.그리고 우리는 짧은 명령 cdk deploy을 실행하고 구름 속에 모든 내용을 설정합니다.
    아름답다
    시작합시다.
    먼저 Python을 사용하여 cdk 항목을 설정합니다.
    카탈로그 만들기
    $ mkdir mycdkapp && cd mycdkapp
    
    CDK 애플리케이션 설정
    $ cdk init app --language python
    
    가상 환경 활성화
    $ .env\Scripts\activate.bat
    
    설치에 필요한 모든 의존 항목
    $ pip install -r requirements.txt
    
    멋지다. 그래서 우리는 우리의 프로젝트를 위해 CDK 응용 프로그램을 설치했다.
    현재 디렉터리에서 mycdkapp_stack.py을 보실 수 있습니다.이것이 바로 우리가 이곳에서 모든 자원 수요를 정의하는 곳이다.
    기존 S3 스토리지 통을 참조하여 CloudTrail에 새 로그 스토리지 통을 만듭니다.
    필요한 라이브러리 설치:
    $ pip install aws_cdk.aws_s3
    
    이것은 L1 construct을 설치하여 단일 유형의aws 서비스를 대표합니다.이 모든 것은aws에서 만든 것이기 때문에 특정한 서비스가 필요할 때마다 here 라이브러리를 찾을 수 있습니다
    이 예에서 우리는 aws_s3 라이브러리를 설치했다.
    현재 아래 코드를 mycdkapp_stack.py에 붙여넣습니다
    from aws_cdk import (
        aws_s3 as s3,
        core
    )
    
    
    class MycdkappStack(core.Stack):
    
        def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
            super().__init__(scope, id, **kwargs)
    
            # refer the existing s3 bucket, substitute <your-existing-s3-bucket-arn> with your bucket arn
            existing_bucket=s3.Bucket.from_bucket_arn(self, "BucketByArn", "arn:aws:s3:::<your-existing-s3-bucket-arn>")
    
            # this create a new s3 bucket with name s3LoggingBucket
            logging_bucket = s3.Bucket(self,"s3LoggingBucket", bucket_name="s3loggingbucket")
    
    두 줄 코드만 있으면 existing_bucket을 얻을 수 있고 s3LoggingBucket이라는 새 버킷을 만들 수 있습니다.
    지금 실행
    cdk synth > template.yaml
    
    템플릿이 표시됩니다.yaml은 디렉터리에 있습니다.
    다음은 이 로그 저장소에 저장소 정책을 설정해야 합니다.
  • contruct
  • 에 새 디렉터리 이름 mycdkapp 만들기
  • logging_policy.py
  • 이라는 새 파일 만들기
  • pip install aws_cdk.aws_iam
  • 아래 코드를 logging_policy.py에 붙여넣기
  • from aws_cdk import (
        aws_s3 as s3,
        aws_iam as iam,
        core,
    )
    
    class LoggingBucketPolicy(core.Construct):
    
        def __init__(self,scope: core.Construct, id: str, _bucket: s3.IBucket, **kwargs):
            super().__init__(scope,id, **kwargs)
    
            cloudtrail_service_principal = iam.ServicePrincipal('cloudtrail.amazonaws.com')
            get_bucket_policy = iam.PolicyStatement(
                actions=["s3:GetBucketAcl"],
                resources=[_bucket.bucket_arn],
                principals=[cloudtrail_service_principal]
                )
    
            put_object_policy = iam.PolicyStatement(
                    actions=['s3:PutObject'],
                    resources=[f"arn:aws:s3:::{_bucket.bucket_name}/AWSLogs/{core.Environment.account}/*"],
                    principals=[cloudtrail_service_principal]
                )
    
            _bucket.add_to_resource_policy(get_bucket_policy)
            _bucket.add_to_resource_policy(put_object_policy)
    
    위의 코드는 무엇을 하는 것입니까?
  • 우리는 Construct
  • 을 계승하여 core.Construct을 정의합니다
  • 이것은 우리로 하여금 같은 일을 하는 모든 구성 요소를 한데 조합하게 한다. (이 예에서 이 구조는 버킷 정책을 정의할 것이다)
  • 우리는 변수 s3.IBucket으로 construct_bucket에 삽입할 것이다
  • 정의 2 iam 전략 get_object_policyput_object_policy
  • 에서 cloudtrail.amazonaws.com이 두 정책을 사용할 수 있습니다.
  • 그리고 보험증권을 _bucket
  • 으로 이전합니다
    현재 mycdkapp_stack.py에 이 줄을 추가합니다.
    LoggingBucketPolicy(self, 's3Policy', logging_bucket)
    
    그런 다음 실행
    cdk synth > template.yaml
    
    현재 template.yaml을 검사하면 다음과 같은 내용을 볼 수 있습니다.
    s3LoggingBucketPolicyEF0E9CBA:
        Type: AWS::S3::BucketPolicy
        Properties:
          Bucket:
            Ref: s3LoggingBucket06C9F6F3
          PolicyDocument:
            Statement:
              - Action: s3:GetBucketAcl
                Effect: Allow
                Principal:
                  Service: cloudtrail.amazonaws.com
                Resource:
    
    완성
    * 이제 성공: *
  • 은 Amazon Eventbridge가 무엇인지, 그리고 우리가 왜 그것을 사용하는지 이해합니다.
  • 은 Aws CDK가 무엇인지, 그리고 우리가 왜 그것을 사용하는지 이해합니다.
  • 은 기존 버킷을 새로 만든 cdk 응용 프로그램에 인용합니다.
  • CDK
  • 을 사용하여 CloudTrail에 새 로그 저장소 통을 만듭니다.
  • CDK
  • 을 사용하여 모든 bucket 정책을 새 bucket에 적용
    * 이제 토론할 것입니다*
  • 은 어떻게 Amazon Eventbrige에 이벤트 규칙/모델을 정의합니까?
  • Eventbridge의 특정 패턴이 발생하면 어떻게 해야 합니까?
  • 모두 CDK를 사용합니다.

    기대해주세요.


    [1 섹션] Amazon EventBridge 및 AwsCDK를 사용하여 로그 S3 스토리지 배럴 및 스토리지 배럴 정책을 제공하는 방법
    곧 올 것이다
    [섹션 2] CDK를 사용하여 Amazon Eventbridge에 EventRule, EventTarget을 정의하는 방법
    네가 가기 전에, 만약 네가 이 시리즈를 좋아하거나 이것이 유용하다고 생각한다면, 나에게 커피 한 잔을 사주는 것을 고려해 봐라😊🤞 5달러 이상.
    나는 전체 강좌 시리즈를 위해 GitHub repo를 준비하고 각 부분에 단독 제출을 안배할 것이다.
    이것은 나의 지지자에게만 적용될 것이다. 왜냐하면 나는 이것을 준비하는 데 많은 시간을 들였기 때문이다.어쨌든 고마워요.오늘 하루 즐겁게 보내세요.



    트위터에서 팔로우하기:
    곧 출시될 제품(관심 있으시면):

    좋은 웹페이지 즐겨찾기