2.4.5. Keystone での STS Lite の設定および使用 (テクノロジープレビュー)


Amazon Secure Token Service (STS) と S3 API は、同じ名前空間に共存します。STS オプションは、Keystone オプションと組み合わせて設定できます。

注記

S3 と STS の API の両方に、Ceph Object Gateway の同じエンドポイントを使用してアクセスできます。

前提条件

  • Red Hat Ceph Storage 3.2 以降
  • 実行中の Ceph Object Gateway。
  • Boto Python モジュールのバージョン 3 以降のインストール

手順

  1. group_vars/rgws.yml ファイルを以下のオプションで開き、編集します。

    rgw_sts_key = $STS_KEY_FOR_ENCRYPTING_SESSION_TOKEN
    rgw_s3_auth_use_sts = true
  2. Ansible Playbook を再実行します。

    [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rgws
  3. EC2 認証情報を生成します。

    $ 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_key および secret_key の値を書き留めておきます。

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

  7. AssumeRole API 呼び出しを使用し、仮定のユーザーから access_key および secret_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 ガイドS3 アクセスのテスト セクションを参照してください。
  • 詳細は、Red Hat Ceph Storage Object Gateway ガイドユーザーの作成 セクションを参照してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.