保持ポリシーの上限を引き上げる

Google Distributed Cloud(GDC)エアギャップには、ユーザーが設定された最大保持ポリシー GDCHRestrictAttributeRange を超えないように制限する制約があります。この制約は、Anthos Config Management の Policy Controller によって、組織管理クラスタのバケット カスタム リソース(CR)に適用されます。つまり、デフォルトでは、システム サービス アカウント、システム ユーザー、system:masters グループ内のユーザーのみがファイナライザーを削除できます。概要の手順では、バケット CR の保持ポリシーの上限を引き上げる方法について説明します。

前提条件

クラスタの KUBECONFIG ファイルを生成する

Kubectl コマンドが機能するには、有効な KUBECONFIG ファイルが必要です。このプロセスでは、ルート管理者、組織管理者、組織システム、ユーザー クラスタの KUBECONFIG ファイルを生成する手順を説明します。

前提条件

続行する前に、次の点をご確認ください。

  • gdcloud がインストールされている。

  • kubectl CLI がインストールされている。

  • ワークステーションにインストールされた認証局(CA)署名付き証明書。

  • 組織名。

  • (GDC)ルート URL。OC IT 管理者からルート URL を提供してもらう必要があります。

必要な環境変数を設定する

このセクションの手順に沿って、org-adminsystem、または任意のユーザー クラスタの KUBECONFIG ファイルを生成します。

  1. 次のコマンドを実行して、現在のターミナルで後で使用する環境変数 ORG を定義します。ORG は組織名です。

    export ORG=
    
  2. 次のコマンドを実行して、現在のターミナルで後で使用する環境変数 CONSOLE_URL を定義します。

    export CONSOLE_URL=https://console.${ORG:?}.$GDC_URL/
    gdcloud config set core/organization_console_url ${CONSOLE_URL:?}
    

    GDC_URL は、GDC プロジェクトのベース URL に置き換えます。

クラスタへのログイン

  1. 次のコマンドを実行してログインします。

    gdcloud auth login --no-browser
    
  2. 出力された gdcloud コマンドをコピーして、ブラウザにアクセスできるマシンで実行します。

  3. 印刷された URL をコピーして、ウェブブラウザのアドレスバーに貼り付けます。

  4. ウェブページの手順に沿ってログインを完了します。

  5. ログインが正常に完了すると、ブラウザに「Authentication successful. このウィンドウを閉じてください

  6. ターミナルの指示に沿って操作します。ログインに成功すると、ターミナルに「You are now logged in」というメッセージが表示されます。

KUBECONFIG ファイルを生成する

  1. 次のコマンドを実行して、現在のターミナルで後で使用する環境変数 CLUSTER を定義します。CLUSTER は、クラスタの任意の名前です。

    export CLUSTER=
    

    次の表を参照して、ORGANIZATION-NAMECLUSTER-NAME を適切な値に置き換えてクラスタの名前を取得します。

    クラスタ クラスタ名
    ルート管理者 root-admin
    組織管理者 ORGANIZATION-NAME-admin
    組織システム ORGANIZATION-NAME-system
    ユーザー CLUSTER-NAME

    各名前は次のものを表しています。

    • ルート管理クラスタ名は root-admin です。
    • amira という名前の組織の組織管理者と組織システム クラスタ名は、それぞれ amira-adminamira-system です。
    • ユーザー クラスタのクラスタ名は、クラスタ名です。
  2. 次のコマンドを実行して、KUBECONFIG ファイルを生成し、認証情報を検証します。 sh export KUBECONFIG=${HOME}/${CLUSTER:?}-kubeconfig.yaml rm ${KUBECONFIG:?} gdcloud clusters get-credentials ${CLUSTER:?} [[ $(kubectl config current-context) == *${CLUSTER:?}* ]] && echo "Success. Your kubeconfig is at $KUBECONFIG" || echo "Failure" コマンドは次の出力を返します。

    Success. Your kubeconfig is at /usr/local/google/home/iris/kubeconfig-amira-admin.yaml
    

クラスタでポリシー管理者ロールを取得する

このプロセスでは、クラスタへの一時的な昇格アクセスを取得できます。

前提条件

