2.3.11.5. Keystone과 함께 STS Lite를 구성 및 사용 (기술 프리뷰)


Amazon STS(Secure Token Service) 및 S3 API는 동일한 네임스페이스에 공존합니다. STS 옵션은 Keystone 옵션과 함께 구성할 수 있습니다.

참고

S3 및 STS API는 모두 Ceph Object Gateway에서 동일한 끝점을 사용하여 액세스할 수 있습니다.

사전 요구 사항

  • Red Hat Ceph Storage 3.2 이상.
  • 실행 중인 Ceph 오브젝트 게이트웨이.
  • Boto Python 모듈, 버전 3 이상 설치.

절차

  1. 다음 옵션을 사용하여 group_vars/rgws.yml 파일을 열고 편집합니다.

    rgw_sts_key = STS_KEY
    rgw_s3_auth_use_sts = true

    교체:

    • 세션 토큰을 암호화하는 데 사용되는 키가 있는 STS_KEY.
  2. 적절한 Ceph Ansible 플레이북을 다시 실행합니다.

    1. 베어 메탈 배포:

      [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rgws
    2. 컨테이너 배포:

      [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --limit rgws
  3. EC2 자격 증명을 생성합니다.

    예제

    [user@osp ~]$ openstack ec2 credentials create
    
    +------------+--------------------------------------------------------+
    | Field      | Value                                                  |
    +------------+--------------------------------------------------------+
    | access     | b924dfc87d454d15896691182fdeb0ef                       |
    | links      | {u'self': u'http://192.168.0.15/identity/v3/users/     |
    |            | 40a7140e424f493d8165abc652dc731c/credentials/          |
    |            | OS-EC2/b924dfc87d454d15896691182fdeb0ef'}              |
    | project_id | c703801dccaf4a0aaa39bec8c481e25a                       |
    | secret     | 6a2142613c504c42a94ba2b82147dc28                       |
    | trust_id   | None                                                   |
    | user_id    | 40a7140e424f493d8165abc652dc731c                       |
    +------------+--------------------------------------------------------+

  4. 생성된 자격 증명을 사용하여 GetSessionToken API를 사용하여 임시 보안 자격 증명 집합을 가져옵니다.

    예제

    import boto3
    
    access_key = b924dfc87d454d15896691182fdeb0ef
    secret_key = 6a2142613c504c42a94ba2b82147dc28
    
    client = boto3.client('sts',
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    endpoint_url=https://www.example.com/rgw,
    region_name='',
    )
    
    response = client.get_session_token(
        DurationSeconds=43200
    )

  5. 임시 인증 정보를 얻는 데는 S3를 호출하는 데 사용할 수 있습니다.

    예제

    s3client = boto3.client('s3',
      aws_access_key_id = response['Credentials']['AccessKeyId'],
      aws_secret_access_key = response['Credentials']['SecretAccessKey'],
      aws_session_token = response['Credentials']['SessionToken'],
      endpoint_url=https://www.example.com/s3,
      region_name='')
    
    bucket = s3client.create_bucket(Bucket='my-new-shiny-bucket')
    response = s3client.list_buckets()
    for bucket in response["Buckets"]:
      print "{name}\t{created}".format(
        name = bucket['Name'],
        created = bucket['CreationDate'],
      )

  6. S3Access 역할을 생성하고 정책을 구성합니다.

    1. 관리 CAPS가 있는 사용자를 할당합니다.

      구문

      radosgw-admin caps add --uid="USER" --caps="roles=*"

      예제

      [user@client]$ radosgw-admin caps add --uid="gwadmin" --caps="roles=*"

    2. S3Access 역할을 생성합니다.

      구문

      radosgw-admin role create --role-name=ROLE_NAME --path=PATH --assume-role-policy-doc=TRUST_POLICY_DOC

      예제

      [user@client]$ radosgw-admin role create --role-name=S3Access --path=/application_abc/component_xyz/ --assume-role-policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Principal\":\{\"AWS\":\[\"arn:aws:iam:::user/TESTER\"\]\},\"Action\":\[\"sts:AssumeRole\"\]\}\]\}

    3. S3Access 역할에 권한 정책을 연결합니다.

      구문

      radosgw-admin role-policy put --role-name=ROLE_NAME --policy-name=POLICY_NAME --policy-doc=PERMISSION_POLICY_DOC

      예제

      [user@client]$ radosgw-admin role-policy put --role-name=S3Access --policy-name=Policy --policy-doc=\{\"Version\":\"2012-10-17\",\"Statement\":\[\{\"Effect\":\"Allow\",\"Action\":\[\"s3:*\"\],\"Resource\":\"arn:aws:s3:::example_bucket\"\}\]\}

    4. 이제 다른 사용자가 gwadmin 사용자의 역할을 가정할 수 있습니다. 예를 들어 gwuser 사용자는 gwadmin 사용자의 권한을 가정할 수 있습니다.
    5. 가정 사용자의 access_keysecret_key 값을 기록해 둡니다.

      예제

      [user@client]$ radosgw-admin user info --uid=gwuser | grep -A1 access_key

  7. AssumeRole API 호출을 사용하여 assuming 사용자의 access_keysecret_key 값을 제공합니다.

    예제

    import boto3
    
    access_key = 11BS02LGFB6AL6H1ADMW
    secret_key = vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY
    
    client = boto3.client('sts',
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    endpoint_url=https://www.example.com/rgw,
    region_name='',
    )
    
    response = client.assume_role(
    RoleArn='arn:aws:iam:::role/application_abc/component_xyz/S3Access',
    RoleSessionName='Bob',
    DurationSeconds=3600
    )

    중요

    AssumeRole API에는 S3Access 역할이 필요합니다.

추가 리소스

  • Boto Python 모듈 설치에 대한 자세한 내용은 Red Hat Ceph Storage Object Gateway 가이드Test S3 Access 섹션을 참조하십시오.
  • 자세한 내용은 Red Hat Ceph Storage Object Gateway 가이드Create a User 섹션을 참조하십시오.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.