3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

アクセス制御されているECRのスキャン結果をInspectorダッシュボードから参照する

Last updated at Posted at 2022-01-18

はじめに

昨年のre:Invent2021でECRの拡張スキャンが発表されましたが、実際に使用しているとInspectorダッシュボードから脆弱性結果が確認できないことがあったので、その解消方法について確認していきます。
https://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-inspector-continual-vulnerability-management/

この記事でわかること

  • アクセス制御されたECRリポジトリで脆弱性スキャンを行うための設定手順
  • ECRリポジトリに設定するリソースベースポリシーの内容
  • Inspectorダッシュボードからの脆弱性結果確認方法

事前準備

ECRリポジトリは事前に作成しておきます。作成時にリポジトリ単位のイメージスキャンは無効化したままにします。
image.png
image.png

リポジトリのリソースベースポリシーで自IP以外のアクセスを拒否しておきます。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "ecr:*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "XXX.XXX.XXX.XXX/32"
        }
      }
    }
  ]
}

image.png

ECRの拡張スキャンが有効化されていることを確認します。
image.png

Inspectorのダッシュボードから、脆弱性スキャン結果が1つもないことを確認します。
image.png

手順

イメージのBuild&Push

前回も利用した以下のコマンドでイメージを作成して、ECRリポジトリにPushします。

$ cat <<EOF > Dockerfile
FROM ubuntu:16.04
EOF
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
$ docker build -t test-repository .
$ docker tag test-repository:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:latest
$ docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:latest

無事ECRリポジトリにPushされました。
image.png

脆弱性スキャン確認

結果をInspectorのダッシュボードからも脆弱性スキャン結果を確認してみると、10分以上経ってもリポジトリ自体が認識されず、スキャン結果も表示される様子はありません。
image.png

これはECRリポジトリがリソースベースポリシーでアクセスを制限されており、InspectorのサービスがECRに対してアクセスできないことが原因です。

リソースベースポリシー修正

以下のドキュメントを見るとInspectorはサービスリンクロールという特定のIAMロールを使用して各AWSサービスにアクセスするようになっております。
そのため、ECRのリソースベースポリシーでこのロールを許可(または除外)するような設定を追加する必要があります。

『Amazon Inspectorは、AWS Identity and Access Management(IAM) サービスにリンクされたロールを使用します。サービスにリンクされたロールは、AmazonInspectorに直接リンクされている一意のタイプのIAMロールです。サービスにリンクされたロールはAmazonInspectorによって事前定義されており、サービスがユーザーに代わって他のAWSサービスを呼び出すために必要なすべてのパーミッションが含まれています。』
https://docs.aws.amazon.com/ja_jp/inspector/latest/user/using-service-linked-roles.html

これは知らなかったのですが、Inspectorのサービスを有効化した時点で「AWSServiceRoleForAmazonInspector2」という名前のIAMロールが自動で作成されるようです。
image.png

このロールにはInspectorの実行に必要な以下の権限が付与されています。

  • Amazon EC2アクションを使用して、インスタンスとネットワークパスに関する情報を取得します。
  • AWS Systems Managerアクションを使用して、AmazonEC2インスタンスからインベントリを取得します。
  • Amazon ECRアクションを使用して、コンテナーイメージに関する情報を取得します。
  • AWS Organizationsアクションを使用して、関連付けられたアカウントを記述します。

上記を踏まえた上で以下のようにECRのリソースベースポリシーを修正します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "ecr:*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "XXX.XXX.XXX.XXX/32"
        },
        "ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::<AWSアカウントID>:role/aws-service-role/inspector2.amazonaws.com/AWSServiceRoleForAmazonInspector2"
        }
      }
    }
  ]
}

image.png

イメージの再Push&結果確認

再度PushするためにDockerfileの中身を少し修正して、再度Pushコマンドを実行します。

$ cat Dockerfile
FROM ubuntu:16.04
RUN echo 'hello world!'
$ docker build -t test-repository .
$ docker tag test-repository:latest XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:v1
$ docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/test-repository:v1

新規でイメージタグが作成されたことを確認します。
image.png

Inspectorのダッシュボードを再度見てみると先ほどPushしたイメージタグが表示されていることがわかります。
image.png

イメージタグを押下すると詳細な脆弱性結果を確認することができます。
image.png

ここまで設定できていれば、ECRに新しいイメージタグを追加すると、
image.png

数分後にはInspectorダッシュボードからも脆弱性結果を見れるようになっています。
image.png

補足

上記の手順で、もしいつまでたってもスキャンが実行されない場合、リポジトリのステータスがAccess deniedになっている可能性があります。
image.png

その場合、InspectorダッシュボードのAccount managementからECR container scanningをdisable⇒enableする操作を行うことで、最新のリポジトリステータスが取得され、正常にスキャンができるようにステータスを更新することができます。
ただし、この方法だと過去の脆弱性スキャン結果が消えてしまうので、実施する場合は注意が必要です。
image.png
image.png

おわりに

というわけで、今回はアクセス制御がされたECRリポジトリの脆弱性スキャン結果をInspectorダッシュボードから見るための設定方法について確認しました。
セキュリティ観点からリポジトリへのアクセスを制御しなければいけないことは十分にありうることだと思いますので、拡張スキャンを設定する場合はInspectorのサービスリンクロールの許可設定を忘れずに実施するようにしましょう。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?