9.16. IAM(Identity and Access Management) (기술 프리뷰)


중요

IAM(Identity and Access Management) 기능은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있으며 Red Hat은 해당 기능을 프로덕션용으로 사용하지 않는 것이 좋습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. 자세한 내용은 Red Hat 기술 프리뷰 기능에 대한 지원 범위를 참조하십시오.

Ceph Object Gateway는 AWS Identity and Access Management(IAM)의 사용자와 유사한 사용자, 그룹 및 역할의 셀프 서비스 관리를 활성화하는 선택적 기능으로 사용자 계정을 지원합니다.

계정 root 사용자

각 계정은 계정 root 사용자가 관리합니다. 일반 사용자 및 역할과 마찬가지로 계정 및 계정 루트 사용자는 radosgw-admin 또는 Admin Ops API를 사용하여 관리자가 생성해야 합니다. 계정 root 사용자는 계정이 소유한 모든 리소스에 대한 기본 권한이 있습니다. 루트 사용자의 인증 정보(액세스 및 시크릿 키)를 Ceph Object Gateway IAM API와 함께 사용하여 Ceph Object Gateway S3 API와 함께 사용할 추가 IAM 사용자 및 역할을 생성할 수 있으며, 연결된 액세스 키 및 정책을 관리할 수 있습니다.

계정 소유자는 이 계정 root 사용자를 관리 전용으로 사용하고 특정 애플리케이션에 대한 세분화된 권한으로 사용자와 역할을 생성하는 것이 좋습니다.

참고

계정 root 사용자는 계정 내의 리소스에 액세스하는 IAM 정책이 필요하지 않지만 액세스를 명시적으로 거부하는 정책을 추가할 수 있습니다. Deny statements를 주의해서 사용하십시오.

리소스 소유권

일반(비계정) 사용자가 버킷을 생성하고 오브젝트를 업로드할 때 해당 리소스는 사용자가 소유합니다. 연결된 S3 ACL 이름은 소유자와 권한 부여 모두 사용자로, 해당 버킷은 s3:ListBuckets 요청의 소유 사용자에게만 표시됩니다. 반대로 사용자 또는 역할이 계정에 속할 때 생성하는 리소스는 계정 자체에서 대신 소유합니다. 연결된 S3 ACL은 계정 ID를 소유자 및 부여자로 지정하고 해당 버킷은 해당 계정의 모든 사용자 또는 역할에 의해 전송된 s3:ListBuckets 요청에 표시됩니다.

리소스는 사용자가 아닌 계정에서 소유하므로 모든 사용량 통계 및 할당량 적용은 개별 사용자가 아닌 전체 계정에 적용됩니다.

계정 ID

계정 식별자는 사용자 ID 또는 테넌트 이름을 수락하는 여러 위치에서 사용할 수 있으므로 계정 ID는 특수 형식을 사용하여 모호성을 방지합니다. 문자열 RGW와 RGW는 RGW와 같은 17개의 숫자 숫자(예: RGW)를 사용합니다. 해당 형식의 계정 ID는 지정하지 않은 경우 계정 생성 시 임의로 생성됩니다.

계정 ID는 일반적으로 IAM 정책 문서의 Amazon 리소스 이름(ARN)에서 확인할 수 있습니다. 예를 들어 arn:aws:iam::RGW33567154695143645:user/A는 해당 계정에서 A라는 IAM 사용자를 나타냅니다. Ceph Object Gateway는 해당 위치에서 테넌트 이름도 지원합니다. 계정 ID는 CanonicalUser 유형의 ACL에서도 사용할 수 있습니다. 사용자 ID도 여기에서 지원됩니다.

IAM 정책

