Skip to main content

SnykとSolvoでS3バケットの設定とアクセスを保護

著者

Lauren Place

David Hendri

blog feature snyk iac solvo

2021年10月18日

0 分で読めます

Solvo は、最小権限のアクセスでクラウドインフラを迅速かつ大規模に運用できるようにすることで、開発者やDevOpsエンジニアを支援しています。この記事では、Solvoの自動化プラットフォームと Snyk Infrastructure as Code (Snyk IaC) を組み合わせ、Lambda関数からAWS S3バケットへのアクセスをカスタマイズして安全にするワークフローをご紹介します。この記事は Solvoのウェブサイトに初めて掲載されたものです。


クラウドリソースの設定管理に、Infrastructure as Code(IaC)モデルを採用する組織が増えています。

コードを使ってインフラを設定すると、バージョン管理やソース管理がしやすくなり、ある環境の状態を別の環境で追跡・再現しやすくなります。この方法は、コードやその他の有用なデータの保存に便利なAWS S3バケットを迅速に作成する場合に特に役立ちます。クラウドリソースであるS3バケットは、チーム内で簡単に共有できます。

しかし、S3バケットが「共有しすぎ」になってしまうこともあります。作業を急いでいると、クラウド資産(S3、Lambda、EC2など)用の安全なIAMポリシーの作成は、開発者が後回しにしがちです。スピードと利便性を優先するあまり、開発者がバケットのセキュリティポリシーを過度に緩く設定し、バケット内のコンテンツが漏えいするリスクを招くことは珍しくありません。

ポリシーに起因するセキュリティリスクと、それを回避する方法を見ていきましょう。

設定に問題があるLambdaの例

以下は、画像をS3バケットに格納するAWS Lambdaを設定するTerraform構成です。IAMロールとセキュリティポリシーのコードも確認できます。

この構成から、内容やセキュリティレベルについてどのようなことがわかるでしょうか。

```
# create function 
resource "aws_lambda_function" "Lambda_function" { 
    s3_bucket = "my-bucket" 
    s3_key = "my-key.zip" 
    function_name = "my-test-function" 
    role = aws_iam_role.lambda_iam_role.arn 
    handler = "index.handler" 
    runtime = "nodejs12.x" 
    memory_size = 1024 
    timeout = 900
}

# create role 
resource "aws_iam_role" "Lambda_iam_role" {
    name = "my-lambda-role" 
    assume_role_policy = <<EOF
{
    "Version": "2012-10-17", 
    "Statement": [
        {
            "Action": "sts:AssumeRole", 
            "Principal": {
                "Service": "lambda.amazonaws.com" 
            }, 
            "Effect": "Allow", 
            "Sid": ""
        }
    ]
}
EOF
}

# create policy 
resource "aws_iam_role_policy" "Lambda_iam_policy" { 
    name = "my-lambda-policy" 
    role = aws_iam_role.Lambda_iam_role.id
    policy = <<EOF
{
    "Version": "2012-10-17", 
    "Statement": [
        {
            "Effect": "Allow", 
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream", 
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow", 
            "Action": "*",
            "Resource": "*"
        }
    ]
}
EOF

このアプリケーションでは、Lambdaは犬の画像をS3バケットに格納するように設定されています。このLambdaにはそのための権限のほか、Put、Get、Delete、Create、Listなどの操作権限があります。S3以外のすべてのサービスも考慮すると、許可される操作はさらに増えます。

これは52~54行目の記述が原因です。実質的に、すべてのリソースに対するすべての操作をALLOWしています。つまり、管理者権限を付与しているのです。

これは権限が広すぎます。ここで許可すべき操作は「put」だけです。それ以外は過剰な権限であり、データ漏えいや破損につながったり、資産の調査に悪用されたりするおそれがあります。

TerraformとAWS IAMに精通していて、この構成だけをレビューするのであれば、問題を見つけるのは簡単かもしれません。しかし通常、Terraformの構成ははるかに大規模で、設定の細部を把握し続けるのは困難です。そのため、開発者やセキュリティチームのメンバーがTerraformモジュール群の奥深くに埋もれた危険なポリシーに気づく可能性は低くなります。

幸いなことに、こうした問題の発見と修正を大幅に容易にし、IaCを利用するすべてのエンジニアリングチームにセキュリティの責任を広げるための新しいツールが登場しています。

安全でない設定をスキャンする

Snyk Infrastructure as Code (IaC)は、Terraform、Kubernetes、AWS CloudFormationの構成をスキャンし、AWS、Azure、GCP全体の危険なポリシーを特定できるIaCテストツールです。上の例のように、ポリシーの権限を過剰に広げてしまうアスタリスクのような単純な問題を検出できます。また、たとえば「read」にすべきところが「write」になっているケースも見つけられます。

継続的な自動静的テストにより、Snyk IaCは大規模なTerraform構成をスキャンできるため、組織のIaC管理に効果を発揮します。スキャンで危険な設定が見つかると、Snykが修正方法を案内します。さらに、SolvoをSnyk IaCと併用すれば、潜在的なリスクを軽減する安全なポリシーを自動生成できます。

実際の動作を見てみましょう。

スキャンを実行するには、Snyk CLIを使って構成に対しsnyk iac testを実行します。

Snyk IaCでlambda.tfをテストしたターミナル出力。Terraformの問題が2件報告されています。IAM権限の過剰な付与と、Lambda X-Rayトレーシングの無効化です。

スキャンにより、「*」を使ったポリシーの設定ミスが見つかりました。すべての操作を許可するため、権限が過剰になっています。

Snyk IaCは、この構成に潜むリスクの情報と問題の修正に関する一般的なアドバイスを提供します。Solvoはさらに、環境に合わせて最小権限のIAM構成を自動生成します。両者を組み合わせれば、コードの作成中に問題を見つけて修正できるため、必要な修正をすばやく行い、デプロイ前に安全性を確保できます。

ログストリームの作成、ログイベントの記録、S3オブジェクトのアップロード、ロググループの作成に必要なAWS権限を示すIAMポリシーの提案画面。

これで、ポリシーが「PutObject」だけを許可していることが確認できました。犬の写真も安全です。

pictures-of-dogsリソースに対するs3:PutObjectアクションを許可するAWS S3ポリシーのコードスニペット。

Solvoでポリシーを適用した後、Terraformファイルをもう一度スキャンすると、Snyk IaCによって管理者権限がすべてなくなったことを確認できます。

Snyk IaCでlambda.tfをテストした際のターミナル出力。AWS Lambda関数でX-Rayトレースが無効になっているという、低深刻度の問題が1件報告されています。

インテグレーションの組み合わせでカバー範囲を拡大

Snyk IaCのスキャンを活用すれば、Terraform、Kubernetes、CloudFormationなどのIaCに含まれる危険なポリシーを事前に特定し、修正できます。Solvoと組み合わせると、Solvoが危険なポリシーに代わる安全なポリシーを生成し、追加の人員や専門知識を必要とせずに、設定ミスの迅速な修正とセキュリティの向上を支援します。

Solvoによるクラウドインフラのリスク自動低減について詳しくは、Solvoのウェブサイトで利用を開始するか、無料デモをお申し込みください。Snyk IaCをまだお試しでない方は、無料で利用を開始できます。


David Hendri はSolvoの共同創業者兼CTOです

Lauren Place はSnykのプロダクトマーケティングマネージャーです

ソースコードの段階からインフラを保護

Snykはワークフロー内のIaCセキュリティとコンプライアンスを自動化し、構成ドリフトや不足しているリソースを検出します。

カテゴリー: