

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 클러스터 및 EMR Notebooks에 대한 태그 기반 액세스를 위한 IAM 정책
<a name="emr-fine-grained-cluster-access"></a>

자격 증명 기반 정책에서 조건을 사용하여 태그를 기반으로 클러스터 및 EMR 리소스에 대한 액세스를 제어할 수 있습니다.

클러스터에 태그를 추가하는 방법에 대한 자세한 내용은 [EMR 클러스터에 태깅](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-tags.html) 섹션을 참조하세요.

다음 예제에서는 Amazon EMR 조건 키와 함께 조건 연산자를 사용할 수 있는 다양한 시나리오와 방법을 보여줍니다. 이러한 IAM 정책 명령문은 데모용일 뿐이며 프로덕션 환경에서 사용해서는 안 됩니다. 다양한 방법으로 정책 명령문을 결합하여 요구 사항에 따라 권한을 부여하거나 거부할 수 있습니다. IAM 정책 계획 및 테스트에 대한 자세한 내용은 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/)를 참조하세요.

**중요**  
태깅 작업에 대한 권한을 명시적으로 거부하는 것은 중요한 고려 사항입니다. 이렇게 하면 사용자가 리소스에 태그를 지정하지 못하므로, 부여할 의도가 없는 권한이 부여되지 않도록 방지할 수 있습니다. 리소스에 대한 태그 지정 작업을 거부하지 않는 경우 사용자는 태그를 수정하여 태그 기반 정책의 의도를 우회할 수 있습니다.

## 클러스터에 대한 자격 증명 기반 정책 명령문 예제
<a name="emr-cluster-access-resourcetag"></a>

아래의 예제에서는 Amazon EMR 가상 클러스터에서 허용되는 작업의 제어에 사용되는 자격 증명 기반 권한 정책을 보여줍니다.

**중요**  
Amazon EMR에서 `ModifyInstanceGroup` 작업에서는 클러스터 ID를 지정할 필요가 없습니다. 따라서 클러스터 태그를 기반으로 이 작업을 거부하려면 추가 고려 사항이 필요합니다. 자세한 내용은 [Amazon EMR에서 ModifyInstanceGroup 작업 거부](emr-cluster-deny-modifyinstancegroup.md) 단원을 참조하십시오.

**Topics**
+ [특정 태그 값이 있는 클러스터에서만 작업 허용](#emr-cluster-access-example-tagvalue)
+ [클러스터 생성 시 클러스터 태그 지정 필요](#emr-cluster-access-example-require-tagging)
+ [태그 값과 상관없이 특정 태그가 있는 클러스터에서 작업 허용](#emr-cluster-access-example-tag)

### 특정 태그 값이 있는 클러스터에서만 작업 허용
<a name="emr-cluster-access-example-tagvalue"></a>

다음 예제에서는 사용자가 `dev` 값이 있는 클러스터 태그 `department`를 기반으로 작업을 수행할 수 있도록 허용하고 사용자가 동일한 해당 태그를 사용하여 클러스터에 태그를 지정할 수 있도록 허용하는 정책을 보여줍니다. 마지막 정책 예제에서는 동일한 해당 태그가 아닌 경우 EMR 클러스터에 태그를 지정할 수 있는 권한을 거부하는 방법을 보여 줍니다.

다음 정책 예제에서 `StringEquals` 조건 연산자는 `dev`를 `department` 태그의 값과 일치시키려고 시도합니다. `department` 태그가 클러스터에 추가되지 않았거나 이 태그에 `dev` 값이 포함되지 않은 경우 정책이 적용되지 않으며 이 정책에 따라 작업이 허용되지 않습니다. 작업을 허용하는 다른 정책 명령문이 없는 경우 사용자는 이 값과 함께 이 태그가 있는 클러스터만 작업할 수 있습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Stmt12345678901234",
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:DescribeCluster",
        "elasticmapreduce:ListSteps",
        "elasticmapreduce:TerminateJobFlows",
        "elasticmapreduce:SetTerminationProtection",
        "elasticmapreduce:ListInstances",
        "elasticmapreduce:ListInstanceGroups",
        "elasticmapreduce:ListBootstrapActions",
        "elasticmapreduce:DescribeStep"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": "dev"
        }
      }
    }
  ]
}
```

------

또한 조건 연산자를 사용하여 여러 태그 값을 지정할 수 있습니다. 예를 들어, `department` 태그에 `dev` 또는 `test` 값이 포함된 클러스터에서 모든 작업을 허용하려면 이전 예제의 조건 블록을 다음으로 대체할 수 있습니다.

```
            "Condition": {
              "StringEquals": {
                "elasticmapreduce:ResourceTag/department":["dev", "test"]
              }
            }
