1.4. 配置额外的 OpenID Connect 供应商
作为系统管理员,您可以配置许多不同的 OpenID Connect (OIDC)供应商,以用于红帽的 Trusted Artifact Signer 服务。您可以配置以下 OIDC 供应商来验证用户:
- 红帽构建的 Keycloak
- Red Hat Single Sign-on (SSO)
- Amazon 安全令牌服务(STS)
- Microsoft Entra ID
- GitHub
您可以将 Google OAuth 2.0 用作 Red Hat Trusted Artifact Signer (RHTAS)服务的 OpenID Connect (OIDC)供应商。您可以决定在RHAS 部署期间或稍后配置 Google OAuth。
您可以在同一配置中定义多个不同的 OIDC 供应商。
先决条件
- Red Hat OpenShift Container Platform 4.15 或更高版本。
-
使用
cluster-admin
角色访问 OpenShift Web 控制台。 -
安装了
oc
、podman
二进制文件的工作站。 在 Google Cloud Console 中,使用以下设置创建一个 OAuth 客户端 ID:
- 将应用程序类型设置为 "Web Application"。
- 授权重定向 URI 必须包含: http://localhost/auth/callback。
流程
在工作站上打开一个终端,并登录到 OpenShift:
语法
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以从 OpenShift Web 控制台在命令行中查找您的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。
更新 RHTAS 配置。
打开以编辑
Securesign
资源:语法
oc edit Securesign NAME -n NAMESPACE
oc edit Securesign NAME -n NAMESPACE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc edit Securesign securesign-sample -n trusted-artifact-signer
oc edit Securesign securesign-sample -n trusted-artifact-signer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您必须使用为 RHTAS 安装创建的项目名称作为命名空间。
在
OIDCIssuers
部分下,使用 Google 客户端标识符、签发者的 URL 添加新子,并将Type
值设置为email
:语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Google 客户端标识符添加到
ClientID
字段。- 保存更改,退出编辑器。几秒钟后,操作员会自动重新配置 RHTAS 软件堆栈。
更改 OIDC 签发者和客户端 id 环境变量以使用 Google:
示例
export OIDC_ISSUER_URL=https://accounts.google.com export COSIGN_OIDC_CLIENT_ID="314919563931-35zke44ouf2oiztjg7v8o8c2ge9usnd1.apps.googleexample.com"
export OIDC_ISSUER_URL=https://accounts.google.com export COSIGN_OIDC_CLIENT_ID="314919563931-35zke44ouf2oiztjg7v8o8c2ge9usnd1.apps.googleexample.com"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将您的 secret 从 Google Console 复制并粘贴到纯文本文件中:
语法
echo SECRET > my-google-client-secret
echo SECRET > my-google-client-secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您已运行 RHTAS 服务,您可以通过签署测试容器镜像来验证更新的配置。
创建一个空容器镜像:
Example
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将空容器镜像推送到
ttl.sh
临时 registry:Example
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除临时 Docker 文件:
Example
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为容器镜像签名:
语法
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
cosign sign -y --oidc-client-secret-file=my-google-client-secret ttl.sh/rhtas/test-image:1h
cosign sign -y --oidc-client-secret-file=my-google-client-secret ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此时会打开一个 Web 浏览器,允许您使用电子邮件地址为容器镜像签名。
您可以使用 Red Hat Single Sign-On (SSO)作为红帽的 Trusted Artifact Signer (RHTAS)服务的 OpenID Connect 供应商。这可让您为应用程序和安全服务的 Keycloak 身份验证环境。
先决条件
- Red Hat OpenShift Container Platform 4.15 或更高版本。
-
使用
cluster-admin
角色访问 OpenShift Web 控制台。 - 有 1 GB 的容器存储可用于 Keycloak PostgreSQL 数据库。
-
安装了
oc
二进制文件的工作站。
流程
-
使用具有
cluster-admin
角色的用户登录 OpenShift Web 控制台。 创建一个新项目来部署 Keycloak 服务。
- 从 Administrator 视角中,从导航菜单中展开 Home,再单击 Projects。
- 点 Create Project 按钮。
-
新项目名称为
keycloak-system
,然后单击 Create 按钮。
- 从导航菜单中展开 Operators,然后点 OperatorHub。
- 在搜索字段中,键入 sso,然后单击 Red Hat Single Sign-on 标题。
- 单击 Install 按钮,以显示 Operator 详情。
-
如果尚未设置,请从 Installed Namespace 下拉菜单中选择
keycloak-system
。 - 在 Install Operator 页面中点 Install,并等待安装完成。
- 安装完成后,点 View Operator。
在 workstation 终端中登录到 OpenShift 集群:
语法
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以从 OpenShift Web 控制台查找要在命令行中使用的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。
切换到 Keycloak 项目:
Example
oc project keycloak-system
oc project keycloak-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Keycloak 实例:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Keycloak 域:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Keycloak 客户端:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Keycloak 用户:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置用户名、用户的电子邮件地址以及密码或引用 secret 对象。
- 返回到 OpenShift Web 控制台,点 All instances 选项卡监视并等待 Keycloak 系统成功初始化。
您可以将红帽构建的 Keycloak (RHBK)配置为红帽受信任的工件签名程序(RHTAS)服务的 OpenID Connect (OIDC)供应商。此流程指导您将 RHBK 与 RHTAS 集成。
您可以在相同的 SecureSign 配置中为 Fulcio 定义几个不同的 OIDC 供应商。
先决条件
流程
-
使用具有
cluster-admin
角色的用户登录 OpenShift Web 控制台。 创建一个新项目来部署 Keycloak 服务。
- 从 Administrator 视角中,从导航菜单中展开 Home,再单击 Projects。
- 点 Create Project 按钮。
-
新项目名称为
keycloak-system
,然后点 Create 按钮。
部署 PostgreSQL 实例,供 Keycloak 用于存储持久数据。
重要如果 Keycloak 已存在数据库,请替换与您的数据库实例对应的
Secret
资源的用户名
、密码和数据库名称
值。您可以跳过 PostgreSQL Service 和 StatefulSet 步骤的创建,并继续下一步。
创建
Secret
资源以存储数据库信息。- 从导航菜单中展开 Workloads,再单击 Secrets。
-
从 Project 下拉菜单中选择
keycloak-system
。 - 单击 Create 下拉菜单,再选择 Key/Value secret。
-
在 Secret name 字段中输入
postgresql-db
。 -
在 Key 字段中输入
username
。 -
在 Value 字段中输入
keycloak
。这是用于向 PostgreSQL 数据库实例进行身份验证的用户名 Keycloak。 - 单击 Add key/value 链接,以添加另一个键值对。
-
在 Key 字段中输入
password
。 - 在 Value 字段中输入您选择的密码。这是用于向 PostgreSQL 数据库实例进行身份验证的密码 Keycloak。
- 单击 Add key/value 链接,以添加另一个键值对。
-
在 Key 字段中输入
database
。 -
在 Value 字段中输入
keycloak
。这是用于将 Keycloak 数据存储在 PostgreSQL 数据库实例中的数据库名称。 - 点 Create 按钮。
创建 PostgreSQL Service 和 StatefulSet。
- 点 + 图标。
- 复制 Service 和 StatefulSet YAML 配置文本,并在 Import YAML 页面中,将文本粘贴到 文本编辑器框中。
-
点 Create 按钮,将 Service 和 StatefulSet 添加到
keycloak-system
项目中。
从工作站打开一个终端,并登录到 OpenShift 集群:
语法
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以从 OpenShift Web 控制台查找要在命令行中使用的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。
创建新的
Secret
资源,使其包含传输层安全(TLS)证书和对应的私钥:语法
oc create secret tls SECRET_NAME -n NAMESPACE --cert CERTIFICATE_FILE_NAME --key PRIVATE_KEY_FILE_NAME
oc create secret tls SECRET_NAME -n NAMESPACE --cert CERTIFICATE_FILE_NAME --key PRIVATE_KEY_FILE_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc create secret tls keycloak-tls -n keycloak-system --cert certificate.pem --key key.pem
oc create secret tls keycloak-tls -n keycloak-system --cert certificate.pem --key key.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意OpenShift 的服务服务证书可以自动生成和管理用于 Keycloak 的 TLS 证书。如需更多信息 , 请参阅附录。
- 在 OpenShift Web 控制台中,从导航菜单中展开 Operator,然后点 OperatorHub。
- 在搜索字段中,键入 keycloak,然后单击认证红帽目录中的 Keycloak Operator 标题。
- 单击 Install 按钮,以显示 Operator 详情。
-
在 Install Operator 页面中,从 Installed Namespace 下拉菜单中选择
keycloak-system
,然后点 Install 按钮。等待安装完成。 - 安装完成后,点 View Operator 按钮。
- 在 Keycloak 标题中点 Create instance。
在 Create Keycloak 页面中,选择 YAML 视图。
-
在
name
行中,将example-keycloak
替换为您的自定义名称,如keycloak
。 主机名可以在
hostname
属性中明确指定,或者自动生成与其他路由类似。在hostname
行中,将example.org
替换为您的自定义主机名。注意有关使 OpenShift 为 Keycloak 实例生成主机名所需的步骤,请参阅附录。???
在
spec
部分,添加您的数据库详情:Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,在
http
属性的spec
部分下,指定包含 TLS 证书的Secret
资源的名称。Example
spec: ... http: tlsSecret: keycloak-tls ...
spec: ... http: tlsSecret: keycloak-tls ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create 按钮。
-
在
- 展开 Networking 导航菜单,再单击 Routes。
- 要打开 Keycloak 管理控制台,请点击与 Keycloak 实例关联的路由的链接。
-
admin
用户的默认凭据存储在名为 keycloak-initial-admin 的 Secret 中。要查找密码,展开 Workloads 导航菜单,再单击 Secrets。 - 选择 keycloak-initial-admin Secret。
-
在 Data 部分下,找到 password 键,然后点
图标。
-
在 Keycloak Administration Console 登录页面中,输入
admin
作为用户名,并粘贴上一步的内容作为密码。 创建一个名为
trusted-artifact-signer
的新域。- 在导航菜单中,选择 Red Hat Build of Keycloak 下拉菜单。
- 选择 Create Realm。
-
输入
trusted-artifact-signer
作为 资源名称。 - 单击 Create 以创建新域。
创建新用户 。新用户可以登录到 Keycloak 管理控制台,也可以使用 RHTAS 为容器和提交签名。
- 在导航菜单的 Manage 部分下,然后选择 Clients。
- 点 Create Client 按钮
-
在 Client Id 字段中,输入
trusted-artifact-signer
。 - 另外,您还可以在对应的字段中输入 Name 和 Description。
- 点击 Next。
- 接受新客户端创建过程的 Capability Config 步骤的默认选项。
- 点击 Next。
-
在 Valid redirect URIs 字段中,输入
*
。 - 单击 Save 以创建客户端。
-
在导航菜单的 Configure 部分下,选择 Realm Settings 以查找
trusted-artifact-signer
域的 Issuer URL。 - 在 Endpoints 旁边,单击 OpenID Endpoint Configuration 链接。
-
从
issuer
属性复制 URL。 在 RHTAS 的
SecureSign
资源的.spec.fulcio.config.OIDCIssuers
部分下,将 CLIENT_ID 替换为trusted-artifact-signer
,并粘贴 URL 内容来替换 RHBK_REALM_ISSUER_URL :语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以将 Amazon 的安全令牌服务(STS)用作红帽受信任的工件签名程序(RHTAS)服务的 OpenID Connect (OIDC)供应商。您可以决定在RHAS 部署期间或稍后配置 Amazon STS。
您可以在同一配置中定义多个不同的 OIDC 供应商。
先决条件
- Red Hat OpenShift Container Platform 4.15 或更高版本。
-
使用
cluster-admin
角色访问 OpenShift Web 控制台。 -
安装了
oc
、podman
和aws
二进制文件的工作站。 - 为 OpenShift 环境启用受管 Amazon Web Service (AWS)资源。
创建了一个具有完整权限的 Amazon Identity and Access Management (IAM)用户。这允许访问运行 IAM 操作。
- 为此用户创建访问密钥。
流程
在工作站上打开一个终端,并登录到 OpenShift:
语法
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以从 OpenShift Web 控制台在命令行中查找您的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。
查找 AWS OIDC 供应商 URL:
Example
oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}'
oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 RHTAS 配置。
打开以编辑
Securesign
资源:语法
oc edit Securesign NAME -n NAMESPACE
oc edit Securesign NAME -n NAMESPACE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc edit Securesign securesign-sample -n trusted-artifact-signer
oc edit Securesign securesign-sample -n trusted-artifact-signer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您必须使用为 RHTAS 安装创建的项目名称作为命名空间。
在
OIDCIssuers
部分下,使用 AWS STS 客户端标识符、签发者的 URL 添加新子,并将Type
值设置为kubernetes
:Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,退出编辑器。几秒钟后,操作员会自动重新配置 RHTAS 软件堆栈。
输入您的访问密钥、secret 密钥、默认区域和输出格式来配置 AWS 命令行工具:
Example
aws configure
aws configure
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置以下环境变量:
Example
export account_id=$(aws sts get-caller-identity --query "Account" --output text) export oidc_provider="$(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}' | cut -d '/' -f3-)" export role_name=rhtas-sts export namespace=rhtas-sts export service_account=cosign-sts
export account_id=$(aws sts get-caller-identity --query "Account" --output text) export oidc_provider="$(oc get authentication cluster -o jsonpath='{.spec.serviceAccountIssuer}' | cut -d '/' -f3-)" export role_name=rhtas-sts export namespace=rhtas-sts export service_account=cosign-sts
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建与新创建的 IAM 角色关联的信任策略:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用信任策略为 RHTAS 服务创建一个新的 IAM 角色:
Example
aws iam create-role --role-name rhtas-sts --assume-role-policy-document file://trust-relationship.json --description "Red Hat Trusted Artifact Signer STS Role"
aws iam create-role --role-name rhtas-sts --assume-role-policy-document file://trust-relationship.json --description "Red Hat Trusted Artifact Signer STS Role"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在启用了 STS 的 OpenShift 集群中,创建一个新项目命名空间:
语法
oc new-project NAMESPACE
oc new-project NAMESPACE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc new-project rhtas-sts
oc new-project rhtas-sts
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为假设 IAM 角色创建服务帐户,并在 OpenShift 项目命名空间中运行工作负载。
创建服务帐户清单:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将服务帐户清单应用到 OpenShift:
Example
oc apply -f service_account.yaml
oc apply -f service_account.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建新的部署工作负载,以便在镜像 registry 中签名容器镜像。
创建部署清单:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将部署清单应用到 OpenShift:
Example
oc apply -f deployment.yaml
oc apply -f deployment.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建测试容器镜像以签名。
创建一个空容器镜像:
Example
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将空容器镜像推送到
ttl.sh
临时 registry:Example
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除临时 Docker 文件:
Example
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通过签名和验证测试容器镜像来验证配置。
在正在运行的 pod 中打开远程 shell 会话:
语法
oc rsh -n NAMESPACE deployment/cosign-sts env IMAGE=IMAGE_NAME:TAG /bin/sh
oc rsh -n NAMESPACE deployment/cosign-sts env IMAGE=IMAGE_NAME:TAG /bin/sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc rsh -n rhtas-sts deployment/cosign-sts env IMAGE=ttl.sh/rhtas/test-image:1h /bin/sh
oc rsh -n rhtas-sts deployment/cosign-sts env IMAGE=ttl.sh/rhtas/test-image:1h /bin/sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为容器镜像签名:
Example
cosign sign -y --identity-token=$(cat $AWS_WEB_IDENTITY_TOKEN_FILE) ttl.sh/rhtas/test-image:1h
cosign sign -y --identity-token=$(cat $AWS_WEB_IDENTITY_TOKEN_FILE) ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证签名的容器镜像:
Example
cosign verify --certificate-identity=https://kubernetes.io/namespaces/$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)/serviceaccounts/cosign-sts --certificate-oidc-issuer=$COSIGN_CERTIFICATE_OIDC_ISSUER ttl.sh/rhtas/test-image:1h
cosign verify --certificate-identity=https://kubernetes.io/namespaces/$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)/serviceaccounts/cosign-sts --certificate-oidc-issuer=$COSIGN_CERTIFICATE_OIDC_ISSUER ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当使用红帽单点登录(SSO)服务作为 Red Hat Trusted Artifact Signer (RHTAS)服务的 OpenID Connect (OIDC)服务时,您可以使用 GitHub OAuth 2.0。此流程指导您将 GitHub OAuth 与 OpenShift 上的现有 Red Hat SSO 部署集成。
您可以在同一配置中定义多个不同的 OIDC 供应商。
先决条件
- Red Hat OpenShift Container Platform 4.15 或更高版本。
- 正在运行的 Red Hat SSO 实例。
-
安装了
oc
二进制文件的工作站。 创建 GitHub OAuth 应用,并在注册应用后记录客户端标识符和机密值。
重要在注册新的 GitHub OAuth 应用程序时,您必须指定 Homepage URL 和 Authorization 回调 URL。为这两个字段输入占位符值,例如
https://localhost:8080
。稍后,您将使用这些字段的预期值修改 GitHub OAuth 应用程序。
流程
在工作站上打开一个终端,并登录到 OpenShift:
语法
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以从 OpenShift Web 控制台在命令行中查找您的登录令牌和 URL。登录 OpenShift Web 控制台。点您的用户名,然后点 Copy login 命令。如果被要求,请再次提供您的用户名和密码,然后单击 Display Token 查看命令。
登录到 Red Hat SSO 控制台。
从命令行查找 Red Hat SSO 控制台 URL:
Example
oc get routes -n keycloak-system keycloak -o jsonpath='https://{.spec.host}'
oc get routes -n keycloak-system keycloak -o jsonpath='https://{.spec.host}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 Red Hat SSO 控制台 URL 复制并粘贴到您的 Web 浏览器中。
- 单击 Administration Console。
从命令行检索
admin
密码:Example
oc get secret/credential-keycloak -n keycloak-system -o jsonpath='{ .data.ADMIN_PASSWORD }' | base64 -d
oc get secret/credential-keycloak -n keycloak-system -o jsonpath='{ .data.ADMIN_PASSWORD }' | base64 -d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 复制此命令的输出。
-
在 Web 浏览器中,以
admin
用户身份登录,并将密码粘贴到对应的字段中。点 Sign In 按钮。
- 从导航菜单的下拉菜单中选择您的域。
添加 GitHub 身份提供程序。
- 在导航菜单中点 Identity Providers。
- 在 Add provider… 下拉菜单中选择 GitHub。
- 将 GitHub OAuth 客户端标识符添加到 客户端 ID 字段。
- 将 GitHub OAuth 客户端 secret 添加到 Client Secret 字段中。
- 打开 Trust Email 选项。
- 点 Save 按钮。
将身份提供程序映射程序添加到新创建的身份提供程序。
- 点 Mapper 选项卡。
- 点 Create 按钮。
- 为新映射程序指定 Name。
- 将 Mapper Type 更改为 Hardcoded Attribute。
-
将 User Attribute 字段设置为
emailVerified
。 -
将 User Attribute Value 字段设置为
true
。 - 点 Save 按钮。
-
在 GitHub Identity Provider Settings 页面中,复制 Redirect URI 值,并将它粘贴到 GitHub OAuth 应用 授权回调 URL 字段。另外,将此值粘贴到 Homepage URL 字段中,但删除 URL 字符串的
broker/github/endpoint
部分。 - 单击 Update Application。现在,您可以使用 GitHub 作为 OIDC 供应商为 提交 签名。https://docs.redhat.com/en/documentation/red_hat_trusted_artifact_signer/1/html/deployment_guide/verify_the_trusted_artifact_signer_service_installation#signing-and-verifying-containers-by-using-cosign-from-the-command-line-interface_deploy
- 在签名工件时,会打开网页浏览器并提示您登录到 Red Hat SSO 帐户。点 GitHub 按钮使用您的凭证登录。
- 单击 Authorize 按钮,以启用 GitHub 用户详情,以供 Red Hat SSO 访问。
对于红帽的 Trusted Artifact Signer (RHTAS)服务,您可以使用 Microsoft Entra ID 作为 OpenID Connect (OIDC)供应商。您可以决定在 RHTAS 部署期间或稍后配置 Microsoft Entra ID。
将 Microsoft Entra ID 与 RHTAS 集成不需要订阅。
您可以在同一配置中定义多个不同的 OIDC 供应商。
先决条件
- Red Hat OpenShift Container Platform 4.15 或更高版本。
- 具有创建资源的 Microsoft Azure 帐户。
- 用于用户签名工件的 Azure 验证的电子邮件地址。
- 访问 Microsoft Azure 命令行界面。
-
安装了
oc
、cosign
、podman
和az
二进制文件的工作站。
流程
- 在工作站上打开一个终端。
在 Microsoft Entra ID 中创建代表客户端的 App Registration:
Example
export RHTAS_APP_REGISTRATION=$(az ad app create --display-name=rhtas --web-redirect-uris=http://localhost:0/auth/callback --enable-id-token-issuance --query appId -o tsv)
export RHTAS_APP_REGISTRATION=$(az ad app create --display-name=rhtas --web-redirect-uris=http://localhost:0/auth/callback --enable-id-token-issuance --query appId -o tsv)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个新的客户端 secret,允许用户使用 App Registration 获取 ID 令牌:
Example
export RHTAS_APP_REGISTRATION_CLIENT_SECRET=$(az ad app credential reset --id=$RHTAS_APP_REGISTRATION --display-name="RHTAS Client Secret" -o tsv --query 'password')
export RHTAS_APP_REGISTRATION_CLIENT_SECRET=$(az ad app credential reset --id=$RHTAS_APP_REGISTRATION --display-name="RHTAS Client Secret" -o tsv --query 'password')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,客户端 secret 仅在一年内有效。您可以使用
-
的标记自定义这个值。年
或日期创建新的 Claim Mapping Policy 以定义一个名为
email_verified
的新 JWT 声明,使用静态值true
:Example
az rest -m post --headers Content-Type=application/json --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies --body '{"definition": ["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\":[{\"value\":\"true\",\"JwtClaimType\":\"email_verified\"}]}}"],"displayName": "EmailVerified"}'
az rest -m post --headers Content-Type=application/json --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies --body '{"definition": ["{\"ClaimsMappingPolicy\":{\"Version\":1,\"IncludeBasicClaimSet\":\"true\", \"ClaimsSchema\":[{\"value\":\"true\",\"JwtClaimType\":\"email_verified\"}]}}"],"displayName": "EmailVerified"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 App Registration 对象标识符:
Example
export RHTAS_APP_REGISTRATION_OBJ_ID=$(az ad app show --id $RHTAS_APP_REGISTRATION --output tsv --query id)
export RHTAS_APP_REGISTRATION_OBJ_ID=$(az ad app show --id $RHTAS_APP_REGISTRATION --output tsv --query id)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 App Registration 清单:
Example
az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/${RHTAS_APP_REGISTRATION_OBJ_ID} --headers 'Content-Type=application/json' --body "{\"api\":{\"acceptMappedClaims\":true}}"
az rest --method PATCH --uri https://graph.microsoft.com/v1.0/applications/${RHTAS_APP_REGISTRATION_OBJ_ID} --headers 'Content-Type=application/json' --body "{\"api\":{\"acceptMappedClaims\":true}}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新 Service Principal 并将其与 App Registration 关联:
Example
export SERVICE_PRINCIPAL_ID=$(az ad sp create --id=${RHTAS_APP_REGISTRATION} -o tsv --query 'id')
export SERVICE_PRINCIPAL_ID=$(az ad sp create --id=${RHTAS_APP_REGISTRATION} -o tsv --query 'id')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 Claim Mapping Policy 标识符:
Example
export CLAIM_MAPPING_POLICY_ID=$(az rest --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies -o tsv --query "value[?displayName=='EmailVerified'] | [0].id")
export CLAIM_MAPPING_POLICY_ID=$(az rest --uri https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies -o tsv --query "value[?displayName=='EmailVerified'] | [0].id")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Claim Mapping Policy 与 Service Principal 关联:
Example
az rest -m post --headers Content-Type=application/json --uri "https://graph.microsoft.com/v1.0/servicePrincipals/${SERVICE_PRINCIPAL_ID}/claimsMappingPolicies/\$ref" --body "{\"@odata.id\": \"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/${CLAIM_MAPPING_POLICY_ID}\"}"
az rest -m post --headers Content-Type=application/json --uri "https://graph.microsoft.com/v1.0/servicePrincipals/${SERVICE_PRINCIPAL_ID}/claimsMappingPolicies/\$ref" --body "{\"@odata.id\": \"https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/${CLAIM_MAPPING_POLICY_ID}\"}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取租户标识符:
Example
export TENANT_ID=$(az account show -o tsv --query tenantId)
export TENANT_ID=$(az account show -o tsv --query tenantId)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 OIDC 端点:
Example
export ENTRA_ID_OIDC_ENDPOINT=$(echo https://login.microsoftonline.com/${TENANT_ID}/v2.0)
export ENTRA_ID_OIDC_ENDPOINT=$(echo https://login.microsoftonline.com/${TENANT_ID}/v2.0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 RHTAS 配置。
打开以编辑
Securesign
资源:语法
oc edit Securesign NAME -n NAMESPACE
oc edit Securesign NAME -n NAMESPACE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
oc edit Securesign securesign-sample -n trusted-artifact-signer
oc edit Securesign securesign-sample -n trusted-artifact-signer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您必须使用为 RHTAS 安装创建的项目名称作为命名空间。
在
OIDCIssuers
部分下,使用客户端标识符、签发者 URL 添加新小节,并将Type
值设置为email
:语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,退出编辑器。几秒钟后,操作员会自动重新配置 RHTAS 软件堆栈。
创建本地客户端 secret 文件:
Example
echo $RHTAS_APP_REGISTRATION_CLIENT_SECRET > rhtas-entra-id-client-secret
echo $RHTAS_APP_REGISTRATION_CLIENT_SECRET > rhtas-entra-id-client-secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为签名工件配置 shell 环境:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化本地机器以签名:
Example
cosign initialize
$ cosign initialize
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过签名测试容器镜像来验证更新的配置。
创建一个空容器镜像:
Example
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
echo "FROM scratch" > ./tmp.Dockerfile podman build . -f ./tmp.Dockerfile -t ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将空容器镜像推送到
ttl.sh
临时 registry:Example
podman push ttl.sh/rhtas/test-image:1h
podman push ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除临时 Docker 文件:
Example
rm ./tmp.Dockerfile
rm ./tmp.Dockerfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为容器镜像签名:
语法
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
cosign sign -y --oidc-client-secret-file=SECRET_FILE IMAGE_NAME:TAG
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
cosign sign -y --oidc-client-secret-file=rhtas-entra-id-client-secret ttl.sh/rhtas/test-image:1h
cosign sign -y --oidc-client-secret-file=rhtas-entra-id-client-secret ttl.sh/rhtas/test-image:1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此时会打开一个 Web 浏览器,允许您使用电子邮件地址为容器镜像签名。