계정 이외의 사용자는 기본적으로 버킷을 생성하고 오브젝트를 업로드할 수 있지만 계정 사용자는 권한 없이 시작합니다. IAM 사용자가 API 작업을 수행하기 전에 이를 허용하려면 일부 정책을 추가해야 합니다. 계정 root 사용자는 여러 가지 방법으로 ID 정책을 사용자에게 추가할 수 있습니다. iam:PutUserPolicyiam:AttachUserPoliicy 작업을 사용하여 사용자에게 정책을 직접 추가합니다. IAM 그룹을 생성하고 iam:PutGroupPolicyiam:AttachGroupPoliicy 작업을 사용하여 그룹 정책을 추가합니다. iam:AddUserToGroup 작업을 사용하여 해당 그룹에 추가된 사용자는 모든 그룹의 정책을 상속합니다. IAM 역할을 생성하고 iam:PutRolePolicy 및 iam:AttachRolePoliicy 작업을 사용하여 역할 정책을 추가합니다. 이 역할을 sts:AssumeRole 및 sts:AssumeRoleWithWebIdentity 작업으로 가정하는 사용자는 역할의 모든 정책을 상속합니다. 이러한 ID 정책은 단일 계정 및 교차 계정 정책 평가 논리 내에서 정책 평가의 규칙에 따라 평가됩니다.

보안 주체

정책 문서의 "Principal" ARN은 계정에 속할 때 사용자를 다르게 나타냅니다. 계정 외부에서 사용자 주체는 arn:aws:iam:::user/uid 또는 arn:aws:iam::tenantname:user/uid와 같은 사용자 ID로 이름이 지정됩니다. 여기서 uid는 radosgw-admin의 --uid 인수에 해당합니다.

계정 내에서 사용자 주체는 대신 arn:aws:iam::RGW33567154695143645:user/name과 같은 사용자 이름을 사용합니다. 여기서 name은 radosgw-admin의 --display-name 인수에 해당합니다. 계정 사용자는 사용자가 계정으로 마이그레이션될 때 기존 정책이 계속 작동하도록 테넌트 양식과 계속 일치합니다.

테넌트 격리

사용자와 마찬가지로 버킷의 네임스페이스 격리를 위해 계정을 선택적으로 테넌트에 속할 수 있습니다. 예를 들어 "acct"라는 하나의 계정은 테넌트 "a" 아래에 존재할 수 있으며 "acct"라는 다른 계정은 테넌트 "b" 아래에 존재할 수 있습니다.

테넌트 계정은 테넌트 이름이 동일한 사용자만 포함할 수 있습니다. 테넌트와 관계없이 계정 ID와 이메일 주소는 전역적으로 고유해야 합니다.

9.16.1. 계정 생성

  • IAM 사용자를 생성하려면 radosgw-admin 계정을 사용합니다.

    참고

    사용자 ID와 표시 이름을 지정해야 합니다. 이메일 주소도 지정할 수 있습니다.

    구문

    radosgw-admin account create [--account-name={name}] [--account-id={id}] [--email={email}]

    radosgw-admin account create --account-name=user1 --account-id=12345 --email=user1@example.com

9.16.2. 계정 root 사용자 생성

  • IAM 사용자를 생성하려면 radosgw-admin user create 명령을 사용합니다.

    참고

    사용자 ID와 표시 이름을 지정해야 합니다. 이메일 주소도 지정할 수 있습니다. root 사용자는 계정에 대한 전체 액세스 권한이 있는 IAM 사용자이며 다른 사용자 관리를 포함하여 모든 작업을 수행할 수 있습니다.

    구문

    radosgw-admin user create --uid={userid} --display-name={name} --account-id={accountid} --account-root --gen-secret --gen-access-key

    radosgw-admin user create --uid=rootuser1 --display-name="Root User One" --account-id=account123 --account-root --gen-secret --gen-access-key

9.16.3. 계정 삭제

  • IAM 사용자를 삭제하려면 radosgw-admin rm 명령을 사용합니다. 사용자를 제거하면 시스템에서 해당 사용자가 제거됩니다.

    구문

    radosgw-admin account rm --account-id={accountid}

    radosgw-admin account rm --account-id=account123

9.16.4. 계정 통계 및 할당량 활성화 및 보기

스토리지 사용량 및 오브젝트 수와 같은 특정 계정에 대한 자세한 통계를 검색할 수 있습니다. 또한 계정에서 스토리지 할당량을 정의 및 활성화하고 해당 버킷에 저장할 수 있는 최대 오브젝트 수를 제한하여 계정 내의 특정 버킷에서 할당량을 설정하고 활성화할 수도 있습니다.

