IAM 조건 특성

동적 규칙과 신뢰할 수 있는 프로파일은 둘 다 지정된 조건부 IAM문을 사용하여 자동으로 연합 사용자를 액세스 그룹 또는 신뢰할 수 있는 프로파일에 추가합니다. 사용자가 연합 ID를 사용하여 로그인하면, ID 제공자(IdP)의 데이터가 설정된 조건을 기반으로 사용자를 동적으로 액세스 그룹에 맵핑합니다. 자세한 정보는 액세스 그룹에 대한 동적 규칙 작성신뢰할 수 있는 프로파일 작성의 내용을 참조하십시오.

조건부 IAM 액세스 정책을 할당하여 계정의 리소스에 대한 임시 액세스를 지정하거나 특정 기간 동안 리소스에 대한 액세스를 허용할 수도 있습니다. 자세한 내용은 시간 기반 조건으로 액세스 제한하기를 참조하고 /v2/policies 액세스 정책의 조건 섹션을 검토하세요.

동적 규칙 및 신뢰할 수 있는 프로필 세부 정보

각 동적 규칙 및 신뢰할 수 있는 프로파일 신뢰 관계에는 다음 특성이 있습니다.

이름
액세스 그룹 또는 신뢰할 수 있는 프로파일에 추가하는 사용자 유형을 기억하는 데 도움이 되는 사용자 정의 이름을 입력하십시오.
ID 제공자(IdP)
동적 규칙 또는 신뢰할 수 있는 프로파일은 로그인하는 사용자가 이 발행자 URI와 함께 엔터프라이즈 IdP를 사용하여 인증하는 경우에만 평가됩니다. 동적 규칙 또는 신뢰할 수 있는 프로파일을 작성할 때 복사하여 붙여넣을 수 있도록 사용자의 IdP URL이 콘솔에 표시됩니다. 예를 들어, https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20입니다. View identity provider (IdP) data을(를) 클릭하여 IdP를 볼 수도 있습니다. IBMid의 경우 IdP는 때때로 발행자 ID라고도 하는 SAML "entityId" 필드이며, IBMid로 온보딩할 때 연합 구성의 일부입니다. App ID 의 경우 이에 해당하는 구문은 "영역 ID"입니다. 자세한 정보는 외부 ID 제공자에서 인증 사용의 내용을 참조하십시오.
세션 지속 기간
동적 액세스 그룹 멤버십 또는 신뢰할 수 있는 프로파일 세션은 이 특성에 지정된 시간이 경과하면 만료됩니다. 예를 들어 특성이 24시간으로 설정되면, 사용자의 동적 또는 신뢰할 수 있는 프로파일 세션이 로그인 후 1일(24시간)이 경과하면 종료됩니다.

규칙 및 프로필 조건문 속성

또한 각 동적 규칙 및 신뢰할 수 있는 프로파일 신뢰 관계에는 다음 특성으로 구성되는 하나 이상의 조건이 있습니다. 사용자는 true로 평가되려면 전체 동적 규칙 또는 신뢰할 수 있는 프로파일 인증의 모든 조건을 충족해야 합니다.

다음 경우에 사용자 허용
ID 제공자 데이터의 일부인 속성 이름입니다. 엔터프라이즈 ID 공급자에서 조건 평가에 대한 속성 이름이 만들어지는 방법에 대해 자세히 알아보려면 엔터프라이즈 ID 공급자 속성 매핑을 참조하세요.
운영자
Allow users when 필드에 지정된 속성을 Values 특성과 비교합니다. Equals, Not Equals, Equals Ignore Case, Not Equals Ignore Case, In, Contains 중에서 선택할 수 있습니다. 속성 명령문의 유형이 배열인 경우에는 Contains 옵션을 사용하십시오. In 옵션을 사용하여 일치시킬 값을 두 개 이상 입력할 수 있습니다.
Allow users when 속성 이름에 대해 평가하기 위해 비교 연산자가 사용하는 속성 값입니다.

