CloudWatch 파이프라인 IAM 정책 및 권한 - Amazon CloudWatch

CloudWatch 파이프라인 IAM 정책 및 권한

이 섹션에서는 API 호출자에 대한 권한, 소스별 정책, 신뢰 관계, 리소스 정책을 비롯하여 CloudWatch 파이프라인에 대한 세부적인 IAM 요구 사항을 설명합니다.

API 호출자 권한

CreateTelemetryPipeline API를 호출하는 파이프라인 구성에 지정된 모든 역할(예: S3 소스 역할, Secrets Manager 액세스 역할 또는 CloudWatch Logs 소스 역할)에는 역할을 전달할 수 있는 특정한 권한이 있어야 합니다.

PassRole 권한

파이프라인 구성에 지정된 모든 역할(S3 소스 역할, Secrets Manager 액세스 역할 또는 CloudWatch Logs 소스 역할)에 필요한 권한입니다.

예 S3 소스에 대한 IAM 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForS3Source", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-s3-source-role" } ] }
예 Secrets Manager 소스에 대한 IAM 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForSecretsManagerSource", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-secrets-manager-role" } ] }
예 CloudWatch Logs에 대한 IAM 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForCloudWatchLogsSource", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-cloudwatch-logs-role"" } ] }

파이프라인 규칙 권한

생성/업데이트 작업(logs:PutPipelineRule) 및 삭제 작업(logs:DeletePipelineRule)에 cloudwatch_logs 소스를 사용할 경우 역할에는 이러한 작업을 수행할 수 있는 권한도 있어야 합니다.

예 CloudWatch Logs 파이프라인 규칙에 대한 IAM 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PipelineRuleForCloudWatchLogs", "Effect": "Allow", "Action": [ "logs:PutPipelineRule", "logs:DeletePipelineRule" ], "Resource": "*" } ] }

조건 키를 사용하여 범위 축소

권한 정책의 범위를 원격 분석 파이프라인으로 좁히려면 아래 예제와 같이 조건 키를 지정하면 됩니다.

예 S3 소스에 대한 IAM 정책(기본)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForS3Source", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-s3-source-role" } ] }
예 S3 소스에 대한 IAM 정책(조건 키를 사용하여 범위 축소)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForS3Source", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-s3-source-role", "Condition": { "StringEquals": { "iam:PassedToService": [ "telemetry-pipelines.observabilityadmin.amazonaws.com" ], "iam:AssociatedResourceARN": [ "arn:aws:observabilityadmin:your-region:your-account-id:telemetry-pipeline/*" ] } } } ] }
예 Secrets Manager 소스에 대한 IAM 정책(기본)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForSecretsManagerSource", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-secrets-manager-role" } ] }
예 Secrets Manager 소스에 대한 IAM 정책(조건 키를 사용하여 범위 축소)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForSecretsManagerSource", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-secrets-manager-role", "Condition": { "StringEquals": { "iam:PassedToService": [ "telemetry-pipelines.observabilityadmin.amazonaws.com" ], "iam:AssociatedResourceARN": [ "arn:aws:observabilityadmin:your-region:your-account-id:telemetry-pipeline/*" ] } } } ] }
예 CloudWatch Logs 소스에 대한 IAM 정책(조건 키를 사용하여 범위 축소)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForCloudWatchLogsSource", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-cloudwatch-logs-role", "Condition": { "StringEquals": { "iam:PassedToService": [ "logs.amazonaws.com" ], "iam:AssociatedResourceARN": [ "arn:aws:observabilityadmin:your-region:your-account-id:telemetry-pipeline/*" ] } } } ] }

소스별 IAM 정책

각 데이터 소스에 액세스하려면 서로 다른 소스 유형마다 특정한 IAM 권한이 필요합니다.

CloudWatch Logs 소스

CloudWatch Logs 소스의 경우, 파이프라인 구성에 지정된 모든 IAM 역할은 logs.amazonaws.com과의 신뢰 관계가 있어야 합니다.

