AWS DMS を使用している場合、Amazon S3 エンドポイントの接続テスト失敗をトラブルシューティングする方法を教えてください。

最終更新日: 2020 年 2 月 4 日

AWS Database Migration Service (AWS DMS) タスクのソースエンドポイントまたはターゲットエンドポイントとして Amazon Simple Storage Service (Amazon S3) を使用しています。エンドポイントの接続テストが失敗したため、エラーメッセージを受け取りました。エンドポイントの接続エラーをトラブルシューティングする方法を教えてください。

簡単な説明

Amazon S3 エンドポイントを使用している AWS Identity and Access Management (IAM) ロールに適切なアクセス許可が設定されていない場合、次のログエントリのいずれかが表示されます。

メッセージ
エンドポイントのテストに失敗: アプリケーションステータス: 1020912、アプリケーションメッセージ: S3 エンドポイントへの接続に失敗しました。アクセスが拒否されました。
エンドポイントのテストに失敗: アプリケーションステータス: 1020912、アプリケーションメッセージ: バケット wan-dms のリストに失敗しました。データベースへの接続に失敗しました。アプリケーション詳細メッセージ: バケット wan-dms の表示に失敗しました。AWS バケットの表示に失敗しました。表示バケットが例外で失敗しました。「AccessDenied」、メッセージ「アクセスが拒否されました」、エラータイプ「15」。AWS でバケットのリストを取得できませんでした。再試行不可能なエラー: アクセスが拒否されました
エンドポイントのテストに失敗: アプリケーションステータス: 1020912、アプリケーションメッセージ: データベースへの接続に失敗しました。
エラーの詳細: [message=putDatabase 呼び出しに失敗しました、errType=ERROR_RESPONSE、status=1020414、errMessage= データベースへの接続に失敗しました、errDetails=]

解決方法

これらのエラーを解決するには、Amazon S3 エンドポイントにアクセスするために必要な最小限の IAM アクセス許可を付与します。Amazon S3 のソースエンドポイントとターゲットエンドポイントには、AWS DMS の異なる最小アクセス許可があります。

Amazon S3 ソースエンドポイントの次の IAM ポリシー例を参照してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
           
    "Action": [
                "s3:GetObject",    
                "s3:ListBucket"        
    ],
    
            "Resource": [
                "arn:aws:s3:::awsexamplebucket",   
                "arn:aws:s3:::awsexamplebucket/*" 
            ]
        }
    ]
}

注意: awsexamplebucket を自分のバケット名に置き換えます。

ターゲットエンドポイントとしての Amazon S3 の次の IAM ポリシー例を参照してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket"
            ]
        }
    ]
}

注意: awsexamplebucket を自分のバケット名に置き換えます。

重要:

アクセス許可エラーのトラブルシューティングを行うには、次の手順を実行します。

1.    IAM ロールに、Amazon S3 エンドポイントへのアクセスに必要な最小限のアクセス許可があることを確認します。

2.    Amazon S3 エンドポイントに指定されたバケット名が IAM ロールで許可されているリソースと一致することを確認します。たとえば、IAM ロールでは、前のサンプルポリシーの awsexamplebucket など、1 つのバケットへのアクセスのみが許可されます。ただし、Amazon S3 エンドポイントのバケット名awsexamplebucket2 が指定されている場合、テスト接続は失敗します。

3.    dms.amazonaws.com が、IAM ロールに関連付けられた信頼できるエンティティであることを確認します。詳細については、「既存ロールの信頼関係の編集」および AWS DMS の次の信頼ポリシーの例を参照してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "dms.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

4.    AWS Organizations を使用する場合、使用する IAM ロールが Amazon S3 へのアクセスを許可する組織の一部であることを確認してください。組織がアクセスを許可しない場合、AWS DMS は、その IAM ロールを使用して Amazon S3 エンドポイントに接続することができません (ロールに必要なすべてのアクセス許可を持っていても同じです)。組織がアクセスを許可していない場合は、アカウント管理者に問い合わせて、組織への Amazon S3 アクセスを許可するよう依頼してください。