동적 규칙 또는 신뢰할 수 있는 프로파일 조건을 키:값 쌍으로 생각할 수 있습니다. 키는 Allow users when 필드에 추가하는 것이며 값은 Values 필드에 입력하는 것입니다.

규칙 및 프로필 조건에 사용 가능한 연산자

조건에 사용 가능한 연산자
운영자 설명 샘플 조건
같음 대소문자 구분 문자열 비교입니다. 부울 또는 숫자 값이 비교 전 문자열로 변환됩니다. primaryGroup Equals " Admins
같지 않음 대소문자 구분 문자열 비교를 부정합니다. 부울 또는 숫자 값이 비교 전 문자열로 변환됩니다. primaryGroup NotEquals “Admins”
같음 대소문자 구분 안 함 대소문자를 구분하지 않는 문자열 비교입니다. 부울 또는 숫자 값이 비교 전 문자열로 변환됩니다. isManager EqualsIgnoreCase “tRuE”
같지 않음에서 대소문자 구분 안 함 대소문자를 구분하지 않는 문자열 비교를 부정합니다. 부울 또는 숫자 값이 비교 전 문자열로 변환됩니다. is_teamlead NotEqualsIgnoreCase “TrUe”
포함 속성이 문자열, 숫자 또는 부울의 배열인 경우 Contains은(는) 비교 연산자 Equals을(를) 사용하여 제공된 값이 로그인 메시지에 있는 배열의 일부인지 판별합니다. 그렇지 않고 속성이 단일 문자열인 경우, Contains은(는) 제공된 값이 로그인 메시지에 있는 문자열 속성에 포함되어 있는지 판별합니다. group contains “Admins”
In 여러 개의 같음 연산자에 대한 간단한 표기법입니다. 로그인 메시지 속성의 값을 이 규칙의 잠재적 값 목록과 비교합니다. 부울 또는 숫자가 비교 전 문자열로 변환됩니다. jobRole in [“Manager”,”Director”,”Team-Lead”]

다음 표에는 동적 규칙 또는 신뢰할 수 있는 프로파일 조건에 대한 각 필드의 값이 포함되어 있습니다. 이 예에서는 페더레이션된 IdP 내에서 관리자로 식별되는 사용자가 관리자에게만 특정 액세스 권한이 설정된 IBM Cloud 액세스 그룹 또는 신뢰할 수 있는 프로필에 매핑됩니다.

값의 예
필드
이름 Manager
ID 제공자 https://idp.example.org/SAML2
세션 지속 기간(시간) 12
(속성 이름)의 사용자 허용 조건 isManager
운영자 Equals
true

컴퓨팅 리소스 속성 이름

신뢰 프로파일 내 컴퓨팅 리소스와의 신뢰를 구축하기 위해 IBM Cloud 콘솔, IBM Cloud CLI 또는 IAM API를 사용할 수 있습니다. 모든 서비스 리소스를 선택하고 프로파일을 적용할 수 있는 컴퓨팅 리소스 인스턴스를 필터링하기 위해 조건을 추가하는 경우, 이러한 조건은 다음 리소스 속성을 기반으로 작성됩니다.

Kubernetes 및 Red Hat OpenShift 속성 이름

Kubernetes 및 Red Hat OpenShift 속성 이름
IBM Cloud 콘솔 이름 CLI 및 API 이름 설명
자원 그룹 ID resource_group_id 이 클러스터를 포함하는 리소스 그룹의 ID입니다. IBM Cloud 콘솔에 있는 개요 페이지를 사용하여 클러스터의 리소스 그룹을 식별할 수 있습니다.
리소스 그룹 이름 resource_group_name 이 클러스터를 포함하는 리소스 그룹의 이름입니다.
서비스 인스턴스 service_instance 이 클러스터의 ID입니다. 이 값은 IBM Cloud 콘솔의 클러스터 개요 페이지에서 "클러스터 ID"로 검색하거나 IBM Cloud CLI를 사용하여 검색할 수 있습니다.
위치 location 클라우드 리소스 이름으로부터 도출된 클러스터의 위치입니다.
네임스페이스 namespace 컴퓨팅 리소스 토큰을 검색하고 IAM 토큰을 가져오는 데 사용되는 서비스 계정의 네임스페이스입니다.
서비스 계정 name 컴퓨팅 리소스 토큰을 검색하고 IAM 토큰을 가져오는 데 사용되는 서비스 계정의 이름입니다.
팟(Pod) pod IAM 토큰을 검색하려는 코드를 실행하는 Kubernetes 팟(Pod)의 이름입니다.