```

### 클러스터 생성 시 클러스터 태그 지정 필요
<a name="emr-cluster-access-example-require-tagging"></a>

이전 예제와 마찬가지로, 다음 정책 예제에서는 일치하는 동일한 태그, 즉 `dev` 태그의 `department` 값을 찾습니다. 하지만 이 예제에서 `RequestTag` 조건 키는 태그 생성 중에 정책이 적용되도록 지정합니다. 따라서 지정된 값과 일치하는 태그를 사용하여 클러스터를 생성해야 합니다.

태그가 있는 클러스터를 생성하려면 `elasticmapredue:AddTags` 작업에 대한 권한도 있어야 합니다. 이 명령문에서 `elasticmapreduce:ResourceTag` 조건 키를 통해 IAM에서 `department` 태그의 값이 `dev`인 리소스에만 태그를 지정하도록 액세스 권한을 부여합니다. `Resource` 요소는 이 권한을 클러스터 리소스로 제한하는 데 사용됩니다.

`PassRole` 리소스의 경우 AWS 계정 ID 또는 별칭, `PassRoleForEMR` 문의 서비스 역할 이름, `PassRoleForEC2` 문의 인스턴스 프로파일 이름을 제공해야 합니다. IAM ARN 형식에 대한 자세한 내용은 *IAM 사용 설명서*에서 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)을 참조하세요.

태그 키 값 일치에 대한 자세한 내용은 *IAM 사용 설명서*에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)를 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RunJobFlowExplicitlyWithTag",
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:RunJobFlow"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/department": "dev"
        }
      }
    },
    {
      "Sid": "AddTagsForDevClusters",
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:AddTags"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:*:*:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": "dev"
        }
      }
    },
    {
      "Sid": "PassRoleForEMR",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "elasticmapreduce.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    }
  ]
}
```

------

### 태그 값과 상관없이 특정 태그가 있는 클러스터에서 작업 허용
<a name="emr-cluster-access-example-tag"></a>

태그 값과 상관없이 특정 태그가 있는 클러스터에서만 작업을 허용할 수도 있습니다. 이렇게 하려면 `Null` 연산자를 사용할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*에서 [조건 키 존재 여부를 확인하는 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_Null)를 참조하세요. 예를 들어, 태그에 포함된 값과 상관없이 `department` 태그가 있는 EMR 클러스터에서만 작업을 허용하려면 이전 예제의 조건 블록을 다음으로 대체할 수 있습니다. `Null` 연산자는 EMR 클러스터에서 `department` 태그의 존재를 찾습니다. 태그가 존재하면 이 정책 설명에 지정된 조건에 따라 `Null` 문은 false로 평가되고 적절한 작업이 허용됩니다.

```
1. "Condition": {
2.   "Null": {
3.     "elasticmapreduce:ResourceTag/department":"false"
4.   }
5. }
```

다음 정책 설명은 클러스터에 `department` 태그가 있는 경우에만 사용자가 EMR 클러스터를 생성할 수 있도록 허용합니다. 이 태그에는 어떤 값이든 포함될 수 있습니다. `PassRole` 리소스의 경우 AWS 계정 ID 또는 별칭과 서비스 역할 이름을 제공해야 합니다. IAM ARN 형식에 대한 자세한 내용은 *IAM 사용 설명서*에서 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)을 참조하세요.

null(“false”) 조건 연산자를 지정하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*에서 [조건 키 존재 여부를 확인하는 조건 연산자](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Null)를 참조하세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateClusterTagNullCondition",
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:RunJobFlow"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
        "Null": {
          "aws:RequestTag/department": "false"
        }
      }
    },
    {
      "Sid": "AddTagsNullCondition",
      "Effect": "Allow",
      "Action": [
        "elasticmapreduce:AddTags"
      ],
      "Resource": [
        "arn:aws:elasticmapreduce:*:*:cluster/*"
      ],
      "Condition": {
        "Null": {
          "elasticmapreduce:ResourceTag/department": "false"
        }
      }
    },
    {
      "Sid": "PassRoleForElasticMapReduce",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "elasticmapreduce.amazonaws.com*"
        }
      }
    },
    {
      "Sid": "PassRoleForEC2",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::123456789012:role/Role-Name-With-Path"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ec2.amazonaws.com*"
        }
      }
    }
  ]
}
```

------

## EMR Notebooks에 대한 자격 증명 기반 정책 명령문 예제
<a name="emr-managed-notebooks-tags-examples"></a>

이 섹션의 IAM 정책 명령문 예제에서는 키를 사용하여 EMR Notebooks를 이용해 허용된 작업을 제한하는 일반적인 시나리오를 보여줍니다. 보안 주체(사용자)에 연결된 다른 정책이 작업을 허용하는 한 조건 컨텍스트 키는 지정된 대로 허용된 작업을 제한합니다.

**Example - 사용자가 태그 지정을 기반으로 생성한 EMR Notebooks에만 액세스 허용**  
다음의 정책 명령문 예제는 역할이나 사용자에게 연결된 경우 사용자가 생성한 노트북에서만 작업하도록 허용합니다. 이 정책 설명에서는 노트북이 생성될 때 적용된 기본 태그를 사용합니다.  
예제에서 `StringEquals` 조건 연산자가 현재 사용자의 사용자 ID(`{aws:userId}`)를 나타내는 변수를 `creatorUserID` 태그의 값과 일치시키려고 시도합니다. `creatorUserID` 태그가 노트북에 추가되지 않았거나 현재 사용자의 ID 값을 포함하지 않은 경우 정책이 적용되지 않으며 이 정책에서 작업을 허용하지 않습니다. 작업을 허용하는 다른 정책 설명이 없는 경우 사용자는 이 값과 함께 이 태그가 있는 노트북만 사용하여 작업할 수 있습니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:DescribeEditor",
        "elasticmapreduce:StartEditor",
        "elasticmapreduce:StopEditor",
        "elasticmapreduce:DeleteEditor",
        "elasticmapreduce:OpenEditorInConsole"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/creatorUserId": "${aws:userId}"
        }
      },
      "Sid": "AllowELASTICMAPREDUCEDescribeeditor"
    }
  ]
}
```

