ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

Orca Security のアカウント接続時に使用する CloudFormation の中身を確認してみた

フォージビジョン Orca Security のサービスサイト がオープンしました。

コーポレートサイトで活用事例を公開中!

こんにちは、Orca Security 担当の尾谷です。

AWS Summit Tokyo 2023 で、フォージビジョンのブースにお越しくださったお客様に Orca Security の説明をしておりましたところ、あるお客様より

「アカウント接続時に展開する CloudFormation テンプレートはどのようなリソースを作るの?」

と質問をいただきました。僕は

「Orca Security アカウントと連結するためのロールなどを作ります。」

とざっくり説明させていただきましたが、ブログを利用して改めて実際どのようなリソースができるのかをしっかり解説させていただきます。

Orca Security で AWS アカウントを連携する方法

Orca Security で AWS アカウントを連携する方法に関しては、弊社エンジニアの藤原 (よ) が、こちら のブログ記事で解説しております。
記事にある以下画像の、STEP 2 にて CloudFormation テンプレートがダウンロードできます。

https://cdn-ak.f.st-hatena.com/images/fotolife/b/basashi2066/20230411/20230411134615.png

テンプレートで作成されるもの (概要)

SaaS 展開モードでアカウントを接続すると、Orca は提供された CloudFormation テンプレートに基づいて OrcaSecurityRole という単一のロールを作成します。

以下は、実際に作成された IAM ロールです。

SideScanning を行う Orca Srcurity 側のアカウントと信頼関係が結ばれています。
SideScanning に関しては、こちらの記事 にてご紹介しています。

Orca Security ロールに含まれるポリシー

次に、作成されたロールにアタッチされたポリシーについて解説します。

ViewOnlyAccess

AWS が提供する閲覧専用の AWS マネージドポリシーがアタッチされます。
このポリシーで、サービスとリソースへの読み取り専用アクセスが可能になり、すべての AWS サービスにわたってリソースと基本的なメタデータを表示するアクセス許可が付与されます。

OrcaSecurityViewOnlyExtrasPolicy

上記 ViewOnlyAccess で不足している AWS オブジェクトへの表示のみのアクセス許可が含まれたインラインポリシーです。
ワークロードの列挙、クラウド構成の問題の検出、ワークロードのネットワーク接続の推定、S3 バケットのスキャン、およびその他のアクションを行うために必要なポリシーで具体的には、以下が含まれます。
(2023/04/23 現在)

  • access-analyzer:ListAnalyzers
  • acm:DescribeCertificate
  • acm:GetCertificate
  • apigateway:GET
  • application-autoscaling:Describe*
  • appsync:Get*
  • appsync:List*
  • autoscaling-plans:Describe*
  • backup:Get*
  • backup:List*
  • cassandra:Select
  • cloudfront:Get*
  • cloudhsm:DescribeClusters
  • cloudtrail:Describe*
  • cloudtrail:Get*
  • cloudtrail:List*
  • cloudwatch:Describe*
  • codebuild:BatchGet*
  • codebuild:List*
  • config:Get*
  • dlm:Get*
  • dms:Describe*
  • dynamodb:Describe*
  • dynamodb:List*
  • ec2:Describe*
  • ec2:GetEbsEncryptionByDefault
  • ec2:List*
  • ec2:SearchTransitGatewayRoutes
  • ecr:BatchGetImage
  • ecr:Describe*
  • ecr:Get*
  • ecr:List*
  • eks:Describe*
  • eks:List*
  • elasticache:Describe*
  • elasticfilesystem:Describe*
  • elasticfilesystem:List*
  • elasticloadbalancing:Describe*
  • es:Describe*
  • es:List*
  • events:List*
  • glacier:Describe*
  • glacier:Get*
  • globalaccelerator:List*
  • glue:GetDataCatalogEncryptionSettings
  • glue:GetDatabases
  • glue:GetDevEndpoints
  • glue:GetResourcePolicy
  • glue:GetSecurityConfigurations
  • guardduty:Get*
  • guardduty:List*
  • iam:Generate*
  • iam:Get*
  • iam:Simulate*
  • kafka:Describe*
  • kafka:List*
  • kms:Describe*
  • kms:Get*
  • kms:List*
  • lakeformation:GetDataLakeSettings
  • lakeformation:GetEffectivePermissionsForPath
  • lakeformation:ListResources
  • lambda:Get*
  • logs:FilterLogEvents
  • logs:Get*
  • logs:ListTagsLogGroup
  • logs:StartQuery
  • logs:TestMetricFilter
  • memorydb:Describe*
  • memorydb:List*
  • mq:Describe*
  • mq:List*
  • network-firewall:List*
  • network-firewall:Describe*
  • organizations:Describe*
  • qldb:DescribeLedger
  • qldb:ListLedgers
  • rds:List*
  • redshift:Describe*
  • resource-groups:Get*
  • resource-groups:List*
  • resource-groups:Search*
  • route53:Test*
  • route53domains:Check*
  • route53domains:Get*
  • route53domains:View*
  • s3:Get*
  • s3:List*
  • secretsmanager:Describe*
  • secretsmanager:GetResourcePolicy
  • secretsmanager:List*
  • serverlessrepo:Get*
  • serverlessrepo:List*
  • ses:GetIdentityDkimAttributes
  • ses:GetIdentityPolicies
  • ses:GetIdentityVerificationAttributes
  • sns:Get*
  • sqs:GetQueueAttributes
  • sqs:ListQueueTags
  • ssm:Describe*
  • ssm:GetParameter*
  • ssm:GetParametersByPath
  • ssm:List*
  • sso:DescribePermissionSet
  • sso:GetInlinePolicyForPermissionSet
  • sso:ListAccountAssignments
  • sso:ListInstances
  • sso:ListManagedPoliciesInPermissionSet
  • sso:ListPermissionSets
  • identitystore:DescribeGroup
  • identitystore:DescribeUser
  • identitystore:ListGroups
  • identitystore:ListUsers
  • tag:Get*
  • waf-regional:Get*
  • waf:Get*

