Android에서의 권한

앱 권한은 다음 항목에 대한 액세스를 보호하여 사용자 개인 정보 보호를 지원합니다.

  • 제한된 데이터(예: 시스템 상태 및 사용자의 연락처 정보)
  • 제한된 작업(예: 페어링된 기기에 연결 및 오디오 녹음)

이 페이지에서는 Android 권한 사용의 대략적인 워크플로, 다양한 유형의 권한 설명, 앱에서 권한을 사용하기 위한 권장사항 등 Android 권한의 작동 방식을 간략하게 설명합니다. 다른 페이지에서는 앱의 권한 요청을 최소화하고, 권한을 선언하고, 런타임 권한을 요청하고, 다른 앱이 앱의 구성요소와 상호작용하는 방식을 제한하는 방법을 설명합니다.

Android 앱 권한의 전체 목록을 보려면 권한 API 참조 페이지를 참고하세요.

권한 워크플로를 보여 주는 샘플 앱을 확인하려면 GitHub의 Android 권한 샘플 저장소를 참고하세요.

권한 사용 워크플로

앱에서 제한된 데이터나 제한된 작업에 액세스해야 할 수 있는 기능을 제공한다면 권한을 선언하지 않고도 정보를 가져오거나 작업을 실행할 수 있는지 결정하세요. 개발자는 권한을 선언하지 않고도 사진 찍기, 미디어 재생 일시중지, 관련 광고 표시 등 앱에서 여러 사용 사례를 처리할 수 있습니다.

앱에서 사용 사례를 처리하기 위해 제한된 데이터에 액세스하거나 제한된 작업을 실행해야 한다고 생각한다면 적절한 권한을 선언하세요. 설치 시간 권한이라고 하는 일부 권한은 앱이 설치될 때 자동으로 부여됩니다. 런타임 권한이라고 하는 다른 권한은 앱에서 추가 단계를 거쳐 런타임에 권한을 요청해야 합니다.

그림 1은 앱 권한을 사용하는 워크플로를 보여 줍니다.

그림 1. Android에서 권한을 사용하는 대략적인 워크플로

권한 유형

Android에서는 설치 시간 권한, 런타임 권한, 특별 권한을 비롯하여 권한을 다양한 유형으로 분류합니다. 각 권한 유형은 시스템에서 앱에 권한을 부여할 때 앱에서 액세스할 수 있는 제한된 데이터 범위와 앱에서 실행할 수 있는 제한된 작업 범위를 나타냅니다. 각 권한의 보호 수준은 유형에 따라 다르며 권한 API 참조 페이지에 나와 있습니다.

설치 시간 권한

왼쪽 이미지는 앱의 설치 시간 권한 목록을 보여 줍니다. 오른쪽 이미지는 두 가지 옵션(허용 및 거부)이 포함된 팝업 대화상자를 보여 줍니다.
그림 2. 앱 스토어에 표시되는 앱의 설치 시간 권한 목록

설치 시간 권한을 통해 앱에서는 제한된 데이터에 제한적으로 액세스하거나 시스템 또는 다른 앱에 최소한의 영향을 미치는 제한된 작업을 실행할 수 있습니다. 앱에서 설치 시간 권한을 선언하면 앱 스토어에서는 그림 2와 같이 사용자가 앱의 세부정보 페이지를 볼 때 설치 시간 필수 접근권한 안내를 사용자에게 표시합니다. 시스템에서는 사용자가 앱을 설치할 때 자동으로 앱에 권한을 부여합니다.

Android에는 일반 권한과 서명 권한을 포함하여 여러 하위 유형의 설치 시간 권한이 포함되어 있습니다.

일반 권한

이러한 권한을 통해 앱의 샌드박스 이상으로 확장된 데이터와 작업에 액세스할 수 있지만, 이러한 데이터와 작업은 사용자의 개인 정보 보호와 다른 앱의 작업에 거의 영향을 미치지 않습니다.

시스템은 normal 보호 수준을 일반 권한에 할당합니다.

서명 권한

시스템은 권한을 정의하는 앱이나 OS와 동일한 인증서로 앱이 서명된 경우에만 앱에 서명 권한을 부여합니다.

자동 완성 또는 VPN 서비스 등 권한이 있는 서비스를 구현하는 애플리케이션도 서명 권한을 사용합니다. 이러한 앱에는 시스템만 서비스에 결합될 수 있도록 서비스 결합 서명 권한이 필요합니다.

시스템은 signature 보호 수준을 서명 권한에 할당합니다.

런타임 권한

두 가지 옵션(허용 및 거부)이 포함된 팝업 대화상자
그림 3. 앱에서 런타임 권한을 요청할 때 표시되는 시스템 권한 메시지

런타임 권한(위험한 권한이라고도 함)으로 앱에서는 제한된 데이터에 추가로 액세스하거나 시스템과 다른 앱에 더 큰 영향을 미치는 제한된 작업을 실행할 수 있습니다. 따라서 앱에서 런타임 권한을 요청해야 제한된 데이터에 액세스하거나 제한된 작업을 실행할 수 있습니다. 이러한 권한이 이전에 부여되었다고 가정하지 말고 확인한 후 필요하다면 각 액세스 전에 권한을 요청합니다.

