正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GitLab Duo with Amazon Qを設定する

  • プラン: Ultimate
  • アドオン: GitLab Duo with Amazon Q
  • 提供形態: GitLab Self-Managed

GitLab Duo with Amazon Qは、他のGitLab Duoアドオンと組み合わせることはできません。

GitLab Duo with Amazon Qのサブスクリプションを取得するには、アカウントエグゼクティブにお問い合わせください。

トライアルをリクエストするには、このフォームにご記入ください

Self-ManagedインスタンスでGitLab Duo with Amazon Qを設定するには、以下の手順を実行します。

GitLab Duo with Amazon Qを設定する

GitLab Duo with Amazon Qを設定するには、以下を実行する必要があります:

前提条件

  • GitLab Self-Managedが必要です:
    • GitLab 17.11以降。
    • Amazon Qは、リクエストされたアクションを実行するときに、GitLabインスタンスのREST APIを使用してデータを読み書きします。また、HTTPS URLにアクセスできる必要があります(SSL証明書は自己署名であってはなりません)。
    • インスタンスは、インスタンスが使用するように設定されているポートでTCP/TLSを使用して、次のIPアドレスから発信されるAmazon Qサービスからの受信ネットワークアクセスを許可する必要があります。これは、デフォルトでポート443です。
      • 34.228.181.128
      • 44.219.176.187
      • 54.226.244.221
    • GitLabと同期されたUltimateサブスクリプションと、GitLab Duo with Amazon Qアドオンを使用する必要があります。

Amazon Q Developerコンソールでプロファイルを作成する

Amazon Q Developerプロファイルを作成します。

  1. Amazon Q Developerコンソールを開きます。
  2. Amazon Q Developer in GitLabを選択します。
  3. Get Startedを選択します。
  4. Profile nameには、リージョンの一意のプロファイル名を入力します。たとえば、QDevProfile-us-east-1などです。
  5. オプション。Profile description - optionalには、説明を入力します。
  6. Createを選択します。

IAM Identity Providerを作成する

次に、IAM Identity Providerを作成します。

まず、GitLabからいくつかの値が必要です:

前提条件:

  • 管理者である必要があります。
  1. GitLabにサインインします。
  2. 右上隅で、管理者を選択します。
  3. 左側のサイドバーで、設定 > 一般を選択します。
  4. GitLab Duo with Amazon Qを展開します。
  5. 設定の表示を選択します。
  6. ステップ1で、プロバイダーURLとオーディエンスをコピーします。これらは、次のステップで必要になります。

次に、AWS Identity Providerを作成します:

  1. AWS IAMコンソールにサインインします。
  2. Access Management > Identity providersを選択します。
  3. Add providerを選択します。
  4. Provider typeで、OpenID Connectを選択します。
  5. Provider URLには、GitLabの値を入力します。
  6. Audienceには、GitLabの値を入力します。
  7. Add providerを選択します。

IAMロールを作成する

次に、IAM Identity Providerを信頼してAmazon QにアクセスできるIAMロールを作成する必要があります。

IAMロールを設定した後、ロールに関連付けられているAWSアカウントを変更することはできません。

  1. AWS IAMコンソールで、Access Management > Roles > Create roleを選択します。

  2. Web identityを選択します。

  3. Web identityには、以前に入力したプロバイダーURLを選択します。

  4. Audienceには、以前に入力したオーディエンス値を選択します。

  5. Nextを選択します。

  6. Add permissionsページで:

    • 管理ポリシーを使用するには、Permissions policiesで、GitLabDuoWithAmazonQPermissionsPolicyを検索して選択します。
    • インラインポリシーを作成するには、Nextを選択して、Permissions policiesをスキップします。ポリシーは後で作成します。
  7. Nextを選択します。

  8. ロールに名前を付けます(例: QDeveloperAccess)。

  9. 信頼ポリシーが正しいことを確認します。次のようになるはずです:

    {
     "Version": "2012-10-17",
     "Statement": [
         {
             "Effect": "Allow",
             "Action": "sts:AssumeRoleWithWebIdentity",
             "Principal": {
                 "Federated": "arn:aws:iam::<AWS_Account_ID>:oidc-provider/auth.token.gitlab.com/cc/oidc/<Instance_ID>"
             },
             "Condition": {
                 "StringEquals": {
                     "auth.token.gitlab.com/cc/oidc/<Instance_ID>:aud": "gitlab-cc-<Instance_ID>"
                 },
    
             }
          }
       ]
    }
  10. Create roleを選択します。

インラインポリシーを作成する(オプション)

