ไลบรารีไคลเอ็นต์การรับรองความถูกต้องแบบโอเพ่นซอร์สสำหรับ Java
โครงการนี้ประกอบด้วย 3 สิ่งประดิษฐ์:
สารบัญ:
เริ่มต้นอย่างรวดเร็ว
google-auth-library-oauth2-http
google-auth-library-หนังสือรับรอง
google-auth-library-appengine
สถานะซีไอ
มีส่วนร่วม
ใบอนุญาต
หากคุณใช้ Maven ให้เพิ่มสิ่งนี้ลงในไฟล์ pom.xml ของคุณ (โปรดสังเกตว่าคุณสามารถแทนที่ google-auth-library-oauth2-http
ด้วย google-auth-library-credentials
และ google-auth-library-appengine
ใด ๆ ขึ้นอยู่กับ ความต้องการในการสมัครของคุณ):
< dependency >
< groupId >com.google.auth groupId >
< artifactId >google-auth-library-oauth2-http artifactId >
< version >1.19.0 version >
dependency >
หากคุณใช้ Gradle ให้เพิ่มสิ่งนี้ลงในการขึ้นต่อกันของคุณ
implementation ' com.google.auth:google-auth-library-oauth2-http:1.19.0 '
หากคุณใช้ SBT ให้เพิ่มสิ่งนี้ลงในการขึ้นต่อกันของคุณ
libraryDependencies + = " com.google.auth " % " google-auth-library-oauth2-http " % " 1.19.0 "
ไลบรารีนี้จัดเตรียมการใช้งาน Application Default Credentials สำหรับ Java ข้อมูลรับรองเริ่มต้นของแอปพลิเคชันเป็นวิธีง่ายๆ ในการรับข้อมูลรับรองการอนุญาตเพื่อใช้ในการเรียกใช้ Google API
เหมาะที่สุดสำหรับกรณีที่การโทรจำเป็นต้องมีข้อมูลประจำตัวและการอนุญาตระดับเดียวกันสำหรับแอปพลิเคชันที่ไม่ขึ้นอยู่กับผู้ใช้ นี่เป็นแนวทางที่แนะนำในการอนุญาตการโทรไปยัง Cloud API โดยเฉพาะอย่างยิ่งเมื่อคุณสร้างแอปพลิเคชันที่ใช้ Google Cloud Platform
ข้อมูลประจำตัวเริ่มต้นของแอปพลิเคชันยังรองรับการรวมข้อมูลประจำตัวของภาระงานเพื่อเข้าถึงทรัพยากร Google Cloud จากแพลตฟอร์มที่ไม่ใช่ของ Google Cloud รวมถึง Amazon Web Services (AWS), Microsoft Azure หรือผู้ให้บริการข้อมูลประจำตัวใด ๆ ที่รองรับ OpenID Connect (OIDC) ขอแนะนำให้ใช้การเชื่อมโยงข้อมูลประจำตัวภาระงานสำหรับสภาพแวดล้อมที่ไม่ใช่ Google Cloud เนื่องจากหลีกเลี่ยงความจำเป็นในการดาวน์โหลด จัดการ และจัดเก็บคีย์ส่วนตัวของบัญชีบริการไว้ในเครื่อง โปรดดูที่การเชื่อมโยงข้อมูลประจำตัวภาระงาน
หากต้องการรับ Application Default Credentials ให้ใช้ GoogleCredentials.getApplicationDefault()
หรือ GoogleCredentials.getApplicationDefault(HttpTransportFactory)
วิธีการเหล่านี้จะส่งคืนข้อมูลประจำตัวเริ่มต้นของแอปพลิเคชันซึ่งใช้ในการระบุและให้สิทธิ์แอปพลิเคชันทั้งหมด มีการค้นหาต่อไปนี้ (ตามลำดับ) เพื่อค้นหาข้อมูลประจำตัวเริ่มต้นของแอปพลิเคชัน:
GOOGLE_APPLICATION_CREDENTIALS
ชี้ไปgcloud auth application-default login
NO_GCE_CHECK=true
GCE_METADATA_HOST=
หากต้องการรับข้อมูลรับรองจากคีย์ JSON ของบัญชีบริการ ให้ใช้ GoogleCredentials.fromStream(InputStream)
หรือ GoogleCredentials.fromStream(InputStream, HttpTransportFactory)
โปรดทราบว่าต้องรีเฟรชข้อมูลประจำตัวก่อนที่โทเค็นการเข้าถึงจะพร้อมใช้งาน
GoogleCredentials credentials = GoogleCredentials . fromStream ( new FileInputStream ( "/path/to/credentials.json" ));
credentials . refreshIfExpired ();
AccessToken token = credentials . getAccessToken ();
// OR
AccessToken token = credentials . refreshAccessToken ();
อนุญาตให้ข้อมูลรับรองที่ออกให้กับผู้ใช้หรือบัญชีบริการสามารถเลียนแบบบุคคลอื่นได้ โปรเจ็กต์ต้นทางที่ใช้ ImpersonatedCredentials ต้องเปิดใช้ API "IAMCredentials" นอกจากนี้ บัญชีบริการเป้าหมายจะต้องให้บทบาท IAM "ผู้สร้างโทเค็นบัญชีบริการ" แก่ผู้ใช้หลัก
String credPath = "/path/to/svc_account.json" ;
ServiceAccountCredentials sourceCredentials = ServiceAccountCredentials
. fromStream ( new FileInputStream ( credPath ));
sourceCredentials = ( ServiceAccountCredentials ) sourceCredentials
. createScoped ( Arrays . asList ( "https://www.googleapis.com/auth/iam" ));
ImpersonatedCredentials targetCredentials = ImpersonatedCredentials . create ( sourceCredentials ,
"[email protected]" , null ,
Arrays . asList ( "https://www.googleapis.com/auth/devstorage.read_only" ), 300 );
Storage storage_service = StorageOptions . newBuilder (). setProjectId ( "project-id" )
. setCredentials ( targetCredentials ). build (). getService ();
for ( Bucket b : storage_service . list (). iterateAll ())
System . out . println ( b );
แอปพลิเคชันของคุณสามารถเข้าถึงทรัพยากร Google Cloud ได้จาก Amazon Web Services (AWS), Microsoft Azure หรือผู้ให้บริการข้อมูลประจำตัวใดๆ ที่รองรับ OpenID Connect (OIDC) เมื่อใช้การรวมข้อมูลประจำตัวภาระงาน
เดิมทีแอปพลิเคชันที่ทำงานนอก Google Cloud จะใช้คีย์บัญชีบริการเพื่อเข้าถึงทรัพยากรของ Google Cloud เมื่อใช้การรวมข้อมูลประจำตัว ปริมาณงานของคุณสามารถปลอมแปลงเป็นบัญชีบริการได้ ซึ่งช่วยให้ภาระงานภายนอกเข้าถึงทรัพยากร Google Cloud ได้โดยตรง ซึ่งช่วยลดภาระในการบำรุงรักษาและความปลอดภัยที่เกี่ยวข้องกับคีย์บัญชีบริการ
ในการเข้าถึงทรัพยากร Google Cloud จาก Amazon Web Services (AWS) จำเป็นต้องมีข้อกำหนดต่อไปนี้:
ปฏิบัติตามคำแนะนำโดยละเอียดเกี่ยวกับวิธีกำหนดค่าการรวมข้อมูลระบุตัวตนของปริมาณงานจาก AWS
หลังจากกำหนดค่าผู้ให้บริการ AWS เพื่อเลียนแบบบัญชีบริการแล้ว จะต้องสร้างไฟล์การกำหนดค่าข้อมูลรับรอง ไฟล์การกำหนดค่าข้อมูลรับรองที่สร้างขึ้นนั้นแตกต่างจากไฟล์ข้อมูลประจำตัวของบัญชีบริการ โดยมีข้อมูลเมตาที่ไม่ละเอียดอ่อนเพื่อแนะนำไลบรารีเกี่ยวกับวิธีการดึงโทเค็นหัวข้อภายนอกและแลกเปลี่ยนเป็นโทเค็นการเข้าถึงบัญชีบริการ สามารถสร้างไฟล์การกำหนดค่าได้โดยใช้ gcloud CLI
หากต้องการสร้างการกำหนดค่าข้อมูลระบุตัวตนของปริมาณงาน AWS ให้รันคำสั่งต่อไปนี้:
# Generate an AWS configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$POOL_ID
: ID พูลเอกลักษณ์ของเวิร์กโหลด$AWS_PROVIDER_ID
: ID ผู้ให้บริการ AWS$SERVICE_ACCOUNT_EMAIL
: อีเมลของบัญชีบริการที่จะแอบอ้างสิ่งนี้จะสร้างไฟล์การกำหนดค่าในไฟล์เอาต์พุตที่ระบุ
หากคุณใช้ AWS IMDSv2 จำเป็นต้องเพิ่มแฟล็กเพิ่มเติม --enable-imdsv2
ให้กับคำสั่ง gcloud iam workload-identity-pools create-cred-config
:
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--enable-imdsv2
ตอนนี้คุณสามารถใช้ไลบรารี Auth เพื่อเรียกทรัพยากร Google Cloud จาก AWS ได้แล้ว
ในการเข้าถึงทรัพยากร Google Cloud จาก Microsoft Azure จำเป็นต้องมีข้อกำหนดต่อไปนี้:
ทำตามคำแนะนำโดยละเอียดเกี่ยวกับวิธีกำหนดค่าการรวมข้อมูลประจำตัวของปริมาณงานจาก Microsoft Azure
หลังจากกำหนดค่าผู้ให้บริการ Azure เพื่อเลียนแบบบัญชีบริการแล้ว จะต้องสร้างไฟล์การกำหนดค่าข้อมูลรับรอง ไฟล์การกำหนดค่าข้อมูลรับรองที่สร้างขึ้นนั้นแตกต่างจากไฟล์ข้อมูลประจำตัวของบัญชีบริการ โดยมีข้อมูลเมตาที่ไม่ละเอียดอ่อนเพื่อแนะนำไลบรารีเกี่ยวกับวิธีการดึงโทเค็นหัวข้อภายนอกและแลกเปลี่ยนเป็นโทเค็นการเข้าถึงบัญชีบริการ สามารถสร้างไฟล์การกำหนดค่าได้โดยใช้ gcloud CLI
หากต้องการสร้างการกำหนดค่าข้อมูลระบุตัวตนของปริมาณงาน Azure ให้เรียกใช้คำสั่งต่อไปนี้:
# Generate an Azure configuration file.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AZURE_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--azure
--output-file /path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$POOL_ID
: ID พูลเอกลักษณ์ของเวิร์กโหลด$AZURE_PROVIDER_ID
: รหัสผู้ให้บริการ Azure$SERVICE_ACCOUNT_EMAIL
: อีเมลของบัญชีบริการที่จะแอบอ้างสิ่งนี้จะสร้างไฟล์การกำหนดค่าในไฟล์เอาต์พุตที่ระบุ
ตอนนี้คุณสามารถใช้ไลบรารี Auth เพื่อเรียกทรัพยากร Google Cloud จาก Azure ได้แล้ว
ในการเข้าถึงทรัพยากร Google Cloud จากผู้ให้บริการข้อมูลประจำตัวที่รองรับ OpenID Connect (OIDC) จำเป็นต้องมีข้อกำหนดต่อไปนี้
ทำตามคำแนะนำโดยละเอียดเกี่ยวกับวิธีกำหนดค่าการรวมข้อมูลประจำตัวภาระงานจากผู้ให้บริการข้อมูลประจำตัว OIDC
หลังจากกำหนดค่าผู้ให้บริการ OIDC เพื่อเลียนแบบบัญชีบริการแล้ว จะต้องสร้างไฟล์การกำหนดค่าข้อมูลรับรอง ไฟล์การกำหนดค่าข้อมูลรับรองที่สร้างขึ้นนั้นแตกต่างจากไฟล์ข้อมูลประจำตัวของบัญชีบริการ โดยมีข้อมูลเมตาที่ไม่ละเอียดอ่อนเพื่อแนะนำไลบรารีเกี่ยวกับวิธีการดึงโทเค็นหัวข้อภายนอกและแลกเปลี่ยนเป็นโทเค็นการเข้าถึงบัญชีบริการ สามารถสร้างไฟล์การกำหนดค่าได้โดยใช้ gcloud CLI
สำหรับผู้ให้บริการ OIDC ไลบรารี Auth สามารถดึงโทเค็น OIDC จากตำแหน่งไฟล์ในเครื่อง (ข้อมูลรับรองที่มาจากไฟล์) หรือจากเซิร์ฟเวอร์ในเครื่อง (ข้อมูลรับรองที่มาจาก URL)
ข้อมูลประจำตัวที่มาจากไฟล์ สำหรับข้อมูลประจำตัวที่มาจากไฟล์ กระบวนการเบื้องหลังจะต้องรีเฟรชตำแหน่งไฟล์อย่างต่อเนื่องด้วยโทเค็น OIDC ใหม่ก่อนที่จะหมดอายุ สำหรับโทเค็นที่มีอายุการใช้งานหนึ่งชั่วโมง โทเค็นจะต้องได้รับการอัปเดตในไฟล์ทุกๆ ชั่วโมง โทเค็นสามารถจัดเก็บได้โดยตรงเป็นข้อความธรรมดาหรือในรูปแบบ JSON
หากต้องการสร้างการกำหนดค่า OIDC ที่มาจากไฟล์ ให้รันคำสั่งต่อไปนี้:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-file $PATH_TO_OIDC_ID_TOKEN
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$POOL_ID
: ID พูลเอกลักษณ์ของเวิร์กโหลด$OIDC_PROVIDER_ID
: รหัสผู้ให้บริการ OIDC$SERVICE_ACCOUNT_EMAIL
: อีเมลของบัญชีบริการที่จะแอบอ้าง$PATH_TO_OIDC_ID_TOKEN
: พาธของไฟล์ที่ใช้ในการดึงโทเค็น OIDCสิ่งนี้จะสร้างไฟล์การกำหนดค่าในไฟล์เอาต์พุตที่ระบุ
ข้อมูลรับรองที่มาจาก URL สำหรับข้อมูลรับรองที่มาจาก URL เซิร์ฟเวอร์ในเครื่องจำเป็นต้องโฮสต์ตำแหน่งข้อมูล GET เพื่อส่งคืนโทเค็น OIDC การตอบกลับอาจเป็นข้อความธรรมดาหรือ JSON นอกจากนี้ยังสามารถระบุส่วนหัวคำขอที่จำเป็นเพิ่มเติมได้อีกด้วย
หากต้องการสร้างการกำหนดค่าข้อมูลระบุตัวตนของภาระงาน OIDC ที่มาจาก URL ให้เรียกใช้คำสั่งต่อไปนี้:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $OIDC_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--credential-source-url $URL_TO_GET_OIDC_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file /path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$POOL_ID
: ID พูลเอกลักษณ์ของเวิร์กโหลด$OIDC_PROVIDER_ID
: รหัสผู้ให้บริการ OIDC$SERVICE_ACCOUNT_EMAIL
: อีเมลของบัญชีบริการที่จะแอบอ้าง$URL_TO_GET_OIDC_TOKEN
: URL ของปลายทางเซิร์ฟเวอร์ภายในที่จะเรียกเพื่อดึงโทเค็น OIDC$HEADER_KEY
และ $HEADER_VALUE
: คู่คีย์/ค่าส่วนหัวเพิ่มเติมที่จะส่งต่อคำขอ GET ไปยัง $URL_TO_GET_OIDC_TOKEN
เช่น Metadata-Flavor=Google
ตอนนี้คุณสามารถใช้ไลบรารี Auth เพื่อโทรหาทรัพยากร Google Cloud จากผู้ให้บริการ OIDC ได้แล้ว
ข้อมูลประจำตัวที่มาจากปฏิบัติการ สำหรับข้อมูลประจำตัวที่มาจากปฏิบัติการ โปรแกรมปฏิบัติการในเครื่องจะถูกใช้เพื่อดึงโทเค็นของบริษัทอื่น ไฟล์ปฏิบัติการต้องจัดการการจัดหาโทเค็น OIDC ID ที่ถูกต้องและยังไม่หมดอายุหรือการยืนยัน SAML ในรูปแบบ JSON ไปยัง stdout
หากต้องการใช้ข้อมูลรับรองที่มาจากปฏิบัติการ ตัวแปรสภาพแวดล้อม GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES
จะต้องตั้งค่าเป็น 1
หากต้องการสร้างการกำหนดค่าเอกลักษณ์ของเวิร์กโหลดที่เรียกทำงานได้ ให้รันคำสั่งต่อไปนี้:
# Generate a configuration file for executable-sourced credentials.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $PROVIDER_ID
--service-account= $SERVICE_ACCOUNT_EMAIL
--subject-token-type= $SUBJECT_TOKEN_TYPE
# The absolute path for the program, including arguments.
# e.g. --executable-command="/path/to/command --foo=bar"
--executable-command= $EXECUTABLE_COMMAND
# Optional argument for the executable timeout. Defaults to 30s.
# --executable-timeout-millis=$EXECUTABLE_TIMEOUT
# Optional argument for the absolute path to the executable output file.
# See below on how this argument impacts the library behaviour.
# --executable-output-file=$EXECUTABLE_OUTPUT_FILE
--output-file /path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$POOL_ID
: ID พูลเอกลักษณ์ของเวิร์กโหลด$PROVIDER_ID
: รหัสผู้ให้บริการ OIDC หรือ SAML$SERVICE_ACCOUNT_EMAIL
: อีเมลของบัญชีบริการที่จะแอบอ้าง$SUBJECT_TOKEN_TYPE
: ประเภทโทเค็นหัวเรื่อง$EXECUTABLE_COMMAND
: คำสั่งเต็มรูปแบบที่จะรัน รวมถึงอาร์กิวเมนต์ด้วย ต้องเป็นเส้นทางที่แน่นอนไปยังโปรแกรม แฟล็ก --executable-timeout-millis
เป็นทางเลือก นี่คือระยะเวลาที่ไลบรารีการตรวจสอบสิทธิ์จะรอให้ปฏิบัติการเสร็จสิ้น หน่วยเป็นมิลลิวินาที ค่าเริ่มต้นคือ 30 วินาทีเมื่อไม่ได้ระบุไว้ ค่าสูงสุดที่อนุญาตคือ 2 นาที ขั้นต่ำคือ 5 วินาที
การตั้งค่าสถานะ --executable-output-file
เป็นทางเลือก หากระบุ พาธของไฟล์จะต้องชี้ไปที่การตอบสนองข้อมูลรับรอง 3PI ที่สร้างโดยไฟล์ปฏิบัติการ สิ่งนี้มีประโยชน์สำหรับการแคชข้อมูลรับรอง โดยการระบุพาธนี้ ไลบรารี Auth จะตรวจสอบการมีอยู่ของมันก่อนที่จะรันไฟล์ปฏิบัติการ ด้วยการแคชการตอบสนอง JSON ที่ปฏิบัติการได้กับไฟล์นี้ จะช่วยปรับปรุงประสิทธิภาพโดยหลีกเลี่ยงความจำเป็นในการรันปฏิบัติการจนกว่าข้อมูลรับรองที่แคชไว้ในไฟล์เอาต์พุตจะหมดอายุ ไฟล์ปฏิบัติการต้องจัดการการเขียนลงในไฟล์นี้ - ไลบรารีการรับรองความถูกต้องจะพยายามอ่านจากตำแหน่งนี้เท่านั้น รูปแบบของเนื้อหาในไฟล์ควรตรงกับรูปแบบ JSON ที่คาดหวังจากไฟล์ปฏิบัติการที่แสดงด้านล่าง
หากต้องการดึงโทเค็นบุคคลที่สาม ไลบรารีจะเรียกใช้ไฟล์ปฏิบัติการโดยใช้คำสั่งที่ระบุ เอาต์พุตของไฟล์ปฏิบัติการต้องเป็นไปตามรูปแบบการตอบสนองที่ระบุด้านล่าง มันจะต้องส่งออกการตอบสนองต่อ stdout
ตัวอย่างการตอบสนอง OIDC ที่ดำเนินการได้สำเร็จ:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:id_token " ,
"id_token" : " HEADER.PAYLOAD.SIGNATURE " ,
"expiration_time" : 1620499962
}
ตัวอย่างการตอบสนอง SAML ที่ดำเนินการได้สำเร็จ:
{
"version" : 1 ,
"success" : true ,
"token_type" : " urn:ietf:params:oauth:token-type:saml2 " ,
"saml_response" : " ... " ,
"expiration_time" : 1620499962
}
ตัวอย่างการตอบสนองข้อผิดพลาดที่ปฏิบัติการได้:
{
"version" : 1 ,
"success" : false ,
"code" : " 401 " ,
"message" : " Caller not authorized. "
}
ช่องเหล่านี้เป็นช่องที่ต้องกรอกทั้งหมดสำหรับการตอบกลับข้อผิดพลาด ไลบรารีรหัสและข้อความจะถูกใช้เป็นส่วนหนึ่งของข้อยกเว้นที่ถูกส่งออกมา
เพื่อการตอบกลับที่สำเร็จ ฟิลด์ expiration_time
จำเป็นต่อเมื่อมีการระบุไฟล์เอาต์พุตในการกำหนดค่าข้อมูลประจำตัวเท่านั้น
สรุปช่องรูปแบบการตอบกลับ:
version
: เวอร์ชันของเอาต์พุต JSON ปัจจุบันรองรับเฉพาะเวอร์ชัน 1 เท่านั้นsuccess
: เมื่อเป็นจริง การตอบกลับจะต้องมีโทเค็นของบุคคลที่สามและประเภทโทเค็น การตอบกลับจะต้องมีฟิลด์ expiration_time หากระบุไฟล์เอาต์พุตในการกำหนดค่าข้อมูลรับรอง โปรแกรมเรียกทำงานต้องออกด้วยรหัสทางออก 0 เมื่อเป็นเท็จ การตอบกลับจะต้องมีรหัสข้อผิดพลาดและฟิลด์ข้อความ และออกด้วยค่าที่ไม่ใช่ศูนย์token_type
: ประเภทโทเค็นเรื่องของบุคคลที่สาม ต้องเป็น urn:ietf:params:oauth:token-type:jwt , urn:ietf:params:oauth:token-type:id_token หรือ urn:ietf:params:oauth:token-type:saml2id_token
: โทเค็น OIDC บุคคลที่สามsaml_response
: การตอบกลับ SAML ของบุคคลที่สามexpiration_time
: เวลาหมดอายุของโทเค็นเรื่องบุคคลที่สามในหน่วยวินาที (เวลายุคยูนิกซ์)code
: สตริงรหัสข้อผิดพลาดmessage
: ข้อความแสดงข้อผิดพลาด ประเภทการตอบกลับทั้งหมดจะต้องมีทั้งช่อง version
และช่อง success
token_type
และหนึ่งใน id_token
หรือ saml_response
ฟิลด์ expiration_time
จะต้องปรากฏด้วย หากมีการระบุไฟล์เอาต์พุตในการกำหนดค่าข้อมูลประจำตัวcode
และช่อง message
ไลบรารีจะเติมตัวแปรสภาพแวดล้อมต่อไปนี้เมื่อรันปฏิบัติการ:
GOOGLE_EXTERNAL_ACCOUNT_AUDIENCE
: ช่องผู้ชมจากการกำหนดค่าข้อมูลรับรอง อยู่เสมอGOOGLE_EXTERNAL_ACCOUNT_TOKEN_TYPE
: ประเภทโทเค็นหัวเรื่องที่คาดหวังนี้ อยู่เสมอGOOGLE_EXTERNAL_ACCOUNT_IMPERSONATED_EMAIL
: อีเมลของบัญชีบริการ แสดงเมื่อมีการใช้การแอบอ้างเป็นบัญชีบริการเท่านั้นGOOGLE_EXTERNAL_ACCOUNT_OUTPUT_FILE
: ตำแหน่งไฟล์เอาต์พุตจากการกำหนดค่าข้อมูลรับรอง แสดงเฉพาะเมื่อระบุไว้ในการกำหนดค่าข้อมูลรับรองตัวแปรสภาพแวดล้อมเหล่านี้สามารถใช้งานได้โดยโปรแกรมปฏิบัติการเพื่อหลีกเลี่ยงการเข้ารหัสค่าเหล่านี้อย่างหนัก
ขอแนะนำแนวทางปฏิบัติด้านความปลอดภัยต่อไปนี้:
เนื่องจากความซับซ้อนของการใช้ข้อมูลประจำตัวที่มาจากการดำเนินการ จึงขอแนะนำให้ใช้กลไกที่รองรับที่มีอยู่ (ที่มาจากไฟล์/ที่มาจาก URL) ในการให้ข้อมูลประจำตัวของบุคคลที่สาม เว้นแต่จะไม่เป็นไปตามข้อกำหนดเฉพาะของคุณ
ตอนนี้คุณสามารถใช้ไลบรารี Auth เพื่อโทรหาทรัพยากร Google Cloud จากผู้ให้บริการ OIDC หรือ SAML ได้แล้ว
การใช้งานที่กำหนดเองของ IdentityPoolSubjectTokenSupplier สามารถใช้ในขณะที่สร้าง IdentityPoolCredentials เพื่อจัดหาโทเค็นเรื่องซึ่งสามารถแลกเปลี่ยนเป็นโทเค็นการเข้าถึง GCP ได้ ซัพพลายเออร์จะต้องส่งคืนโทเค็นเรื่องที่ถูกต้องและยังไม่หมดอายุเมื่อเรียกโดยข้อมูลรับรอง GCP
IdentityPoolCredentials จะไม่แคชโทเค็นที่ส่งคืน ดังนั้นตรรกะการแคชควรถูกนำไปใช้ในซัพพลายเออร์โทเค็น เพื่อป้องกันการร้องขอหลายรายการสำหรับโทเค็นเรื่องเดียวกัน
import java . io . IOException ;
public class CustomTokenSupplier implements IdentityPoolSubjectTokenSupplier {
@ Override
public String getSubjectToken ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience and subject token type.
string audience = context . getAudience ();
string tokenType = context . getSubjectTokenType ();
try {
// Return a valid, unexpired token for the requested audience and token type.
// Note that IdentityPoolCredentials do not cache the subject token so
// any caching logic needs to be implemented in the token supplier.
return retrieveToken ( audience , tokenType );
} catch ( Exception e ) {
// If token is unavailable, throw IOException.
throw new IOException ( e );
}
}
private String retrieveToken ( string tokenType , string audience ) {
// Retrieve a subject token of the requested type for the requested audience.
}
}
CustomTokenSupplier tokenSupplier = new CustomTokenSupplier ();
IdentityPoolCredentials identityPoolCredentials =
IdentityPoolCredentials . newBuilder ()
. setSubjectTokenSupplier ( tokenSupplier ) // Sets the token supplier.
. setAudience (...) // Sets the GCP audience.
. setSubjectTokenType ( SubjectTokenTypes . JWT ) // Sets the subject token type.
. build ();
ผู้ชมอยู่ที่ไหน: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$WORKLOAD_POOL_ID
: ID พูลข้อมูลระบุตัวตนของภาระงาน$PROVIDER_ID
: รหัสผู้ให้บริการนอกจากนี้ คุณยังดูค่าสำหรับกลุ่มเป้าหมาย, URL การเลียนแบบบัญชีบริการ และช่องเครื่องมือสร้างอื่นๆ ได้ด้วยการสร้างไฟล์การกำหนดค่าข้อมูลรับรองด้วย gcloud CLI
คุณสามารถจัดเตรียมการใช้งาน AwsSecurityCredentialsSupplier แบบกำหนดเองได้เมื่อเริ่มต้น AwsCredentials หากระบุไว้ อินสแตนซ์ AwsCredentials จะส่งต่อไปยังซัพพลายเออร์เพื่อดึงข้อมูลรับรองความปลอดภัย AWS เพื่อแลกเปลี่ยนเป็นโทเค็นการเข้าถึง GCP ซัพพลายเออร์จะต้องส่งคืนข้อมูลรับรองความปลอดภัย AWS ที่ถูกต้องและยังไม่หมดอายุเมื่อเรียกโดยข้อมูลประจำตัว GCP
AwsCredentials จะไม่แคชข้อมูลรับรองความปลอดภัย AWS หรือภูมิภาคที่ส่งคืน ดังนั้นตรรกะการแคชจึงควรถูกนำมาใช้ในซัพพลายเออร์เพื่อป้องกันคำขอหลายรายการสำหรับทรัพยากรเดียวกัน
class CustomAwsSupplier implements AwsSecurityCredentialsSupplier {
@ Override
AwsSecurityCredentials getAwsSecurityCredentials ( ExternalAccountSupplierContext context ) throws IOException {
// Any call to the supplier will pass a context object with the requested
// audience.
string audience = context . getAudience ();
try {
// Return valid, unexpired AWS security credentials for the requested audience.
// Note that AwsCredentials do not cache the AWS security credentials so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsSecurityCredentials ( audience );
} catch ( Exception e ) {
// If credentials are unavailable, throw IOException.
throw new IOException ( e );
}
}
@ Override
String getRegion ( ExternalAccountSupplierContext context ) throws IOException {
try {
// Return a valid AWS region. i.e. "us-east-2".
// Note that AwsCredentials do not cache the region so
// any caching logic needs to be implemented in the credentials' supplier.
return retrieveAwsRegion ();
} catch ( Exception e ) {
// If region is unavailable, throw IOException.
throw new IOException ( e );
}
}
private AwsSecurityCredentials retrieveAwsSecurityCredentials ( string audience ) {
// Retrieve Aws security credentials for the requested audience.
}
private String retrieveAwsRegion () {
// Retrieve current AWS region.
}
}
CustomAwsSupplier awsSupplier = new CustomAwsSupplier ();
AwsCredentials credentials = AwsCredentials . newBuilder ()
. setSubjectTokenType ( SubjectTokenTypes . AWS4 ) // Sets the subject token type.
. setAudience (...) // Sets the GCP audience.
. setAwsSecurityCredentialsSupplier ( supplier ) // Sets the supplier.
. build ();
ผู้ชมอยู่ที่ไหน: //iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$WORKLOAD_POOL_ID/providers/$PROVIDER_ID
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$WORKLOAD_POOL_ID
: ID พูลข้อมูลระบุตัวตนของภาระงาน$PROVIDER_ID
: รหัสผู้ให้บริการนอกจากนี้ คุณยังดูค่าสำหรับกลุ่มเป้าหมาย, URL การเลียนแบบบัญชีบริการ และช่องเครื่องมือสร้างอื่นๆ ได้ด้วยการสร้างไฟล์การกำหนดค่าข้อมูลรับรองด้วย gcloud CLI
เมื่อสร้างการกำหนดค่าข้อมูลรับรองด้วยการรวมข้อมูลประจำตัวภาระงานโดยใช้การเลียนแบบบัญชีบริการ คุณสามารถระบุอาร์กิวเมนต์ที่เป็นทางเลือกเพื่อกำหนดค่าอายุการใช้งานโทเค็นการเข้าถึงบัญชีบริการได้
หากต้องการสร้างการกำหนดค่าด้วยอายุการใช้งานโทเค็นที่กำหนดค่าได้ ให้รันคำสั่งต่อไปนี้ (ตัวอย่างนี้ใช้การกำหนดค่า AWS แต่สามารถกำหนดค่าอายุการใช้งานโทเค็นสำหรับผู้ให้บริการรวมข้อมูลระบุตัวตนของภาระงานทั้งหมดได้):
# Generate an AWS configuration file with configurable token lifetime.
gcloud iam workload-identity-pools create-cred-config
projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $POOL_ID /providers/ $AWS_PROVIDER_ID
--service-account $SERVICE_ACCOUNT_EMAIL
--aws
--output-file /path/to/generated/config.json
--service-account-token-lifetime-seconds $TOKEN_LIFETIME
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$PROJECT_NUMBER
: หมายเลขโครงการ Google Cloud$POOL_ID
: ID พูลเอกลักษณ์ของเวิร์กโหลด$AWS_PROVIDER_ID
: ID ผู้ให้บริการ AWS$SERVICE_ACCOUNT_EMAIL
: อีเมลของบัญชีบริการที่จะแอบอ้าง$TOKEN_LIFETIME
: ระยะเวลาอายุการใช้งานที่ต้องการของโทเค็นการเข้าถึงบัญชีบริการในหน่วยวินาที การตั้งค่าสถานะ service-account-token-lifetime-seconds
เป็นทางเลือก หากไม่ได้ระบุไว้ ค่าเริ่มต้นนี้จะอยู่ที่หนึ่งชั่วโมง ค่าต่ำสุดที่อนุญาตคือ 600 (10 นาที) และค่าสูงสุดที่อนุญาตคือ 43200 (12 ชั่วโมง) หากจำเป็นต้องใช้อายุการใช้งานนานกว่าหนึ่งชั่วโมง จะต้องเพิ่มบัญชีบริการเป็นค่าที่อนุญาตในนโยบายองค์กรที่บังคับใช้ constraints/iam.allowServiceAccountCredentialLifetimeExtension
โปรดทราบว่าการกำหนดค่าอายุการใช้งานที่สั้น (เช่น 10 นาที) จะส่งผลให้ไลบรารีเริ่มต้นการแลกเปลี่ยนโทเค็นทั้งหมดทุกๆ 10 นาที ซึ่งจะโทรหาผู้ให้บริการโทเค็นบุคคลที่สาม แม้ว่าโทเค็นของบุคคลที่สามจะยังไม่หมดอายุก็ตาม
การรวมข้อมูลประจำตัวของ Workforce ช่วยให้คุณใช้ผู้ให้บริการข้อมูลประจำตัวภายนอก (IdP) ในการตรวจสอบสิทธิ์และให้สิทธิ์แก่พนักงาน เช่น กลุ่มผู้ใช้ เช่น พนักงาน พาร์ทเนอร์ และผู้รับเหมา โดยใช้ IAM เพื่อให้ผู้ใช้เข้าถึงบริการของ Google Cloud ได้ การรวมข้อมูลประจำตัวของพนักงานขยายขีดความสามารถด้านข้อมูลประจำตัวของ Google Cloud เพื่อรองรับการลงชื่อเพียงครั้งเดียวตามแอตทริบิวต์โดยไม่ซิงค์
ด้วยการรวมข้อมูลประจำตัวของพนักงาน พนักงานของคุณสามารถเข้าถึงทรัพยากรของ Google Cloud ได้โดยใช้ผู้ให้บริการข้อมูลประจำตัวภายนอก (IdP) ที่รองรับ OpenID Connect (OIDC) หรือ SAML 2.0 เช่น Azure Active Directory (Azure AD), Active Directory Federation Services (AD FS), Okta และอื่น ๆ
ในการเข้าถึงทรัพยากร Google Cloud จากผู้ให้บริการข้อมูลประจำตัวที่รองรับ OpenID Connect (OIDC) จำเป็นต้องมีข้อกำหนดต่อไปนี้
ทำตามคำแนะนำโดยละเอียดเกี่ยวกับวิธีการกำหนดค่าการรวมข้อมูลประจำตัวของบุคลากร
หลังจากกำหนดค่าผู้ให้บริการ OIDC หรือ SAML 2.0 แล้ว จะต้องสร้างไฟล์การกำหนดค่าข้อมูลรับรอง ไฟล์การกำหนดค่าข้อมูลรับรองที่สร้างขึ้นมีข้อมูลเมตาที่ไม่ละเอียดอ่อนเพื่อแนะนำไลบรารีเกี่ยวกับวิธีดึงโทเค็นหัวเรื่องภายนอกและแลกเปลี่ยนเป็นโทเค็นการเข้าถึง GCP สามารถสร้างไฟล์การกำหนดค่าได้โดยใช้ gcloud CLI
ไลบรารี Auth สามารถดึงโทเค็นเรื่องภายนอกจากตำแหน่งไฟล์ในเครื่อง (ข้อมูลรับรองที่มาจากไฟล์) จากเซิร์ฟเวอร์ในเครื่อง (ข้อมูลรับรองที่มาจาก URL) หรือโดยการเรียกปฏิบัติการ (ข้อมูลรับรองที่มาจากปฏิบัติการ)
ข้อมูลประจำตัวที่มาจากไฟล์ สำหรับข้อมูลประจำตัวที่มาจากไฟล์ กระบวนการเบื้องหลังจะต้องรีเฟรชตำแหน่งไฟล์อย่างต่อเนื่องด้วยโทเค็นหัวเรื่องใหม่ก่อนที่จะหมดอายุ สำหรับโทเค็นที่มีอายุการใช้งานหนึ่งชั่วโมง โทเค็นจะต้องได้รับการอัปเดตในไฟล์ทุกๆ ชั่วโมง โทเค็นสามารถจัดเก็บได้โดยตรงเป็นข้อความธรรมดาหรือในรูปแบบ JSON
หากต้องการสร้างการกำหนดค่า OIDC ที่มาจากไฟล์ ให้รันคำสั่งต่อไปนี้:
# Generate an OIDC configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-file= $PATH_TO_OIDC_ID_TOKEN
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
# Optional arguments for file types. Default is "text":
# --credential-source-type "json"
# Optional argument for the field that contains the OIDC credential.
# This is required for json.
# --credential-source-field-name "id_token"
--output-file=/path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$WORKFORCE_POOL_ID
: รหัสกลุ่มบุคลากร$PROVIDER_ID
: รหัสผู้ให้บริการ$PATH_TO_OIDC_ID_TOKEN
: พาธของไฟล์ที่ใช้ในการดึงโทเค็น OIDC$WORKFORCE_POOL_USER_PROJECT
: หมายเลขโปรเจ็กต์ที่เกี่ยวข้องกับโปรเจ็กต์ผู้ใช้กลุ่มบุคลากรหากต้องการสร้างการกำหนดค่า SAML ที่มาจากไฟล์ ให้รันคำสั่งต่อไปนี้:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--credential-source-file= $PATH_TO_SAML_ASSERTION
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$WORKFORCE_POOL_ID
: รหัสกลุ่มบุคลากร$PROVIDER_ID
: รหัสผู้ให้บริการ$PATH_TO_SAML_ASSERTION
: พาธของไฟล์ที่ใช้ในการดึงการยืนยัน SAML ที่เข้ารหัส base64$WORKFORCE_POOL_USER_PROJECT
: หมายเลขโปรเจ็กต์ที่เกี่ยวข้องกับโปรเจ็กต์ผู้ใช้กลุ่มบุคลากรคำสั่งเหล่านี้สร้างไฟล์การกำหนดค่าในไฟล์เอาต์พุตที่ระบุ
ข้อมูลรับรองที่มาจาก URL สำหรับข้อมูลรับรองที่มาจาก URL เซิร์ฟเวอร์ในเครื่องจำเป็นต้องโฮสต์ตำแหน่งข้อมูล GET เพื่อส่งคืนโทเค็น OIDC การตอบกลับอาจเป็นข้อความธรรมดาหรือ JSON นอกจากนี้ยังสามารถระบุส่วนหัวคำขอที่จำเป็นเพิ่มเติมได้อีกด้วย
หากต้องการสร้างการกำหนดค่าข้อมูลระบุตัวตนบุคลากร OIDC ที่มาจาก URL ให้เรียกใช้คำสั่งต่อไปนี้:
# Generate an OIDC configuration file for URL-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:id_token
--credential-source-url= $URL_TO_RETURN_OIDC_ID_TOKEN
--credential-source-headers $HEADER_KEY = $HEADER_VALUE
--workforce-pool-user-project= $WORKFORCE_POOL_USER_PROJECT
--output-file=/path/to/generated/config.json
โดยที่จำเป็นต้องแทนที่ตัวแปรต่อไปนี้:
$WORKFORCE_POOL_ID
: รหัสกลุ่มบุคลากร$PROVIDER_ID
: รหัสผู้ให้บริการ$URL_TO_RETURN_OIDC_ID_TOKEN
: URL ของจุดสิ้นสุดเซิร์ฟเวอร์ภายในเครื่อง$HEADER_KEY
และ $HEADER_VALUE
: คู่คีย์/ค่าส่วนหัวเพิ่มเติมที่จะส่งต่อคำขอ GET ไปยัง $URL_TO_GET_OIDC_TOKEN
เช่น Metadata-Flavor=Google
$WORKFORCE_POOL_USER_PROJECT
: หมายเลขโปรเจ็กต์ที่เกี่ยวข้องกับโปรเจ็กต์ผู้ใช้กลุ่มบุคลากรหากต้องการสร้างการกำหนดค่า SAML ที่มาจาก URL ให้รันคำสั่งต่อไปนี้:
# Generate a SAML configuration file for file-sourced credentials.
gcloud iam workforce-pools create-cred-config
locations/global/workforcePools/ $WORKFORCE_POOL_ID /providers/ $PROVIDER_ID
--subject-token-type=urn:ietf:params:oauth:token-type:saml2
--credential-source-url= $URL_TO_GET_SAML_ASSERTION
--credential-source-headers