アクセス用ロール作成 - Shinichi0713/recipie_suggest GitHub Wiki

APP用のロール作成

EC2上で動作するWebアプリが、S3とDynamoDBへのread/write権限を持つようにIAMロールを作成し、EC2インスタンスにアタッチする手順を以下にまとめます。


1. IAMロールの作成

1-1. AWSマネジメントコンソールでIAMロール作成画面へ

  • AWSコンソールにログイン
  • 「IAM」→「ロール」→「ロールの作成」

1-2. 信頼されたエンティティタイプの選択

  • 「AWSサービス」を選択
  • 「ユースケースの選択」で「EC2」を選択
  • 「次へ」をクリック

1-3. アクセス権限ポリシーのアタッチ

a. S3とDynamoDB用のポリシーを検索・選択

  • 「AmazonS3FullAccess」もしくは「AmazonS3ReadOnlyAccess」+「AmazonS3FullAccess」を選択(必要に応じて)
  • 「AmazonDynamoDBFullAccess」もしくは「AmazonDynamoDBReadOnlyAccess」+「AmazonDynamoDBFullAccess」を選択(必要に応じて)

※最小権限の原則に従い、必要な操作のみ許可するカスタムポリシーを作成するのが理想です。

b. カスタムポリシー例(Read/Write権限)

「ポリシーの作成」→「JSON」で以下を貼り付けて作成し、ロールにアタッチも可。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::YOUR_BUCKET_NAME",
                "arn:aws:s3:::YOUR_BUCKET_NAME/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:GetItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:Scan",
                "dynamodb:Query"
            ],
            "Resource": "arn:aws:dynamodb:YOUR_REGION:YOUR_ACCOUNT_ID:table/YOUR_TABLE_NAME"
        }
    ]
}
  • YOUR_BUCKET_NAME, YOUR_REGION, YOUR_ACCOUNT_ID, YOUR_TABLE_NAMEはご自身の環境に合わせて修正してください。

1-4. ロール名を入力して作成

  • 例: WebAppS3DynamoDBRole

2. EC2インスタンスにロールをアタッチ

2-1. EC2インスタンス管理画面へ

  • 「インスタンス」→ 対象のインスタンスを選択 → 「アクション」→「セキュリティ」→「IAMロールの変更」

2-2. 作成したロールを選択して「保存」


3. Webアプリ側の設定

  • AWS SDK(boto3など)からは、インスタンスメタデータ経由で自動的にロールの認証情報が使われます。
  • 明示的なaws_access_key_idaws_secret_access_keyの設定は不要です。

4. 動作確認

  • aws s3 lsaws dynamodb list-tables などでアクセスできるか確認
  • アプリからもS3/DynamoDBアクセスが正常にできるかテスト

参考: boto3での利用例

import boto3

# インスタンスロール経由で自動的に認証される
s3 = boto3.client('s3')
ddb = boto3.resource('dynamodb')

# S3操作例
s3.put_object(Bucket='YOUR_BUCKET_NAME', Key='test.txt', Body=b'hello')

# DynamoDB操作例
table = ddb.Table('YOUR_TABLE_NAME')
table.put_item(Item={'id': '001', 'value': 'test'})

まとめ

  1. IAMロールを作成し、S3/DynamoDBへのread/write権限を付与
  2. EC2インスタンスにそのロールをアタッチ
  3. Webアプリからは認証情報設定なしでアクセス可能

不明点や追加要件があればご質問ください。

以上です。