OrcaSecurityPolicy

Ephemeral SideScanner (一時的に作成される SideScanning 用のインスタンス) がスキャンを行うために必要なインラインポリシーです。
大まかに分けると以下のような 3 つのサービスのアクションを許可していまして

  • EC2:Orca Security にブロック ストレージへのアクセスを許可し、スナップショットを作成可能にする
  • KMS: - 暗号化されたボリュームを処理を可能にする
  • Secrets Manager: パスワードで保護された要素をスキャンするための Secrets Manager へのアクセスを許可する

具体的には以下が許可されます。

EC2

  • ec2:CreateSnapshot
  • ec2:CreateSnapshots
  • ec2:CopySnapshot
  • ec2:ModifySnapshotAttribute
  • ec2:CreateTags
  • ec2:DeleteSnapshot

KMS

  • kms:Encrypt
  • kms:Decrypt
  • kms:ReEncrypt
  • kms:CreateGrant
  • kms:GenerateDataKeyWithoutPlaintext
  • kms:PutKeyPolicy

Secret Manager

  • secretsmanager:GetSecretValue

オプションで有効になる RDS ポリシー

以下は DSPM のチェックボックスにチェックを入れるか、

DeployRdsScanner パラメータを true にすると追加デプロイされるポリシーです。

OrcaRdsSnapshotCreatePolicy

  • rds:AddTagsToResource
  • rds:DeleteDBSnapshot
  • rds:DeleteDBClusterSnapshot
  • rds:CreateDBSnapshot
  • rds:CreateDBClusterSnapshot
  • rds:CopyDBSnapshot
  • rds:CopyDBClusterSnapshot

OrcaRdsSnapshotReencryptPolicy:

  • kms:CreateGrant
  • kms:DescribeKey
  • rds:AddTagsToResource
  • rds:CopyDBSnapshot
  • rds:CopyDBClusterSnapshot

OrcaRdsSnapshotSharePolicy

  • rds:ModifyDBSnapshotAttribute
  • rds:ModifyDBClusterSnapshotAttribute

まとめ

何がデプロイされるのか、予め CloudFormation の中身を把握しておくと、安心して導入ができるかと思います。
導入にあたってご不明点があれば、メールでも お問い合わせフォーム からでも結構ですのでご連絡をお願い致します。