**Example - 노트북이 생성될 때 노트북 태그 지정 요구**  
이 예제에서는 `RequestTag` 컨텍스트 키가 사용됩니다. 사용자가 기본적으로 추가되는 `creatorUserID` 태그를 변경하거나 삭제하지 않은 경우에만 `CreateEditor` 작업이 허용됩니다. \$1\$1aws:userId\$1 변수는 태그의 기본값인 현재 활성 사용자의 사용자 ID를 지정합니다.  
사용자가 `createUserId` 태그를 제거하거나 그 값을 변경하지 않도록 정책 설명을 사용할 수 있습니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:CreateEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}"
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```
이 예제에서는 사용자가 키 문자열 `dept` 및 `datascience`, `analytics`, `operations` 중 하나로 설정된 값을 가진 태그를 사용하여 클러스터를 생성하도록 요구합니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:CreateEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:RequestTag/dept": [
            "datascience",
            "analytics",
            "operations"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```

**Example - 태그가 지정된 클러스터로 노트북 생성을 제한하고 노트북 태그 요구**  
이 예제에서는 키 문자열 `owner`가 지정된 값 중 하나로 설정된 태그를 사용하여 노트북이 생성될 경우에만 노트북 생성을 허용합니다. 또한 키 문자열 `department`가 지정된 값 중 하나로 설정된 태그가 클러스터에 있을 경우에만 노트북을 생성할 수 있습니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:CreateEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:RequestTag/owner": [
            "owner1",
            "owner2",
            "owner3"
          ],
          "elasticmapreduce:ResourceTag/department": [
            "dep1",
            "dep3"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCECreateeditor"
    }
  ]
}
```

**Example - 태그를 기반으로 노트북을 시작할 수 있는 기능 제한**  
이 예제는 키 문자열 `owner`가 지정된 값 중 하나로 설정된 태그가 있는 노트북만 시작할 수 있도록 제한합니다. `editor`만 지정하는 데 `Resource` 요소가 사용되므로 조건이 클러스터에 적용되지 않으며 조건에 태그를 지정할 필요가 없습니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:editor/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/owner": [
            "owner1",
            "owner2"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditor"
    }
  ]
}
```
이 예제는 위의 예제와 비슷하지만 태그가 지정된 클러스터에만 제한이 적용되며 노트북에는 적용되지 않습니다.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "dep1",
            "dep3"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditor"
    }
  ]
}
```
이 예제는 다른 노트북 및 클러스터 태그 세트를 사용하며, 다음 경우에만 노트북을 시작하도록 허용합니다.  
+ 노트북에 키 문자열 `owner`가 지정된 값으로 설정된 태그가 있습니다.

  및
+ 클러스터에 키 문자열 `department`가 지정된 값으로 설정된 태그가 있습니다.  
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:editor/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/owner": [
            "user1",
            "user2"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditorByOwner"
    },
    {
      "Action": [
        "elasticmapreduce:StartEditor"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "datascience",
            "analytics"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEStarteditorByDepartment"
    }
  ]
}
```

**Example - 태그를 기반으로 노트북 편집기를 열 수 있는 기능 제한**  
이 예제에서는 다음 경우에만 노트북 편집기가 열리도록 허용합니다.  
+ 노트북에 키 문자열 `owner`가 지정된 값으로 설정된 태그가 있습니다.

  및
+ 클러스터에 키 문자열 `department`가 지정된 값으로 설정된 태그가 있습니다.  
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "elasticmapreduce:OpenEditorInConsole"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:editor/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/owner": [
            "user1",
            "user2"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEOpeneditorconsoleByOwner"
    },
    {
      "Action": [
        "elasticmapreduce:OpenEditorInConsole"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:elasticmapreduce:*:123456789012:cluster/*"
      ],
      "Condition": {
        "StringEquals": {
          "elasticmapreduce:ResourceTag/department": [
            "datascience",
            "analytics"
          ]
        }
      },
      "Sid": "AllowELASTICMAPREDUCEOpeneditorconsoleByDepartment"
    }
  ]
}
```