

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# 외부 OIDC 제공자를 통해 사용자에게 Kubernetes에 대한 액세스 권한 부여
<a name="authenticate-oidc-identity-provider"></a>

Amazon EKS는 클러스터에서 사용자를 인증하는 방법으로 OpenID Connect(OIDC) 자격 증명 공급자를 지원합니다. OIDC ID 공급자는 AWS ID 및 액세스 관리(IAM)와 함께 또는 그 대안으로 사용할 수 있습니다. IAM 사용에 대한 자세한 내용은 [IAM 사용자 및 역할에 Kubernetes API에 대한 액세스 권한 부여](grant-k8s-access.md)를 참조하세요. 클러스터에 인증을 구성한 후, Kubernetes `roles` 및 `clusterroles`를 생성하여 역할에 권한을 할당한 다음 Kubernetes `rolebindings` 및 `clusterrolebindings`를 사용하여 역할을 ID에 바인딩할 수 있습니다. 자세한 내용은 Kubernetes 문서의 [Using RBAC Authorization(RBAC 승인 사용)](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)을 참조하세요.
+ 하나의 OIDC 자격 증명 공급자를 클러스터에 연결할 수 있습니다.
+ Kubernetes는 OIDC ID 제공업체를 제공하지 않습니다. 기존 퍼블릭 OIDC 자격 증명 공급자를 사용하거나 자체 ID 공급자를 실행할 수 있습니다. 인증된 공급자 목록은 OpenID 사이트에서 [OpenID 인증](https://openid.net/certification/)을 참조하세요.
+ Amazon EKS가 서명 키를 검색할 수 있도록 OIDC 자격 증명 공급자의 발급자 URL에 공개적으로 액세스할 수 있어야 합니다. Amazon EKS는 자체 서명된 인증서를 사용하는 OIDC ID 제공업체를 지원하지 않습니다.
+ 클러스터에 노드를 조인하는 데 여전히 필요하므로 클러스터에 IAM 인증을 비활성화할 수 없습니다.
+ 하지만 여전히 OIDC 자격 증명 공급자 사용자가 아니라 AWS [IAM 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)가 Amazon EKS 클러스터를 생성해야 합니다. 이는 클러스터 생성자가 Kubernetes API가 아닌 Amazon EKS API와 상호 작용하기 때문입니다.
+ 컨트롤 플레인에 대해 CloudWatch Logs가 설정되어 있는 경우 OIDC ID 제공업체 인증 사용자는 클러스터의 감사 로그에 표시됩니다. 자세한 내용은 [컨트롤 플레인 로그 활성화 또는 비활성화](control-plane-logs.md#enabling-control-plane-log-export) 섹션을 참조하세요.
+ OIDC 제공자가 제공한 계정으로 AWS Management Console에 로그인할 수 없습니다. AWS ID 및 액세스 관리 계정으로 AWS Management Console에 로그인해야만 [AWS Management Console에서 Kubernetes 리소스 보기](view-kubernetes-resources.md)할 수 있습니다.

## OIDC 자격 증명 공급자 연결
<a name="associate-oidc-identity-provider"></a>

OIDC 자격 증명 공급자를 클러스터에 연결하려면 먼저 공급자의 다음 정보가 필요합니다.

 **발급자 URL**   
API 서버가 토큰을 확인하기 위한 퍼블릭 서명 키를 검색할 수 있도록 허용하는 OIDC ID 제공자의 URL입니다. URL은 `https://`로 시작해야 하며 공급자의 OIDC ID 토큰에 있는 `iss` 클레임에 해당해야 합니다. OIDC 표준에 따라 경로 구성 요소는 허용되지만 쿼리 파라미터는 허용되지 않습니다. 일반적으로 URL은 `https://server.example.org` 또는 `https://example.com` 같은 하나의 호스트 이름으로만 구성됩니다. 이 URL은 `.well-known/openid-configuration` 아래 레벨을 가리켜야 하며 인터넷을 통해 공개적으로 액세스할 수 있어야 합니다.

 **클라이언트 ID(*대상*이라고도 함)**   
OIDC ID 제공자에게 인증을 요청하는 클라이언트 애플리케이션의 ID입니다.

`eksctl` 또는 AWS Management Console을 사용하여 자격 증명 공급자를 연결할 수 있습니다.

### eksctl을 사용하여 ID 공급자 연결
<a name="identity-associate-eksctl"></a>

1. 다음 콘텐츠를 가진 `associate-identity-provider.yaml`이라는 파일을 생성합니다: 예제 값을 사용자의 값으로 바꿉니다. `identityProviders` 섹션의 값은 OIDC 자격 증명 공급자로부터 가져옵니다. 값은 `identityProviders`의 `name`, `type`, `issuerUrl`, `clientId` 설정에만 필요합니다.

   ```
   ---
   apiVersion: eksctl.io/v1alpha5
   kind: ClusterConfig
   
   metadata:
     name: my-cluster
     region: your-region-code
   
   identityProviders:
     - name: my-provider
       type: oidc
       issuerUrl: https://example.com
       clientId: kubernetes
       usernameClaim: email
       usernamePrefix: my-username-prefix
       groupsClaim: my-claim
       groupsPrefix: my-groups-prefix
       requiredClaims:
         string: string
       tags:
         env: dev
   ```
**중요**  
`groupsPrefix` 또는 `usernamePrefix`에 대해 `system:` 또는 해당 문자열의 어떤 부분도 지정하지 마세요.

1. 공급자를 생성합니다.

   ```
   eksctl associate identityprovider -f associate-identity-provider.yaml
   ```

1. 클러스터와 OIDC ID 제공업체에 `kubectl`을 사용하려면 Kubernetes Documentation의 [Using kubectl](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-kubectl)을 참조하세요.

### AWS 콘솔을 사용하여 ID 공급자 연결
<a name="identity-associate-console"></a>

1. [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home#/clusters)을 엽니다.

1. 클러스터를 선택한 다음 **액세스** 탭을 선택합니다.

1. **OIDC 자격 증명 공급자** 섹션에서 \$1ID 제공업체 연결\$1을 선택합니다.

1. [**OIDC 자격 증명 공급자 연결(Associate OIDC Identity Provider)**] 페이지에서 다음 옵션을 입력하거나 선택한 후 [**연결(Associate)**]을 선택합니다.
   + [**이름(Name)**]에 공급자의 고유한 이름을 입력합니다.
   + **발급자 URL**에 공급자의 URL을 입력합니다. 이는 인터넷을 통해 액세스할 수 있는 URL이어야 합니다.
   + **클라이언트 ID**에 OIDC ID 제공업체의 클라이언트 ID(**대상**이라고도 함)를 입력합니다.
   + **사용자 이름 클레임**에 사용자 이름으로 사용할 클레임을 입력합니다.
   + **그룹 클레임**에 사용자의 그룹으로 사용할 클레임을 입력합니다.
   + (선택사항) **고급 옵션**을 선택하고 다음 정보를 입력하거나 선택합니다.
     +  **사용자 이름 접두사** — 사용자 이름 클레임 앞에 추가할 접두사를 입력합니다. 기존 이름과의 충돌을 방지하기 위해 접두사가 사용자 이름 클레임 앞에 추가됩니다. 값을 제공하지 않은 경우 사용자 이름이 `email` 이외의 값이면 접두사는 **발급자 URL**에 대한 기본값으로 설정됩니다. 값` -`를 사용하여 모든 접두사를 사용 중지할 수 있습니다. `system:` 또는 해당 문자열의 어떤 부분도 지정하지 마세요.
     +  **그룹 접두사** — 그룹 클레임 앞에 추가할 접두사를 입력합니다. 기존 이름(예:` system: groups`)과의 충돌을 방지하기 위해 접두사가 그룹 클레임 앞에 추가됩니다. 예를 들어, 값 `oidc:`는 `oidc:engineering` 및 `oidc:infra`와 같은 그룹 이름을 생성합니다. `system:` 또는 해당 문자열의 어떤 부분도 지정하지 마세요.
     +  **필수 클레임** — **클레임 추가**를 선택하고 클라이언트 ID 토큰에 필요한 클레임을 설명하는 하나 이상의 키 값 페어를 입력합니다. 키 값 페어는 ID 토큰에 필요한 클레임을 설명합니다. 설정된 경우 각 클레임은 일치하는 값이 ID 토큰에 존재하는 것으로 확인됩니다.

       1. 클러스터와 OIDC ID 제공업체에 `kubectl`을 사용하려면 Kubernetes Documentation의 [Using kubectl](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#using-kubectl)을 참조하세요.

## IAM; 정책 예
<a name="oidc-identity-provider-iam-policy"></a>

OIDC 자격 증명 공급자가 클러스터에 연결되지 않도록 하려면 다음 IAM 정책을 생성하여 Amazon EKS 관리자의 IAM 계정에 연결합니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) 및 [IAM 자격 증명 권한 추가](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)와 서비스 권한 부여 참조의 [Actions](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelasticcontainerserviceforkubernetes.html)를 참조하세요.

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "denyOIDC",
            "Effect": "Deny",
            "Action": [
                "eks:AssociateIdentityProviderConfig"
            ],
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/*"

        },
        {
            "Sid": "eksAdmin",
            "Effect": "Allow",
            "Action": [
                "eks:*"
            ],
            "Resource": "*"
        }
    ]
}
```

다음 예제 정책은 `clientID`가 `kubernetes`이고 `issuerUrl`이 `https://cognito-idp.us-west-2.amazonaws.com/*`인 경우 OIDC 자격 증명 공급자 연결을 허용합니다.

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCognitoOnly",
            "Effect": "Deny",
            "Action": "eks:AssociateIdentityProviderConfig",
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance",
            "Condition": {
                "StringNotLikeIfExists": {
                    "eks:issuerUrl": "https://cognito-idp.us-west-2.amazonaws.com/*"
                }
            }
        },
        {
            "Sid": "DenyOtherClients",
            "Effect": "Deny",
            "Action": "eks:AssociateIdentityProviderConfig",
            "Resource": "arn:aws:eks:us-west-2:111122223333:cluster/my-instance",
            "Condition": {
                "StringNotEquals": {
                    "eks:clientId": "kubernetes"
                }
            }
        },
        {
            "Sid": "AllowOthers",
            "Effect": "Allow",
            "Action": "eks:*",
            "Resource": "*"
        }
    ]
}
```