
Cloudsplainingは、最小権限の違反を特定し、リスク優先順位付けされたレポートを生成するAWS IAMセキュリティ評価ツールです。
Cloudsplainingは、AWS IAMの最小権限の違反を特定し、リスク優先度でソートされたHTMLレポートを生成するAWS IAMセキュリティ評価ツールです。
完全なドキュメントについては、ReadTheDocs上のプロジェクトをご覧ください。
Cloudsplainingは、AWS IAMポリシーにおける最小権限の違反を特定し、見やすいHTMLレポートを生成します。AWSアカウント内のすべてのポリシー、複数のAWSアカウントにまたがるポリシー、または単一のポリシーファイルをスキャンできます。
リソース制約を活用していないIAMアクションを特定するのに役立ちます。また、特定のAWSアカウントに対して無制限に以下のリスクをもたらすIAMポリシーをフラグ付けすることで、修正プロセスの優先順位付けを支援します。
s3:GetObject、ssm:GetParameter、secretsmanager:GetSecretValue)Cloudsplainingはまた、AWSコンピューティングサービス(EC2、ECS、EKS、Lambdaなど)から引き受け可能なIAMロールも特定します。これらのロールはユーザー定義ロールよりも大きなリスクをもたらす可能性があります。特にAWSコンピューティングサービスが直接または間接的にインターネットに公開されているインスタンス上にある場合に顕著です。このようなロールのフラグ付けは、特定のシナリオにおいてペネトレーションテスター(または攻撃者)にとって特に有用です。例えば、攻撃者がssm:SendCommandを実行する権限を取得し、SSMエージェントがインストールされた特権EC2インスタンスが存在する場合、攻撃者は事実上それらのEC2インスタンスの権限を手に入れることができます。AWS Systems Manager Agentを介したリモートコード実行は既知の昇格・悪用経路でしたが、Cloudsplainingはこれらのケースの特定を容易にします。いくつかの例についてはサンプルレポートをご覧ください。
また、カスタム除外ファイルを指定して、様々な理由で誤検出となる結果をフィルタリングすることもできます。例えば、ユーザーポリシーは設計上寛容であるのに対し、システムロールは一般的により制限的です。また、組織のマルチアカウント戦略やAWSアプリケーションアーキテクチャに固有の除外設定もあるでしょう。
Policy Sentryは、最小権限に従ってIAMポリシーをスケーラブルに作成できることを明らかにしました。Policy Sentryがリリースされる前は、リソース制約を欠いたIAMポリシードキュメントを見つけることはあまりにも簡単でした。以下のポリシーを考えてみてください。これはIAMプリンシパル(ロールまたはユーザー)がAWSアカウント内の任意のS3バケットに対してs3:PutObjectを実行することを許可しています。```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "*"
}
]
}
これは悪いです。理想的には、アクセスはリソースARNに従って制限されるべきです。次のように:```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Policy Sentry は これを非常に簡単に実現します。Infrastructure as Code の開発者や AWS 管理者がこのツール(非常に使いやすい)に慣れると、採用が非常に迅速に開始されることがわかりました。しかしながら、もし AWS を使用しているなら、改善が必要な IAM ポリシーのバックログが非常に多い可能性があります。何百もの AWS アカウントがあり、それぞれに数十のポリシーがある場合、修正すべきポリシーをプログラムで特定して、それらの AWS アカウントをどのようにロックダウンできるでしょうか?
そのために、私たちは Cloudsplaining を作成しました。
Cloudsplaining は AWS IAM ポリシーにおける最小権限の違反を特定し、美しい HTML レポートを生成します。AWS アカウント内のすべてのポリシー、複数の AWS アカウントにわたるポリシー、または単一のポリシーファイルをスキャンできます。
brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining brew install cloudsplaining
#### Pip3```bash
pip3 install --user cloudsplaining
cloudsplaining --help を実行することで cloudsplaining が実行できるようになります。Bash補完を有効にするには、.bashrc に以下を追加します。```bash
eval "$(_CLOUDSPLAINING_COMPLETE=bash_source cloudsplaining)"
ZSH補完を有効にするには、これをあなたの.zshrcに記述してください:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=zsh_source cloudsplaining)"
また、アカウント全体ではなく、単一のポリシーファイルをスキャンしてリスクを特定することもできます。```bash cloudsplaining scan-policy-file --input-file examples/policies/explicit-actions.json
出力には、検出結果の説明と、リソース制約を活用していないIAMアクションのリストが含まれます。
出力は次のようになります。```console
Issue found: Data Exfiltration
Actions: s3:GetObject
Issue found: Resource Exposure
Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention, s3:DeleteAccessPointPolicy, s3:DeleteBucketPolicy, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccessPointPolicy, s3:PutAccountPublicAccessBlock, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutObjectAcl, s3:PutObjectVersionAcl
Issue found: Unrestricted Infrastructure Modification
Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload, ecr:CreateRepository, ecr:DeleteLifecyclePolicy, ecr:DeleteRepository, ecr:DeleteRepositoryPolicy, ecr:InitiateLayerUpload, ecr:PutImage, ecr:PutImageScanningConfiguration, ecr:PutImageTagMutability, ecr:PutLifecyclePolicy, ecr:SetRepositoryPolicy, ecr:StartImageScan, ecr:StartLifecyclePolicyPreview, ecr:TagResource, ecr:UntagResource, ecr:UploadLayerPart, s3:AbortMultipartUpload, s3:BypassGovernanceRetention, s3:CreateAccessPoint, s3:CreateBucket, s3:DeleteAccessPoint, s3:DeleteAccessPointPolicy, s3:DeleteBucket, s3:DeleteBucketPolicy, s3:DeleteBucketWebsite, s3:DeleteObject, s3:DeleteObjectTagging, s3:DeleteObjectVersion, s3:DeleteObjectVersionTagging, s3:GetObject, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccelerateConfiguration, s3:PutAccessPointPolicy, s3:PutAnalyticsConfiguration, s3:PutBucketAcl, s3:PutBucketCORS, s3:PutBucketLogging, s3:PutBucketNotification, s3:PutBucketObjectLockConfiguration, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutBucketRequestPayment, s3:PutBucketTagging, s3:PutBucketVersioning, s3:PutBucketWebsite, s3:PutEncryptionConfiguration, s3:PutInventoryConfiguration, s3:PutLifecycleConfiguration, s3:PutMetricsConfiguration, s3:PutObject, s3:PutObjectAcl, s3:PutObjectLegalHold, s3:PutObjectRetention, s3:PutObjectTagging, s3:PutObjectVersionAcl, s3:PutObjectVersionTagging, s3:PutReplicationConfiguration, s3:ReplicateDelete, s3:ReplicateObject, s3:ReplicateTags, s3:RestoreObject, s3:UpdateJobPriority, s3:UpdateJobStatus
AWSアカウント全体をスキャンし、レポートを生成できます。これを行うには、AWS IAMのget-account-authorization-details APIコールを利用し、アカウントのすべてのIAM詳細を含む大きなJSONファイル(アカウントあたり約100KB)をダウンロードします。これには、ユーザー、グループ、ロール、カスタマー管理ポリシー、AWS管理ポリシーのデータが含まれます。
CLIで使用できるAWS認証情報が設定されている必要があります。
iam:GetAccountAuthorizationDetailsを実行する権限が必要です。arn:aws:iam::aws:policy/SecurityAuditポリシーにはこれが含まれており、IAMサービスへの読み取りアクセスを許可する他の多くのポリシーにも含まれています。