

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

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

# IRSA를 사용하여 다른 계정에 인증
<a name="cross-account-access"></a>

다른 계정의 클러스터에서 ID 공급자를 생성하거나 연결된 `AssumeRole` 작업을 사용하여 크로스 계정 IAM 권한을 구성할 수 있습니다. 다음 예에서 *계정 A*는 서비스 계정에 대해 IAM 역할을 지원하는 Amazon EKS 클러스터를 소유합니다. 이 클러스터에서 실행되는 포드는 *계정 B*의 IAM 권한을 수임해야 합니다.
+  **옵션 1**은 더 간단하지만 계정 B가 계정 A의 클러스터에 대한 OIDC ID 제공업체를 생성하고 관리해야 합니다.
+  **옵션 2**는 계정 A에서 OIDC 관리를 유지하지만 두 번의 `AssumeRole` 직접 호출을 통해 역할을 연결해야 합니다.

## 옵션 1: 다른 계정의 클러스터에서 ID 제공업체 생성
<a name="_option_1_create_an_identity_provider_from_another_accounts_cluster"></a>

이 예제에서 계정 A는 계정 B에 클러스터의 OpenID Connect(OIDC) 발행자 URL을 제공합니다. 계정 B는 계정 A의 클러스터에서 OIDC 발급자 URL을 사용하여 [클러스터에 대한 IAM OIDC 제공자 만들기](enable-iam-roles-for-service-accounts.md) 및 [Kubernetes 서비스 계정에 IAM 역할 할당](associate-service-account-role.md)의 지침을 따릅니다. 그런 다음 클러스터 관리자는 계정 B({{444455556666}})의 역할을 사용할 계정 A의 클러스터에 있는 서비스 계정에 주석을 답니다.

```
apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::444455556666:role/account-b-role
```

## 옵션 2: 연결된 `AssumeRole` 작업 사용
<a name="_option_2_use_chained_assumerole_operations"></a>

이 접근 방식에서 각 계정은 IAM 역할을 생성합니다. 계정 B의 역할은 계정 A를 신뢰하고 계정 A의 역할은 OIDC 페더레이션을 사용하여 클러스터에서 자격 증명을 가져옵니다. 그런 다음 포드는 AWS CLI 프로파일을 사용하여 두 역할을 함께 연결합니다.

### 1단계: 계정 B에서 대상 역할 생성
<a name="_step_1_create_the_target_role_in_account_b"></a>

계정 B({{444455556666}})는 계정 A의 클러스터에 있는 포드에 필요한 권한을 가진 IAM 역할을 생성합니다. 계정 B는 원하는 권한 정책을 이 역할에 연결한 후 다음 신뢰 정책을 추가합니다.

 **계정 B의 역할에 대한 신뢰 정책** - 이 정책은 계정 A의 특정 IRSA 역할이 이 역할을 수임하도록 허용합니다.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}
```

**중요**  
최소 권한을 위해 계정 루트(`arn:aws:iam::111122223333:root`)를 사용하는 대신 `Principal` ARN을 계정 A의 특정 역할 ARN으로 바꿉니다. 계정 루트를 사용하면 계정 A의 *모든* IAM 위탁자가 이 역할을 수임할 수 있습니다.

### 2단계: 계정 A에서 IRSA 역할 생성
<a name="_step_2_create_the_irsa_role_in_account_a"></a>

계정 A({{111122223333}})는 클러스터의 OIDC 발행자 주소로 생성된 ID 제공업체의 자격 증명을 가져오는 신뢰 정책을 이용해 역할을 생성합니다.

 **계정 A의 역할에 대한 신뢰 정책(OIDC 페더레이션)** - 이 정책은 EKS 클러스터의 OIDC 공급자가 이 역할에 대한 자격 증명을 발급하도록 허용합니다.

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
        }
      }
    }
  ]
}
```

**중요**  
최소 권한을 위해 이 역할을 특정 Kubernetes 서비스 계정으로 제한하도록 `sub` 클레임에 대한 `StringEquals` 조건을 추가합니다. `sub` 조건이 없으면 클러스터의 모든 서비스 계정이 이 역할을 수임할 수 있습니다. `sub` 값은 `system:serviceaccount:NAMESPACE:SERVICE_ACCOUNT_NAME ` 형식을 사용합니다. 예를 들어 `default` 네임스페이스에 이름이 `my-service-account`인 서비스 계정으로 제한하려면 다음을 사용합니다.  

```
"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:default:my-service-account"
```

### 3단계: 계정 A의 역할에 AssumeRole 권한 연결
<a name="_step_3_attach_the_assumerole_permission_to_account_as_role"></a>

계정 A는 2단계에서 생성한 역할에 권한 정책을 연결합니다. 이 정책에서는 역할이 계정 B의 역할을 수임하도록 허용합니다.

 **계정 A의 역할에 대한 권한 정책** - 이 정책은 계정 B의 대상 역할에 `sts:AssumeRole` 권한을 부여합니다.

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::444455556666:role/account-b-role"
        }
    ]
}
```

### 4단계: 역할을 연결하도록 포드 구성
<a name="_step_4_configure_the_pod_to_chain_roles"></a>

포드가 계정 B의 역할을 수임할 수 있게 하는 애플리케이션 코드에서는 두 가지 프로필, 즉 `account_b_role` 및 `account_a_role`을 사용합니다. `account_b_role` 프로필에서는 `account_a_role` 프로필을 소스로 사용합니다. AWS CLI의 경우 `~/.aws/config` 파일은 다음과 유사합니다.

```
[profile account_b_role]
source_profile = account_a_role
role_arn=arn:aws:iam::444455556666:role/account-b-role

[profile account_a_role]
web_identity_token_file = /var/run/secrets/eks.amazonaws.com/serviceaccount/token
role_arn=arn:aws:iam::111122223333:role/account-a-role
```

연결된 프로필을 다른 AWS SDK에 지정하려면 사용 중인 SDK에 대한 설명서를 참조하세요. 자세한 내용은 [AWS 기반의 도구](https://aws.amazon.com/developer/tools/)를 참조하세요.