ステップ 1: 送信先を作成する - Amazon CloudWatch ログ

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 1: 送信先を作成する

重要

この手順のステップは、ログデータの受取人アカウントで行われます。

この例では、ログデータの受取側アカウントの AWS アカウント ID は 999999999999 で、ログデータの送信先の AWS アカウント ID は 111111111111 です。

この例では、RecipientStream という名前の Kinesis データストリームストリームを使用して送信先を作成し、次に CloudWatch Logs がそれにデータを書き込むことを許可するロールを作成します。

送信先が作成されると、CloudWatch Logs は受信者アカウントに代わってテストメッセージを宛先に送信します。サブスクリプションフィルターが後でアクティブになると、CloudWatch Logs はソースアカウントに代わってログイベントを宛先に送信します。

送信先を作成するには
  1. 受信者アカウントから、Kinesis データストリームで送信先ストリームを作成します。コマンドプロンプトで、次のように入力します。

    aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
  2. ストリームがアクティブになるまで待ちます。aws kinesis describe-stream コマンドを使用して、StreamDescription.StreamStatus プロパティをチェックできます。さらに、StreamDescription.StreamARN の値は、後で CloudWatch Logs に渡すので書き留めておいてください。

    aws kinesis describe-stream --stream-name "RecipientStream" { "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "RecipientStream", "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "34028236692093846346337460743176EXAMPLE", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE" } } ] } }

    ストリームがアクティブ状態で表示されるまでに 1~2 分かかる場合があります。

  3. ストリームにデータを置くアクセス権限を CloudWatch Logs に付与する IAM ロールを作成します。まず、ファイル ~/TrustPolicyForCWL.json で信頼ポリシーを作成する必要があります。このポリシーの作成にはテキストエディタを使用します。IAM コンソールは使用しないでください。

    このポリシーには、「混乱した代理」のセキュリティ上の問題を防止するための sourceAccountId が指定された aws:SourceArn グローバル条件コンテキストキーが含まれています。最初の呼び出しでソースアカウント ID が不明な場合は、送信元 ARN フィールドに送信先 ARN を指定することをお勧めします。後続の呼び出しでは、送信元 ARN を、最初の呼び出しで取得した実際の送信元 ARN に設定する必要があります。詳細については、「混乱した代理の防止」を参照してください。

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } }, "Action": "sts:AssumeRole" } }
  4. aws iam create-role コマンドを使用して、信頼ポリシーファイルを指定する IAM ロールを作成します。返された Role.Arn 値を書き留めておきます。これも後で CloudWatch Logs に渡されるからです。

    aws iam create-role \ --role-name CWLtoKinesisRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } }, "Principal": { "Service": "logs.amazonaws.com" } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2023-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole" } }
  5. CloudWatch Logs がアカウントで実行できるアクションを定義するアクセス許可ポリシーを作成します。まず、テキストエディタを使用してファイル ~/PermissionsForCWL.json でアクセス許可ポリシーを作成します。

    { "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream" } ] }
  6. aws iam put-role-policy コマンドを使用して、アクセス許可ポリシーをロールに関連付けます。 

    aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
  7. ストリームがアクティブ状態になり、IAM ロールが作成されたら、CloudWatch Logs の送信先を作成できます。

    1. このステップでは、アクセスポリシーと送信先は関連付けられません。送信先の作成を完了するには 2 つのステップを行う必要がありますが、このステップはその最初のステップです。ペイロードで返された DestinationArn を書き留めておいてください。

      aws logs put-destination \ --destination-name "testDestination" \ --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \ --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole" { "DestinationName" : "testDestination", "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole", "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination", "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream" }
    2. ステップ 7a が完了したら、ログデータの受取人アカウントで、アクセスポリシーを送信先に関連付けます。このポリシーでは、送信者アカウントが送信先にアクセスするためのアクセス許可が付与され、logs:PutSubscriptionFilter アクションが指定されている必要があります。

      このポリシーによって、AWS アカウントにログの送信許可が付与されます。ポリシーの中で対象のアカウントを 1 つだけ指定してもよいですが、送信者アカウントが組織のメンバーのものである場合は組織 ID を指定することもできます。このように、ポリシーを 1 つ作成するだけで、1 つの組織内の複数のアカウントが送信先アカウントにログを送信できるように設定できます。

      テキストエディタを使用して ~/AccessPolicy.json という名前のファイルを作成し、以下のいずれかのポリシーステートメントを使用します。

      この最初の例のポリシーでは、組織内で o-1234567890 という ID を持つすべてのアカウントが、受信者アカウントにログを送信することを許可します。

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : "*", "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination", "Condition": { "StringEquals" : { "aws:PrincipalOrgID" : ["o-1234567890"] } } } ] }

      次の例では、ログデータの送信者アカウント (111111111111) がログデータの受信者アカウントにログを送信できるようにします。

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination" } ] }
    3. 前のステップで作成したポリシーを送信先に添付します。

      aws logs put-destination-policy \ --destination-name "testDestination" \ --access-policy file://~/AccessPolicy.json

      このアクセスポリシーでは、ID 111111111111 の AWS アカウントのユーザーは、arn:aws:logs:region:999999999999:destination:testDestination という ARN を持つ送信先に対して、PutSubscriptionFilter を呼び出すことができます。他のユーザーがこの送信先に対して PutSubscriptionFilter を呼び出そうとしても、それは却下されます。

      アクセスポリシーに照らし合わせてユーザーの権限を検証するには、「IAM ユーザーガイド」の「Using Policy Validator」(Policy Validator の使用) を参照してください。

一通り作業が終わり、クロスアカウントアクセス許可に AWS Organizations を使用している場合は、ステップ 2: IAM ロールを作成する (組織を使用している場合のみ) に進みます。組織を使用せずに他のアカウントに直接アクセス許可を付与する場合は、そのステップを飛ばして「ステップ 3: アカウントレベルのサブスクリプションフィルタポリシーを作成する」に進みます。