Amazon Bedrock API を複数の AWS アカウントで使用したいです。
簡単な説明
複数のアカウントで Amazon Bedrock API を使用する場合、1 つのアカウントで API クライアントのアクセス許可を管理し、別のアカウントでワークロードをホストします。
Amazon Bedrock API のクロスアカウントアクセスを設定する前に、基盤モデルにアクセスできることを確認してください。アクセスをリクエストするには、「モデルアクセスの追加」を参照してください。
注: クロスアカウントのベストプラクティスについては、「AWS Identity and Access Management (IAM) のセキュリティベストプラクティス」を参照してください。
解決策
次の解決策では、アカウント A に基盤モデルが含まれています。アカウント B には、アカウント A の Amazon Bedrock API を呼び出して基盤モデルにアクセスする Amazon SageMaker ノートブックが含まれています。
アカウント A
Amazon Bedrock へのアクセスを付与する IAM ロールを作成するには、次の手順を実行します。
- IAM コンソールを開きます。
- アカウント A の IAM ロールを作成します。
- IAM ロールに Amazon Bedrock へのアクセスを許可する AmazonBedrockFullAccess ポリシーが設定されていることを確認してください。
- アカウント B に SageMaker ノートブックを呼び出すアクセス許可を追加します。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":[
"sagemaker.amazonaws.com",
"events.amazonaws.com",
"bedrock.amazonaws.com"
],
"AWS":[
"arn:aws:iam::`<Account B ID>`:role/RoleB"
]
},
"Action":"sts:AssumeRole"
}
]
}
アカウント B
アカウント A の役割を引き受けるには、次の手順を実行します。
- IAM コンソールを開きます。
- SageMaker ノートブックをアカウントで実行するための IAM ロールを作成します。
- IAM ポリシーで、アカウント B のロールがアカウント A のロールを引き継ぐことを許可していることを確認します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::`<Account A ID>`:role/RoleA"
]
}
]
}
設定後、アカウント B のロールは一時的な Boto3 認証情報を使用してアカウント A のロールを引き継ぎます。
アカウント B からセットアップをテストする
アカウント B の IAM ポリシーにアタッチされているロールを使用して、任意の SageMaker ノートブックで次のセルを実行します。
import boto3
# ARN of Role A to assume
role_to_assume = 'arn:aws:iam::`<Account A ID>`:role/RoleA'
# Use STS to assume role
credentials = boto3.client('sts').assume_role(
RoleArn=role_to_assume,
RoleSessionName='RoleBSession'
)['Credentials']
# Create Bedrock client with temporary credentials
bedrock_session = boto3.session.Session(
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken']
)
bedrock = bedrock_session.client('bedrock-runtime')
これで、Amazon Bedrock クライアントは、アカウント A のロールからの一時的な認証情報を使用して API を呼び出すことができます。
ベストプラクティス
Amazon Bedrock API を複数のアカウントで使用する場合は、次のベストプラクティスを適用してください。
- AWS CloudTrail ログでエラーや検証を確認します。ログは、アカウント B の AWS Security Token Service (STS) の AssumeRole イベントと、アカウント A の Amazon Bedrock イベントを示します。
- 引き受けたロールのデフォルト期間は 1 時間です。ただし、DurationSeconds パラメーターを使用すると期間を変更できます。期間は、ロールの最大セッション期間を超えることはできません。