임시 보안 자격 증명의 권한 비활성화

임시 보안 자격 증명의 권한 비활성화 (Disabling permissions for temporary security credentials)

임시 보안 자격 증명은 만료될 때까지 유효해요. 이 자격 증명은 900초(15분)부터 최대 129,600초(36시간)까지 지정된 기간 동안 유효해요. 기본 세션 지속 시간은 43,200초(12시간)예요. 이 자격 증명을 철회할 수는 있지만, 손상된 자격 증명이 악의적인 계정 활동에 사용되는 것을 막으려면 IAM 사용자나 역할의 권한도 변경해야 해요. 임시 보안 자격 증명에 할당된 권한은 AWS 요청을 하는 데 사용될 때마다 평가돼요. 자격 증명에서 모든 권한을 제거하면 그 자격 증명을 사용하는 AWS 요청이 실패해요.

출처: 문서

본문

정책 업데이트가 적용되기까지 몇 분 걸릴 수 있어요. IAM 역할 세션의 경우, 역할의 임시 보안 자격 증명을 철회해 역할을 수임하는 모든 사용자가 재인증하고 새 자격 증명을 요청하도록 강제할 수 있어요. 자세한 내용은 역할의 임시 보안 자격 증명 철회를 참고하세요.

AWS 계정 루트 사용자의 권한은 변경할 수 없어요. 마찬가지로 루트 사용자로 로그인해 GetFederationToken 또는 GetSessionToken을 호출해 만든 임시 보안 자격 증명의 권한도 변경할 수 없어요. 이런 이유로 루트 사용자로 GetFederationToken 또는 GetSessionToken을 호출하지 않는 것을 권장해요.

IAM 사용자의 권한을 변경하는 절차는 IAM 사용자의 권한 변경을 참고하세요.

IAM 역할의 권한을 변경하는 절차는 역할의 권한 업데이트를 참고하세요.

중요

IAM Identity Center 권한 세트에서 만든 IAM 역할은 편집할 수 없어요. IAM Identity Center에서 사용자의 활성 권한 세트 세션을 철회해야 해요. 자세한 내용은 IAM Identity Center 사용자 가이드의 권한 세트가 만든 활성 IAM 역할 세션 철회를 참고하세요.

다루는 주제

  • 역할과 연결된 모든 IAM 역할 세션에 대한 접근 거부
  • 특정 IAM 역할 세션에 대한 접근 거부
  • 조건 컨텍스트 키로 임시 보안 자격 증명 세션에 대한 접근 거부
  • 리소스 기반 정책으로 특정 프린시펄에 대한 접근 거부

역할과 연결된 모든 IAM 역할 세션에 대한 접근 거부

이 절차는 역할과 연결된 모든 IAM 역할 세션의 권한을 거부해요. 다음에 의한 의심스러운 접근이 우려될 때 이 방식을 사용해요.

  • 교차 계정 접근을 사용하는 다른 계정의 프린시펄
  • 우리 계정의 AWS 리소스에 접근할 권한이 있는 외부 사용자 아이덴티티
  • OIDC 프로바이더로 모바일·웹 애플리케이션에서 인증된 사용자

AssumeRole, AssumeRoleWithSAML, AssumeRoleWithWebIdentity, GetFederationToken, GetSessionToken을 호출해 얻은 임시 보안 자격 증명에 할당된 권한을 변경하거나 제거하려면, 역할의 권한을 정의하는 아이덴티티 기반 정책을 편집하거나 삭제할 수 있어요.

중요

프린시펄의 접근을 허용하는 리소스 기반 정책이 있다면, 그 리소스에 대한 명시적 거부도 추가해야 해요. 자세한 내용은 리소스 기반 정책으로 특정 프린시펄에 대한 접근 거부를 참고하세요.

역할과 연결된 모든 IAM 역할 세션에 대한 접근 거부
  1. AWS Management Console에 로그인하고 IAM 콘솔을 열어요.
  2. 탐색 창에서 Roles를 선택해요.
  3. 편집할 역할의 이름을 선택해요. 검색 상자로 목록을 필터링할 수 있어요.
  4. Permissions 탭을 선택해요.
  5. 편집할 관련 정책을 선택해요. 고객 관리형 정책을 편집하기 전에, 같은 정책이 연결된 다른 아이덴티티의 접근을 방해하지 않도록 Entities attached 탭을 검토해요.
  6. JSON 탭을 선택하고 정책을 모든 리소스·작업을 거부하도록 업데이트해요.
