Azure Red Hat OpenShift 4 クラスターの Microsoft Entra 認証を構成する (CLI)

CLI をローカル環境にインストールして使う場合、この記事では、Azure CLI バージョン 2.30.0 以降を実行している必要があります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

Microsoft Entra アプリケーションの構成に使用するクラスター固有の URL を取得します。

リソース グループとクラスター名の変数を設定します。

<resource_group> を実際のリソース グループの名前に、<aro_cluster> を実際のクラスター名に置き換えます。

resource_group=<resource_group>
aro_cluster=<aro_cluster>

クラスターの OAuth コールバック URL を作成し、変数 oauthCallbackURL に格納します。

Note

OAuth コールバック URL の AAD セクションは、後でセットアップする OAuth ID プロバイダー名と一致している必要があります。

domain=$(az aro show -g $resource_group -n $aro_cluster --query clusterProfile.domain -o tsv)
location=$(az aro show -g $resource_group -n $aro_cluster --query location -o tsv)
apiServer=$(az aro show -g $resource_group -n $aro_cluster --query apiserverProfile.url -o tsv)
webConsole=$(az aro show -g $resource_group -n $aro_cluster --query consoleProfile.url -o tsv)

oauthCallbackURL の形式は、カスタム ドメインでは少し異なります。

  • カスタム ドメイン (contoso.com など) を使用している場合は、次のコマンドを実行します。

    oauthCallbackURL=https://oauth-openshift.apps.$domain/oauth2callback/AAD
    
  • カスタムドメインを使用していない場合、$domain は 8 文字の英数字文字列になり、$location.aroapp.io によって拡張されます。

    oauthCallbackURL=https://oauth-openshift.apps.$domain.$location.aroapp.io/oauth2callback/AAD
    

Note

OAuth コールバック URL の AAD セクションは、後でセットアップする OAuth ID プロバイダー名と一致している必要があります。

認証のために Microsoft Entra アプリケーションを作成します。

<client_secret> をセキュリティで保護されたアプリケーション用パスワードに置き換えます。

client_secret=<client_secret>

Microsoft Entra アプリケーションを作成し、作成したアプリケーション識別子を取得します。

app_id=$(az ad app create \
  --query appId -o tsv \
  --display-name aro-auth \
  --reply-urls $oauthCallbackURL \
  --password $client_secret)

アプリケーションが含まれるサブスクリプションのテナント ID を取得します。

tenant_id=$(az account show --query tenantId -o tsv)

マニフェスト ファイルを作成して、ID トークンに含める省略可能な要求を定義する

アプリケーション開発者は、Microsoft Entra アプリケーションで省略可能な要求を使用して、アプリケーションに送信されるトークンに含める要求を指定できます。

次の処理に省略可能な要求を使用できます。

  • アプリケーションのトークンに含める追加の要求を選択する。
  • Microsoft Entra ID からトークンで返される特定の要求の動作を変更する。
  • アプリケーションのカスタムの要求を追加してアクセスする。

Microsoft Entra ID によって返される ID トークンの一部として upn を追加することで、OpenShift で email 要求を使用し、upn にフォールバックして推薦ユーザー名を設定するよう構成します。

manifest.json ファイルを作成して、Microsoft Entra ID アプリケーションを構成します。

cat > manifest.json<< EOF
[{
  "name": "upn",
  "source": null,
  "essential": false,
  "additionalProperties": []
},
{
"name": "email",
  "source": null,
  "essential": false,
  "additionalProperties": []
}]
EOF

Microsoft Entra ID アプリケーションの optionalClaims をマニフェストで更新する

az ad app update \
  --set optionalClaims.idToken=@manifest.json \
  --id $app_id

Microsoft Entra アプリケーション スコープ アクセス許可

Microsoft Entra ID からユーザー情報を読み取れるようにするには、適切なスコープを定義する必要があります。

Azure Active Directory Graph.User.Read スコープでサインインとユーザー プロファイルの読み取りを有効にする権限を追加します。

az ad app permission add \
 --api 00000002-0000-0000-c000-000000000000 \
 --api-permissions 311a71cc-e848-46a1-bdf8-97ff7156d8e6=Scope \
 --id $app_id

Note

この Microsoft Entra ID のグローバル管理者として認証されていない限り、同意を与えるためのメッセージは無視することができます。 標準ドメイン ユーザーは、Microsoft Entra 資格情報を使用してクラスターに初めてログインするときに、同意を付与するように求められます。

ユーザーとグループをクラスターに割り当てる (省略可能)

Microsoft Entra テナントに登録されたアプリケーションは、既定ではテナントの正常に認証されたすべてのユーザーが利用できます。 Microsoft Entra ID により、テナントの管理者と開発者が、テナントのユーザーまたはセキュリティ グループの特定のセットにアプリを制限できるようになります。

Microsoft Entra のドキュメントに記載されている手順に従って、ユーザーとグループをアプリに割り当てます

OpenShift OpenID 認証の構成

kubeadmin の資格情報を取得します。 次のコマンドを実行して、kubeadmin ユーザーのパスワードを調べます。

kubeadmin_password=$(az aro list-credentials \
  --name $aro_cluster \
  --resource-group $resource_group \
  --query kubeadminPassword --output tsv)

次のコマンドを使用して、OpenShift クラスターの API サーバーにログインします。

oc login $apiServer -u kubeadmin -p $kubeadmin_password

Microsoft Entra アプリケーション シークレットを格納するための OpenShift シークレットを作成します。

oc create secret generic openid-client-secret-azuread \
  --namespace openshift-config \
  --from-literal=clientSecret=$client_secret

oidc.yaml ファイルを作成し、Microsoft Entra ID に対して OpenShift OpenID 認証を構成します。

cat > oidc.yaml<< EOF
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: AAD
    mappingMethod: claim
    type: OpenID
    openID:
      clientID: $app_id
      clientSecret:
        name: openid-client-secret-azuread
      extraScopes:
      - email
      - profile
      extraAuthorizeParameters:
        include_granted_scopes: "true"
      claims:
        preferredUsername:
        - email
        - upn
        name:
        - name
        email:
        - email
      issuer: https://login.microsoftonline.com/$tenant_id
EOF

構成をクラスターに適用します。

oc apply -f oidc.yaml

次のような応答が返されます。

oauth.config.openshift.io/cluster configured

Microsoft Entra ID によってログインを検証する

OpenShift Web コンソールをログアウトしてもう一度ログインしようとすると、Microsoft Entra ID でログインするための新しいオプションが表示されます。 数分待つ必要がある場合があります。

Log in screen with Microsoft Entra option