Virtual Server for VPC 속성 이름

Virtual Server for VPC 속성 이름
IBM Cloud 콘솔 이름 CLI 및 API 이름 설명
자원 그룹 ID resource_group_id 이 클러스터를 포함하는 리소스 그룹의 ID입니다. IBM Cloud 콘솔에 있는 개요 페이지를 사용하여 클러스터의 리소스 그룹을 식별할 수 있습니다.
리소스 그룹 이름 resource_group_name 이 클러스터를 포함하는 리소스 그룹의 이름입니다.
리소스 ID resource Virtual Server for VPC의 ID입니다.
인스턴스 그룹 이름 instance_group_name 인스턴스 그룹(이 가성 서버가 속해 있는 경우)의 이름입니다.
지역 region 이 가상 서버가 배치된 지역입니다.
서브넷 subnet_id Virtual Server for VPC의 서브넷 ID입니다(있는 경우).
VPC ID vpc_id Virtual Server for VPC의 VPC ID입니다(있는 경우).
구역 zone 이 가상 서버가 배치된 구역 이름입니다.

IBM Cloud CLI 명령 예

다음 예는 CLI에서 속성 이름을 사용하여 신뢰할 수 있는 프로파일 링크 및 조건을 작성하는 방법을 보여줍니다.

Kubernetes에 대한 신뢰할 수 있는 프로파일 조건 작성

ID가 Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c인 신뢰할 수 있는 프로파일을 계정 444aebb0657c7f0f3aae8e7bdc78709a 및 서비스 계정 네임스페이스 my-namespace에 있는 Kubernetes 클러스터 c0pigdctkkc07fs7pm06의 모든 서비스 계정에 연결하려면 다음 명령을 지정하십시오.

ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
              --name NewRule4IKS --type Profile-CR --cr-type IKS_SA \
               --conditions "claim:service_instance,operator:EQUALS,vlaue:c0pigdctkkc07fs7pm06" \
               --conditions "claim:namespace,operator:EQUALS,value:my-namespace"

VPC에 대한 신뢰할 수 있는 프로파일 조건 작성

ID가 Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c인 신뢰할 수 있는 프로파일을 계정 444aebb0657c7f0f3aae8e7bdc78709a에 있는 한 VPC r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d의 모든 가상 서버에 연결하려면 다음 명령을 지정하십시오.

ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
              --name NewRule4VSI --type Profile-CR --cr-type VSI \
               --conditions "claim:vpc_id,operator:EQUALS,value:r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d"

v2 액세스 정책의 조건

IAM 액세스 정책의 시간 기반 및 리소스 속성 기반 조건은 /v2/policies 구문을 사용합니다. /v1/policies 구문을 사용하는 정책은 시간 기반 리소스 속성 기반 조건을 추가할 수 없습니다. 자세한 내용은 액세스 정책 버전 제한을 참조하세요.

정책에 대한 새 스키마를 보려면 /v2/policies.

시간 기반 조건

다음 표에는 액세스 정책에 대한 시간 기반 조건을 만드는 데 사용할 수 있는 연산자가 나와 있습니다.