管理ポリシーを使用するのではなく、インラインポリシーを作成するには:

  1. Permissions > Add permissions > Create inline policyを選択します。

  2. JSONを選択し、エディタに以下を貼り付けます:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "GitLabDuoUsagePermissions",
          "Effect": "Allow",
          "Action": [
            "q:SendEvent",
            "q:CreateAuthGrant",
            "q:UpdateAuthGrant",
            "q:GenerateCodeRecommendations",
            "q:SendMessage",
            "q:ListPlugins",
            "q:VerifyOAuthAppConnection"
          ],
          "Resource": "*"
        },
        {
          "Sid": "GitLabDuoManagementPermissions",
          "Effect": "Allow",
          "Action": [
            "q:CreateOAuthAppConnection",
            "q:DeleteOAuthAppConnection"
          ],
          "Resource": "*"
        },
        {
          "Sid": "GitLabDuoPluginPermissions",
          "Effect": "Allow",
          "Action": [
            "q:CreatePlugin",
            "q:DeletePlugin",
            "q:GetPlugin"
          ],
          "Resource": "arn:aws:qdeveloper:*:*:plugin/GitLabDuoWithAmazonQ/*"
        }
      ]
    }
  3. Actions > Optimize for readabilityを選択して、AWS形式にし、JSONを解析します。

  4. Nextを選択します。

  5. ポリシーにgitlab-duo-amazon-q-policyという名前を付けて、Create policyを選択します。

ロールを編集する

次に、ロールを編集します:

  1. 作成したロールを見つけて選択します。

  2. セッション時間を12時間に変更します。セッションが12時間以上に設定されていない場合、AssumeRoleWithWebIdentityはAIゲートウェイで失敗します。

    1. Roles searchフィールドに、IAMロールの名前を入力してから、そのロール名を選択します。
    2. Summaryで、Editを選択してセッション時間を編集します。
    3. Maximum session durationドロップダウンリストを選択してから、12 hoursを選択します。
    4. Save changeを選択します。
  3. ページにリストされているARNをコピーします。次のようになります:

    arn:aws:iam::123456789:role/QDeveloperAccess

ARNをGitLabに入力してAmazon Qを有効にする

次に、ARNをGitLabに入力し、どのグループとプロジェクトが機能にアクセスできるかを決定します。

前提条件:

  • GitLab管理者である必要があります。

GitLab Duo with Amazon Qの設定を完了するには:

  1. GitLabにサインインします。

  2. 右上隅で、管理者を選択します。

  3. 左側のサイドバーで、設定 > 一般を選択します。

  4. GitLab Duo with Amazon Qを展開します。

  5. 設定の表示を選択します。

  6. IAMロールのARNで、ARNを貼り付けます。

  7. どのグループとプロジェクトがGitLab Duo with Amazon Qを使用できるかを決定するには、オプションを選択します:

    • インスタンスに対してオンにするが、グループとプロジェクトでオフにできるようにするには、デフォルトでオンを選択します。
      • オプション。Amazon Qがマージリクエストにあるコードを自動的にレビューするように設定するには、マージリクエストにあるコードをAmazon Qで自動的にレビューするを選択します。
    • インスタンスに対してオフにするが、グループとプロジェクトでオンにできるようにするには、デフォルトでオフを選択します。
    • インスタンスに対してオフにし、グループまたはプロジェクトでオンにできないようにするには、常にオフを選択します。
  8. 変更を保存を選択します。

保存すると、APIはAIゲートウェイに接続して、Amazon QでOAuthアプリケーションを作成します。

成功したことを確認するには:

  • Amazon CloudWatchコンソールログで、204ステータスコードを確認します。詳細については、What is Amazon CloudWatchを参照してください。
  • GitLabでは、Amazon Q settings have been savedという通知が表示されます。
  • GitLabで、左サイドバーのアプリケーションを選択します。Amazon Q OAuthアプリケーションが表示されます。

管理者が顧客管理のキーを使用できるようにする

管理者は、AWS Key Management Service(AWS KMS)の顧客管理のキー(CMK)を使用して顧客データを暗号化できます。

KMSコンソールでキーポリシーを作成するときに、CMKを使用する権限を付与するようにロールポリシーを更新します。

kms:ViaService条件キーは、指定されたAWSサービスからのリクエストに対してKMSキーの使用を制限します。また、この条件キーは、特定のサービスからリクエストが送信されたときに、KMSキーを使用する権限を拒否するために使用されます。条件キーを使用すると、CMKを使用してコンテンツを暗号化または復号化できるユーザーを制限することができます。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "Sid0",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::<awsAccountId>:role/<rolename>"
         },
         "Action": [
            "kms:Decrypt",
            "kms:DescribeKey",
            "kms:Encrypt",
            "kms:GenerateDataKey",
            "kms:GenerateDataKeyWithoutPlaintext",
            "kms:ReEncryptFrom",
            "kms:ReEncryptTo"
         ],
         "Resource": "*",
         "Condition": {
            "StringEquals": {
                "kms:ViaService": [
                    "q.<region>.amazonaws.com"
                ]
            }
        }
      }
   ]
}

