AWSリージョンにアカウントScanner Stackをデプロイしたら、クロスリージョンScannerを許可するようにAmazon EventBridgeを設定する必要があります。
![]() |
注意デプロイされたアカウント検索Scanner Stackでは、EnableCrossAccountScanningパラメータがtrueに設定されている必要があります。
|
AWS Web Management Consoleを使用する
地域ごと
S3 Object Createdイベントを、アカウントScanner StackがデプロイされたリージョンのEventBridgeバスに送信するルールを作成します。
手順
- Amazon EventBridgeコンソールを開きます。
- [Rules]に移動して、[Create rule]をクリックしてください。
- ルールに名前を付け、[Rule with an event pattern]タイプを選択します。その後、[Next]をクリックします。
- イベントソースで[AWS events or EventBridge partner events]を選択します。
- [イベントパターン] パネルまで下にスクロールします。次のように選択します:
- イベントソースの[AWS services]
- [Simple Storage Service (S3)]はAWSサービス内
- イベントタイプの[Amazon S3 Event Notification]
- [Specific event(s)]
- [Object Created] イベント
- [Next]をクリックしてください。
- [対象の種類] で [[EventBridge event bus]] を選択し、[対象の種類] で [[Event bus in a different account or Region]] を選択します。アカウントScanner Stackがデプロイされたリージョンの初期設定のEventBridgeバスのARNを入力します。
- [Next]をクリックしてください。
- (オプション) この新しいルールのタグを設定し、[[Next]] をクリックします。
- ルール設定を確認し、[[Create rule]] をクリックします。
バケットごと
[Send notifications to Amazon EventBridge for all events in this bucket]機能をオンにして、アカウントのScanner StackでスキャナーLambda関数をトリガーします。
手順
- 追加するS3バケットで、[[Properties]] タブに移動し、[ [Amazon EventBridge] ] パネルまでスクロールします。 [[Edit]] をクリックします。
- この機能をオンにして、[[Save changes]] をクリックします。
- アカウントScanner Stackによるオブジェクトの検索とタグ付けを許可するようにバケットポリシーを設定します。
If the S3 bucket is in the same AWS account as the account scanner stack, you can skip this step. {: .note }
- [Permissions]タブに移動し、[Bucket policy]パネルで[Edit]をクリックします。
- 以下のJSONを貼り付け、正しいARNとバケット名を入力します。 [[Save changes]] をクリックします。
次に進む前に
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowScannerToScanFile", "Effect": "Allow", "Principal": { "AWS": "<SCANNER_LAMBDA_EXECUTION_ROLE>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*" }, { "Sid": "AllowPostScanActionLambdaToTagResult", "Effect": "Allow", "Principal": { "AWS": "<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>" }, "Action": "s3:PutObjectTagging", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*" }, { "Sid": "PostScanActionLambdaQuarantineRequire-1", "Effect": "Allow", "Principal": { "AWS": "<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*" }, { "Sid": "PostScanActionLambdaQuarantineRequire-2", "Effect": "Allow", "Principal": { "AWS": "<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>" }, "Action": "s3:GetObjectTagging", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*" }, { "Sid": "PostScanActionLambdaQuarantineRequire-3", "Effect": "Allow", "Principal": { "AWS": "<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>" }, "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::<BUCKET_NAME>/*" } ] }
各要素の説明は次のとおりです。
- SCANNER_LAMBDA_EXECUTION_ROLEは、アカウントScanner Stack内のScannerLambda関数のARNに置き換えられます。
- POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLEは、アカウントScanner Stackの検索後処理のLambda関数のARNに置き換えられます。 BUCKET_NAMEは、検索バケットの名前に置き換えられます。
いくつかのファイルをアップロードして検索結果を表示することで、Scannerをテストできます。
AWS CLIを使用する
地域ごと
IAMロールと、アカウントScanner StackがデプロイされたリージョンのEventBridgeバスにS3 Object Createdイベントを送信するルールを作成する必要があります。
1. ルールの呼び出しに使用するIAMロールを作成します。
aws iam create-role --role-name <ROLE_FOR_EVENT_BRIDGE_RULE> --assume-role-policy-document "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\": \"events.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}" aws iam put-role-policy --role-name <ROLE_FOR_EVENT_BRIDGE_RULE> --policy-name <POLICY_NAME> --policy-document "{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["events:PutEvents"],"Resource":["<DEFAULT_EVENT_BRIDGE_BUS_ARN_IN_SCANNER_REGION>"]}]}"
各要素の説明は次のとおりです。
- ROLE_FOR_EVENT_BRIDGE_RULEは、新しいIAMロールの名前に置き換えられます。任意の名前を使用できます。例:
eventbridge-bus-forward-to-another-default-bus-role
- POLICY_NAMEは、IAMポリシーの名前に置き換えられます。任意の名前を使用できます。例:
policy-allow-eventbridge-bus-put-events
- DEFAULT_EVENT_BRIDGE_BUS_ARN_IN_SCANNER_REGIONは、アカウントScanner StackのリージョンのデフォルトバスのARNに置き換えられます。
2. このリージョンのS3イベント通知を、アカウントScanner Stackがデプロイされているリージョンに転送するルールを作成します。
aws events put-rule --name <EVENT_BRIDGE_RULE_NAME> --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"Object
Created\"]}"
aws events put-targets --rule <EVENT_BRIDGE_RULE_NAME> --targets "Id"="1","Arn"="<DEFAULT_EVENT_BRIDGE_BUS_ARN_IN_SCANNER_REGION>","RoleArn"="<ROLE_ARN_FOR_EVENT_BRIDGE_RULE>"
各要素の説明は次のとおりです。
-
EVENT_BRIDGE_RULE_NAMEは、新しいEventBridgeルールの名前に置き換えられます。任意の名前を使用できます。例: rule-to-forward-events-to-another-region
-
DEFAULT_EVENT_BRIDGE_BUS_ARN_IN_SCANNER_REGIONは、アカウントScanner StackのリージョンのデフォルトバスのARNに置き換えられます。
-
ROLE_FOR_EVENT_BRIDGE_RULEは、前の手順で作成したIAMロールの名前に置き換えられます。
バケットごと
1. アカウントのScanner StackでスキャナーLambda関数をトリガーするには、[Send notifications to Amazon EventBridge for all events in this bucket]機能をオンにします。
aws s3api create-bucket --bucket <SCAN_BUCKET_NAME> --create-bucket-configuration
LocationConstraint=<BUCKET_REGION>
aws s3api put-bucket-notification-configuration --bucket <SCAN_BUCKET_NAME> --notification-configuration='{
"EventBridgeConfiguration": {} }'
各要素の説明は次のとおりです。
-
SCAN_BUCKET_NAMEは、新しい検索バケットの名前に置き換えられます。任意の名前を使用できます。例: scan-bucket-in-us-east-1
-
BUCKET_REGIONはAWSリージョンの名前に置き換えられます。例: us-east-2
2. アカウントScanner Stackによるオブジェクトの検索とタグ付けを許可するようにバケットポリシーを設定します。
![]() |
注意S3バケットがアカウントScanner Stackと同じAWSアカウントにある場合は、この手順を省略できます。
|
aws s3api put-bucket-policy --bucket <SCAN_BUCKET_NAME> --policy "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":
\"AllowScannerToScanFile\",\"Effect\": \"Allow\",\"Principal\": {\"AWS\": \"<SCANNER_LAMBDA_EXECUTION_ROLE>\"},\"Action\":
\"s3:GetObject\",\"Resource\": \"arn:aws:s3:::<BUCKET_NAME>/*\"},{\"Sid\": \"AllowPostScanActionLambdaToTagResult\",\"Effect\":
\"Allow\",\"Principal\": {\"AWS\": \"<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>\"},\"Action\":
\"s3:PutObjectTagging\",\"Resource\": \"arn:aws:s3:::<BUCKET_NAME>/*\"},{\"Sid\":
\"PostScanActionLambdaQuarantineRequire-1\",\"Effect\": \"Allow\",\"Principal\": {\"AWS\":
\"<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>\"},\"Action\": \"s3:GetObject\",\"Resource\":
\"arn:aws:s3:::<BUCKET_NAME>/*\"},{\"Sid\": \"PostScanActionLambdaQuarantineRequire-2\",\"Effect\":
\"Allow\",\"Principal\": {\"AWS\": \"<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>\"},\"Action\":
\"s3:GetObjectTagging\",\"Resource\": \"arn:aws:s3:::<BUCKET_NAME>/*\"},{\"Sid\":
\"PostScanActionLambdaQuarantineRequire-3\",\"Effect\": \"Allow\",\"Principal\": {\"AWS\":
\"<POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLE>\"},\"Action\": \"s3:DeleteObject\",\"Resource\":
\"arn:aws:s3:::<BUCKET_NAME>/*\"}]}"
各要素の説明は次のとおりです。
- SCAN_BUCKET_NAMEは、前の手順で作成した検索バケットの名前に置き換えられます。
- SCANNER_LAMBDA_EXECUTION_ROLEは、アカウントScanner Stack内のScannerLambda関数のARNに置き換えられます。
- POST_SCAN_ACTION_LAMBDA_EXECUTION_ROLEは、アカウントScanner Stackの検索後処理のLambda関数のARNに置き換えられます。
サーバ側の暗号化を有効にする
アカウントScanner Stackとは別のAWSアカウントにAWS KMSキーをデプロイする場合にのみ、これらの手順が必要です。
SQSキューの場合
アカウントScanner StackでSQSキューのサーバ側の暗号化を有効にするには、AWSコンソールでSQSキューの暗号化に使用して、KMSキーのキーポリシーを更新する必要があります。
1. Scanner、scanner dead-letter、およびpost-scan-action dead-letter Lambda関数の実行ロールのARNを取得します。
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
ScannerExecutionRoleARN].OutputValue[]'
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
ScannerDeadLetterExecutionRoleARN].OutputValue[]'
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
PostScanActionDeadLetterExecutionRoleARN].OutputValue[]'
2. キーポリシーに2つの[Statement]オブジェクトを追加します。
{ "Sid": "Grant encrypt permission", "Effect": "Allow", "Principal": { "AWS": <ScannerExecutionRoleARN>
}, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
{ "Sid": "Grant decrypt permission", "Effect": "Allow", "Principal": { "AWS": [ <ScannerDeadLetterExecutionRoleARN>,
<PostScanActionDeadLetterExecutionRoleARN> ] }, "Action": [ "kms:Decrypt" ], "Resource":
"*" }
3. キーポリシーを更新します。
aws kms put-key-policy --policy-name key-policy --key-id <KMS_KEY_ID> --policy file://key_policy.json
SNSトピックスの場合
アカウントScanner StackでSNSトピックのサーバ側の暗号化を有効にするには、AWSコンソールでSNSトピックの暗号化に使用するKMSキーのキーポリシーを更新する必要があります。
1. Scanner、scanner dead-letter、およびpost-scan-action Lambda関数の実行ロールのARNを取得します。
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
ScannerExecutionRoleARN].OutputValue[]'
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
ScannerDeadLetterExecutionRoleARN].OutputValue[]'
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
PostScanActionExecutionRoleARN].OutputValue[]'
2. キーポリシーに[Statement]オブジェクトを1つ追加します。
{ "Sid": "Grant encrypt permission", "Effect": "Allow", "Principal": { "AWS": [ <ScannerExecutionRoleARN>,
<ScannerDeadLetterExecutionRoleARN>, <PostScanActionExecutionRoleARN> ] }, "Action":
[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
3. キーポリシーを更新します。
aws kms put-key-policy --policy-name key-policy --key-id <KMS_KEY_ID> --policy file://key_policy.json
バケット用
バケットのサーバ側の暗号化を有効にするには、AWSコンソールでバケットの暗号化に使用するKMSキーのキーポリシーを更新する必要があります。
1. Scanner、scanner dead-letter、およびpost-scan-action Lambda関数の実行ロールのARNを取得します。
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
ScannerExecutionRoleARN].OutputValue[]'
aws cloudformation describe-stacks --stack-name <ACCOUNT_SCANNER_STACK_NAME> --query
'Stacks[*].Outputs[?OutputKey==
PostScanActionExecutionRoleARN].OutputValue[]'
2. キーポリシーに[Statement]オブジェクトを1つ追加します。
{ "Sid": "Grant encrypt permission", "Effect": "Allow", "Principal": { "AWS": [ <ScannerExecutionRoleARN>,
<PostScanActionExecutionRoleARN> ] }, "Action": [ "kms:Decrypt" ], "Resource": "*"
}
3. キーポリシーを更新します。
aws kms put-key-policy --policy-name key-policy --key-id <KMS_KEY_ID> --policy file://key_policy.json