프로세스

  • 계정 통계를 보려면 다음을 수행합니다.

    구문

    radosgw-admin account stats --account-id={accountid} --sync-stats

    {
      "account": "account123",
      "data_size": 3145728000,        # Total size in bytes (3 GB)
      "num_objects": 12000,           # Total number of objects
      "num_buckets": 5,               # Total number of buckets
      "usage": {
        "total_size": 3145728000,     # Total size in bytes (3 GB)
        "num_objects": 12000
      }
    }

  • 계정 할당량을 활성화하려면 다음을 수행합니다.

    구문

    radosgw-admin quota set --quota-scope=account --account-id={accountid} --max-size=10G
    radosgw-admin quota enable --quota-scope=account --account-id={accountid}

    {
      "status": "OK",
      "message": "Quota enabled for account account123"
    }

  • 계정에 대한 버킷 할당량을 활성화하려면 다음을 수행합니다.

    구문

    radosgw-admin quota set --quota-scope=bucket --account-id={accountid} --max-objects=1000000
    radosgw-admin quota enable --quota-scope=bucket --account-id={accountid}

    {
      "status": "OK",
      "message": "Quota enabled for bucket in account account123"
    }

  • 버킷, 역할, 사용자 또는 시크릿의 할당량을 변경하려면 account modify 명령을 사용합니다.

    [root@magna045 ~]# radosgw-admin quota set --quota-scope=account --account-id RGW12345678901234568 --max-buckets 10000
    {
        "id": "RGW12345678901234568",
        "tenant": "tenant1",
        "name": "account1",
        "email": "tenataccount1",
        "quota": {
            "enabled": true,
            "check_on_raw": false,
            "max_size": 10737418240,
            "max_size_kb": 10485760,
            "max_objects": 100
        },
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "max_users": 1000,
        "max_roles": 1000,
        "max_groups": 1000,
        "max_buckets": 1000,
        "max_access_keys": 4
    }
    [root@magna045 ~]# radosgw-admin quota enable --quota-scope=account --account-id RGW12345678901234568
    {
        "id": "RGW12345678901234568",
        "tenant": "tenant1",
        "name": "account1",
        "email": "tenataccount1",
        "quota": {
            "enabled": true,
            "check_on_raw": false,
            "max_size": 10737418240,
            "max_size_kb": 10485760,
            "max_objects": 100
        },
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "max_users": 1000,
        "max_roles": 1000,
        "max_groups": 1000,
        "max_buckets": 1000,
        "max_access_keys": 4
    }
    [root@magna045 ~]# radosgw-admin account get --account-id RGW12345678901234568
    {
        "id": "RGW12345678901234568",
        "tenant": "tenant1",
        "name": "account1",
        "email": "tenataccount1",
        "quota": {
            "enabled": true,
            "check_on_raw": false,
            "max_size": 10737418240,
            "max_size_kb": 10485760,
            "max_objects": 100
        },
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "max_users": 1000,
        "max_roles": 1000,
        "max_groups": 1000,
        "max_buckets": 1000,
        "max_access_keys": 4
    }
    [root@magna045 ~]#
    
    [root@magna045 ~]# ceph versions
    {
        "mon": {
            "ceph version 19.1.1-63.el9cp (8fa7b56d5e9f208c4233b0a8273665087bded8ae) squid (rc)": 3
        },
        "mgr": {
            "ceph version 19.1.1-63.el9cp (8fa7b56d5e9f208c4233b0a8273665087bded8ae) squid (rc)": 3
        },
        "osd": {
            "ceph version 19.1.1-63.el9cp (8fa7b56d5e9f208c4233b0a8273665087bded8ae) squid (rc)": 9
        },
        "rgw": {
            "ceph version 19.1.1-63.el9cp (8fa7b56d5e9f208c4233b0a8273665087bded8ae) squid (rc)": 3
        },
        "overall": {
            "ceph version 19.1.1-63.el9cp (8fa7b56d5e9f208c4233b0a8273665087bded8ae) squid (rc)": 18
        }
    }

9.16.5. 기존 사용자를 계정으로 마이그레이션

radosgw-admin 사용자 수정 명령을 사용하여 기존 IAM 사용자 계정을 수정할 수 있습니다. Ceph Object Gateway 계정과 연결된 역할을 생성할 때 radosgw-admin 역할 목록 --account-id <RGWaccountID > 명령을 사용하여 나열할 수 있습니다.

