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を設定するには、以下を実行する必要があります:
- 前提条件を完了する
- Amazon Q Developerコンソールでプロファイルを作成する
- Identity Providerを作成する
- IAMロールを作成する
- ロールを編集する
- ARNをGitLabに入力して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.12844.219.176.18754.226.244.221
- GitLabと同期されたUltimateサブスクリプションと、GitLab Duo with Amazon Qアドオンを使用する必要があります。
Amazon Q Developerコンソールでプロファイルを作成する
Amazon Q Developerプロファイルを作成します。
- Amazon Q Developerコンソールを開きます。
- Amazon Q Developer in GitLabを選択します。
- Get Startedを選択します。
- Profile nameには、リージョンの一意のプロファイル名を入力します。たとえば、
QDevProfile-us-east-1などです。 - オプション。Profile description - optionalには、説明を入力します。
- Createを選択します。
IAM Identity Providerを作成する
次に、IAM Identity Providerを作成します。
まず、GitLabからいくつかの値が必要です:
前提条件:
- 管理者である必要があります。
- GitLabにサインインします。
- 右上隅で、管理者を選択します。
- 左側のサイドバーで、設定 > 一般を選択します。
- GitLab Duo with Amazon Qを展開します。
- 設定の表示を選択します。
- ステップ1で、プロバイダーURLとオーディエンスをコピーします。これらは、次のステップで必要になります。
次に、AWS Identity Providerを作成します:
- AWS IAMコンソールにサインインします。
- Access Management > Identity providersを選択します。
- Add providerを選択します。
- Provider typeで、OpenID Connectを選択します。
- Provider URLには、GitLabの値を入力します。
- Audienceには、GitLabの値を入力します。
- Add providerを選択します。
IAMロールを作成する
次に、IAM Identity Providerを信頼してAmazon QにアクセスできるIAMロールを作成する必要があります。
IAMロールを設定した後、ロールに関連付けられているAWSアカウントを変更することはできません。
AWS IAMコンソールで、Access Management > Roles > Create roleを選択します。
Web identityを選択します。
Web identityには、以前に入力したプロバイダーURLを選択します。
Audienceには、以前に入力したオーディエンス値を選択します。
Nextを選択します。
Add permissionsページで:
- 管理ポリシーを使用するには、Permissions policiesで、
GitLabDuoWithAmazonQPermissionsPolicyを検索して選択します。 - インラインポリシーを作成するには、Nextを選択して、Permissions policiesをスキップします。ポリシーは後で作成します。
- 管理ポリシーを使用するには、Permissions policiesで、
Nextを選択します。
ロールに名前を付けます(例:
QDeveloperAccess)。信頼ポリシーが正しいことを確認します。次のようになるはずです:
{ "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>" }, } } ] }Create roleを選択します。
インラインポリシーを作成する(オプション)
管理ポリシーを使用するのではなく、インラインポリシーを作成するには:
Permissions > Add permissions > Create inline policyを選択します。
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/*" } ] }Actions > Optimize for readabilityを選択して、AWS形式にし、JSONを解析します。
Nextを選択します。
ポリシーに
gitlab-duo-amazon-q-policyという名前を付けて、Create policyを選択します。
ロールを編集する
次に、ロールを編集します:
作成したロールを見つけて選択します。
セッション時間を12時間に変更します。セッションが12時間以上に設定されていない場合、
AssumeRoleWithWebIdentityはAIゲートウェイで失敗します。- Roles searchフィールドに、IAMロールの名前を入力してから、そのロール名を選択します。
- Summaryで、Editを選択してセッション時間を編集します。
- Maximum session durationドロップダウンリストを選択してから、12 hoursを選択します。
- Save changeを選択します。
ページにリストされているARNをコピーします。次のようになります:
arn:aws:iam::123456789:role/QDeveloperAccess
ARNをGitLabに入力してAmazon Qを有効にする
次に、ARNをGitLabに入力し、どのグループとプロジェクトが機能にアクセスできるかを決定します。
前提条件:
- GitLab管理者である必要があります。
GitLab Duo with Amazon Qの設定を完了するには:
GitLabにサインインします。
右上隅で、管理者を選択します。
左側のサイドバーで、設定 > 一般を選択します。
GitLab Duo with Amazon Qを展開します。
設定の表示を選択します。
IAMロールのARNで、ARNを貼り付けます。
どのグループとプロジェクトがGitLab Duo with Amazon Qを使用できるかを決定するには、オプションを選択します:
- インスタンスに対してオンにするが、グループとプロジェクトでオフにできるようにするには、デフォルトでオンを選択します。
- オプション。Amazon Qがマージリクエストにあるコードを自動的にレビューするように設定するには、マージリクエストにあるコードをAmazon Qで自動的にレビューするを選択します。
- インスタンスに対してオフにするが、グループとプロジェクトでオンにできるようにするには、デフォルトでオフを選択します。
- インスタンスに対してオフにし、グループまたはプロジェクトでオンにできないようにするには、常にオフを選択します。
- インスタンスに対してオンにするが、グループとプロジェクトでオフにできるようにするには、デフォルトでオンを選択します。
変更を保存を選択します。
保存すると、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ゲートウェイを使用するように設定できます。
Railsコンソールセッションを開始します。たとえば、Linuxパッケージを使用するインストールの場合、以下を実行します:
sudo gitlab-rails console現在割り当てられているサービスURLを表示するには、以下を実行します:
Ai::Setting.instance.ai_gateway_urlサービス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をオフにするには:
- GitLabにサインインします。
- 右上隅で、管理者を選択します。
- 左側のサイドバーで、設定 > 一般を選択します。
- GitLab Duo with Amazon Qを展開します。
- 設定の表示を選択します。
- 常にオフを選択します。
- 変更を保存を選択します。
グループに対してオフにする
前提条件:
- グループのオーナーロールが必要です。
グループに対してGitLab Duo with Amazon Qをオフにするには:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > 一般を選択します。
- Amazon Qを展開します。
- オプションを選択します:
- グループに対してオフにするが、他のグループまたはプロジェクトでオンにできるようにするには、デフォルトでオフを選択します。
- グループに対してオフにし、他のグループまたはプロジェクトでオンにできないようにするには、常にオフを選択します。
- 変更を保存を選択します。
プロジェクトに対してオフにする
前提条件:
- プロジェクトのオーナーロールを持っている必要があります。
プロジェクトに対してGitLab Duo with Amazon Qをオフにするには:
- 上部のバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > 一般を選択します。
- 可視性、プロジェクトの機能、権限を展開します。
- Amazon Qで、切替をオフにします。
- 変更を保存を選択します。
トラブルシューティング
GitLabとAmazon Qの接続で問題が発生した場合は、GitLabインストールがすべての前提条件を満たしていることを確認してください。
次の問題が発生する可能性もあります。
GitLabインスタンスUUIDの不一致
Amazon Qの接続を解除するときに、GitLab instance UUID mismatchエラーが発生する可能性があります。通常、この問題は次の場合に発生します:
- GitLabインスタンスがバックアップから復元された。
- GitLabインスタンスが新しいインフラストラクチャに移行した。
- GitLabインスタンスUUIDが何らかの別の理由で変更された。
UUIDの不一致が根本原因であることを確認するには、次の検証手順に進みます。
検証する
GitLabがホストされているEC2インスタンスにサインインします。
Railsコンソールにアクセスします。
現在のUUIDを取得します:
Gitlab::CurrentSettings.current_application_settings.uuidJWTトークンを取得します:
token = CloudConnector::Tokens.get(unit_primitive: :agent_quick_actions, resource: :instance) JWT.decode(token, false, nil)
ステップ3のsubフィールドとステップ4のgitlab_instance_uuidの間にUUIDの不一致が存在する場合、問題は明らかです。
この問題を解決するには、次の手順を実行します。
すべてのアクティブなライセンスを削除します。
すべてのサブスクリプションアドオン購入を削除します:
Railsコンソールを開き、以下を実行します:
GitlabSubscriptions::AddOnPurchase.all.destroy_allインスタンスUUIDのリセットを実行します。Railsコンソールで、以下を実行します:
ApplicationSetting.update!(uuid: SecureRandom.uuid)アクティブなライセンスを適用します。
1分ほど待って、ライセンスを同期します。このアクションにより、Cloud Connectorトークンが強制的に再生成されます。(このステップを実行しないと、ヘッダーの不一致が発生します。)
新しいUUIDでIdPとIAMロールを更新します。
次のステップを選択します:
- 新しいUUIDで既存のIdPとIAMロールを更新して、GitLab Duo with Amazon Qを引き続き使用することにより、既存の設定の使用を継続します。
- オフボード:
- GitLab Duo with Amazon Qからオフボードします。
- 必要に応じて、新しい接続を設定します。
完了すると、UUIDの不一致の問題が解決し、新しい設定でGitLab Duo with Amazon Qが適切に機能するはずです。