

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