예 CloudWatch Logs 소스에 대한 IAM 역할 신뢰 정책(기본)
{ "Version": "2012-10-17", "Statement": [ { ""Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

S3 소스

S3 소스의 경우, 고객은 S3 객체 및 SQS 대기열에 액세스할 수 있는 권한이 있는 IAM 역할을 제공해야 합니다.

예 S3 소스에 대한 IAM 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3-access", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::your-bucket-name/*" }, { "Sid": "sqs-access", "Effect": "Allow", "Action": [ "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:ChangeMessageVisibility" ], "Resource": "arn:aws:sqs:your-region:your-account-id:your-queue-name" }, { "Sid": "kms-access", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:your-region:your-account-id:key/your-key-id", "Condition": { "Comment": "Only required if S3 buckets and/or SQS queue uses KMS encryption" } } ] }

AWS Secrets Manager를 사용하는 소스

AWS Secrets Manager(Microsoft Office 365, Microsoft Entra ID, Palo Alto NGFW)를 참조하는 소스의 경우, 고객은 Secrets Manager에 대한 액세스 권한이 있는 IAM 역할을 제공해야 합니다.

예 Secrets Manager 소스에 대한 IAM 정책
{ "Version": "2012-10-17", "Statement": [ { "Sid": "secrets-manager-access", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:your-region:your-account-id:secret:your-secret-name*" }, { "Sid": "kms-access", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:your-region:your-account-id:key/your-key-id", "Condition": { "Comment": "Only required if Secrets Manager uses KMS encryption" } } ] }

신뢰 관계

파이프라인 구성에 지정된 모든 IAM 역할은 CloudWatch 파이프라인 서비스 보안 주체와의 신뢰 관계가 있어야 합니다.

파이프라인 역할 신뢰 정책

모든 파이프라인 역할은 telemetry-pipelines.observabilityadmin.amazonaws.com 서비스 보안 주체를 신뢰해야 합니다.

예파이프라인 역할에 대한 신뢰 정책
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

리소스 정책

CloudWatch Logs 리소스 정책은 로그 그룹에 쓰기 작업을 수행하는 파이프라인에 필요하며, cloudwatch_logs 소스를 사용하는 파이프라인은 예외입니다.

CloudWatch Logs 리소스 정책

CreateTelemetryPipeline API를 직접적으로 호출하면 파이프라인 ARN을 수신하게 됩니다. 소스가 cloudwatch_logs가 아닌 파이프라인의 경우, 고객은 logs:PutResourcePolicy를 직접적으로 호출하여 CloudWatch 파이프라인 서비스 보안 주체가 기존의 구성된 로그 그룹에 쓰기 작업을 할 수 있도록 해야 합니다.

타이밍 제약 조건

파이프라인 ARN을 수신한 후 리소스 정책을 생성할 수 있는 기간이 제한되어 있습니다(5분 미만). 정책이 적용되기 전에 파이프라인이 활성화되면 데이터가 삭제됩니다.

예 logs:PutResourcePolicy 요청
{ "policyName": "resourceArn=arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:*", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:observabilityadmin:your-region:your-account-id:telemetry-pipeline/your-pipeline-id" } } } ] } }

리소스 정책 관리

이 설명서에서는 AWS CLI를 사용하여 원격 분석 파이프라인에 대한 CloudWatch Logs 리소스 정책을 생성하거나 업데이트하는 데 필요한 단계를 제공합니다.

기존 정책을 다음과 같이 확인합니다.

aws logs describe-resource-policies --resource-arn arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:*

이렇게 하면 로그 그룹에 연결된 모든 기존 리소스 정책이 반환됩니다. 로그 그룹과 이미 연결되어 있을 수도 있는 정책을 찾습니다.

리소스 정책이 없는 경우 새 정책을 생성합니다.

aws logs put-resource-policy \ --region <YOUR-REGION> \ --policy-name "resourceArn": "arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:*"\ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:observabilityadmin:your-region:your-account-id:telemetry-pipeline/your-pipeline-id" } } } ] }'

다음과 같이 자리 표시자를 바꿉니다.

  • your-region - 사용자의 AWS 리전(예: us-east-1)

  • your-account-id - 사용자의 12자리 숫자로 된 AWS 계정 ID

  • your-log-group-name - 사용자의 CloudWatch Logs 로그 그룹 이름

  • your-pipeline-id - 사용자의 원격 분석 파이프라인 ID

리소스 정책이 이미 있는 경우 새 문을 해당 정책과 병합합니다.

  1. 기존 정책을 검색합니다.

    aws logs describe-resource-policies --resource-arn arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:*
  2. existing-policy.json을 연 다음, 기존 Statement 배열에 새 문을 추가합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "existing-service.amazonaws.com" }, "Action": [ "logs:SomeAction" ] }, { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:observabilityadmin:your-region:your-account-id:telemetry-pipeline/your-pipeline-id" } } } ] }
  3. 정책을 업데이트합니다.

    aws logs put-resource-policy \ --region your-region \ --policy-name resourceArn=arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:* \ --policy-document file://existing-policy.json

정책이 생성되거나 업데이트되었는지 확인합니다.

aws logs describe-resource-policies --resource-arn arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:*