참고

이 권한은 AWS 관리형 정책 AWSDenyAll의 권한과 같아요. 모든 접근을 거부하려는 IAM 사용자나 역할에 이 AWS 관리형 정책을 연결할 수 있어요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyAll",
            "Effect": "Deny",
            "Action": [
                "*"
            ],
            "Resource": "*"
        }
    ]
}
  1. Review 페이지에서 정책 Summary를 검토한 뒤 Save changes를 선택해 작업을 저장해요.

정책을 업데이트하면 변경 사항이 역할과 연결된 모든 임시 보안 자격 증명의 권한에 영향을 줘요. 여기에는 역할의 권한 정책을 변경하기 전에 발급된 자격 증명도 포함돼요.

정책을 업데이트한 뒤, 역할의 임시 보안 자격 증명을 철회해 역할에 발급된 자격 증명의 모든 권한을 즉시 철회할 수 있어요.

특정 IAM 역할 세션에 대한 접근 거부

IAM 역할을 deny-all 정책으로 업데이트하거나 역할을 완전히 삭제하면, 역할에 접근하는 모든 사용자가 방해를 받아요. 조건 컨텍스트 키나 리소스 기반 정책으로 역할과 연결된 다른 모든 세션의 권한에 영향을 주지 않고 접근을 거부할 수 있어요.

팁

AWS CloudTrail 로그로 페더레이션 사용자의 ARN을 찾을 수 있어요. 자세한 내용은 AWS CloudTrail로 페더레이션 사용자 쉽게 식별하는 방법을 참고하세요.

조건 컨텍스트 키로 임시 보안 자격 증명 세션에 대한 접근 거부

자격 증명을 만든 IAM 사용자·역할의 권한에 영향을 주지 않고 특정 임시 보안 자격 증명 세션에 대한 접근을 거부하고 싶은 상황에서, 아이덴티티 기반 정책에 조건 컨텍스트 키를 사용할 수 있어요. IAM 역할의 경우 정책을 업데이트한 뒤 역할의 임시 보안 자격 증명 세션을 철회해 발급된 모든 자격 증명을 즉시 철회할 수도 있어요.

조건 컨텍스트 키에 대한 자세한 내용은 AWS 전역 조건 컨텍스트 키를 참고하세요.

aws:PrincipalArn

아이덴티티 기반 정책에서 조건 컨텍스트 키 aws:PrincipalArn을 사용해, 특정 프린시펄을 그 ARN(Amazon Resource Name)으로 접근을 거부할 수 있어요. 정책의 Condition 요소에 임시 보안 자격 증명이 연관된 IAM 사용자, 역할, 또는 AWS STS 페더레이션 사용자 세션의 ARN을 지정해서 이렇게 해요.

ARN으로 특정 프린시펄에 대한 접근 거부
  1. IAM 콘솔 탐색 창에서 Users 또는 Roles를 선택해요.
  2. 편집할 IAM 사용자·역할의 이름을 선택해요. 검색 상자로 목록을 필터링할 수 있어요.
  3. Permissions 탭을 선택해요.
  4. 편집할 관련 정책을 선택해요. 고객 관리형 정책을 편집하기 전에, 같은 정책이 연결된 다른 아이덴티티의 접근을 방해하지 않도록 Entities attached 탭을 검토해요.
  5. JSON 탭을 선택하고 다음 예시처럼 프린시펄 ARN에 대한 거부 스테이트먼트를 추가해요.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "ArnEquals": {
          "aws:PrincipalArn": [
            "arn:aws:iam::222222222222:role/ROLENAME",
            "arn:aws:iam::222222222222:user/USERNAME",
            "arn:aws:iam::222222222222:federated-user/USERNAME" 
          ]
        }
      }
    }
  ]
}
  1. Review 페이지에서 정책 Summary를 검토한 뒤 Save changes를 선택해 작업을 저장해요.

aws:SourceIdentity

아이덴티티 기반 정책에서 조건 컨텍스트 키 aws:SourceIdentity를 사용해, IAM 역할 세션과 연관된 특정 소스 아이덴티티에 대한 접근을 거부할 수 있어요. 이는 프린시펄이 AWS STS assume-role* CLI 명령이나 AWS STS AssumeRole* API 작업으로 역할을 수임할 때 SourceIdentity 요청 파라미터를 설정해 역할 세션이 발급된 경우 적용돼요. 정책의 Condition 요소에 임시 보안 자격 증명이 연관된 소스 아이덴티티를 지정해서 이렇게 해요.

