すべてのプロダクト
Search
ドキュメントセンター

Migration Hub:AWS の ReadOnlyAccess ポリシーに基づくカスタムポリシーの作成

最終更新日:Jan 22, 2025

このトピックでは、Amazon Web Services (AWS) のリソースに対する読み取り専用権限を付与する ReadOnlyAccess ポリシーに基づいて、カスタムポリシーを作成する方法について説明します。

背景情報

AWS は、Amazon Simple Storage Service (Amazon S3) などのストレージサービスへの読み取り専用アクセスを許可する ReadOnlyAccess ポリシーを提供しています。ビジネスデータを分離し、データ漏洩を防ぐには、より少ないリソースに対する権限を付与するポリシーが必要です。

ソリューション

特定のデータベースまたはストレージサービスに対する読み取り権限を拒否することで、AWS の ReadOnlyAccess ポリシーに基づいてカスタムポリシーを作成できます。

付録のサンプルコードは、以下のサービスに対する読み取り権限を拒否するカスタムポリシーの例を示しています。

s3: Amazon S3
dynamodb: Amazon DynamoDB
rds: Amazon Relational Database Service
qldb: Amazon Quantum Ledger Database
cassandra: Amazon Keyspaces (for Apache Cassandra)
codecommit

手順

スタックの作成

1. 管理者またはパワーユーザーとして AWS CloudFormation コンソールにログインし、リージョンを選択します。ユーザーまたはロールが AWS Identity and Access Management (IAM) に対する操作権限を持っていることを確認してください。

2. [スタック] ページで、[スタックの作成] をクリックします。step2

3. [スタックの作成] ページの [前提条件 - テンプレートの準備] セクションで、[テンプレートの準備完了] を選択します。[テンプレートの指定] セクションで、[テンプレートファイルをアップロード] を選択し、[ファイルを選択] をクリックして、read-only-priciple.cf.yml ファイルなどのファイルをアップロードします。step3

4. 右下隅にある [次へ] をクリックします。[スタックの詳細の指定] ページで、[スタック名] フィールドにわかりやすい名前を入力します。この例では、スタックの名前は AliCloudInspector です。

step4

5. その他の手順ではデフォルト設定を使用します。最後のページで、[機能] セクションの [AWS CloudFormation が IAM リソースを作成する可能性があることを承認します] を選択し、[スタックの作成] をクリックします。

step5

6. スタックが作成されるまで待ちます。

step6

スタック情報の取得

AWS CloudFormation コンソールで、[スタック] ペインで作成した AliCloudInspector スタックをクリックします。詳細ページで、[出力] タブをクリックします。スタックのユーザー名、パスワード、AccessKey、SecretKey を表示できます。

step7

スタック情報の検証

スタック情報を取得した後、以下の方法を使用して簡単なテストを実行できます。

コンソールに移動する
  1. 現在のユーザーアカウントからログオフします。

  2. 取得したユーザー名とパスワードを使用して、AWS CloudFormation コンソールに再度ログインします。コンソールにログインすると、[パスワードのリセット] ダイアログ ボックスが表示されます。

CLI に移動する

次の環境変数テンプレートの AWS_ACCESS_KEY_ID パラメーターと AWS_SECRET_ACCESS_KEY パラメーターの値を取得した AccessKey と SecretKey に置き換えます。コードを CLI にインポートします。

export AWS_ACCESS_KEY_ID=<AK>
export AWS_SECRET_ACCESS_KEY=<SK>
export AWS_DEFAULT_REGION=<Region>

次のコマンドを実行してテストを実行します。

aws s3 ls # すべてのバケットの名前がリストされているかどうかを確認します。
aws s3 cp <object> # オブジェクトへのアクセスが拒否されているかどうかを確認します。

付録

read-only-user.cf.yaml

---
AWSTemplateFormatVersion: '2010-09-09'
Description: A cloudformation template to create a true read-only user and corresponding AKSK to let AliCloud team be able to access resources but no data.

Resources:
  ReadOnlyUser:
    Type: AWS::IAM::User
    Properties:
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/ReadOnlyAccess
      LoginProfile:
        Password: !Ref AWS::StackId
        PasswordResetRequired: true

  DenyUnnecessaryPolicies:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: DenyUnnecessaryPermissionsOfReadOnlyAccess
      PolicyDocument:
        Statement:
        - Effect: Deny
          Action:
          - s3:GetObject*
          - dynamodb:BatchGet*
          - dynamodb:Get*
          - dynamodb:Query
          - dynamodb:Scan
          - rds:Download*
          - glacier:Get*
          - qldb:Get*
          - cassandra:Select
          - codecommit:BatchGet*
          - codecommit:Get*
          - codecommit:GitPull
          Resource: "*"
      Users:
      - !Ref ReadOnlyUser
  CFNKeys:
    Type: AWS::IAM::AccessKey
    Properties:
      UserName: !Ref ReadOnlyUser
Outputs:
  Password:
    Value: !Ref AWS::StackId
  UserName:
    Value: !Ref ReadOnlyUser
    Description: Username of new user
  AccessKey:
    Value:
      Ref: CFNKeys
    Description: AWSAccessKeyId of new user
  SecretKey:
    Value:
      Fn::GetAtt:
      - CFNKeys
      - SecretAccessKey
    Description: AWSSecretKey of new user