先日、AWSから以下のタイトルのメールを受け取ったので、関連して調べたことをまとめておく*1。
AWS Codepipeline is deprecating its managed policy “AWSCodePipelineReadOnlyAccess” [AWS Account: XXXXXXXXXXXX]
[変更の概要]
AWSからのメールを受け取ったのはちょうど2020年9月3日の朝だった。
要約すると、本文には次のことが書かれていた。
- IAMのマネージドポリシー「AWSCodePipelineReadOnlyAccess」が2020年9月7日で非推奨となる
- 新しいマネージドポリシーとして「AWSCodePipeline_ReadOnlyAccess」が利用できるが、権限が削減されている
- 既存のIAM Roleは影響を受けないが、新しくIAM Roleに非推奨のポリシーはアタッチできない
ReadOnlyな権限が変更になるだけで、既存のIAM Roleは影響を受けないので急ぎ対応をする必要はなさそうだったが、一応変更の詳細を調べてみることにした。
[変更の詳細]
IAM Consoleにログインし、対象のポリシーを検索してみる。
たしかに、アンダースコアのないポリシーとアンダースコアのあるポリシーの両方を確認できる。
このままでは比較しづらいので、Jsonをコピペして手元の端末に保存し、VS Codeで比較してみた*2。
左側が新しく追加されたアンダースコアありのポリシーで、右側が今回非推奨になるアンダースコアなしのポリシーである。
まず、最初のステートメントから以下のアクションが削除されている。
- iam:ListRoles
- s3:GetBucketPolicy
- s3:GetObject
- s3:ListBucket
- codecommit:ListBranches
- codecommit:ListRepositories
- codedeploy:GetApplication
- codedeploy:GetDeploymentGroup
- codedeploy:ListApplications
- codedeploy:ListDeploymentGroups
- elasticbeanstalk:DescribeApplications
- elasticbeanstalk:DescribeEnvironments
- lambda:GetFunctionConfiguration
- lambda:ListFunctions
- opsworks:DescribeApps
- opsworks:DescribeLayers
- opsworks:DescribeStacks
IAM、CodeCommit、CodeDeploy、Elastic Beanstalk、Lambda、OpsWorksの参照権限が削除されたことになる。
また、上記の削除されたアクションのうち、s3:GetObject
、 s3:ListBucket
、 s3:GetBucketPolicy
の3つのS3関連アクションは、独立したステートメントに分離され、codepipeline-
で始まるS3バケットにのみアクセスできるように制限が追加されている。
[代替となるマネージドポリシー]
利用できるアクションがかなり増えるが、OpsWorks以外のそれぞれのサービスについて、ReadOnly
と名前のついた以下のマネージドポリシーを代替として利用できる。不要なアクションが含まれている場合は、削除されたアクションのみを独自でインラインポリシーなどで追加することもできる。
IAMの場合は、IAMReadOnlyAccess
ポリシーを利用できる。
CodeCommitの場合は、AWSCodeCommitReadOnly
ポリシーを利用できる。
CodeDeployの場合は、AWSCodeDeployReadOnlyAccess
ポリシーを利用できる。
Elastic Beanstalkの場合は、AWSElasticBeanstalkReadOnlyAccess
ポリシーを利用できる。
なお、OpsWorksについてはReadOnlyなマネージドポリシーが提供されていないようだった。こちらのアクションが必要となる場合は、個別にポリシーを自作するのが良さそうだ。
[まとめ]
- マネージドポリシーAWSCodePipelineReadOnlyAccessが非推奨になる(2020年9月7日)
- 新しいポリシーAWSCodePipeline_ReadOnlyAccessが提供されているが、IAM、CodeCommit、CodeDeploy、Elastic Beanstalk、Lambda、OpsWorksの参照権限が削除されている
- また、新しいポリシーでは
codepipeline-
で始まるS3バケットのみ参照可能という制限が追加されている