🐙
Bitbucket Pipelines OpenID Connectを使用してECRにpushする
概要
2021/11 に GitHub Actions の OpenID Connect (OIDC) サポートが正式にアナウンスされた。
会社ではGithubではなく、Bitbucketを利用している。
Bitbucketでも同じことが出来ないか?と調べた所、2021/3には既にサポートされていた。
長時間有効なクラウドプロバイダのシークレットを利用するのはセキュリティのリスクが高くなるので、Bitbucket Pipelines OpenID Connectを利用して、ECRにpushしてみる。
OIDC identity providerの情報を確認する
Bitbucket > Pipelines > OpenID Connect
からOIDC identity providerの情報を確認する。
この情報を元に、クラウドプロバイダを設定する。
AWS設定
IDプロバイダの設定
IAM > IDプロバイダ
から以下を設定する。
設定項目 | 設定値 |
---|---|
プロバイダのタイプ | OpenID Connect |
プロバイダのURL | Bitbucketで表示されたIdentity provider URL |
対象者 | Bitbucketで表示されたAudience |
IAMポリシーの作成
認証トークンの取得と ECR レジストリへのアクセスを許可するポリシーを作成する。
iam-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GetAuthorizationToken",
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken"
],
"Resource": "*"
},
{
"Sid": "AllowPushImage",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:PutImage"
],
"Resource": "arn:aws:ecr:ap-northeast-1:<AWSアカウントID>:repository/*"
}
]
}
IAMロールの作成
信頼されたエンティティの種類はウェブIDを選択し、先程追加したウェブIDプロバイダを選択する。
定義したIAMポリシーを選択し、ロールを作成する。
Bitbucket Pipelinesの作成
ECRにpushを簡単にできるようにBitbucket Pipeが用意されているので活用する。
bitbucket-pipelines.yml
image: atlassian/default-image:2
definitions:
script: &ecrScript
- cd $BITBUCKET_CLONE_DIR
- docker build -t <IMAGE NAME> .
- pipe: atlassian/aws-ecr-push-image:1.5.0
variables:
AWS_OIDC_ROLE_ARN: "<作成したIAM RoleのARN>"
IMAGE_NAME: <IMAGE NAME>
TAGS: "${BITBUCKET_TAG} build-$BITBUCKET_BUILD_NUMBER latest"
pipelines:
custom:
build-custom:
- step:
name: Deploy to ECR
services:
- docker
oidc: true
script: *ecrScript
作成したBitbucket Piplinesを実行して、正常にPush出来る事を確認。
まとめ
Bitbucketでも、OIDCは、手軽に使える。
シークレット管理の悩みを軽減できるので、積極的に利用していきたい。
Discussion