

# GetFederationToken에 대한 권한
<a name="id_credentials_temp_control-access_getfederationtoken"></a>

IAM 사용자가 `GetFederationToken` 작업을 호출하고 해당 사용자에 대한 임시 자격 증명을 반환합니다. 이 작업은 사용자를 *연동*합니다. AWS STS 페더레이션 사용자 세션에 할당된 권한은 둘 중 한 곳에 정의되어 있습니다.
+ `GetFederationToken` API 호출의 파라미터로 전달되는 세션 정책. (가장 일반적)
+ 정책의 `Principal` 요소에서 AWS STS 페더레이션 사용자 세션의 이름을 명시적으로 지정하는 호명하는 리소스 기반 정책. (일반적이지 않음)

세션 정책은 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. AWS STS 페더레이션 사용자 세션을 생성하고 세션 정책을 전달할 때 결과적으로 얻는 세션의 권한은 사용자의 ID 기반 정책과 세션 정책의 교집합입니다. 세션 정책을 사용하여 연동된 사용자의 자격 증명 기반 정책에서 허용되는 권한을 부여할 수는 없습니다.

대부분의 경우 `GetFederationToken` API 호출로 정책을 전달하지 않으면 그 결과 얻게 되는 임시 보안 자격 증명은 아무 권한이 없습니다. 하지만 리소스 기반 정책은 세션에 대한 추가 권한을 제공할 수 있습니다. 세션을 허용된 보안 주체로 지정하는 리소스 기반 정책을 사용하여 리소스에 액세스할 수 있습니다.

다음 그림은 `GetFederationToken` 호출에 의해 반환되는 임시 보안 자격 증명에 대한 권한을 정책들이 어떻게 상호 작용하여 결정하는지를 시각적으로 재현한 것입니다.

![\[IAM 사용자다음 그림은 세션 권한이 사용자의 자격 증명 기반 정책과 세션 정책의 교차점임을 나타내는 체크 표시를 보여줍니다. 세션 권한은 사용자의 자격 증명 기반 정책과 리소스 기반 정책의 교차점도 될 수 있습니다.\]](http://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/images/getfederationtoken-permissions.diagram.png)


## 예: GetFederationToken을 사용한 권한 할당
<a name="permissions-get-federation-token-example"></a>

서로 다른 종류의 정책으로 `GetFederationToken` API 작업을 사용할 수 있습니다. 여기 몇 가지 예가 있습니다.

### IAM 사용자에게 연결된 정책은 다음과 같습니다.
<a name="permissions-get-federation-token-example-iam-user"></a>

이 예시에는 2개의 백엔드 웹 서비스에 의존하는 브라우저 기반 클라이언트 애플리케이션이 있습니다. 백엔드 서비스 중 하나는 자신만의 인증 서버로서 고유한 자격 증명 시스템을 사용해 클라이언트 애플리케이션을 인증합니다. 다른 백엔드 서비스는 AWS 서비스로, 클라이언트 애플리케이션의 기능 중 일부를 제공합니다. 이 클라이언트 애플리케이션은 서버에 의해 인증되고, 서버는 적절한 권한 정책을 생성하거나 가져옵니다. 서버는 이제 `GetFederationToken` API를 호출해 임시 보안 자격 증명을 얻은 다음, 그 자격 증명을 클라이언트 애플리케이션에 반환합니다. 이제 클라이언트 애플리케이션은 임시 보안 자격 증명을 사용해 AWS 서비스에 직접 요청할 수 있게 됩니다. 이 아키텍처는 클라이언트 애플리케이션이 장기 AWS 자격 증명을 포함하지 않고도 AWS 요청을 할 수 있도록 허용합니다.

인증 서버에서 이름이 `token-app`인 IAM 사용자의 장기 보안 자격 증명을 사용하여 `GetFederationToken` API를 호출합니다. 하지만 장기 IAM 사용자 자격 증명은 서버에 유지되고 클라이언트에 배포되지 않습니다. 다음 정책 예제는 `token-app` IAM 사용자에게 연결되어 AWS STS 페더레이션 사용자(클라이언트)에게 필요한 가장 폭넓은 권한 집합을 정의합니다. `sts:GetFederationToken` 권한은 인증 서비스가 AWS STS 페더레이션 사용자에 대한 임시 보안 자격 증명을 얻는 데 필요합니다.

**Example `GetFederationToken`을 호출하는 IAM 사용자 `token-app`에 연결된 정책의 예**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:GetFederationToken",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "dynamodb:ListTables",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "sqs:ReceiveMessage",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "sns:ListSubscriptions",
      "Resource": "*"
    }
  ]
}
```

이전 정책은 IAM 사용자에게 여러 가지 권한을 부여합니다. 하지만 이 정책만으로는 AWS STS 페더레이션 사용자에게 권한을 부여하지 않습니다. IAM 사용자가 `GetFederationToken`을 호출하고 정책을 API 직접 호출의 파라미터로 전달하지 않는다면, 그에 따라 AWS STS 페더레이션 사용자에게는 유효한 권한이 없습니다.

### 파라미터로 전달되는 세션 정책
<a name="permissions-get-federation-token-example-passed-policy"></a>

AWS STS 페더레이션 사용자에게 적절한 권한이 할당되도록 하는 가장 일반적인 방법은 `GetFederationToken` API 직접 호출의 세션 정책을 전달하는 것입니다. 앞의 예시를 확장해 IAM 사용자 `token-app`의 자격 증명을 사용하여 `GetFederationToken` 호출이 이루어진다고 가정합니다. 그런 다음 세션 정책이 API 호출의 파라미터로 전달된다고 가정합니다. 결과적으로 AWS STS 페더레이션 사용자는 이름이 `productionapp`인 Amazon S3 버킷의 콘텐츠를 나열할 권한을 갖습니다. 사용자는 `productionapp` 버킷의 항목들에 대한 `GetObject`, `PutObject`, Amazon S3 및 `DeleteObject` 작업을 수행할 수 없습니다.

페더레이션 사용자에게 이 권한이 할당되는 것은 권한이 IAM 사용자 정책과 전달한 세션 정책의 교차 지점이기 때문입니다.

AWS STS 페더레이션 사용자는 Amazon SNS, Amazon SQS, Amazon DynamoDB 또는 S3 버킷(`productionapp` 제외)에서 작업을 수행할 수 없습니다. 이러한 작업은 관련 권한이 `GetFederationToken` 호출과 연결된 IAM 사용자에게 부여되었더라도 거부됩니다.

**Example `GetFederationToken` API 호출의 파라미터로 전달된 세션 정책의 예**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::productionapp"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::productionapp/*"]
    }
  ]
}
```