액세스 정책의 시간 기반 조건에 사용할 수 있는 운영자입니다.
운영자 설명
dayOfWeekAnyOf 클라이언트가 정책을 사용할 수 있는 요일입니다.
1 - 월요일
2 - 화요일
3 - 수요일
4 - 목요일
5 - 금요일
6 - 토요일
7 - 일요일
예시를 참조하세요.
timeGreaterThanOrEquals 조건이 액세스 권한을 부여하기 시작하는 시간입니다. 시간은 <time>±<time_zone_offset> 에 의해 계산됩니다. 예시를 참조하세요.
timeLessThanOrEquals 조건에 따라 액세스가 종료되는 시간입니다. 시간은 <time>±<time_zone_offset> 에 의해 계산됩니다. 예시를 참조하세요.
dateTimeGreaterThanOrEquals 조건에 따라 액세스 권한 부여가 시작되는 날짜와 시간입니다. 날짜는 <datetime>±<time_zone_offset> 에 의해 계산됩니다. 예시를 참조하세요.
dateTimeLessThanOrEquals 조건에 따라 액세스가 종료되는 날짜와 시간입니다. 날짜는 <datetime>±<time_zone_offset> 에 의해 계산됩니다. 예시를 참조하세요.

GreaterThanOrEquals 연산자를 사용하여 조건을 정의할 때는 항상 LessThanOrEquals 연산자를 사용하여 조건을 포함하세요. 이렇게 하면 일시적이든, 하루 종일 반복되든, 사용자 지정 시간으로 반복되든 기간을 명확하게 정의할 수 있습니다. 자세한 내용은 조건 패턴을 참조하세요.

날짜 및 시간 운영자의 경우 정책은 ISO 8601 형식 hh:mm:ss±hh:mm 을 지원합니다. 표준 시간대 오프셋은 협정 세계시를 나타냅니다.

다음 변수를 사용하여 정책이 평가하는 클라이언트의 환경 속성을 지정하는 key 을 표현합니다. 각 key 은 개별 연산자 집합을 지원합니다.

시간 기반 조건에 대한 변수 표기법.
변수 이름 설명 지원되는 연산자
environment.attributes.current_time 클라이언트의 현재 시간입니다. timeGreaterThanOrEquals, timeLessThanOrEquals
environment.attributes.current_date_time 클라이언트의 현재 날짜 및 시간입니다. dateTimeGreaterThanOrEquals, dateTimeLessThanOrEquals
environment.attributes.day_of_week 클라이언트의 현재 요일입니다. dayOfWeekAnyOf, dayOfWeekEquals

예: dayOfWeekAnyOf, timeGreaterThanOrEquals, 및 timeLessThanOrEquals

이 예제에서 지정된 요일은 월요일, 화요일, 수요일, 목요일로 매핑됩니다. timeGreaterThanOrEquals 값은 시간대 UTC-5 의 오전 9시에 액세스 권한 부여가 시작됨을 나타냅니다. timeLessThanOrEquals 값은 이 조건이 시간대 UTC-5 의 오후 5시에 액세스를 종료한다는 것을 나타냅니다.environment.attributes.current_timeenvironment.attributes.day_of_week반복되는 시간 기반 조건임을 나타냅니다. 항상 dayOfWeek 조건과 함께 time 조건을 포함하세요.

"conditions": [
			{
				"key": "{{environment.attributes.day_of_week}}",
				"operator": "dayOfWeekAnyOf",
				"value": [
					1,
					2,
					3,
					4
				]
			},
			{
				"key": "{{environment.attributes.current_time}}",
				"operator": "timeGreaterThanOrEquals",
				"value": "09:00:00-05:00"
			},
			{
				"key": "{{environment.attributes.current_time}}",
				"operator": "timeLessThanOrEquals",
				"value": "17:00:00-05:00"
			}
		]

예시: dayOfWeekEquals

이 예에서 요일은 value 문자열에서 3 로 표시되며, 이는 수요일에 매핑됩니다. 동일한 문자열에서 +6:00 는 시간대 UTC+6:00 를 나타냅니다. 조건은 하나뿐이므로 "rule" 아래에 중첩됩니다.

"rule": {
		"key": "{{environment.attributes.day_of_week}}",
		"operator": "dayOfWeekEquals",
		"value": "3+06:00"
},

예: dateTimeGreaterThanOrEquals 및 dateTimeLessThanOrEquals

