[AWS] Step Functions에서 CloudWatch Logs로 로그를 출력할 때 권한 확인[Step Functions]

15802 단어 stepfunctionsAWS

입문


Step Functions State Machine은 State Machine 자체의 로그(AWS 관리 콘솔의 Execution event history)를 CloudWatch Logs로 출력할 수 있습니다.
이 CloudWatch Logs로 출력할 IAM Entity (CloudWatch Logs에 기록된 주체) 가 약간 특수하기 때문에 정보를 요약했습니다.
본 보도는 아래 보도의 파생이다.
[AWS] SAM에서 Step Functions 레코드를 사용하여 CloudWatch Logs로 출력할 때,sam deploy에서 오류가 발생할 수 있습니다[SAM]

TL;DR

  • Step Functions State Machine 자체 로그 출력은 Step Functions 서비스 자체의 조작으로 진행된다
  • State Machine IAM Role을 부여하는 것은 CloudWatch Logs의 로그 출력과 전혀 관계가 없습니다
  • 따라서 CloudWatch Logs 자원 기반 정책에 필요한 권한을 부여해야 한다
  • State Machine 정의를 기준으로 하면 다음과 같습니다.

    컨텐츠 확인


    항목 확인

  • State Machine 정의에 IAM Role Administrators Access를 부여합니다
  • CloudWatch Logs의 리소스 라이브러리based 정책을 모두 삭제합니다
  • State Machine을 실행하여 결과가 CloudWatch Logs로 출력되었는지 확인합니다
  • CloudWatch Logs 자원 기반 정책을 되돌려주고 State Machine에서 온 로그가 CloudWatch Logs로 출력되는지 확인합니다
  • 검증된 환경

  • State Machine 이름:
  • State Machine의 IAM Role 이름: StepFunctions-Hello World-role-4fabec35
  • State Machine 로깅 설정
  • Log level: ALL
  • Include execution data: ☑
  • CloudWatch log group:/aws/vendedlogs/states/LookingIntoLogging-Logs
  • 검증 단계 개요

  • 정상 시 동작 확인
  • CloudWatch Logs의 리소스 라이브러리based 정책을 모두 삭제합니다
  • AWS 관리 컨트롤러를 사용하여 새 State Machine를 정의하고 CloudWatch Logs의 자원 기반 정책을 확인합니다
  • CloudWatch Logs의 Resource based 정책을 확인합니다
  • State Machine을 실행하여 CloudWatch Logs에서 로그가 출력되었는지 확인합니다
  • CloudWatch Logs 리소스 기반 정책 삭제 시 동작 확인
  • CloudWatch Logs의 Resource based 정책이 삭제되었습니다
  • State Machine이 부여한 IAM Role은 Administrator Access Policy를 부여합니다
  • State Machine을 실행하여 CloudWatch Logs에 출력 로그가 없음을 확인합니다
  • Resource based policy 재발표 시 행동 확인
  • CloudWatch Logs의 Resource based policy
  • State Machine을 실행하여 CloudWatch Logs에 로그를 출력하는지 확인합니다
  • 검증 결과 세부 정보


    1. 정상 시 동작 확인


    1-1. 모든 CloudWatch Logs 리소스 기반 정책 삭제


    모든 CloudWatch Logs 리소스 기반 정책을 삭제하고 컨텐츠가 설정되지 않았는지 확인합니다.
    CloudWatch Logs의 리소스 기반 정책 삭제
    $ aws logs delete-resource-policy --policy-name AWSLogDeliveryWrite20150319
    
    CloudWatch Logs 리소스 기반 정책에 설정된 내용이 없음 확인
    $ aws logs describe-resource-policies
           {
               "resourcePolicies": []
           }
    

    1-2. AWS Management Console을 사용하여 새 State Machine을 정의하고 CloudWatch Logs의 리소스 기반 정책을 확인합니다.


    HellowWolrd 템플릿을 기반으로 State Machine을 새로 만듭니다.각 설정은 "검증된 환경"과 같습니다.



    1-3. CloudWatch Logs의 리소스 인프라 확인


    AWS CLI에서 CloudWatch Logs의 리소스 기반 정책을 확인하면 위에서 만든 State Machine에 해당하는 정책이 추가됩니다.
    aws logs describe-resource-policies
    $ aws logs describe-resource-policies
    {
        "resourcePolicies": [
            {
                "policyName": "AWSLogDeliveryWrite20150319",
                "policyDocument": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"AWSLogDeliveryWrite\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"delivery.logs.amazonaws.com\"},\"Action\":[\"logs:CreateLogStream\",\"logs:PutLogEvents\"],\"Resource\":\"arn:aws:logs:us-west-2:************:log-group:/aws/vendedlogs/states/LookingIntoLogging-Logs:log-stream:*\"}]}",
                "lastUpdatedTime": 1609216388365
            }
        ]
    }
    
    자원 인프라 AWSlogDeliveryWrite20150319의 내용
    $ aws logs describe-resource-policies | jq ".resourcePolicies[0].policyDocument | fromjson"0
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AWSLogDeliveryWrite",
          "Effect": "Allow",
          "Principal": {
            "Service": "delivery.logs.amazonaws.com"
          },
          "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:us-west-2:************:log-group:/aws/vendedlogs/states/LookingIntoLogging-Logs:log-stream:*"
        }
      ]
    }
    

    1-4. State Machine 실행, CloudWatch Logs 출력 로그 확인


    방금 만든 State Machine를 실행하면 CloudWatch Logs에 로그 출력이 완전하게 있는지 확인할 수 있습니다.




    2. CloudWatch Logs 리소스 기반 정책 삭제 시 동작 확인


    2-1. CloudWatch Logs의 리소스 기반 정책 삭제


    CloudWatch Logs의 리소스 기반 정책을 AWS CLI에서 제거합니다.
    aws logs delete-resource-policies
    $ aws logs delete-resource-policies --policy-name AWSLogDeliveryWrite20150319
    
    $aws logs describe-resource-policies 명령에서 CloudWatch Logs의 자원 기반 정책을 삭제했는지 확인합니다.
    aws logs describe-resource-policies
    $ aws logs describe-resource-policies
    {
        "resourcePolicies": []
    }
    

    2-2. 관리자 액세스 정책을 State Machine에 부여하는 IAM Role


    State Machine의 IAM Role에 대한 관리자 액세스 권한을 부여합니다.

    2-3. State Machine을 실행하여 CloudWatch Logs에서 로그가 출력되지 않음을 확인합니다.


    AWS Management Console에서 방금 State Machine을 실행합니다.
    실행 후 로그를 CloudWatch Logs로 내보내지 않을 수 있습니다.



    3. 자원 기초 정책을 다시 부여할 때의 행위 확인


    3-1. CloudWatch Logs에 리소스 기반 정책 부여


    AWS Management Console과 자동으로 생성된 동일한 리소스 인프라를 다시 부여합니다.
    cloudwatch-logs-resource-based-policy.json
    $ vi cloudwatch-logs-resource-based-policy.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AWSLogDeliveryWrite",
          "Effect": "Allow",
          "Principal": {
            "Service": "delivery.logs.amazonaws.com"
          },
          "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:us-west-2:************:log-group:/aws/vendedlogs/states/LookingIntoLogging-Logs:log-stream:*"
        }
      ]
    }
    
    aws logs put-resource-policy
    $ aws logs put-resource-policy --policy-name AWSLogDeliveryWrite20150319 --policy-document file://cloudwatch-logs-resource-based-policy.json
    {
        "resourcePolicy": {
            "policyName": "AWSLogDeliveryWrite20150319",
            "policyDocument": "{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"AWSLogDeliveryWrite\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"Service\": \"delivery.logs.amazonaws.com\"\n      },\n      \"Action\": [\n        \"logs:CreateLogStream\",\n        \"logs:PutLogEvents\"\n      ],\n      \"Resource\": \"arn:aws:logs:us-west-2:************:log-group:/aws/vendedlogs/states/LookingIntoLogging-Logs:log-stream:*\"\n    }\n  ]\n}\n\n",
            "lastUpdatedTime": 1609217733590
        }
    }
    

    3-2. State Machine 실행 및 CloudWatch 로그 출력 여부 확인


    이전과 같은 State Machine를 실행할 때 CloudWatch Logs가 로그를 출력했는지 확인할 수 있습니다.




    끝내다


    Step Functions뿐만 아니라 비즈니스 시스템 등에서 AWS를 사용할 때 로그가 중요합니다.
    로그를 잘 얻을 수 있는지, 필요한 권한 제어를 할 수 있는지 확인해 보세요.

    좋은 웹페이지 즐겨찾기