웹 자격 증명 연동을 사용하여 사용자 식별 - AWS Identity and Access Management

웹 자격 증명 연동을 사용하여 사용자 식별

IAM에서 액세스 정책을 생성하는 경우 대체로 외부 자격 증명 공급자(IdP)를 사용하여 인증한 사용자의 ID와 구성된 앱에 기반을 두어 권한을 지정할 수 있는 기능이 유용합니다. 예를 들어 웹 자격 증명 연동을 사용하고있는 모바일 앱은 다음과 같은 구조를 사용해 Amazon S3에 정보를 저장하고자 할 것입니다.

myBucket/app1/user1 myBucket/app1/user2 myBucket/app1/user3 ... myBucket/app2/user1 myBucket/app2/user2 myBucket/app2/user3 ...

또한, 공급자별로 이 경로를 구별하는 추가 기능을 원할 수도 있습니다. 이 경우에 그 구조는 다음과 같을 것입니다(공간 절약을 위해 2개의 공급자만 나열했습니다).

myBucket/Amazon/app1/user1 myBucket/Amazon/app1/user2 myBucket/Amazon/app1/user3 ... myBucket/Amazon/app2/user1 myBucket/Amazon/app2/user2 myBucket/Amazon/app2/user3 myBucket/Facebook/app1/user1 myBucket/Facebook/app1/user2 myBucket/Facebook/app1/user3 ... myBucket/Facebook/app2/user1 myBucket/Facebook/app2/user2 myBucket/Facebook/app2/user3 ...

이 구조에서 app1app2는 서로 다른 게임과 같이 서로 다른 앱을 나타내며, 각 앱 사용자는 구분된 폴더를 갖습니다. app1app2에 대한 값은 지정하는 친숙한 이름(예: mynumbersgame)이거나 앱 구성 시 공급자들이 할당하는 앱 ID일 수도 있습니다. 경로에 공급자 이름을 포함하기로 한다면, 그 값은 Cognito, Amazon, Facebook, Google와 같은 친숙한 이름이 될 수도 있습니다.

애플리케이션 이름은 정적 값이므로 일반적으로 AWS Management Console을 통해 app1app2에 대한 폴더를 생성할 수 있습니다. 공급자 이름도 정적 값이므로 경로에 공급자 이름을 포함하는 경우에도 그렇게 할 수 있습니다. 이와 대조적으로 사용자 고유 폴더(user1, user2, user3 등)는 AssumeRoleWithWebIdentity에 대한 요청에 의해 반환되는 SubjectFromWebIdentityToken 값에서 얻을 수 있는 사용자 ID를 사용해 앱에서 런타임에 생성되어야 합니다.

개별 사용자에게 리소스에 배타적인 액세스 권한을 허용하는 정책을 작성하려면, 앱 이름과 공급자 이름(사용하는 경우)을 비롯해 완전한 폴더 이름과 일치시킬 수 있습니다. 그런 다음 공급자가 반환하는 사용자 ID를 참조하는 다음 공급자별 콘텍스트 키를 포함할 수 있습니다.

  • cognito-identity.amazonaws.com:sub

  • www.amazon.com:user_id

  • graph.facebook.com:id

  • accounts.google.com:sub

OIDC 공급자의 경우 다음 예시와 같이 하위 콘텍스트 키가 있는 OIDC 공급자의 정규화된 URL을 사용합니다.

  • server.example.com:sub

다음 예는 버킷에 대한 접두사가 문자열과 일치하는 경우에만 Amazon S3 버킷에 액세스 권한을 부여하는 권한 정책을 보여줍니다.

myBucket/Amazon/mynumbersgame/user1

이 예는 사용자가 Login with Amazon을 사용해 로그인되어 있고 그 사용자는 mynumbersgame이라는 앱을 사용하고 있다고 가정합니다. 사용자의 고유 ID는 user_id라는 속성으로 제시됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::myBucket"], "Condition": {"StringLike": {"s3:prefix": ["Amazon/mynumbersgame/${www.amazon.com:user_id}/*"]}} }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::myBucket/amazon/mynumbersgame/${www.amazon.com:user_id}", "arn:aws:s3:::myBucket/amazon/mynumbersgame/${www.amazon.com:user_id}/*" ] } ] }

Amazon Cognito, Facebook, Google 또는 기타 OpenID Connect–호환 IdP를 사용해 로그인하는 사용자를 위해 유사한 정책을 생성할 수도 있습니다. 그 정책은 다른 앱 ID뿐만 아니라 다른 공급자 이름을 경로의 일부로 사용할 것입니다.

정책에서 조건 확인을 위해 사용 가능한 웹 자격 증명 연동 키에 대한 자세한 정보는 AWS 웹 자격 증명 연동에서 사용할 수 있는 키 단원을 참조하십시오.