背景
- AWS上にECRとECSでバックエンドサービスを構築している
- one clickでコードデプロイを実施したい
- 開発環境と本番環境は別のAWSアカウントになる
内容
AWS CodeBuildとは
- 完全マネージド型のビルドサービス
- ソースコードをコンパイルする
- 単体テスト
- デプロイ
buildspec.yml
- 単体テスト実施
- docker image build
- ECRへpush
問題
- 開発アカウントのCodeBuildから本番アカウントのECRへプッシュする時に、権限設定が必要
対策
本番アカウントの側
- ECRリポジトリにアクセス許可を追加する
- 開発アカウントのputimage権限を許可する
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPushPull",
"Effect": "Allow",
"Principal": {
“AWS”: “arn:aws:iam::開発アカウントID"
},
"Action": [
......
"ecr:PutImage",
"ecr:UploadLayerPart"
]
}
]
}
開発アカウントの側
- ビルドプロジェクトのサービスロールに、STSとECR操作権限を追加する
sts-policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
“Resource”: “arn:aws:iam::開発アカウントID:role/service-role/ロール名"
}
]
}
ECRへpush権限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
....
"ecr:PutImage",
......
],
“Resource”: “arn:aws:ecr:ap-northeast-1:本番アカウントID:repository/リポジトリ名"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
}
]
}