מה חדש ב-Android 10 לארגונים

בדף הזה תוכלו לקרוא סקירה כללית על ממשקי ה-API החדשים לארגונים, על התכונות החדשות ועל השינויים בהתנהגות שהוצגו ב-Android 10.

פרופילי עבודה במכשירים בבעלות החברה

ב-Android 10 נוספו תכונות חדשות להקצאת הרשאות ולאימות למכשירים בבעלות החברה שנדרש בהם רק פרופיל עבודה.

שיפור כלי ההקצאה לפרופילי עבודה

אפשר להקצות פרופילים לצורכי עבודה במכשירים עם Android מגרסה 10 ואילך שנרשמו באמצעות קוד QR או Zero touch. במהלך הקצאת מכשיר בבעלות החברה, תוסף חדש של intent מאפשר לאפליקציות של בקרי מדיניות מכשירים (DPC) להתחיל בהגדרה של פרופיל עבודה או של מכשיר מנוהל. אחרי שיוצרים פרופיל עבודה או שמקימים ניהול מלא, פלטפורמות DPC צריכות להפעיל מסכים של תאימות למדיניות כדי לאכוף מדיניות ראשונית.

בקובץ המניפסט של ה-DPC, צריך להצהיר על מסנן Intent חדש עבור GET_PROVISIONING_MODE בפעילות ולהוסיף את ההרשאה BIND_DEVICE_ADMIN כדי למנוע מאפליקציות שרירותיות להתחיל את הפעילות. לדוגמה:

<activity
    android:name=".GetProvisioningModeActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action
            android:name="android.app.action.GET_PROVISIONING_MODE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

במהלך ההקצאה, המערכת מפעילה את ה-Activity שמשויך למסנן Intent. מטרת הפעילות הזו היא לציין מצב ניהול (פרופיל עבודה או ניהול מלא).

יכול להיות שכדאי לאחזר את נתוני ההקצאה הנוספים לפני שקובעים את מצב הניהול המתאים למכשיר. הפעילות יכולה לקרוא ל-getIntent() כדי לאחזר את הפרטים הבאים:

בנוסף, אפליקציות DPC יכולות ליצור כוונת תוצאה חדשה ולהוסיף לה את התוספים הבאים:

כדי להגדיר את מצב הניהול במכשיר, צריך להתקשר אל putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode), כאשר desiredProvisioningMode הוא:

  • פרופיל עבודה: PROVISIONING_MODE_MANAGED_PROFILE
  • מנוהל באופן מלא: PROVISIONING_MODE_FULLY_MANAGED_DEVICE

כדי להשלים את הקצאת פרופיל העבודה או את הקצאת המכשיר במצב מנוהל, צריך לשלוח את פרטי ההקצאה בחזרה להגדרה באמצעות setResult(RESULT_OK, Intent) ולסגור את כל המסכים הפעילים באמצעות finish().

אחרי שההקצאה מסתיימת, Intent חדש זמין ל-DPC כדי להפעיל את מסכי התאימות ולאכוף את הגדרות המדיניות הראשוניות. במכשירים עם פרופיל עבודה, מסכי התאימות מוצגים בפרופיל העבודה. ה-DPC צריך לוודא שהמשתמשים רואים את מסכי התאימות שלו, גם אם הם יוצאים מתהליך ההגדרה.

בקובץ המניפסט של ה-DPC, צריך להצהיר על מסנן Intent חדש עבור ADMIN_POLICY_COMPLIANCE בפעילות ולהוסיף את ההרשאה BIND_DEVICE_ADMIN כדי למנוע מאפליקציות שרירותיות להתחיל את הפעילות. לדוגמה:

<activity
    android:name=".PolicyComplianceActivity"
    android:label="@string/app_name"
    android:permission="android.permission.BIND_DEVICE_ADMIN">
    <intent-filter>
        <action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

ה-DPC חייב להשתמש ב-Intent החדש הזה במקום להאזין לשידור ACTION_PROFILE_PROVISIONING_COMPLETE.

הפעילות שמשויכת למסנן ה-Intent יכולה לקרוא ל-getIntent() כדי לאחזר את EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE. אחרי ביצוע בדיקת התאימות למדיניות, ADMIN_POLICY_COMPLIANCE צריך להחזיר את הערך setResult(RESULT_OK, Intent) ולסגור את כל המסכים הפעילים באמצעות finish().

במכשירים בניהול מלא, המשתמשים מוחזרים למסך הבית. במכשירים עם פרופיל עבודה, המשתמשים מתבקשים להוסיף את החשבון הפרטי שלהם לפני שהם מוחזרים למסך הבית.