続行する前に、次の点をご確認ください。

  • GitLab リクエスト承認者として機能する別の IO。IO には、GitLab リクエストを承認する権限が必要です。
  • アクセスする必要があるクラスタ名。例: root-adminorg-1-admin
  • 引き受けるロールのタイプ。例: Role ClusterRoleProjectRoleOrganizationRole
  • 引き受けるロール。
  • 必要なアクセスの名前空間。ClusterRoleOrganizationRole では不要です。
  • OC IT ワークステーションへのアクセス権。
  • GitLab の認証情報。

elevated-access-script を実行する

  1. ワークステーションの private-cloud/operations/tools/ ディレクトリから elevated-access-script.sh スクリプトを実行します。

  2. 「Please enter the GDCH_URL of the cluster...」という質問に $GDCH_URL で答えます。

  3. 「Enter Gitlab username:」という質問に、Gitlab へのログインに使用するユーザー名で答えます。

  4. 「Enter Gitlab personal access token:」という質問に対して、アカウントの個人アクセス トークンを入力します。個人用アクセス トークンを作成する手順は次のとおりです。

    1. https://gitlab.$GDCH_URL/gdch/iac に移動します。IO Gitlab アカウントにログインします。

    2. アバターを選択します。

    3. [プロフィールを編集] を選択します。

    4. ナビゲーション メニューで [アクセス トークン] を選択します。

    5. トークンの名前と有効期限を入力します。

    6. 目的のスコープを選択します。

    7. [個人用アクセス トークンを作成] を選択します。

  5. スクリプトは、リポジトリ iac をローカル ディレクトリにクローンします。

  6. 「Enter your IdP prefix」という質問に回答します。IdP Prefix は、GDC クラスタ内のすべてのユーザー名の前に付加される、各 ID プロバイダに固有の接頭辞です。この接頭辞は、次のいずれかの方法で確認できます。

    • Watch Commander に相談する
    • GDC Setup からの手順の取得(具体的には、オペレーター ユーザーガイドの「Identity and Access Management」セクション)。

    この接頭辞の一般的な形式は、一連の単語の後に区切り文字(gdch-infra-operator-)が続くものです。

  7. [Enter your username](ユーザー名を入力)という質問に、ID プロバイダへのログインに使用するユーザー名で答えます。

  8. 「Enter the cluster you need the role for」という質問に、ロールが必要なクラスタの名前で答えます。

  9. スクリプトを実行すると、Kubernetes ロールタイプを選択するよう求められます。リクエストするロールの種類を入力します。

  10. 「引き受ける必要のあるロールを入力してください」という質問に、ロールの名前で答えます。

  11. ロールのアクセス期間を入力します。推奨されるアクセス期間は 3 時間です。

  12. このスクリプトは 3 つの YAML ファイルを生成します。

    1. ./iac/infrastructure/zonal/zones/ZONE_NAME/${CLUSTER}/kustomization.yaml
    2. ./iac/infrastructure/zonal/zones/ZONE_NAME/${CLUSTER}/${USER}-bindings/kustomization.yaml
    3. ./iac/infrastructure/zonal/zones/ZONE_NAME/${CLUSTER}/${USER}-bindings/${ROLE}-binding.yaml

    Y を押して各ファイルが正しいことを確認するか、N を押して vim でファイルを編集します。

  13. すべてのファイルを確認すると、スクリプトはこれらのファイルを GitLab の elevated_access ブランチに push し、merge リクエストを作成します。

昇格したアクセス リクエストを確認して承認する

以下に、昇格されたアクセス権のリクエストの確認と承認に対して行われるアクションを示します。

  1. 別の IO が、ポリシー構成ファイルを含む GitLab リクエストを確認し、リクエストを適切に承認します。
  2. IO がリクエストを承認すると、システムはリクエストされた期間のアクセス権を付与します。
  3. システムは、設定された有効期限が切れるとアクセス権を取り消します。

パッチ制約

必要なアクセス権を取得したら、次のコマンドを実行して、新しいバケット保持ポリシーの最大値を設定します。この例では、新しい最大値は 120 日ですが、コマンドをプラットフォーム管理者(PA)が要求する値に更新してください。

kubectl patch GDCHRestrictAttributeRange restrict-bucket-retention-policy -p '{"spec":{"parameters":{"attributeMaxValue":120}}}' --type=merge

出力は次のようになります。

gdchrestrictattributerange.constraints.gatekeeper.sh/restrict-bucket-retention-policy patched