

# CloudWatch 파이프라인 IAM 정책 및 권한
<a name="pipeline-iam-reference"></a>

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

## API 호출자 권한
<a name="api-caller-permissions"></a>

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

**PassRole 권한**

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

**Example 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}}"
        }
    ]
}
```

**Example 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}}"
        }
    ]
}
```

**Example 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` 소스를 사용할 경우 역할에는 이러한 작업을 수행할 수 있는 권한도 있어야 합니다.

**Example CloudWatch Logs 파이프라인 규칙에 대한 IAM 정책**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PipelineRuleForCloudWatchLogs",
            "Effect": "Allow",
            "Action": [
                "logs:PutPipelineRule",
                "logs:DeletePipelineRule"
            ],
            "Resource": "*"
        }
    ]
}
```

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

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

**Example 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}}"
        }
    ]
}
```

**Example 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/*"
                ]
              }
            }
        }
    ]
}
```

**Example 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}}"
        }
    ]
}
```

**Example 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/*"
              ]
            }
          }
        }
    ]
}
```

**Example 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/*"
              ]
            }
          }
        }
    ]
}
```

## 파이프라인 조건 키
<a name="pipeline-condition-keys"></a>

CloudWatch 파이프라인은 로그 소스 이름 및 유형에 따라 파이프라인 생성이 가능한 사용자를 제한할 수 있는 IAM 조건 키를 지원합니다. 이러한 조건 키를 사용하여 조직 전반에 거버넌스 정책을 적용합니다.사용 가능한 조건 키

`observabilityadmin:SourceName`  
파이프라인 생성을 특정 로그 소스 이름으로 제한합니다.

`observabilityadmin:SourceType`  
파이프라인 생성을 특정 로그 소스 유형으로 제한합니다.

**Example 소스 유형 기준 파이프라인 생성을 제한하는 IAM 정책**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPipelineCreationForSpecificSourceType",
            "Effect": "Allow",
            "Action": "observabilityadmin:CreateTelemetryPipeline",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "observabilityadmin:SourceType": "cloudwatch_logs"
                }
            }
        }
    ]
}
```

**Example 소스 이름 기준 파이프라인 생성을 제한하는 IAM 정책**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowPipelineCreationForSpecificSource",
            "Effect": "Allow",
            "Action": "observabilityadmin:CreateTelemetryPipeline",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "observabilityadmin:SourceName": "{{your-source-name}}"
                }
            }
        }
    ]
}
```

## AI 지원 프로세서 구성 권한
<a name="ai-assisted-permissions"></a>

CloudWatch 파이프라인 콘솔에서 AI 지원 프로세서 구성을 사용하려면 IAM 보안 주체에 `logs:GeneratePipeline` 권한이 있어야 합니다. 이 권한은 자연어 설명에서 프로세서 구성을 생성할 수 있는 권한을 부여합니다.

**Example AI 지원 프로세서 구성을 위한 IAM 정책**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowGeneratePipeline",
            "Effect": "Allow",
            "Action": "logs:GeneratePipeline",
            "Resource": "*"
        }
    ]
}
```

## 소스별 IAM 정책
<a name="source-specific-iam-policies"></a>

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

**CloudWatch Logs 소스**

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

**Example CloudWatch Logs 소스에 대한 IAM 역할 신뢰 정책(기본)**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            ""Effect": "Allow",
            "Principal": {
                "Service": "logs.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

**S3 소스**

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

**Example 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 역할을 제공해야 합니다.

**Example 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"
            }
        }
    ]
}
```

## 신뢰 관계
<a name="trust-relationships"></a>

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

**파이프라인 역할 신뢰 정책**

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

**Example 파이프라인 역할에 대한 신뢰 정책**  

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

## 리소스 정책
<a name="resource-policies"></a>

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

**CloudWatch Logs** 리소스 정책

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

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

**Example 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}}"
                    }
                }
            }
        ]
    }
}
```

## 리소스 정책 관리
<a name="managing-resource-policies"></a>

 이 설명서에서는 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}}:*
   ```

1.  `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}}"
                   }
               }
           }
       ]
   }
   ```

1. 정책을 업데이트합니다.

   ```
   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}}:*
```