אימות מזהה מכשיר של פרופיל עבודה

פלטפורמות DPC שהוגדרו כאדמין של פרופיל עבודה שהוקצה באמצעות שיוך אוטומטי לארגון יכולות לקבל מזהי מכשירים שאומתו על ידי חומרה מאובטחת, כמו מספר IMEI או מספר סידורי של היצרן. המכשיר צריך לכלול חומרה מאובטחת (כמו סביבת מחשוב אמינה (TEE) או רכיב מאובטח (SE)) ולתמוך באימות של מזהה המכשיר ובשיוך אוטומטי לארגון.

רכיב האדמין של פרופיל העבודה יכול לקרוא ל-DevicePolicyManager.generateKeyPair() ולהעביר אחד או יותר מהערכים ID_TYPE_SERIAL,‏ ID_TYPE_IMEI או ID_TYPE_MEID לארגומנט idAttestationFlags.

מידע נוסף על חילוץ ואימות של מזהי מכשירים זמין במאמר אימות של זוגות מפתחות שמגובים בחומרה באמצעות אימות מפתחות.

שיפורים בפרופיל העבודה

יש APIs חדשים לתמיכה בגישה ליומן חוצה-פרופילים ולחסימה של התקנת אפליקציות ממקורות לא מוכרים בכל המכשיר.

פרופיל עבודה, מקורות לא מוכרים בכל המכשיר

אפליקציות שהורדו ממקורות אחרים מלבד Google Play (או חנויות אפליקציות מהימנות אחרות) נקראות אפליקציות ממקורות לא ידועים. ב-Android 10, אדמינים של פרופילי עבודה יכולים למנוע ממשתמשים או מפרופילים להתקין אפליקציות ממקורות לא מוכרים בכל מקום במכשיר, על ידי הוספת הגבלת המשתמש החדשה DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY. אחרי שמוסיפים את ההגבלה הזו, עדיין אפשר להתקין אפליקציות באמצעות adb.

כדי למנוע מהמשתמשים להתקין בטעות אפליקציות ממקורות לא מוכרים, מומלץ להוסיף את הגבלת המשתמש הזו כי היא לא מחייבת התקנה של שירותי Google Play. אם רוצים לתמוך בגרסאות ישנות יותר של Android, אפשר להגדיר ערך של הגדרה אישית מנוהלת ל-Google Play.

הגבלת מכשירי קלט מותרים לפרופילי עבודה

כשמנהלי פרופילים של עבודה מתקשרים אל DevicePolicyManager.setPermittedInputMethods(), המשתמשים מוגבלים רק לשיטות הקלט המותרות בתוך פרופיל העבודה שלהם, ולא בכל המכשיר. כך המשתמשים מקבלים שליטה מלאה על שיטות הקלט בצד האישי של המכשיר שלהם.

איפוס שקט של פרופילי עבודה

הוספנו את הדגל WIPE_SILENTLY אל DevicePolicyManager.wipeData(). אם הדגל מוגדר, המשתמשים לא יקבלו התראה אחרי שמבצעים מחיקה של פרופיל העבודה באמצעות wipeData().

תכונות חדשות למכשירים שמנוהלים במלואם

ב-Android 10 נוספו תכונות וממשקי API חדשים למכשירים מנוהלים באופן מלא, כולל עדכוני מערכת ידניים, הרחבת ההקצאה באמצעות קוד QR ו-NFC כך שתכלול את פרטי הכניסה לרשת Wi-Fi עם EAP, ותמיכה ב-DNS over TLS.

התקנה ידנית של עדכון מערכת

ב-Android 10, אדמינים של מכשירים מנוהלים יכולים להתקין עדכוני מערכת באמצעות קובץ עדכון מערכת. עדכוני מערכת ידניים מאפשרים לאדמינים של IT לבצע את הפעולות הבאות:

  • כדאי לבדוק עדכון במספר קטן של מכשירים לפני שמתקינים אותו במכשירים רבים.
  • הימנעות מהורדות כפולות ברשתות עם רוחב פס מוגבל.
  • כדאי לבצע את ההתקנות לסירוגין, או לעדכן את המכשירים רק כשהם לא בשימוש.

קודם כול, אדמין IT מגדיר מדיניות של דחיית עדכון מערכת כדי לדחות את ההתקנה האוטומטית (אם נדרש). בשלב הבא, ה-DPC של המכשיר קורא ל-installSystemUpdate() עם הנתיב לקובץ עדכון המערכת של יצרן המכשיר. מעבירים אובייקט InstallSystemUpdateCallback שהמערכת יכולה להשתמש בו כדי לדווח על שגיאות שמתרחשות לפני שהמכשיר מופעל מחדש. אם משהו משתבש, המערכת קוראת ל-onInstallUpdateError() עם קוד השגיאה.