프로세스

  • 기존 사용자 IAM 계정을 수정하려면 다음을 수행합니다.

    구문

    radosgw-admin user modify --uid={userid} --account-id={accountid}

계정 사용자에게는 기본적으로 권한이 없으므로 사용자의 원래 권한을 복원하기 위해 ID 정책을 추가해야 합니다. 또는 기존 사용자마다 새 계정을 만들 수 있습니다. 이렇게 하는 동안 --account-root 옵션을 추가하여 각 사용자를 계정의 root 사용자로 설정합니다.

참고

사용자의 모든 버킷에 대한 소유권은 계정으로 전송됩니다.

참고

계정 멤버십은 영구적입니다. 추가되면 사용자는 계정에서 제거할 수 없습니다.

주의

사용자의 알림 주제의 소유권은 계정으로 전송되지 않습니다. 알림은 계속 작동하지만 주제는 더 이상 Cryostat 주제 API에 표시되지 않습니다.

알림 주제 마이그레이션

계정 주제는 notification_v2 기능이 활성화된 경우에만 지원됩니다.

계정 이외의 사용자가 계정으로 마이그레이션되면 RadosGW 관리자 API를 통해 기존 알림 항목에 액세스할 수 있지만 사용자는 Cryostat Topic API를 통해 액세스할 수 없습니다. 에도 불구하고 주제는 계속 기능적으로 유지되며 버킷 알림은 예상대로 계속 제공됩니다.

주제의 다시 생성 계정 사용자는 동일한 이름을 사용하여 주제를 다시 생성해야 합니다. 기존 주제(현재는 액세스할 수 없음)와 계정 소유의 새로운 주제는 방해가 되지 않고 공존할 수 있습니다.

이전 사용자 소유 항목에 가입된 버킷을 업데이트하면 새 계정 소유 주제를 사용하도록 업데이트해야 합니다. 중복 알림을 방지하려면 동일한 알림 ID를 유지 관리합니다.

예를 들어 버킷의 기존 알림 구성이 다음과 같은 경우입니다.

{"TopicConfigurations": [{ "Id": "ID1", "TopicArn": "arn:aws:sns:default::topic1", "Events": ["s3:ObjectCreated:*"]}]}

업데이트된 구성은 다음과 같습니다.

{"TopicConfigurations": [{ "Id": "ID1", "TopicArn": "arn:aws:sns:default:RGW00000000000000001:topic1", "Events": ["s3:ObjectCreated:*"]}]}

이 예제에서 RGW0000000000001은 계정 ID이고, topic1은 주제 이름이고 ID1은 알림 ID입니다.

이전 사용자 소유 항목에 버킷을 구독하지 않으면 관리자가 제거할 수 있습니다.

$ radosgw-admin topic rm --topic topic1

계정을 사용하지 않는 사용자 마이그레이션에서 RGW 계정으로 마이그레이션

계정을 사용하지 않는 계정에서 RGW 계정으로 마이그레이션하는 경우 다음 단계에 따라 원활한 IO 마이그레이션 및 적절한 IAM 구성을 보장합니다.

  1. 사용자 마이그레이션 중에 account-root 플래그를 할당합니다. 사용자를 계정으로 마이그레이션할 때 account-root 플래그가 추가되었는지 확인합니다. 그러면 사용자에게 마이그레이션에 필요한 권한이 부여됩니다.

    radosgw-admin user modify --uid <user_ID> --account-id <Account_ID> --account-root
  2. S3 액세스 정책을 연결합니다. 사용자를 마이그레이션한 후 적절한 IAM 정책을 연결하여 사용자 S3 액세스 권한을 부여합니다. 이 경우 AmazonS3FullAccess 정책을 할당하고 있습니다.

    radosgw-admin user policy attach --uid <user_ID> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
  3. account-root 권한을 제거합니다. 마이그레이션 및 필요한 액세스 권한을 부여한 후 사용자가 account-root 권한을 제거하여 권한 범위를 제한합니다.

    radosgw-admin user modify --uid <user_ID> --account-root=0
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.