$ eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve
使用 Red Hat Advanced Cluster Security for Kubernetes (RHACS),您可以使用短期令牌对选定的云提供商 API 进行身份验证。RHACS 支持以下云提供商集成
使用安全令牌服务 (STS) 的 Amazon Web Services (AWS)
使用工作负载身份联合的 Google Cloud Platform (GCP)
只有在您在以下平台上安装 RHACS 时,RHACS 才支持短期令牌集成
AWS 上的 Elastic Kubernetes 服务 (EKS)
GCP 上的 Google Kubernetes Engine (GKE)
OpenShift Container Platform
要激活短期身份验证,您必须在 Kubernetes 或 OpenShift Container Platform 集群和您的云提供商之间建立信任。对于 EKS 和 GKE 集群,请使用云提供商元数据服务。对于 OpenShift Container Platform 集群,您需要一个公开可用的 OpenID Connect (OIDC) 提供商存储桶,其中包含 OpenShift Container Platform 服务帐户签名密钥。
您必须为每个使用短期令牌集成的中央集群与您的云提供商建立信任。但是,如果您将委托扫描与短期令牌镜像集成结合使用,则还必须为传感器集群建立信任。 |
RHACS 集成可以使用安全令牌服务对 Amazon Web Services 进行身份验证。在启用集成中的 **使用容器 IAM 角色** 选项之前,您必须使用 RHACS 配置 AssumeRole
。
验证与 RHACS pod 关联的 AWS 角色必须具有集成所需的 IAM 权限。例如,要为与 Elastic Container Registry 集成设置容器角色,请启用对注册表的完全读取访问权限。有关 AWS IAM 角色的更多信息,请参见 IAM 角色。 |
在 EKS 上运行 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 时,您可以通过 Amazon Secure Token Service 配置短期令牌。
运行以下命令以启用 EKS 集群的 IAM OpenID Connect (OIDC) 提供程序
$ eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve
编辑角色的权限策略并授予集成所需的权限。例如
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:GetAuthorizationToken",
"ecr:GetDownloadUrlForLayer",
"ecr:ListImages"
],
"Resource": "arn:aws:iam::<ecr_registry>:role/<role_name>"
}
]
}
更新您要承担的角色的信任关系
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<ecr-registry>:role/<role_name>" (1)
]
},
"Action": "sts:AssumeRole"
}
]
}
1 | <role_name> 应与您在前面步骤中创建的新角色匹配。 |
输入以下命令将新创建的角色与服务帐户关联
$ oc -n stackrox annotate sa central eks.amazonaws.com/role-arn=arn:aws:iam::67890:role/<role_name> (1)
1 | 如果您使用 Kubernetes,请输入 kubectl 代替 oc 。 |
输入以下命令以重新启动 Central pod 并应用更改
$ oc -n stackrox delete pod -l "app in (central,sensor)" (1)
1 | 如果您使用 Kubernetes,请输入 kubectl 代替 oc 。 |
在 OpenShift Container Platform 上运行 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 时,您可以通过 Amazon Secure Token Service 配置短期令牌。
您必须拥有一个包含 OpenShift Container Platform 服务帐户签名密钥的公共 OpenID Connect (OIDC) 配置存储桶。要获取 OpenShift Container Platform 集群的 OIDC 配置,Red Hat 建议使用以下说明:手动模式下用于短期凭据的云凭据操作符。
您必须能够访问 AWS IAM 并拥有创建和更改角色的权限。
按照 创建 OpenID Connect (OIDC) 身份提供程序 中的说明创建 OpenShift Container Platform 集群的 Web 身份。使用 openshift
作为 **Audience** 的值。
编辑角色的权限策略并授予集成所需的权限。例如
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:GetAuthorizationToken",
"ecr:GetDownloadUrlForLayer",
"ecr:ListImages"
],
"Resource": "arn:aws:iam::<ecr_registry>:role/<role_name>"
}
]
}
更新您要承担的角色的信任关系
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "<oidc_provider_arn>"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"<oidc_provider_name>:aud": "openshift"
}
}
}
]
}
在 Central 或 Sensor 部署中设置以下 RHACS 环境变量
AWS_ROLE_ARN=<role_arn>
AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/openshift/serviceaccount/token
RHACS 集成可以使用 工作负载身份 对 Google Cloud Platform 进行身份验证。创建时选择 **使用工作负载身份** 选项可在 Google Cloud 集成中启用工作负载身份验证。
通过工作负载身份与 RHACS pod 关联的 Google 服务帐户必须具有集成所需的 IAM 权限。例如,要为与 Google Artifact Registry 集成设置工作负载身份,请将具有 **roles/artifactregistry.reader** 角色的服务帐户连接起来。有关 Google IAM 角色的更多信息,请参见 配置角色和权限。 |
在 GKE 上运行 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 时,您可以通过 Google 工作负载身份配置短期令牌。
您必须能够访问包含集群和集成资源的 Google Cloud 项目。
按照 Google Cloud Platform 文档中的说明 为 GKE 使用工作负载身份联合。
通过运行以下命令来注释 RHACS 服务帐户
$ oc annotate serviceaccount \ (1)
central \ (2)
--namespace stackrox \
iam.gke.io/gcp-service-account=<GSA_NAME>@<GSA_PROJECT>.iam.gserviceaccount.com
1 | 如果您使用 Kubernetes,请输入 kubectl 代替 oc 。 |
2 | 在设置委托扫描时,使用 **sensor** 代替 **central**。 |
在 OpenShift Container Platform 上运行 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 时,您可以通过 Google 工作负载身份配置短期令牌。
您必须拥有一个包含 OpenShift Container Platform 服务帐户签名密钥的公共 OIDC 配置存储桶。获取 OpenShift Container Platform 集群 OIDC 配置的推荐方法是使用 手动模式下用于短期凭据的云凭据操作符 说明。
访问具有 **roles/iam.workloadIdentityPoolAdmin** 角色的 Google Cloud 项目。
按照 管理工作负载身份池 中的说明创建工作负载身份池。例如
$ gcloud iam workload-identity-pools create rhacs-pool \
--location="global" \
--display-name="RHACS workload pool"
按照 管理工作负载身份池提供程序 中的说明创建工作负载身份池提供程序。例如
$ gcloud iam workload-identity-pools providers create-oidc rhacs-provider \
--location="global" \
--workload-identity-pool="rhacs-pool" \
--display-name="RHACS provider" \
--attribute-mapping="google.subject=assertion.sub" \
--issuer-uri="https://<oidc_configuration_url>" \
--allowed-audiences=openshift
将 Google 服务帐户连接到工作负载身份池。例如
$ gcloud iam service-accounts add-iam-policy-binding <GSA_NAME>@<GSA_PROJECT>.iam.gserviceaccount.com \
--role roles/iam.workloadIdentityUser \
--member="principal://iam.googleapis.com/projects/<GSA_PROJECT_NUMBER>/locations/global/workloadIdentityPools/rhacs-provider/subject/system:serviceaccount:stackrox:central" (1)
1 | 对于委托扫描,请将主题设置为 **system:serviceaccount:stackrox:sensor**。 |
创建包含安全令牌服务 (STS) 配置的服务帐户 JSON。例如
{
"type": "external_account",
"audience": "//iam.googleapis.com/projects/<GSA_PROJECT_ID>/locations/global/workloadIdentityPools/rhacs-pool/providers/rhacs-provider",
"subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
"token_url": "https://sts.googleapis.com/v1/token",
"service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<GSA_NAME>@<GSA_PROJECT>.iam.gserviceaccount.com:generateAccessToken",
"credential_source": {
"file": "/var/run/secrets/openshift/serviceaccount/token",
"format": {
"type": "text"
}
}
}
将服务帐户 JSON 用作 RHACS 命名空间的密钥
apiVersion: v1
kind: Secret
metadata:
name: gcp-cloud-credentials
namespace: stackrox
data:
credentials: <base64_encoded_json>