이 예에서 dateTimeGreaterThanOrEquals 값은 조건이 2022년 12월 26일 오전 9시( UTC-5 표준 시간대)에 액세스 권한을 부여하기 시작함을 나타냅니다. dateTimeLessThanOrEquals 값은 조건이 2022년 12월 27일 오후 5시( UTC-5 시간대)에 접속을 종료한다는 것을 나타냅니다. environment.attributes.current_date_time 값은 일시적인 시간 기반 조건임을 나타냅니다.

"conditions": [
			{
				"key": "{{environment.attributes.current_date_time}}",
				"operator": "dateTimeGreaterThanOrEquals",
				"value": "2022-12-26T09:00:00-05:00"
			},
			{
				"key": "{{environment.attributes.current_date_time}}",
				"operator": "dateTimeLessThanOrEquals",
				"value": "2022-12-27T17:00:00-05:00"
			}
		]

리소스 속성 기반 조건

다음 표에는 액세스 정책에 대한 리소스 속성 기반 조건을 만드는 데 사용할 수 있는 연산자가 나와 있습니다.

액세스 정책에 대한 속성 기반 조건을 리소스화하는 데 사용할 수 있는 연산자입니다.
운영자 설명
stringEquals 대소문자 구분 문자열 비교입니다. 부울 또는 숫자 값이 비교 전 문자열로 변환됩니다. 예시를 참조하세요.
stringExists 여기서 true 은 문자열이 있어야 하며 비워둘 수 있음을 나타내는 부울입니다. false 은 문자열이 없어야 함을 나타냅니다. 예시를 참조하세요.
stringMatch 대/소문자를 구분하는 문자열 일치는 별표(*), 물음표(?), 둘 다 또는 없음(리터럴 값과 동일)을 사용하여 패턴과 대상 문자열 간에 수행됩니다. 별표(*)는 문자열에서 0개 이상의 문자열의 순서를 표시하고, 물음표(?)는 단일 문자를 표시합니다. 별표 * 와 물음표 ? 를 각각 두 개의 중괄호( {{}}) 안에 묶어 리터럴 값으로 표현할 수도 있습니다. 예시를 참조하세요.
stringEqualsAnyOf 문자열 배열의 모든 문자열과 일치하는 대소문자를 구분하는 정확한 문자열입니다. 10개 값으로 제한됩니다. 예시를 참조하세요.
stringMatchAnyOf 문자열 배열의 모든 문자열과 일치하는 대/소문자를 구분하는 문자열입니다. 문자열 값에는 별표(*), 물음표(?), 둘 다 또는 아무것도 포함하지 않을 수 있습니다(리터럴 값과 동일). 별표(*)는 문자열에서 0개 이상의 문자열의 순서를 표시하고, 물음표(?)는 단일 문자를 표시합니다. 별표 * 와 물음표 ? 를 각각 두 개의 중괄호( {{}}) 안에 묶어 리터럴 값으로 표현할 수도 있습니다. 10개 값으로 제한됩니다.

key 은 선택한 서비스에서 지원하는 리소스 속성을 나타냅니다. keyresource.attributes.<attribute-name> 의 형식을 취합니다. 예를 들어 Cloud Object Storage 의 경우 지원되는 prefix 속성은 resource.attributes.prefix 표기법을 사용하여 키로 표현할 수 있습니다. 다음 표에는 예시 변수가 나열되어 있으며 모든 변수가 포함되지는 않습니다.

리소스 속성 기반 조건에 대한 변수 표기법.
변수 이름 설명 지원되는 연산자
resource.attributes.prefix 이 조건이 개체 또는 폴더를 나열할 때 허용해야 하는 접두사를 정의합니다. stringMatchAnyOf
resource.attributes.path 개체에 대한 모든 읽기, 쓰기 및 관리 액세스 범위를 지정합니다. stringMatchAnyOf
resource.attributes.delimiter 사용자가 생성할 수 있는 폴더 구조의 유형을 제한하고 사용자가 파일 계층 구조처럼 버킷을 탐색할 수 있도록 도와줍니다. stringEquals