컨텍스트 키 sts:RoleSessionName과 달리, 소스 아이덴티티는 설정된 후 값을 변경할 수 없어요. aws:SourceIdentity 키는 역할이 수행하는 모든 작업의 요청 컨텍스트에 존재해요. 세션 자격 증명으로 다른 역할을 수임할 때 소스 아이덴티티는 후속 역할 세션으로 유지돼요. 한 역할에서 다른 역할을 수임하는 것을 역할 체이닝이라고 해요.

다음 정책은 조건 컨텍스트 키 aws:SourceIdentity로 임시 보안 자격 증명 세션에 대한 접근을 거부하는 방법의 예시예요. 역할 세션과 연관된 소스 아이덴티티를 지정하면, 자격 증명을 만든 역할의 권한에 영향을 주지 않고 그 이름의 소스 아이덴티티를 가진 역할 세션을 거부해요. 이 예시에서 프린시펄이 역할 세션 발급 시 설정한 소스 아이덴티티는 [email protected]이에요. 소스 아이덴티티 [email protected]을 가진 역할 세션이 보내는 어떤 요청도, 소스 아이덴티티가 정책 조건에 포함되고 정책 Effect가 Deny로 설정됐기 때문에 거부돼요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:SourceIdentity": [
            "[email protected]",
            "<source identity value>"
          ]
        }
      }
    }
  ]
}

aws:userid

아이덴티티 기반 정책에서 조건 컨텍스트 키 aws:userid를 사용해, IAM 사용자·역할과 연관된 모든 임시 보안 자격 증명 세션 또는 특정 임시 보안 자격 증명 세션에 대한 접근을 거부할 수 있어요. 정책의 Condition 요소에 임시 보안 자격 증명이 연관된 IAM 사용자, 역할, 또는 AWS STS 페더레이션 사용자 세션의 고유 식별자(ID)를 지정해서 이렇게 해요.

다음 정책은 조건 컨텍스트 키 aws:userid로 임시 보안 자격 증명 세션에 대한 접근을 거부하는 방법의 예시예요.

  • AIDAXUSER1은 IAM 사용자의 고유 ID를 나타내요. 컨텍스트 키 aws:userid의 값으로 IAM 사용자의 고유 ID를 지정하면 IAM 사용자에 대한 접근을 거부해요. 여기에는 GetSessionToken API를 호출해 만든 임시 보안 자격 증명 세션이 모두 포함돼요.
  • AROAXROLE1:*은 IAM 역할과 연관된 모든 세션의 고유 ID를 나타내요. 컨텍스트 키 aws:userid의 값으로 IAM 역할의 고유 ID와 호출자 지정 역할 세션 이름 부분의 와일드카드(*) 문자를 지정하면 역할과 연관된 모든 세션을 거부해요.
  • AROAXROLE2:<caller-specified-role-session-name>은 수임 역할 세션의 고유 ID를 나타내요. 수임 역할 고유 ID의 호출자 지정 역할 세션 이름 부분에 역할 세션 이름이나, StringLike 조건 연산자를 사용한다면 와일드카드 문자를 지정할 수 있어요. 역할 세션 이름을 지정하면 자격 증명을 만든 역할의 권한에 영향을 주지 않고 그 이름의 역할 세션을 거부해요. 역할 세션 이름에 와일드카드 문자를 지정하면 역할과 연관된 모든 세션을 거부해요.
참고

수임 역할 세션의 고유 식별자의 일부인 호출자 지정 역할 세션 이름은 역할 체이닝 동안 변경될 수 있어요. 역할 체이닝은 한 역할이 다른 역할을 수임할 때 발생해요. 역할 세션 이름은 프린시펄이 AWS STS AssumeRole API 작업으로 역할을 수임할 때 RoleSessionName 요청 파라미터로 설정돼요.

  • account-id:<federated-user-caller-specified-name>은 AWS STS 페더레이션 사용자 세션의 고유 ID를 나타내요. IAM 사용자가 GetFederationToken API를 호출해 이 세션을 만들어요. AWS STS 페더레이션 사용자 세션의 고유 ID를 지정하면 자격 증명을 만든 IAM 사용자의 권한에 영향을 주지 않고 그 이름의 페더레이션 세션을 거부해요.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:userId": [
            "AIDAXUSER1",
            "AROAXROLE1:*",
            "AROAXROLE2:<caller-specified-role-session-name>",
            "123456789012:<federated-user-caller-specified-name>"
          ]
        }
      }
    }
  ]
}

