初めに
ECRのスキャン機能使ったこと無かったので、CDKで作りました
作り方
下記のように、Repositoryの引数にimage_scan_on_pushを追加するだけで自動スキャン機能が使えます
CDK便利ー
from aws_cdk import (
aws_ecr as ecr,
core,
)
repository = ecr.Repository(self, "Repo",
image_scan_on_push=True
)
上記を実行すると、ECRとECRImageScanOnPushが出来ました
$ cdk diff repo
...
Resources
[+] AWS::ECR::Repository Repo Repo02AC86CF
[+] Custom::ECRImageScanOnPush Repo/ImageScanOnPush/Resource RepoImageScanOnPush94CFD98F
[+] AWS::IAM::Role AWS679f53fac002430cb0da5b7982bd2287/ServiceRole AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2
[+] AWS::IAM::Policy AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/DefaultPolicy AWS679f53fac002430cb0da5b7982bd2287ServiceRoleDefaultPolicyD28E1A5E
[+] AWS::Lambda::Function AWS679f53fac002430cb0da5b7982bd2287 AWS679f53fac002430cb0da5b7982bd22872D164C4C
...
実際に出来ているかもCLIから確認してみると、確かに出来てることが確認できました
また、image scanの設定も入っていました
$ aws --region us-east-1 ecr describe-repositories | jq .
{
"repositories": [
{
"repositoryArn": "arn:aws:ecr:us-east-1:000000000000:repository/repo-repo0-ny7qkwdk6aru",
"registryId": "000000000000",
"repositoryName": "repo-repo0-ny7qkwdk6aru",
"repositoryUri": "000000000000.dkr.ecr.us-east-1.amazonaws.com/repo-repo0-ny7qkwdk6aru",
"createdAt": 1589559800,
"imageTagMutability": "MUTABLE",
"imageScanningConfiguration": {
"scanOnPush": true
}
}
]
}
余談
上記でやりたいことは完了したのですが、リソース作成時に下記のようにECR以外のものが出来ていました
こちらも出来ているか確認してみましょう
[+] AWS::IAM::Role AWS679f53fac002430cb0da5b7982bd2287/ServiceRole AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2
[+] AWS::IAM::Policy AWS679f53fac002430cb0da5b7982bd2287/ServiceRole/DefaultPolicy AWS679f53fac002430cb0da5b7982bd2287ServiceRoleDefaultPolicyD28E1A5E
[+] AWS::Lambda::Function AWS679f53fac002430cb0da5b7982bd2287 AWS679f53fac002430cb0da5b7982bd22872D164C4C
まずはLambdaですが、AWSと書かれたリソースはありませんでした
$ aws --region us-east-1 lambda list-functions | jq .Functions[].FunctionName | grep AWS
$
次にIAM Roleですが、こちらもありません
なので、それに紐づくIAM Policyも見つかりませんでした
$ aws --region us-east-1 iam list-roles | jq .Roles[].RoleName | grep AWS679f53fac002430cb0da5b7982bd2287
$
つまり、ユーザ側で設定や確認できるリソースではなくAWS側のリソースが出ているのではないかと思います
おそらくECRのスキャンをする時のLambdaとそのIAM Roleになるのかなぁと思います
多分そのうち修正されると思うのですが、ちょっとAWSの内側を知れた気分でした