자세한 내용은 조건 패턴을 참조하세요.

예: stringMatchAnyOf 및 stringEqualsAnyOf

이 예에서 resource.attributes.path 변수의 stringMatchAnyOf 값은 개체 경로가 일치하고 home/David/*, special/*, restricted/* 또는 temporary/test*spatial.?.log (예: temporary/test_spatial.1.log )로 시작하는 경우 액세스가 허용됨을 나타냅니다. or 값은 액세스를 허용할 수 있는 대체 조건이 있음을 나타냅니다.

resource.attributes.delimiter 변수의 stringEqualsAnyOf 값은 경계 표시기가 없거나 / 가 있을 때 액세스가 허용됨을 나타냅니다. 또한 resource.attributes.prefix 변수에 대한 stringEqualsAnyOfhome/ 또는 home/David/ 또는 접두사가 없어야 액세스 권한을 부여할 수 있음을 나타냅니다. and 값은 resource.attributes.delimiterresource.attributes.prefix 모두 충족해야 액세스 권한을 부여할 수 있음을 알려줍니다.

"pattern": "attribute-based-condition:resource:literal-and-wildcard",
"rule": {
    "operator": "or",
    "conditions": [
      {
        "key": "{{resource.attributes.path}}",
        "operator": "stringMatchAnyOf",
        "value": [
          "home/David/*",
          "special/*",
          "restricted/*",
          "temporary/test*spatial.?.log"
        ]
      },
      {
        "operator": "and",
        "conditions": [
          {
            "key": "{{resource.attributes.delimiter}}",
            "operator": "stringEqualsAnyOf",
            "value": [
              "",
              "/"
            ]
          },
          {
            "key": "{{resource.attributes.prefix}}",
            "operator": "stringEqualsAnyOf",
            "value": [
              "",
              "home/",
              "home/David/"
            ]
          }
        ]
      }
    ]
  }

예 stringExists, stringEquals, stringMatch

이 예에서 iam_id, accountID, serviceName, resourceType 에 대한 stringEquals 는 정확한 문자열 일치가 수행되었음을 나타냅니다. 리소스 변수의 stringMatch 값에 있는 별표는 dev-bucket- 으로 시작하는 모든 리소스에 대한 액세스 권한이 부여되었음을 나타냅니다. 경로 변수의 stringExists 값과 접두사 및 구분 기호 변수의 false stringExists 값은 액세스 권한을 부여하려면 경로만 존재해야 함을 나타냅니다.

{
    "type": "access",
    "subject": {
        "attributes": [
            {
                "key": "iam_id",
                "operator": "stringEquals",
                "value": "IBMid-1234"
            }
        ]
    },
    "control": {
        "grant": {
            "roles": [
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolderContent"
                },
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolder"
                },
                {
                    "role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:AllFolderOperations"
                }
            ]
        }
    },
    "resource": {
        "attributes": [
            {
                "name": "accountId",
                "operator": "stringEquals",
                "value": "account-123"
            },
            {
                "key": "serviceName",
                "operator": "stringEquals",
                "value": "cloud-object-storage"
            },
            {
                "key": "serviceInstance",
                "operator": "stringEquals",
                "value": "cd329d97-c33d-4428-b39e-6170dc1c2a1e"
            },
            {
                "key": "resource",
                "operator": "stringMatch",
                "value": "dev-bucket-*"
            },
            {
                "key": "resourceType",
                "operator": "stringEquals",
                "value": "bucket"
            }
        ]
    },
    "rule": {
        "operator": "and",
        "conditions": [
            {
                "key": "{{resource.attributes.path}}",
                "operator": "stringExists",
                "value": true
            },
            {
                "key": "{{resource.attributes.prefix}}",
                "operator": "stringExists",
                "value": false
            },
            {
                "key": "{{resource.attributes.delimiter}}",
                "operator": "stringExists",
                "value": false
            }
        ]
    }
}