詳細については、AWS KMSデベロッパーガイドのkms:ViaServiceを参照してください。

GitLabをAWSがホストするAIゲートウェイを使用するように設定する

GitLabをAWS上でホストされているAIゲートウェイを使用するように設定できます。

  1. Railsコンソールセッションを開始します。たとえば、Linuxパッケージを使用するインストールの場合、以下を実行します:

    sudo gitlab-rails console
  2. 現在割り当てられているサービスURLを表示するには、以下を実行します:

    Ai::Setting.instance.ai_gateway_url
  3. サービスURLを更新するには、以下を実行します:

    Ai::Setting.instance.update!(ai_gateway_url: "https://cloud.gitlab.com/aws/ai")

GitLab Duo with Amazon Qをオフにする

インスタンス、グループ、またはプロジェクトに対してGitLab Duo with Amazon Qをオフにすることができます。

インスタンスに対してオフにする

前提条件:

  • 管理者である必要があります。

インスタンスに対してGitLab Duo with Amazon Qをオフにするには:

  1. GitLabにサインインします。
  2. 右上隅で、管理者を選択します。
  3. 左側のサイドバーで、設定 > 一般を選択します。
  4. GitLab Duo with Amazon Qを展開します。
  5. 設定の表示を選択します。
  6. 常にオフを選択します。
  7. 変更を保存を選択します。

グループに対してオフにする

前提条件:

  • グループのオーナーロールが必要です。

グループに対してGitLab Duo with Amazon Qをオフにするには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 設定 > 一般を選択します。
  3. Amazon Qを展開します。
  4. オプションを選択します:
    • グループに対してオフにするが、他のグループまたはプロジェクトでオンにできるようにするには、デフォルトでオフを選択します。
    • グループに対してオフにし、他のグループまたはプロジェクトでオンにできないようにするには、常にオフを選択します。
  5. 変更を保存を選択します。

プロジェクトに対してオフにする

前提条件:

  • プロジェクトのオーナーロールを持っている必要があります。

プロジェクトに対してGitLab Duo with Amazon Qをオフにするには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 設定 > 一般を選択します。
  3. 可視性、プロジェクトの機能、権限を展開します。
  4. Amazon Qで、切替をオフにします。
  5. 変更を保存を選択します。

トラブルシューティング

GitLabとAmazon Qの接続で問題が発生した場合は、GitLabインストールがすべての前提条件を満たしていることを確認してください。

次の問題が発生する可能性もあります。

GitLabインスタンスUUIDの不一致

Amazon Qの接続を解除するときに、GitLab instance UUID mismatchエラーが発生する可能性があります。通常、この問題は次の場合に発生します:

  • GitLabインスタンスがバックアップから復元された。
  • GitLabインスタンスが新しいインフラストラクチャに移行した。
  • GitLabインスタンスUUIDが何らかの別の理由で変更された。

UUIDの不一致が根本原因であることを確認するには、次の検証手順に進みます。

検証する

  1. GitLabがホストされているEC2インスタンスにサインインします。

  2. Railsコンソールにアクセスします。

  3. 現在のUUIDを取得します: Gitlab::CurrentSettings.current_application_settings.uuid

  4. JWTトークンを取得します:

    token = CloudConnector::Tokens.get(unit_primitive: :agent_quick_actions, resource: :instance)
    JWT.decode(token, false, nil)

ステップ3のsubフィールドとステップ4のgitlab_instance_uuidの間にUUIDの不一致が存在する場合、問題は明らかです。

この問題を解決するには、次の手順を実行します。

  1. すべてのアクティブなライセンスを削除します。

  2. すべてのサブスクリプションアドオン購入を削除します:

    Railsコンソールを開き、以下を実行します:

    GitlabSubscriptions::AddOnPurchase.all.destroy_all
  3. インスタンスUUIDのリセットを実行します。Railsコンソールで、以下を実行します:

    ApplicationSetting.update!(uuid: SecureRandom.uuid)
  4. アクティブなライセンスを適用します。

  5. 1分ほど待って、ライセンスを同期します。このアクションにより、Cloud Connectorトークンが強制的に再生成されます。(このステップを実行しないと、ヘッダーの不一致が発生します。)

  6. 新しいUUIDでIdPとIAMロールを更新します。

  7. 次のステップを選択します:

    • 新しいUUIDで既存のIdPとIAMロールを更新して、GitLab Duo with Amazon Qを引き続き使用することにより、既存の設定の使用を継続します。
    • オフボード:
      1. GitLab Duo with Amazon Qからオフボードします。
      2. 必要に応じて、新しい接続を設定します。

完了すると、UUIDの不一致の問題が解決し、新しい設定でGitLab Duo with Amazon Qが適切に機能するはずです。