OIDCプロトコルに基づくロールSSOを使用する場合、Tencent Cloudコンソールで身分プロバイダを作成し、それにロールを作成する必要があります。その後、身分プロバイダが発行したOIDCトークンを使用して、Tencent CloudのSTSトークン(ロールの一時キー)と交換します。
一、OIDC身分プロバイダの作成
1. CAMコンソールの左側ナビゲーションバーで、身分プロバイダ > ロールSSOを選択します。
2. ロールSSOページで、新規プロバイダ作成をクリックします。
3. 新規作成の身分プロバイダページで、プロバイダタイプ「OIDC」を選択し、身分プロバイダ情報を入力します:
身分プロバイダ名称:カスタム身分プロバイダの名称は、同じTencent Cloudアカウント内で一意である必要があります。
身分プロバイダURL:OIDC身分プロバイダの識別子であり、外部のIdPが提供します。httpで始まる必要があり、標準のURL形式に準拠する必要があります。
クライアントID:OIDC身分プロバイダに登録されたクライアントIDです。複数のアプリケーションがTencent Cloudにアクセスする必要がある場合、複数のクライアントIDを設定できます。
署名公開鍵:OIDC身分プロバイダのID Token署名を検証するための公開鍵です。身分プロバイダが提供するOIDCメタデータ文書内の"jwks_uri"フィールドのリンク先の内容(ブラウザでリンクを開いて内容を取得)に対応します。アカウントのセキュリティのため、署名公開鍵を定期的にローテーションすることをお勧めします。
備考情報:身分プロバイダに追加された備考情報です。
4. 次へをクリックし、情報確認ページに進みます。
5. 情報に誤りがないことを確認した後、完了をクリックして保存します。
二、身分プロバイダのロール作成
1. CAMコンソールの左側ナビゲーションバーで、ロールをクリックします。
2. ロール管理ページで、新規ロール作成をクリックします。
3. ロール担い手として身分プロバイダを選択します。
4. 新規カスタムロールページで、身分プロバイダタイプをOIDCとして選択します。
5. 作成済みの身分プロバイダを選択します。
6. ロールの使用条件を設定する:
oidc:iss:OIDC発行者(Issuer)、必須項目です。この条件では必ずstring_equalを使用する必要があり、条件値はOIDC身分プロバイダで入力した身分プロバイダのURLのみ可能です。ロールの引き受けに使用されるOIDCトークン内のissフィールド値がこの条件を満たす必要があり、そうして初めてロールの引き受けが許可されます。
oidc:aud:OIDC オーディエンス(Audience)、必須項目です。この条件では必ずstring_equalを使用する必要があり、条件値はOIDC身分プロバイダで設定した1つまたは複数のクライアントIDのみ可能です。ロールの引き受けに使用されるOIDCトークン内のaudフィールド値がこの条件を満たす必要があり、そうして初めてロールの引き受けが許可されます。
oidc:sub:OIDC サブジェクト(Subject)、任意項目です。この条件では任意のstringクラスの条件操作タイプを使用でき、条件値は最大10個のOIDCサブジェクトを設定できます。ロールの引き受けに使用されるOIDCトークン内のsubフィールド値がこの条件を満たす必要がある場合にのみ、ロールの引き受けが許可されます。
7. 次へをクリックします。
8. ロールポリシー設定ページで、ロールに権限ポリシーを関連付け、次へをクリックします。
9. レビューページで、ロール名称とロール説明(任意)を入力し、完了をクリックして保存します。
三、身分プロバイダでのOIDC Token発行
Tencent CloudはOIDCによるコンソールへのログインをサポートしていません。OIDC SSOフローを完了するには、プログラムによるアクセス方式を使用する必要があります(つまりAPIを呼び出して一時キーを取得し、その一時キーでTencent Cloudにアクセスします)。OIDCトークンの生成は本質的にOAuthフローであるため、OIDC身分プロバイダ(例:Okta)からOIDCトークンを取得するには標準的なOAuth 2.0フローが必要です。具体的な方法については、プロバイダの関連ドキュメントを参照してください。
四、OIDCトークンによるSTSトークンの取得
POST / HTTP/1.1
Host: sts.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: AssumeRoleWithWebIdentity
<共通リクエストパラメータ>
{
"DurationSeconds": "5000",
"RoleSessionName": "test_OIDC",
"WebIdentityToken": "eyJraWQiOiJkT**********CNOQ",
"RoleArn": "qcs::cam::uin/798950673:roleName/OneLogin-Role",
"ProviderId": "OIDC"
}
レスポンス例:
{
"Response": {
"ExpiredTime": 1543914376,
"Expiration": "2018-12-04T09:06:16Z",
"Credentials": {
"Token": "1siMD5r0tPAq9xpR******6a1ad76f09a0069002923def8aFw7tUMd2nH",
"TmpSecretId": "AKID65zyIP0mp****qt2SlWIQVMn1umNH58",
"TmpSecretKey": "q95K84wrzuE****y39zg52boxvp71yoh"
},
"RequestId": "f6e7cbcb-add1-47bd-9097-d08cf8f3a919"
}
}
5. STS Tokenを使用したTencent Cloudリソースへのアクセス
上記の手順で取得した一時キー(STS Token)を使用して、権限を持つTencent Cloudリソースにアクセスします。