### 리소스 기반 정책
<a name="permissions-get-federation-token-resource-based-policy"></a>

일부 AWS 리소스는 리소스 기반 정책을 지원하고, 이 정책은 AWS STS 페더레이션 사용자에게 직접 권한을 부여하는 또 다른 메커니즘을 제공합니다. 일부 AWS 서비스만이 리소스 기반 정책을 지원합니다. 예를 들어, Amazon S3에는 버킷이 있고, Amazon SNS에는 주제가 있고, Amazon SQS에는 정책을 연결할 수 있는 대기열이 있습니다. 리소스 기반 정책을 지원하는 모든 서비스 목록은 [AWS IAM으로 작업하는 서비스](reference_aws-services-that-work-with-iam.md) 및 표의 "리소스 기반 정책" 열을 참조하세요. 리소스 기반 정책을 사용하여 AWS STS 페더레이션 사용자에게 직접 권한을 할당할 수 있습니다. 리소스 기반 정책의 `Principal` 요소에서 AWS STS 페더레이션 사용자의 Amazon 리소스 이름(ARN)을 지정합니다. 다음 예에서는 이를 설명하고 이름이 `productionapp`인 S3 버킷을 사용하여 앞의 예시를 확장합니다.

다음 리소스 기반 정책은 버킷에 연결되어 있습니다. 이 버킷 정책은 Carol이라는 AWS STS 페더레이션 사용자가 버킷에 액세스할 수 있도록 허용합니다. 앞서 설명한 정책 예제가 `token-app` IAM 사용자에 연결되어 있으면, Carol이라는 AWS STS 페더레이션 사용자는 `productionapp`라는 버킷에 대해 `s3:GetObject`, `s3:PutObject` 및 `s3:DeleteObject` 작업을 수행할 수 있는 권한이 있습니다. 이는 `GetFederationToken` API 호출의 파라미터로 전달되는 세션 정책이 없을 때에도 해당됩니다. 이 경우에 Carol이라는 AWS STS 페더레이션 사용자에게 다음 리소스 기반 정책에 의해 명시적으로 권한이 부여되었기 때문입니다.

그 권한이 IAM 사용자 ******및 AWS STS 페더레이션 사용자 둘 다에게 명시적으로 부여될 때만 AWS STS 페더레이션 사용자에게 권한이 부여됩니다. 다음 예제처럼 정책의 `Principal` 요소에서 AWS STS 페더레이션 사용자의 이름을 명시적으로 지정하는 리소스 기반 정책을 통해서도 계정 내에서 권한을 부여할 수 있습니다.

**Example 페더레이션 사용자에 대한 액세스를 허용하는 버킷 정책의 예**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Principal": {
            "AWS": "arn:aws:sts::111122223333:federated-user/Carol"
        },
        "Effect": "Allow",
        "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"
        ],
        "Resource": [
            "arn:aws:s3:::productionapp/*"
        ]
    }
}
```

정책이 평가되는 방식에 대한 자세한 내용을 알아보려면 [정책 평가 로직](reference_policies_evaluation-logic.md)을 참조하세요.