GetFederationToken의 권한

GetFederationToken의 권한 (Permissions for GetFederationToken)

GetFederationToken 작업은 IAM 사용자가 호출하며 그 사용자에게 임시 자격 증명을 반환해요. 이 작업은 사용자를 페더레이션해요. AWS STS 페더레이션 사용자 세션에 할당된 권한은 다음 두 곳 중 한 곳에서 정의돼요.

출처: 문서

본문

  • GetFederationToken API 호출의 파라미터로 전달된 세션 정책(가장 일반적)
  • 정책의 Principal 요소에 AWS STS 페더레이션 사용자 세션을 명시적으로 지정하는 리소스 기반 정책(덜 일반적)

세션 정책은 임시 세션을 프로그래밍 방식으로 만들 때 파라미터로 전달하는 고급 정책이에요. AWS STS 페더레이션 사용자 세션을 만들고 세션 정책을 전달하면, 결과 세션의 권한은 사용자의 아이덴티티 기반 정책과 세션 정책의 교집합이에요. 세션 정책으로 페더레이션되는 사용자의 아이덴티티 기반 정책이 허용하는 것보다 더 많은 권한을 부여할 수는 없어요.

대부분의 경우 GetFederationToken API 호출에 정책을 전달하지 않으면, 결과 임시 보안 자격 증명에는 권한이 없어요. 단, 리소스 기반 정책이 세션에 추가 권한을 제공할 수 있어요. 세션을 허용된 프린시펄로 지정하는 리소스 기반 정책이 있는 리소스에 접근할 수 있어요.

다음 그림은 GetFederationToken 호출이 반환한 임시 보안 자격 증명의 권한을 정책들이 어떻게 결정하는지 시각적으로 보여줘요.

예시: GetFederationToken으로 권한 할당

GetFederationToken API 작업을 다양한 종류의 정책과 함께 사용할 수 있어요. 몇 가지 예시를 볼게요.

IAM 사용자에 연결된 정책

이 예시에서 두 개의 백엔드 웹 서비스에 의존하는 브라우저 기반 클라이언트 애플리케이션이 있어요. 하나는 자체 아이덴티티 시스템으로 클라이언트 애플리케이션을 인증하는 자체 인증 서버예요. 다른 하나는 클라이언트 애플리케이션의 일부 기능을 제공하는 AWS 서비스예요. 클라이언트 애플리케이션은 우리 서버로 인증받고, 서버는 적절한 권한 정책을 만들거나 검색해요. 그런 다음 서버는 GetFederationToken API를 호출해 임시 보안 자격 증명을 얻고, 그 자격 증명을 클라이언트 애플리케이션에 반환해요. 클라이언트 애플리케이션은 그 임시 보안 자격 증명으로 AWS 서비스에 직접 요청을 보낼 수 있어요. 이 구조 덕분에 클라이언트 애플리케이션은 장기 AWS 자격 증명을 내장하지 않고도 AWS 요청을 할 수 있어요.

인증 서버는 token-app이라는 IAM 사용자의 장기 보안 자격 증명으로 GetFederationToken API를 호출해요. 하지만 장기 IAM 사용자 자격 증명은 서버에 남아 있으며 클라이언트에 배포되지 않아요. 다음 예시 정책은 token-app IAM 사용자에 연결되며, AWS STS 페더레이션 사용자(클라이언트)가 필요로 할 가장 넓은 권한 집합을 정의해요. AWS STS 페더레이션 사용자의 임시 보안 자격 증명을 얻으려면 인증 서비스에 sts:GetFederationToken 권한이 있어야 한다는 점에 주의하세요.

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 페더레이션 사용자에게는 실질적인 권한이 없어요.

파라미터로 전달된 세션 정책

AWS STS 페더레이션 사용자에게 적절한 권한을 할당하는 가장 일반적인 방법은 GetFederationToken API 호출에서 세션 정책을 전달하는 거예요. 앞선 예시를 확장해서, IAM 사용자 token-app의 자격 증명으로 GetFederationToken이 호출된다고 상상해 보세요. 그리고 다음 세션 정책이 API 호출의 파라미터로 전달된다고 해 보죠. 결과 AWS STS 페더레이션 사용자는 productionapp이라는 Amazon S3 버킷의 콘텐츠를 나열할 권한이 있어요. 이 사용자는 productionapp 버킷의 항목에 대해 Amazon S3 GetObject, PutObject, DeleteObject 작업을 수행할 수 없어요.

페더레이션 사용자에게 이 권한이 할당되는 이유는, 권한이 IAM 사용자 정책과 전달한 세션 정책의 교집합이기 때문이에요.

AWS STS 페더레이션 사용자는 Amazon SNS, Amazon SQS, Amazon DynamoDB, 또는 productionapp 외의 어떤 S3 버킷에서도 작업을 수행할 수 없어요. 이 권한들이 GetFederationToken 호출과 연결된 IAM 사용자에게 부여됐더라도 거부돼요.

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/*"]
    }
  ]
}

리소스 기반 정책

일부 AWS 리소스는 리소스 기반 정책을 지원하며, 이 정책은 AWS STS 페더레이션 사용자에게 직접 권한을 부여하는 또 다른 메커니즘을 제공해요. 리소스 기반 정책을 지원하는 AWS 서비스는 일부뿐이에요. 예를 들어 Amazon S3는 버킷, Amazon SNS는 토픽, Amazon SQS는 큐에 정책을 연결할 수 있어요. 리소스 기반 정책을 지원하는 모든 서비스 목록은 AWS 서비스가 IAM과 함께 동작하는지에서 "Resource-based policies" 열을 확인하세요. 리소스 기반 정책의 Principal 요소에 AWS STS 페더레이션 사용자의 ARN을 지정해서, AWS STS 페더레이션 사용자에게 직접 권한을 할당할 수 있어요. 다음 예시는 productionapp이라는 S3 버킷을 사용해 앞선 예시들을 확장해요.

다음 리소스 기반 정책은 버킷에 연결돼요. 이 버킷 정책은 Carol이라는 AWS STS 페더레이션 사용자가 버킷에 접근하도록 허용해요. 앞서 설명한 예시 정책이 token-app IAM 사용자에 연결되면, Carol이라는 AWS STS 페더레이션 사용자는 productionapp 버킷에서 s3:GetObject, s3:PutObject, s3:DeleteObject 작업을 수행할 권한이 있어요. GetFederationToken API 호출의 파라미터로 세션 정책이 전달되지 않아도 이렇게 돼요. 이 경우 Carol이라는 AWS STS 페더레이션 사용자가 다음 리소스 기반 정책으로 명시적으로 권한을 부여받았기 때문이에요.

기억하세요. AWS STS 페더레이션 사용자는 권한이 IAM 사용자와 AWS STS 페더레이션 사용자 둘 다에 명시적으로 부여됐을 때만 권한을 받아요. 또한 다음 예시처럼 정책의 Principal 요소에 AWS STS 페더레이션 사용자를 명시적으로 지정하는 리소스 기반 정책으로 (계정 내에서) 권한을 부여받을 수도 있어요.

페더레이션 사용자에게 접근을 허용하는 버킷 정책 예시
{
    "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/*"
        ]
    }
}

정책이 어떻게 평가되는지에 대한 자세한 내용은 정책 평가 로직을 참고하세요.

더 알아보기 (Learn more)