프린시펄 키 값의 구체적인 예시는 프린시펄 키 값을 참고하세요. IAM 고유 식별자와 이를 얻는 방법에 대한 정보는 고유 식별자를 참고하세요.

리소스 기반 정책으로 특정 프린시펄에 대한 접근 거부

리소스 기반 정책으로 특정 프린시펄의 접근을 제한하려면 Condition 요소에서 조건 컨텍스트 키 aws:PrincipalArn 또는 aws:SourceIdentity를 사용할 수 있어요. 리소스 기반 정책은 리소스에 연결된 권한 정책으로, 누가 리소스에 접근할 수 있고 어떤 작업을 수행할 수 있는지를 제어해요.

aws:PrincipalARN 컨텍스트 키를 사용할 때는 정책의 Condition 요소에 임시 보안 자격 증명이 연관된 IAM 사용자, 역할, 또는 AWS STS 페더레이션 사용자 세션의 ARN을 지정해요. 다음 예시 정책은 리소스 기반 정책에서 aws:PrincipalARN 컨텍스트 키를 사용하는 방법을 보여줘요.

{
  "Version": "2012-10-17",
  "Statement": {
    "Principal": "*",
    "Effect": "Deny",
    "Action": "s3:*",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
    "Condition": {
      "ArnEquals": {
        "aws:PrincipalArn": [
          "arn:aws:iam::222222222222:role/ROLENAME",
          "arn:aws:iam::222222222222:user/USERNAME",
          "arn:aws:sts::222222222222:federated-user/USERNAME"
        ]
      }
    }
  }
}

aws:SourceIdentity 컨텍스트 키를 사용할 때는 정책의 Condition 요소에 역할의 임시 보안 자격 증명과 연관된 소스 아이덴티티 값을 지정해요. 이는 프린시펄이 AWS STS assume-role* CLI 명령이나 AWS STS AssumeRole* API 작업으로 역할을 수임할 때 SourceIdentity 요청 파라미터를 설정해 역할 세션이 발급된 경우 적용돼요. 다음 예시는 리소스 기반 정책에서 aws:SourceIdentity 컨텍스트 키를 사용하는 방법을 보여줘요.

{
  "Version": "2012-10-17",
  "Statement": {
    "Principal": "*",
    "Effect": "Deny",
    "Action": "s3:*",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
    "Condition": {
      "StringLike": {
        "aws:SourceIdentity": [
          "[email protected]",
          "<source identity value>"
        ]
      }
    }
  }
}

프린시펄의 아이덴티티 기반 정책만 업데이트하면, 리소스 기반 정책이 허용하는 작업은 아이덴티티 기반 정책에서 명시적으로 거부되지 않는 한 여전히 수행할 수 있어요.

리소스 기반 정책에서 특정 프린시펄에 대한 접근 거부
  1. AWS 서비스가 IAM과 함께 동작하는지 문서를 보고 그 서비스가 리소스 기반 정책을 지원하는지 확인해요.
  2. AWS Management Console에 로그인하고 그 서비스의 콘솔을 열어요. 각 서비스마다 정책을 연결하는 콘솔 위치가 달라요.
  3. 리소스 기반 정책을 편집해요. 자격 증명의 식별 정보를 지정하는 거부 정책 스테이트먼트를 추가해요.
    • Principal 요소에 와일드카드(*)를 입력해요. 프린시펄은 Condition 요소에서 제한될 거예요.
    • Effect 요소에 "Deny"를 입력해요.
    • Action에 서비스 네임스페이스와 거부할 작업의 이름을 입력해요. 모든 작업을 거부하려면 와일드카드(*) 문자를 사용해요. 예: "s3:*".
    • Resource 요소에 대상 리소스의 ARN을 입력해요. 예: "arn:aws:s3:::amzn-s3-demo-bucket".
    • Condition 요소에 aws:PrincipalARN 또는 aws:SourceIdentity 컨텍스트 키 중 하나를 지정해요.
      • aws:PrincipalARN 컨텍스트 키를 사용하면 접근을 거부할 프린시펄의 ARN을 입력해요.
      • aws:SourceIdentity 컨텍스트 키를 사용하면 거부할 역할 세션에 설정된 소스 아이덴티티 값을 입력해요.
  4. 작업을 저장해요.

더 알아보기 (Learn more)