CloudWatch パイプラインの IAM ポリシーとアクセス許可
このセクションでは、CloudWatch パイプラインの IAM 要件について説明します。アクセス許可は、データソースと統合方法によって異なります。
次の表は、ユースケースに適用される IAM セクションを特定するのに役立ちます。
| ユースケース | 統合メソッド | パイプライン設定のソースタイプ | 必要な IAM セクション |
|---|---|---|---|
| サードパーティー統合 (API Pull) | 保存された認証情報を使用してベンダー API からパイプラインをプルする | microsoft_office365 okta_sso、palo_alto_ngfw、など |
API 発信者のアクセス許可 + サードパーティーソース (API Pull) + リソースポリシー |
| サードパーティー統合 (S3 配信) | ベンダーが S3 バケットにファイルを配信する | s3 |
API 発信者のアクセス許可 + サードパーティーソース (S3 配信) + リソースポリシー |
| S3 からのカスタムデータ | アプリケーションが S3 に書き込み、パイプラインがバケットから読み取る | s3 |
API 発信者のアクセス許可 + S3 からのカスタムデータ + リソースポリシー |
| CloudWatch Logs からのカスタムデータ | アプリケーションが CloudWatch Logs ロググループにログ記録する | cloudwatch_logs |
API 発信者のアクセス許可 + CloudWatch Logs からのカスタムデータ |
| 提供される AWS サービスログ | AWS サービスは CloudWatch Logs にログを配信します (VPC フローログ、Route 53) | cloudwatch_logs |
API 発信者のアクセス許可 + 提供される AWS サービスログ |
注記
S3 ベースのソース (s3) では、パイプラインの作成後にリソースポリシーが必要です。CloudWatch Logs ソース (cloudwatch_logs) の場合はパイプラインの作成後にリソースポリシーは必要ありません。
API 発信者のアクセス許可
CreateTelemetryPipeline を呼び出す IAM プリンシパルには、パイプライン設定で参照されるロールに対する iam:PassRole アクセス許可が必要です。
例 PassRole ポリシーテンプレート
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PassRoleForPipelineSource", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::your-account-id:role/your-source-role", "Condition": { "StringEquals": { "iam:PassedToService": [ "service-principal" ], "iam:AssociatedResourceARN": [ "arn:aws:observabilityadmin:your-region:your-account-id:telemetry-pipeline/*" ] } } } ] }
service-principal を、ユースケースに基づいて次の表の値に置き換えます。
| ユースケース | サービスプリンシパル値 |
|---|---|
| サードパーティー (API Pull) | telemetry-pipelines.observabilityadmin.amazonaws.com |
| サードパーティー (S3 配信) | telemetry-pipelines.observabilityadmin.amazonaws.com |
| S3 からのカスタムデータ | telemetry-pipelines.observabilityadmin.amazonaws.com |
| CloudWatch Logs からのカスタムデータ | logs.amazonaws.com |
| 提供される AWS サービスログ | logs.amazonaws.com |
注記
Condition ブロックは推奨されますが、オプションです。これがないと、ロールが任意のサービスに渡される可能性があります。
パイプラインルールのアクセス許可 (CloudWatch Logs ソースのみ)
ソースとして cloudwatch_logs を使用する場合、API 発信者にはパイプラインルールオペレーションのアクセス許可も必要です。logs:PutPipelineRule アクセス許可は CreateTelemetryPipeline および UpdateTelemetryPipeline オペレーションに必須です。logs:DeletePipelineRule アクセス許可は DeleteTelemetryPipeline オペレーションに必須です。
例 CloudWatch Logs パイプラインルールの IAM ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PipelineRuleForCloudWatchLogs", "Effect": "Allow", "Action": [ "logs:PutPipelineRule", "logs:DeletePipelineRule" ], "Resource": "*" } ] }
ソースロールポリシー
各パイプラインには、サービスがデータを読み取るために引き受ける専用の IAM ロールが必要です。以下のサブセクションでは、各ユースケースの完全なポリシー (アクセス許可と信頼) について説明します。
サードパーティーソース (API Pull)
このセクションは、Microsoft Office 365、Microsoft Entra ID、Okta SSO、Palo Alto NGFW、および AWS Secrets Manager に認証情報を保存するその他のベンダー API 統合に適用されます。
アクセス許可ポリシー
以下のポリシーでは、ロールが保存済みの API 認証情報を取得することを許可します。
例 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" } ] }
注記
kms:Decrypt ステートメントは、Secrets Manager のシークレットがカスタマーマネージド KMS キーで暗号化されている場合にのみ必要です。
信頼ポリシー
例 API Pull ソースの信頼ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
API Pull パイプラインの IAM セットアップを完了する
次の例は、サードパーティー API Pull パイプラインをエンドツーエンドで作成する上で必要なすべての IAM ポリシーを示しています。
発信者 ID ポリシー — CreateTelemetryPipeline を呼び出すプリンシパルにアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateApiPullPipeline", "Effect": "Allow", "Action": [ "observabilityadmin:CreateTelemetryPipeline", "iam:PassRole" ], "Resource": "*" } ] }
ソースロールのアクセス許可ポリシー — パイプラインが引き受けるロールにアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "SecretsManagerAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:your-region:your-account-id:secret:your-secret-name*" } ] }
ソースロールの信頼ポリシー:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注記
パイプラインを作成したら、5 分以内にリソースポリシーも作成する必要があります。「リソースポリシー」を参照してください。
注記
本番稼働用の場合は、「API 発信者のアクセス許可」に示されている条件キーを使用して iam:PassRole をスコープダウンします。シークレットがカスタマーマネージド KMS キーを使用している場合は、ソースロールのアクセス許可ポリシーに kms:Decrypt を追加します。
サードパーティーソース (S3 配信)
このセクションは、S3 バケットにログファイルを配信するサードパーティーベンダー (CrowdStrike Falcon、Wiz、Cisco Umbrella など) に適用されます。
アクセス許可ポリシー
次のポリシーでは、ロールが S3 からオブジェクトを読み取って SQS 通知を使用することを許可します。
例 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" } ] }
注記
kms:Decrypt ステートメントは、S3 バケットまたは SQS キューが暗号化にカスタマーマネージド KMS キーを使用している場合にのみ必要です。
信頼ポリシー
例 S3 配信ソースの信頼ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
S3 配信パイプラインの IAM セットアップを完了する
次の例は、S3 配信パイプラインをエンドツーエンドで作成する上で必要なすべての IAM ポリシーを示しています。
発信者 ID ポリシー — CreateTelemetryPipeline を呼び出すプリンシパルにアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateS3Pipeline", "Effect": "Allow", "Action": [ "observabilityadmin:CreateTelemetryPipeline", "iam:PassRole" ], "Resource": "*" } ] }
ソースロールのアクセス許可ポリシー — パイプラインが引き受けるロールにアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3Access", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::your-bucket-name/*" }, { "Sid": "SqsAccess", "Effect": "Allow", "Action": [ "sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:ChangeMessageVisibility" ], "Resource": "arn:aws:sqs:your-region:your-account-id:your-queue-name" } ] }
ソースロールの信頼ポリシー:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "telemetry-pipelines.observabilityadmin.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注記
パイプラインを作成したら、5 分以内にリソースポリシーも作成する必要があります。「リソースポリシー」を参照してください。
注記
本番稼働用の場合は、「API 発信者のアクセス許可」に示されている条件キーを使用して iam:PassRole をスコープダウンします。S3 バケットまたは SQS キューがカスタマーマネージド KMS キーを使用している場合は、ソースロールのアクセス許可ポリシーに kms:Decrypt を追加します。
S3 からのカスタムデータ
このセクションは、S3 バケットにログファイルを書き込む独自のアプリケーションまたはインフラストラクチャに適用されます。
IAM セットアップは サードパーティーソース (S3 配信) と同じです。同じアクセス許可ポリシーと信頼ポリシーを使用します。パイプラインは、誰がデータを書き込んだかに関係なく、SQS イベント通知を介してバケットから読み取ります。
CloudWatch Logs からのカスタムデータ
このセクションは、CloudWatch Logs ロググループ (Lambda 関数、ECS コンテナ、カスタム EC2 アプリケーションなど) への独自のアプリケーションログ記録に適用されます。
アクセス許可ポリシー
次のポリシーでは、ロールが指定されたロググループからのログを処理することを許可します。
例 CloudWatch Logs ソースの IAM ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "logs-processing-access", "Effect": "Allow", "Action": [ "logs:processWithPipeline" ], "Resource": [ "arn:aws:logs:your-region:your-account-id:log-group:your-log-group-01", "arn:aws:logs:your-region:your-account-id:log-group:your-log-group-02" ] } ] }
このアクセス許可の範囲を縮小するには、logs:data_source_name および logs:data_source_type 条件キーを使用して、変換を呼び出すことができるパイプラインソースを制限します。logs:data_source_name 値はパイプライン設定の data_source_name に対応し、logs:data_source_type はパイプライン設定の data_source_type に対応します。
例 CloudWatch Logs ソースのアクセス許可ポリシー (条件キーでスコープダウン)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowProcessWithPipelineScopedDown", "Effect": "Allow", "Action": "logs:ProcessWithPipeline", "Resource": "arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name", "Condition": { "StringEquals": { "aws:ResourceAccount": "your-account-id", "logs:data_source_name": "your-source-name", "logs:data_source_type": "your-source-type" } } } ] }
注記
CloudWatch Logs ソースの IAM ロールには、信頼ポリシー (logs.amazonaws.com がロールを引き受けることを許可) とアクセス許可ポリシー (logs:ProcessWithPipeline を付与) の両方が必要です。両方のポリシーがないと、CloudWatch パイプラインは取り込み中にログイベントを変換できません。
信頼ポリシー
例 CloudWatch Logs ソースの信頼ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注記
CloudWatch Logs ソースパイプラインにはリソースポリシーは必要ありません。
CloudWatch Logs パイプラインの IAM セットアップを完了する
次の例は、CloudWatch Logs パイプラインをエンドツーエンドで作成する上で必要なすべての IAM ポリシーを示しています。
発信者 ID ポリシー — CreateTelemetryPipeline を呼び出すプリンシパルにアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateLogsPipeline", "Effect": "Allow", "Action": [ "observabilityadmin:CreateTelemetryPipeline", "logs:PutPipelineRule", "logs:DeletePipelineRule", "iam:PassRole" ], "Resource": "*" } ] }
ソースロールのアクセス許可ポリシー — パイプラインが引き受けるロールにアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LogsProcessing", "Effect": "Allow", "Action": [ "logs:processWithPipeline" ], "Resource": [ "arn:aws:logs:your-region:your-account-id:log-group:your-log-group" ] } ] }
ソースロールの信頼ポリシー:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注記
本番稼働用の場合は、「API 発信者のアクセス許可」に示されている条件キーを使用して iam:PassRole をスコープダウンします。
提供される AWS サービスログ
このセクションは、VPC フローログ、Route 53 クエリログ、その他の AWS の提供されるログタイプなど、CloudWatch Logs に配信される AWS サービスログに適用されます。
IAM セットアップは CloudWatch Logs からのカスタムデータ と同じです。同じアクセス許可ポリシー (ロググループに範囲が縮小された logs:processWithPipeline) と同じ信頼ポリシー (logs.amazonaws.com) を使用します。
これは cloudwatch_logs ソースタイプを使用するため、発信者には logs:PutPipelineRule および logs:DeletePipelineRule アクセス許可も必要です。「パイプラインルールのアクセス許可 (CloudWatch Logs ソースのみ)」を参照してください。
リソースポリシー
CloudWatch Logs リソースポリシーは、S3 ベースのソースと Secrets Manager ベースのソース (サードパーティー統合) に必要です。CloudWatch Logs ソース (カスタムデータまたは提供されるログ) にはリソースポリシーは必要ありません。
CreateTelemetryPipeline を呼び出した後、パイプライン ARN を受け取ります。ユーザーは 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 パイプラインの 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 \ --regionyour-region\ --policy-name "resourceArn=arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:*" \ --policy-document file://policy.json
既存のポリシーとマージする方法
リソースポリシーが既に存在する場合は、ポリシードキュメント内の既存の Statement 配列に新しいステートメントを追加し、マージされたファイルで put-resource-policy を再度呼び出します。
-
既存のポリシーを取得します。
aws logs describe-resource-policies \ --resource-arn arn:aws:logs:your-region:your-account-id:log-group:your-log-group-name:* -
新しいステートメントを既存の
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" } } } ] } -
ポリシーを更新します。
aws logs put-resource-policy \ --regionyour-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:*
次のプレースホルダーを置き換えます。
-
your-region– AWS リージョン (例: us-east-1) -
your-account-id– 12 桁の AWS アカウント ID -
your-log-group-name– CloudWatch Logs ロググループ名 -
your-pipeline-id– (CreateTelemetryPipelineによって返される) テレメトリパイプライン ID
パイプライン条件キー
CloudWatch パイプラインは、パイプラインを作成できるユーザーとソースロールを引き受けることができるアカウントを制限できる IAM 条件キーをサポートしています。これらの条件キーを使用して、組織全体にガバナンスポリシーを適用します。
CreateTelemetryPipeline の条件
ID ポリシーでこれらの条件キーを使用し、プリンシパルが作成できるパイプラインを制御します。
observabilityadmin:SourceType-
パイプラインの作成を特定のソースタイプに制限します。サポートされている値は、
cloudwatch_logs、s3、microsoft_office365、okta_sso、palo_alto_ngfwです。
例パイプライン作成をソースタイプ別に制限する
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPipelineCreationForSpecificSourceType", "Effect": "Allow", "Action": "observabilityadmin:CreateTelemetryPipeline", "Resource": "*", "Condition": { "StringEquals": { "observabilityadmin:SourceType": "cloudwatch_logs" } } } ] }
ソースロールの信頼ポリシー条件
ソースロールの信頼ポリシーでこれらの条件キーを使用し、ロールを引き受けることができるアカウントを制限します。これにより、サービスが別のアカウントに代わって動作する可能性のある混乱した代理攻撃を防ぐことができます。
aws:SourceAccount-
特定の AWS アカウントから送信されるリクエストにロールの引き受けを制限します。
aws:SourceArn-
特定のリソース ARN (ロググループなど) から送信されるリクエストにロールの引き受けを制限します。
例 SourceAccount 条件を使用した信頼ポリシー (CloudWatch Logs ソース)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "your-account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:your-region:your-account-id:log-group:*" } } } ] }
AI アシストプロセッサ設定のアクセス許可
CloudWatch パイプラインコンソールで AI アシストプロセッサ設定を使用するには、IAM プリンシパルに logs:GeneratePipeline アクセス許可が必要です。このアクセス許可は、自然言語の説明からのプロセッサ設定の生成を許可します。
例 AI アシストプロセッサ設定の IAM ポリシー
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGeneratePipeline", "Effect": "Allow", "Action": "logs:GeneratePipeline", "Resource": "*" } ] }