OpenHandsからAmazon Bedrockにアクセスして動くようにします。
AWSの環境を使うにあたり、わりとセキュリティに気を使っている環境では、AWS SSOによる認証を行っている場合があります。
ちょうどそのような環境にあたったのですが、動くまでちょっと苦労したので、対応方法を共有します。
前提条件
- DockerおよびDocker ComposeがインストールされたLinux環境であること
- AWS CLI(v2)がインストールされており、基本的な操作が可能であること
- AWS SSOが設定されており、利用するIAMロールにBedrockへのアクセス権限が付与されていること
AWS CLIのSSO認証設定
OpenHandsコンテナを起動する環境で、AWS CLIをSSO経由で認証できるように設定します。
-
AWSアクセスポータルでSSOの情報を確認します
アクセスポータルで、使用するロールのアクセスキーをクリックして開くと、以下のポップアップが表示されます。

-
~/.aws/configをエディタで開きます -
~/.aws/configに以下のSSOプロファイルの設定を追加しますconfig[profile your-sso-profile-name] # 任意のプロファイル名 sso_start_url = https://your-sso-start-url.awsapps.com/start # SSOの開始URL sso_region = your-sso-region # SSOリージョン sso_account_id = your-sso-account-id # ポップアップ先頭部のアカウントの後のカッコ内の12桁の数字 sso_role_name = your-sso-role-name # ポップアップ先頭のロール名 region = us-east-1 # Bedrockを利用するリージョン output = json
OpenHandsのDocker環境設定
AWS CLIの設定を反映した、OpenHandsのDocker環境を設定します。
-
OpenHandsのディレクトリを作成し、作成したディレクトリに移動します
mkdir openhands cd openhands -
docker-compose.yamlをエディタで開き、以下の内容を設定します (環境に応じて各設定値は調整して下さい)docker-compose.yamlversion: "3.9" services: openhands: image: docker.all-hands.dev/all-hands-ai/openhands:0.39 container_name: openhands-app volumes: - /var/run/docker.sock:/var/run/docker.sock - ./.openhands-state:/.openhands-state - ~/.aws:/root/.aws:ro # AWS設定ファイルとSSOキャッシュを読み取り専用でマウント ports: - "3000:3000" - "41234:41234" env_file: - .env environment: - SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.39-nikolaik - SANDBOX_VSCODE_PORT=41234 extra_hosts: - "host.docker.internal:host-gateway" pull_policy: always -
.envをエディタで開き、以下の内容に設定します.envAWS_PROFILE=your-sso-profile-name # SSO認証で設定したプロファイル名 AWS_REGION=us-east-1 # Bedrockを利用するリージョン LLM_RETRY_MIN_WAIT="60" LLM_RETRY_MAX_WAIT="120" LLM_MAX_INPUT_TOKENS="10240" LLM_MAX_OUTPUT_TOKENS="10240"
SSO認証
OpenHandsを起動する前に、SSO認証を行います。
- 以下のSSO認証のコマンドを実行します
aws sso login --profile your-sso-profile-name - ブラウザが開き、SSOログインが求められたらログインします
- Authorization requestedが表示されたら、コマンド実行時に表示されたコードと画面上のコードが一致することを確認し、Confirm and continueをクリックして承認します
- Allow access to your data?が表示されたら、Allowをクリックして許可します
ログインが成功すると、一時的な認証情報がキャッシュされます。
これらの認証情報は通常、 ~/.aws/sso/cache ディレクトリに保存されます。
OpenHandsの起動
SSO認証が済んでいる状態で、Docker Composeを使ってOpenHandsを起動します。
cd openhands # openhandsディレクトリに移動
docker compose up # 設定変更後は --build オプションを付けるなど適宜変更してください
OpenHandsでの設定
OpenHandsが起動したら、ブラウザでアクセスして設定画面を開き、LLMタブで使いたいモデル、リージョンに応じて以下のように設定します。
- 詳細設定: on
- カスタムモデル: bedrock/anthropic.claude-sonnet-4-20250514-v1:0
(ここでは Claude 4 sonnet を指定しています) - ベースURL: https://bedrock-runtime.us-east-1.amazonaws.com
(ここでは us-east-1 リージョンを指定しています) - APIキー: 任意の文字列
- エージェント: CodeActAgent
トラブルシューティング
参考程度に、いくつかありそうなトラブルについて書いておきます。
- 「Unable to locate credentials」エラー:
- ~/.awsディレクトリが正しくコンテナにマウントされているか確認してください。
- ホストでaws sso login --profile your-sso-profile-nameが成功し、認証情報がキャッシュされているか確認してください。
- AWS_PROFILE環境変数が正しく設定されているか確認してください。
- ~/.aws/credentialsファイルが存在する場合、SSOのキャッシュと競合する可能性があります。一時的にリネームして試してみてください。
- 「Access Denied」エラー:
- SSO経由で利用しているIAMロールに、Bedrockへの適切なアクセス権限(bedrock:InvokeModelなど)が付与されているか確認してください。
- Bedrockのリージョンが正しく設定されているか確認してください。
参考
SSOではない場合はこちらが参考になります。