אחרי שהמכשיר מופעל מחדש, ה-DPC צריך לאשר שההתקנה הסתיימה בהצלחה באמצעות API של גרסה, כמו Build.FINGERPRINT. אם העדכון ייכשל, צריך לדווח על הכישלון למנהל ה-IT.

הקצאת הרשאות ל-Wi-Fi באמצעות EAP

ב-Android 10, קודי QR ונתוני NFC שמשמשים להקצאת הרשאות למכשיר יכולים להכיל הגדרות ואישורים של EAP, כולל אישורים. כשמישהו סורק קוד QR או מקיש על תג NFC, המכשיר עובר אימות אוטומטי לרשת Wi-Fi מקומית באמצעות EAP ומתחיל את תהליך ההקצאה בלי צורך בהזנה ידנית נוספת.

כדי לאמת Wi-Fi באמצעות EAP, מוסיפים EXTRA_PROVISIONING_WIFI_SECURITY_TYPE extra עם הערך "EAP". כדי לציין את אימות ה-EAP, אפשר להוסיף את התוספים הבאים להקצאת הרשאות ל-intent:

תמיכה בשרת DNS פרטי

ארגונים יכולים להשתמש ב-DNS over TLS (שנקרא שרת DNS פרטי במכשירי Android) כדי למנוע דליפה של שאילתות DNS, כולל שאילתות של שמות מארחים פנימיים. רכיבי האדמין במכשירים בניהול מלא יכולים לשלוט בהגדרות ה-DNS הפרטי של המכשיר. כדי להגדיר את המצב של שרת ה-DNS הפרטי, מבצעים קריאה ל:

כש-DPC קורא לאחת מהשיטות האלה, המערכת מחזירה PRIVATE_DNS_SET_NO_ERROR אם הקריאה בוצעה בהצלחה. אחרת, תוחזר שגיאה.

כדי לאחזר את המצב של שרת ה-DNS הפרטי ואת המארח שהוגדר במכשיר, צריך לבצע קריאה ל-getGlobalPrivateDnsMode() ול-getGlobalPrivateDnsHost(). כדי למנוע מהמשתמשים לשנות את ההגדרות של שרת ה-DNS הפרטי, מוסיפים את ההגבלה על המשתמש DISALLOW_CONFIG_PRIVATE_DNS.

חריגה ממצב נעילה של VPN

מצב נעילת VPN מאפשר ל-DPC לחסום כל תעבורת רשת שלא משתמשת ב-VPN. אדמינים של מכשירים בניהול מלא ושל פרופילי עבודה יכולים להחריג אפליקציות ממצב נעילה. כברירת מחדל, אפליקציות פטורות משתמשות ב-VPN, אבל הן מתחברות אוטומטית לרשתות אחרות אם ה-VPN לא זמין. אפליקציות שהוחרגו וגם נחסמה במפורש הגישה שלהן ל-VPN ישתמשו רק ברשתות אחרות.

כדי להחריג אפליקציה ממצב נעילה, צריך לבצע קריאה ל-method החדש DevicePolicyManagersetAlwaysOnVpnPackage() שמקבל רשימה של חבילות אפליקציות מוחרגות. כל חבילות האפליקציות ש-DPC מוסיף צריכות להיות מותקנות במכשיר כשהשיטה מופעלת. אם אפליקציה מוסרת ומוחזרת, צריך להחריג אותה שוב. כדי לקבל את האפליקציות שהיו פטורות ממצב נעילה, צריך להפעיל את getAlwaysOnVpnLockdownWhitelist().

כדי לעזור לאדמינים של מכשירים מנוהלים ופרופילי עבודה לקבל את הסטטוס של מצב נעילה, ב-Android 10 נוספה השיטה isAlwaysOnVpnLockdownEnabled().

היקפי הרשאות חדשים

ב-Android 10, רשימת הפונקציות שאפשר להעביר מאפליקציית DPC לאפליקציות אחרות וספציפיות יותר, הורחבה. ‫Android מקבץ את השיטות של API שנדרשות למשימה בהיקפים. כדי להקצות הרשאה להיקף מסוים, קוראים לפונקציה setDelegatedScopes() ומעבירים אחד או יותר מההיקפים הבאים:

ב-Android 10 נוספה המחלקה החדשה DelegatedAdminReceiver לאפליקציות של נציגים. המערכת משתמשת במקלט שידורים הזה כדי לשלוח קריאות חוזרות (callback) שדומות ל-DPC לאפליקציות להענקת הרשאות. אפליקציות שהוקצתה להן הרשאה לרישום פעילות ברשת ולבחירת אישורים צריכות להטמיע את המחלקה הזו. כדי להוסיף את הרכיב הזה לאפליקציה עם הרשאות גישה מוגבלות, פועלים לפי השלבים הבאים:

  1. מוסיפים מחלקת משנה של DelegatedAdminReceiver לאפליקציית הנציג.
  2. מצהירים על <receiver> בקובץ מניפסט של אפליקציה, ומוסיפים פעולת מסנן Intent לכל קריאה חוזרת. לדוגמה, ACTION_NETWORK_LOGS_AVAILABLE או ACTION_CHOOSE_PRIVATE_KEY_ALIAS.
  3. כדי להגן על מקלט השידור, צריך להשתמש בהרשאה BIND_DEVICE_ADMIN.

בקטע הקוד הבא מוצג קובץ מניפסט של אפליקציה של אפליקציית נציג יחידה שמטפלת גם ברישום ביומן של הרשת וגם בבחירת האישורים:

<receiver android:name=".app.DelegatedAdminReceiver"
        android:permission="android.permission.BIND_DELEGATED_ADMIN">
    <intent-filter>
        <action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
        <action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
    </intent-filter>
    </receiver>

רישום פעילות ברשת

כדי לעזור לארגונים לזהות תוכנות זדוניות ולעקוב אחריהן, מערכות DPC יכולות לרשום ביומן את חיבורי ה-TCP ואת בדיקות ה-DNS על ידי המערכת. ב-Android 10,‏ אדמינים של מכשירים מנוהלים יכולים להקצות לאפליקציה ייעודית את הרישום ביומן של הרשת.

כדי לאחזר יומני רשת אחרי שהמערכת הופכת חבילת נתונים לזמינה, אפליקציות שמוענקת להן הרשאה צריכות קודם ליצור מחלקת משנה של DelegatedAdminReceiver (כפי שמתואר למעלה). במחלקת המשנה, מטמיעים את הקריאה החוזרת (callback) onNetworkLogsAvailable() לפי ההנחיות במאמר אחזור יומנים.

אפליקציות עם הרשאת גישה יכולות להפעיל את השיטות הבאות של DevicePolicyManager (העברת null לארגומנט admin):

כדי למנוע אובדן של יומנים, מכשירי DPC לא צריכים להפעיל רישום ביומן של הרשת אם מתכננים להעביר את ההרשאה לאפליקציה אחרת. אפליקציית הנציג צריכה להפעיל את יומני הרשת ולאסוף אותם. אחרי ש-DPC מעביר את הרישום ביומן של הרשת, הוא לא יקבל יותר קריאות חוזרות (callbacks) של onNetworkLogsAvailable().

כדי ללמוד איך לדווח על רישום ביומן של פעילות ברשת מאפליקציית נציג, אפשר לקרוא את המדריך למפתחים רישום ביומן של פעילות ברשת.

בחירת אישור

ב-Android 10, אדמינים של מכשירים בניהול מלא, פרופילי עבודה ומשתמשים משניים יכולים להקצות בחירת אישורים לאפליקציה ייעודית.

כדי לבחור כינוי של אישור, אפליקציות שמועברות אליהן הרשאות צריכות קודם ליצור מחלקת משנה של DelegatedAdminReceiver (כפי שמתואר למעלה). במחלקת המשנה, מטמיעים את הקריאה החוזרת onChoosePrivateKeyAlias() ומחזירים כינוי לאישור מועדף, או מחזירים null כדי להציג למשתמש בקשה לבחור אישור.

הוצאה משימוש של מדיניות אדמין במכשיר

ב-Android 10, אפליקציות ו-DPC לא יכולים להחיל מדיניות מדור קודם של אדמין במכשיר. אנחנו ממליצים ללקוחות ולשותפים לעבור למכשירים מנוהלים באופן מלא או לפרופילים לצורכי עבודה. המדיניות הבאה מחזירה את השגיאה SecurityException כשמפעילים אותה באמצעות אדמין מכשיר שמטרגט ל-Android 10:

חלק מהאפליקציות משתמשות באדמין של המכשיר לניהול מכשירים לצרכנים. לדוגמה, נעילה ומחיקה של מכשיר שאבד. כדי להפעיל את האפשרות הזו, המדיניות הבאה ממשיכה להיות זמינה:

מידע נוסף על השינויים האלה זמין במאמר בנושא הוצאה משימוש של ניהול מכשירים.

תכונות חדשות לאפליקציות

