Datadog AWS Integration 설정(IAM Role)

9040 단어 DatadogAWS
요 전날 (2016/07/08) Datadog에서 보안 인시던트가 발생했다는 것입니다.
AWS Integration 설정에 대한 액세스 키의 설정이 아니라 IAM Role의 위임에 대한 설정이 권장된다는 알림이 있었습니다.
자체 환경에서는 IAM User에서 데이터를 수집했으며 IAM Role에서 설정을 수행하지 않았기 때문에 설정을 변경했습니다.
  • 2016-07-08 Security Notice - Datadog

  • 사전 준비



    IAM Role을 만드는 데 필요한 JSON 파일을 준비합니다.

    정책 파일 작성



    DatadogAWSIntegrationPolicy.json


  • IAM role 에 부여하는 정책군
  • 최신 정보는 이하를 참조
  • Datadog-AWS 통합

  • {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "autoscaling:Describe*",
            "cloudtrail:DescribeTrails",
            "cloudtrail:GetTrailStatus",
            "cloudwatch:Describe*",
            "cloudwatch:Get*",
            "cloudwatch:List*",
            "dynamodb:list*",
            "dynamodb:describe*",
            "ec2:Describe*",
            "ec2:Get*",
            "ecs:Describe*",
            "ecs:List*",
            "elasticache:Describe*",
            "elasticache:List*",
            "elasticloadbalancing:Describe*",
            "elasticmapreduce:List*",
            "elasticmapreduce:Describe*",
            "kinesis:List*",
            "kinesis:Describe*",
            "logs:Get*",
            "logs:Describe*",
            "logs:FilterLogEvents",
            "logs:TestMetricFilter",
            "rds:Describe*",
            "rds:List*",
            "route53:List*",
            "ses:Get*",
            "sns:List*",
            "sns:Publish",
            "sqs:GetQueueAttributes",
            "sqs:ListQueues",
            "sqs:ReceiveMessage",
            "support:*"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }
    

    AssumeRolePolicyDocument.json.base


  • Trust Relationships의 내용 (ID 부분은 후속 절차로 대체)
  • {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::__DDACCOUNTID__:root"
          },
          "Action": "sts:AssumeRole",
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "__DDEXTERNALID__"
            }
          }
        }
      ]
    }
    

    각 설정값(명칭)



    각 자원의 이름은 다음을 사용합니다.


    종류
    이름


    PolicyName
    DatadogAWSIntegrationPolicy

    PolicyDocument
    DatadogAWSIntegrationPolicy.json

    RoleName
    DatadogAWSIntegrationRole

    AssumeRolePolicyDocument
    AssumeRolePolicyDocument.json

    $ PolicyName="DatadogAWSIntegrationPolicy" ; echo "PolicyName: ${PolicyName}"
    PolicyName: DatadogAWSIntegrationPolicy
    $ PolicyDocument="DatadogAWSIntegrationPolicy.json" ; echo "PolicyDocument: ${PolicyDocument}"
    PolicyDocument: DatadogAWSIntegrationPolicy.json
    $ RoleName="DatadogAWSIntegrationRole" ; echo "RoleName: ${RoleName}"
    RoleName: DatadogAWSIntegrationRole
    $ AssumeRolePolicyDocument="AssumeRolePolicyDocument.json" ; echo "AssumeRolePolicyDocument: ${AssumeRolePolicyDocument}"
    AssumeRolePolicyDocument: AssumeRolePolicyDocument.json
    

    IAM role 만들기



    정책 작성


    $ aws iam create-policy --policy-name ${PolicyName} --policy-document file://${PolicyDocument}
    {
        "Policy": {
            "PolicyName": "DatadogAWSIntegrationPolicy",
            "CreateDate": "2016-07-DDTHH:MM:SS.923Z",
            "AttachmentCount": 0,
            "IsAttachable": true,
            "PolicyId": "ANPXXXXXXXXXXXXXXXXXX",
            "DefaultVersionId": "v1",
            "Path": "/",
            "Arn": "arn:aws:iam::5XXXXXXXXXXX:policy/DatadogAWSIntegrationPolicy",
            "UpdateDate": "2016-07-DDTHH:MM:SS.923Z"
        }
    }
    

    ARN 설정


  • 위의 create-policy 결과에서 ARN을 ""부분으로 설정 (또는 CLI로 할당)
  • $ ARN="arn:aws:iam::5XXXXXXXXXXX:policy/DatadogAWSIntegrationPolicy" ; echo "ARN: ${ARN}"
    # CLIで代入
    # ARN=$(aws iam list-policies --scope Local | jq -r '.Policies[] | select(.PolicyName == "'${PolicyName}'") | .Arn') ; echo "ARN: ${ARN}"
    ARN: arn:aws:iam::5XXXXXXXXXXX:policy/DatadogAWSIntegrationPolicy
    

    Datadog에서 필요한 정보 얻기



    AccountID


  • 공식에 기재 있음
  • Datadog-AWS 통합

  • $ DDACID=464622532012 ; echo "DatadogAccountID: ${DDACID}"
    DatadogAccountID: 464622532012
    

    ExternalID


  • 설정에서 가져오기
  • Integrations -> AmazonWebService -> Configure


  • Add another account -> AWS External ID


  • 지불된 ID를 대입
  • $ DDEXTID="4fXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ; echo "DatadogExternalID: ${DDEXTID}"
    DatadogExternalID: 4fXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    

    PolicyDocument.json 생성 (치환)


    $ sed -e "s%__DDACCOUNTID__%${DDACID}%" -e "s%__DDEXTERNALID__%${DDEXTID}%" ${AssumeRolePolicyDocument}.base > ${AssumeRolePolicyDocument}
    diff ${AssumeRolePolicyDocument}.base ${AssumeRolePolicyDocument}
    7c7
    <         "AWS": "arn:aws:iam::__DDACCOUNTID__:root"
    ---
    >         "AWS": "arn:aws:iam::464622532012:root"
    12c12
    <           "sts:ExternalId": "__DDEXTERNALID__"
    ---
    >           "sts:ExternalId": "4fXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    

    IAM 역할 만들기


    # IAMロール作成
    $ aws iam create-role --role-name ${RoleName} --assume-role-policy-document file://${AssumeRolePolicyDocument}
    {
        "Role": {
            "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Action": "sts:AssumeRole",
                        "Effect": "Allow",
                        "Principal": {
                            "Service": "ec2.amazonaws.com"
                        }
                    }
                ]
            },
            "RoleId": "AROXXXXXXXXXXXXXXXXXX",
            "CreateDate": "2016-07-DDTHH:MM:SS.552Z",
            "RoleName": "DatadogAWSIntegrationRole",
            "Path": "/",
            "Arn": "arn:aws:iam::9XXXXXXXXXXX:role/DatadogAWSIntegrationRole"
        }
    }
    # ポリシー付与
    $ aws iam attach-role-policy --role-name ${RoleName} --policy-arn ${ARN}
    # ポリシー付与確認
    $ aws iam list-attached-role-policies --role-name ${RoleName}
    {
        "AttachedPolicies": [
            {
                "PolicyName": "DatadogAWSIntegrationPolicy",
                "PolicyArn": "arn:aws:iam::5XXXXXXXXXXX:policy/DatadogAWSIntegrationPolicy"
            }
        ]
    }
    

    IAM 생성 결과


  • Policy


  • IAM role





  • Datadog Integration으로 설정


  • 만든 IAM 역할을 통합으로 설정



  • 결과



    대상 AWS 계정에서 정보를 검색합니다.

    좋은 웹페이지 즐겨찾기