4ヶ月ぶりのブログとなります!直近はセキュリティ周りの基盤を設計していまして、Amazon Inspectorでクロスアカウント先のS3に調査結果をCSVでエクスポートしようとしたら久しぶりにドハマリしました。今回初めてクロスアカウントでのポリシー設定を行ったので、みんなもハマらないようにぜひ参考にしてみてください。(みんなできるかも…)


構成

  • Account A(Organizations)
    • Amazon Inspector
  • Account B(Organizations)
    • KMS
    • S3

 

Inspectorの結果はそれぞれのアカウントのS3で管理するよりもデータ専用のアカウントで管理した方が後々分析がしやすくなります。構成図にすると非常にシンプルに見えますね。Organizationsで管理されているAWSアカウントAから、アカウントBのS3にInspectorの調査結果をCSV形式でエクスポートするだけですが、いくつかの課題があります。クロスアカウントでどのKMSを利用するか、またどのようにポリシーを設定すればいいかについての懸念があります。エクスポート時にうまくいかない場合、以下のようなエラーが永遠と出てくる状態になります。

Access denied to S3 bucket. Confirm the S3 bucket details and KMS key policy and try again.

今回はアカウントBのKMSとS3をTerraformで設定してみました。


Terraform

  • kms.tf

アカウント Aではなく、アカウント Bに対してまずはKMSを作成しましょう。ポリシーですが、まずそれぞれのアカウントに対してのPrincipalはアカウント AとBを指定します。ActionはKMSすべての権限にしました。次はサービスに対してのPrincipalは inspector2.amazonaws.com を指定し、ActionはKMSのDecryptGenerateDataKeyを許可します。

個人的にInspector専用のIAMロールを作成するのかと思いきや、Principalでサービス名を指定しているので作成する必要がありません。(思い込みはNG!)

  • s3.tf

  • variables.tf

S3はアカウント Bで作成したKMSを指定し、ポリシーは inspector2.amazonaws.com に対して、ActionでS3のPutObject、PutObjectAcl、AbortMultipartUploadを許可しましょう。リソースのS3 ARNではアカウント Aに対してreportを指定します。

以上でアカウントAからBのS3にinspectorのCSVをエクスポートする準備が整いました。以下Inspectorの権限周りについてAWSのドキュメントがありますので、参考にしてみてください。

https://docs.aws.amazon.com/ja_jp/inspector/latest/user/findings-managing-exporting-reports.html


Test


まとめ

クロスアカウントは複雑でゲキムズですが、一度経験すればあとは他のサービスも同様と感じました。自分はポリシーを複雑にし過ぎてしまったのと、ChatGPTは頼らずドキュメントを読みましょう!と反省。

ちなみに転職して2ヶ月目ということで、先々週に会社のイベントでLTしてきました。入社エントリーは気が向いたら書きますので、しばしお待ちくださいませ!んじゃまた!

https://findy.connpass.com/event/323099/


カテゴリー: AWSInspectorTerraform

adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください