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. [Get thumbprint (サムプリントの取得)] ボタンを選択して、プロバイダー URL が一意で正確であることを確認します。

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

  8. [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. 認証トークンの取得と ECR レジストリへのアクセスを許可するポリシーを作成します。ポリシーの作成に関する詳細については、AWS ヘルプ ドキュメント Amazon Elastic コンテナ レジストリ アイデンティティ ベースのポリシーの例を確認してください。

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 { "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 として公開されます。

bitbucket-pipelines.yml ファイルの例

1 2 3 4 5 6 7 8 9 10 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 ロールを作成し、作成したロールを引き受けるようにビルドを設定したらビルドを実行します。

特定のリポジトリ、デプロイなどへのアクセスを制限するオプションの詳細については、ヘルプ ドキュメント「Bitbucket Pipelines の OpenID Connect を使用して AWS でデプロイ」の「ID トークンでクレームを使用して IAM ロールへのアクセスを制限する」セクションを参照してください。

その他のヘルプ