앱에서 런타임 권한을 요청하면 시스템은 그림 3과 같이 런타임 권한 메시지를 표시합니다.

많은 런타임 권한이 잠재적으로 민감한 정보가 포함된 특별 유형의 제한된 데이터인 비공개 사용자 데이터에 액세스합니다. 비공개 사용자 데이터의 예로는 위치와 연락처 정보가 있습니다.

마이크와 카메라를 사용하면 특히 민감한 정보에 액세스하게 됩니다. 그 때문에 시스템은 앱이 이 같은 정보에 액세스하는 이유를 설명할 수 있도록 지원합니다.

시스템은 dangerous 보호 수준을 런타임 권한에 할당합니다.

특별 권한

특별 권한은 특정 앱 작업에 관한 것입니다. 플랫폼과 OEM만이 특별 권한을 정의할 수 있습니다. 또한 플랫폼과 OEM은 일반적으로 다른 앱 위에 그리기와 같이 특히 강력한 작업에 대한 액세스를 보호하려고 할 때 특별 권한을 정의합니다.

시스템 설정의 특별 앱 액세스 페이지에는 사용자가 전환할 수 있는 작업 세트가 포함되어 있습니다. 이러한 작업의 대부분은 특별 권한으로 구현됩니다.

특별 권한을 요청하는 방법을 자세히 알아보세요.

시스템은 appop 보호 수준을 특별 권한에 할당합니다.

권한 그룹

권한은 권한 그룹에 속할 수 있습니다. 권한 그룹은 논리적으로 관련성 있는 권한의 집합으로 구성됩니다. 예를 들어 SMS 메시지를 주고받을 수 있는 권한은 애플리케이션의 SMS 상호작용과 관련이 있으므로 동일한 그룹에 속할 수도 있습니다.

권한 그룹을 사용하여 앱이 밀접하게 관련된 권한을 요청할 때 시스템에서 사용자에게 표시하는 시스템 대화상자의 수를 최소화할 수 있습니다. 애플리케이션에 대한 권한을 부여하라는 메시지가 사용자에게 표시되면 동일한 그룹에 속한 권한이 동일한 인터페이스에 표시됩니다. 그러나 권한의 그룹이 예고 없이 변경될 수 있으므로, 특정 권한이 다른 권한과 그룹화된다고 가정하지 마세요.

권장사항

앱 권한은 시스템 보안 기능에 기반하며 앱 권한을 통해 Android에서는 사용자 개인 정보 보호와 관련된 다음 목표를 지원할 수 있습니다.

  • 제어: 사용자가 앱과 공유하는 데이터를 직접 제어합니다.
  • 투명성: 사용자가 앱이 사용하는 데이터와 앱이 이 데이터에 액세스하는 이유를 파악합니다.
  • 데이터 수집 최소화: 앱에서는 사용자가 호출하는 특정 작업에 필요한 데이터에만 액세스하여 이를 사용합니다.

이 섹션에서는 앱에서 효과적으로 권한을 사용하기 위한 일련의 핵심 권장사항을 보여 줍니다. Android에서 권한을 사용하는 방법에 관한 자세한 내용은 앱 권한 권장사항 페이지를 참고하세요.

최소 개수의 권한 요청

사용자가 앱에서 특정 작업을 요청할 때 앱은 작업을 완료하는 데 필요한 권한만 요청해야 합니다. 권한을 사용하는 방법에 따라 민감한 정보에 액세스하지 않고도 앱의 사용 사례를 처리하는 다른 방법이 있을 수 있습니다.

런타임 권한을 특정 작업과 연결

최대한 앱의 사용 사례 흐름에서 늦게 권한을 요청하세요. 예를 들어 앱에서 사용자가 다른 사용자에게 음성 메시지를 보내도록 허용하는 경우 사용자가 메시지 화면으로 이동하여 음성 메시지 보내기 버튼을 누를 때까지 기다립니다. 사용자가 버튼을 누르고 나면 앱에서 마이크 액세스 권한을 요청할 수 있습니다.

앱의 종속 항목 고려

라이브러리를 포함하면 권한 요구사항도 상속됩니다. 각 종속 항목에 필요한 권한과 이러한 권한의 사용 목적을 알고 있어야 합니다.

투명성 확보

권한을 요청할 때는 사용자가 충분한 정보를 바탕으로 결정을 내릴 수 있도록 액세스하는 대상, 액세스하는 이유, 권한이 거부될 경우 영향을 받는 기능을 명확히 해야 합니다.

시스템 액세스 명확하게 알리기

민감한 정보 또는 하드웨어(예: 카메라나 마이크)에 액세스할 때 아직 시스템에서 관련 표시기를 제공하지 않는 경우 앱에 지속적으로 알림을 표시하세요. 알림을 통해 사용자는 언제 앱이 제한된 데이터에 액세스하거나 제한된 작업을 실행하는지 정확히 파악할 수 있습니다.

시스템 구성요소의 권한

권한은 시스템 기능을 요청하기 위해서만 사용되는 것은 아닙니다. 앱의 시스템 구성요소는 다른 앱과의 상호작용을 제한하는 방법에 관한 페이지에서 설명한 대로 앱과 상호작용하는 다른 앱을 제한할 수 있습니다.