אפליקציות שמיועדות ל-Android 10 יכולות לשלוח שאילתה לגבי מורכבות נעילת המסך שהוגדרה במכשיר לפני שהן מציגות נתונים סודיים או מפעילות תכונות קריטיות. אפליקציות שקוראות ל-API‏ KeyChain נהנות משיפורים בהתנהגות, ותכונות חדשות זמינות גם לאפליקציות VPN.

בדיקת האיכות של נעילת המסך

החל מ-Android 10, אפליקציות עם תכונות קריטיות שדורשות נעילת מסך יכולות לשלוח שאילתה לגבי מידת המורכבות של נעילת המסך במכשיר או בפרופיל העבודה. אפליקציות שזקוקות לנעילת מסך חזקה יותר יכולות להפנות את המשתמש להגדרות נעילת המסך של המערכת, כדי לאפשר לו לעדכן את הגדרות האבטחה.

כדי לבדוק את איכות נעילת המסך:

כדי להפעיל את ההגדרות של נעילת המסך במערכת, משתמשים ב-ACTION_SET_NEW_PASSWORD עם EXTRA_PASSWORD_COMPLEXITY נוסף – האפשרויות שלא עומדות בדרישות המורכבות שצוינו ב-intent extra מוצגות באפור. המשתמשים יכולים לבחור מבין האפשרויות הזמינות לנעילת המסך או לצאת מהמסך.

שיטה מומלצת: להציג הודעה באפליקציה לפני שמשיקים את דף הנעילה של המסך במערכת. כשהאפליקציה תחזור לפעולה, צריך להתקשר שוב למספר DevicePolicyManager.getPasswordComplexity(). אם עדיין נדרשת נעילת מסך חזקה יותר, עדיף להגביל את הגישה במקום להציג למשתמשים שוב ושוב בקשות לעדכן את הגדרות האבטחה שלהם.

תמיכה ב-HTTP proxy באפליקציות VPN

ב-Android 10, אפליקציות VPN יכולות להגדיר שרת proxy של HTTP לחיבור ה-VPN שלהן. כדי להוסיף שרת proxy של HTTP, אפליקציית VPN צריכה להגדיר מופע של ProxyInfo עם מארח ויציאה, לפני שהיא קוראת ל-VpnService.Builder.setHttpProxy(). המערכת וספריות רשת רבות משתמשות בהגדרת ה-proxy הזו, אבל המערכת לא מחייבת את האפליקציות להשתמש ב-proxy לבקשות HTTP.

דוגמת קוד להגדרת HTTP proxy מופיעה באפליקציית הדוגמה ToyVPN.

מצבים של שירות VPN

אפליקציות VPN יכולות לזהות אם השירות פועל בגלל VPN פועל כל הזמן ואם מצב נעילה פעיל. שיטות חדשות שנוספו ב-Android 10 יכולות לעזור לכם להתאים את ממשק המשתמש. לדוגמה, יכול להיות שתשביתו את לחצן הניתוק אם ה-VPN שפועל כל הזמן שולט במחזור החיים של השירות.

אפליקציות VPN יכולות להפעיל את השיטות הבאות של VpnService אחרי התחברות לשירות ויצירת הממשק המקומי:

  • isAlwaysOn() כדי לגלות אם המערכת הפעילה את השירות בגלל חיבור קבוע ל-VPN
  • isLockdownEnabled() כדי לדעת אם המערכת חוסמת חיבורים שלא משתמשים ב-VPN

הסטטוס 'פועל תמיד' נשאר זהה בזמן שהשירות פועל, אבל הסטטוס של מצב נעילה עשוי להשתנות.

שיפורים במחזיק המפתחות

ב-Android 10 הוספנו כמה שיפורים שקשורים ל-API של KeyChain.

כשמפעילים את הפונקציה KeyChain.choosePrivateKeyAlias(), מכשירים עם Android מגרסה 10 ואילך מסננים את רשימת האישורים שהמשתמש יכול לבחור מתוכה על סמך הגורמים המנפיקים והאלגוריתמים של המפתחות שצוינו בפונקציה.

לדוגמה, כששרת TLS שולח הודעה מסוג Certificate Request כחלק מלחיצת היד של TLS, והדפדפן קורא ל-KeyChain.choosePrivateKeyAlias(), ההנחיה לבחירת אישור כוללת רק אפשרויות שתואמות לפרמטר issuers. אם אין אפשרויות תואמות או אם לא מותקנים במכשיר אישורים, לא תוצג למשתמש בקשה לבחירה.

בנוסף, ב-KeyChain כבר לא נדרשת נעילת מסך במכשיר כדי לייבא מפתחות או אישורי רשות אישורים.