Amplify で CodeCommit を利用する際、PowerUserAccess ではエラーになってしまいます。解決策を教えてください。

2022.05.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

PowerUserAccess を付与した IAM ユーザーが Ampify コンソールでアプリを作成する際に、Git リポジトリとして CodeCommit を選択しました。
しかし、ビルドで以下のエラーが発生してしまいました。

リポジトリプロバイダーへの接続中に問題が発生しました。 全般設定で [リポジトリを再接続] をクリックしてから、構築をもう一度お試しください。

fatal: unable to access 'https://git-codecommit.{region}.amazonaws.com/v1/repos/{repository-name}/': The requested URL returned error: 403

上記エラーの解決策を教えてください。

どう対応すればいいの?

PowerUserAccess に加えて、以下の権限を付与してください。

CreatePolicy
CreateRole
AttachRolePolicy
PassRole

Amplify コンソールでアプリを作成する際、以下の IAM ポリシーと IAM ロールが作成され、Amplify のサービスロールになります。

AWSAmplifyCodeCommitExecutionPolicy-{Amplify-app-id}
AWSAmplifyCodeCommitExecutionRole-{Amplify-app-id}

上記の IAM ポリシーと IAM ロールを作成し、Amplify のサービスロールとするために、先述の 4 つの IAM に関する権限が必要になります。 PowerUserAccess には、IAM に関する権限が付与されていないため、PowerUserAccess のみではエラーが発生します。

やってみた

実際に PowerUserAccess だけのパターンと、PowerUserAccess + 4 つの権限のパターンを試してみました。 なお、CodeCommit にはあらかじめアプリを push してあります。

PowerUserAccess だけのパターン

Amplify コンソールでアプリを作成してみます。 Git リポジトリで CodeCommit を選択します。

リポジトリとブランチを選択します。

「AWS Amplify がプロジェクトのルートディレクトリでホストされているすべてのファイルを自動的にデプロイすることを許可」にチェックをいれます。 サービスロールは、「新しいサービスロールを使用したリポジトリへの読み取り専用アクセス」を選択します。

その他の設定はデフォルトのままデプロイします。

デプロイ後にビルドでエラーが発生しました。 CodeCommit のリポジトリにアクセスできていないようです。

アプリの設定を見ると、サービスロールがありません。

また、IAM 側でも IAM ポリシーや IAM ロールは作られていません。 この状態では Amplify が CodeCommit にアクセスできないため、エラーが発生しています。

PowerUserAccess + 4 つの権限のパターン

PowerUserAccess に加えて、以下の権限を付与します。

CreatePolicy
CreateRole
AttachRolePolicy
PassRole

今回は以下のような IAM ポリシーを作成して、対象の IAM ユーザーにアタッチしました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "iam:CreatePolicy",
        "iam:PassRole",
        "iam:CreateRole",
        "iam:AttachRolePolicy"
      ],
      "Resource": [
        "arn:aws:iam::{Accout-ID}:role/*",
        "arn:aws:iam::{Accout-ID}:policy/*"
      ]
    }
  ]
}

こちらのパターンでも先ほどのパターンと同様の手順で Amplify アプリをコンソールからデプロイします。 デプロイ後にビルドでのリポジトリクローンは成功し、その後のデプロイも成功しています。

サービスロールも紐づけられています。

IAM ポリシーと IAM ロールも作成されています。

無事デプロイできました。

参考資料