OpenID Connect を使用して、Pipelines の AWS ECR イメージを使用する

OpenID Connect で AWS ECR Docker イメージを使用するには、Pipelines をウェブ ID プロバイダーとして設定して IAM ロールを作成し、IAM ロールをビルド イメージに関連付ける必要があります。

AWS でウェブ ID プロバイダーとして Bitbucket Pipelines を設定する

ウェブ ID プロバイダーは、システムが認証トークンを受け取って、そのトークンを AWS の一時的なセキュリティ認証情報として使用または交換できるようにします。これらの一時的なセキュリティ認証情報は、AWS アカウントのリソースを使用する権限を持つ IAM ロールにマッピングされます。AWS のウェブ ID プロバイダーに関する詳細をご参照ください。

  1. AWS ID およびアクセス管理 (IAM) にアクセスします。

  2. 左側のサイドバーの [アクセス管理] 見出しの下にある [ID プロバイダー] を選択します。

  3. [Add provider (プロバイダーの追加)] ボタンを選択します。

  4. [Configure provider (プロバイダーの設定)] セクションで、[OpenID Connect] を選択します。

  5. Bitbucket の OpenID Connect に ID プロバイダーとして表示されるプロバイダー URL を、対応するテキスト フィールドに追加します。プロバイダー URL は、認証要求に使用されるセキュアな OpenID Connect URL です。

  6. Bitbucket の OpenID Connect に ID プロバイダーとして表示される対象者を、対応するテキスト フィールドに追加します。対象者は、アプリの ID プロバイダーによって発行されたクライアント ID です。

  7. [Add provider (プロバイダーの追加)] ボタンを選択します。

サムプリントを検証するには、OpenID Connect ID プロバイダーのルート CA サムプリントを取得するステップに従います。

ID とアクセス管理 (IAM) ロールを作成する

以下の手順に従って、この OIDC プロバイダーで Bitbucket Pipelines を使用するすべてのユーザーが引き受けられる新しい IAM ロールを作成します。

このロールの信頼されたエンティティはウェブ ID である必要があります。これによって、前の手順で作成したプロバイダーを選択できます。

  1. AWS ID とアクセス管理 (IAM) にアクセスします。

  2. 左側のサイドバーの [アクセス管理] 見出しの下にある [ロール] を選択します。

  3. [ロールの作成] を選択します。

  4. 信頼されたエンティティの種類として [ウェブ ID] を選択します。

  5. [ID プロバイダー] ドロップダウン、上記の設定から作成した ID プロバイダーの順に選択します。

  6. [対象者] ドロップダウン、上記の設定から作成した対象者の順に選択します。 これによって、ワークスペース内のすべてのリポジトリでビルドがロールを引き受けられるようになります。

  7. [次へ]: [権限] を選択します。

  8. Create a policy that allows to retrieve the authentication token and access the ECR registry. For more details on creating a policy, check out the following AWS help doc: Amazon Elastic Container Registry Identity-Based Policy Examples.

    { "Version":"2012-10-17", "Statement":[ { "Sid":"GetAuthorizationToken", "Effect":"Allow", "Action":[ "ecr:GetAuthorizationToken" ], "Resource":"*" }, { "Sid":"ReadRepositoryContents", "Effect":"Allow", "Action":[ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage" ], "Resource":"arn:aws:ecr:us-east-1:123456789012:repository/my-repo" } ] }
  9. [次へ: タグ] を選択します。

  10. 必要に応じて、ラベル (タグ) を追加します。

  11. [次へ: 確認] を選択します。

  12. [ロールを作成] ページで、[ロール名] (必須、例: pipelines-ecr-access) と [ロールの説明] (該当する場合) を入力します。

  13. [ロールの作成] を選択します。

選択した Docker イメージを使用するようにビルドを設定する

この手順では、前の手順で作成したロールを引き受けるようにビルドを設定します。ロールを引き受けて、一時的な認証情報を要求するために使用できる一意の OIDC トークンを作成するには、BitbucketCI ステップを有効にする必要があります。このトークンは、環境変数 BITBUCKET_STEP_OIDC_TOKEN として公開されます。

AWS ECR 認証に有効な IP アドレス

AWS ECR 認証のために許可リストに登録済みにする必要がある IP アドレスのリストについては、ヘルプ ドキュメント「会社のファイアウォールで許可リストに登録する IP アドレスとドメイン」を参照してください。

パイプラインを介した ECR 認証のためにホワイトリストに登録する必要がある IP アドレスは、次のスクリプトを使用してフィルタリングできます。

curl https://ip-ranges.atlassian.com/ | jq -r '.items[] | select(.direction[]=="ingress") | .cidr'

bitbucket-pipelines.yml ファイルの例

pipelines: default: - step: image: name: 123456789012.dkr.ecr.us-east-1.amazonaws.com/repository/my-repo:latest aws: oidc-role: arn:aws:iam::123456789012:role/pipelines-ecr-access oidc: true script: - echo "hello world"

上記のコードは、明示的な AWS_ACCESS_KEY_ID と AWS_SECRET_KEY シークレットを入力せずに、パイプライン内のプライベート ECR イメージを使用する Bitbucket-Pipelines.yml ファイルの例です。

 

ビルドを実行する

AWS で Pipelines をウェブ ID プロバイダーとして設定してウェブ ID プロバイダー内に IAM ロールを作成し、作成したロールを引き受けるようにビルドを設定したらビルドを実行します。

For more options on limiting access to specific repositories, deployments, and more, see the Using claims in ID tokens to limit access to the IAM role in AWS section of the following help doc: Deploy on AWS using Bitbucket Pipelines OpenID Connect.

さらにヘルプが必要ですか?

アトラシアン コミュニティをご利用ください。