概要
従来から指定ログイン情報(Named Credentials)という仕組みはありましたが、設定方法が変更になっています。
シンプルな例で、AWS APIをコールアウトする設定をし、動作を試してみます。
試す内容
新しい指定ログイン情報を設定し、開発者コンソールから匿名ApexでS3バケットリストAPIをコール、レスポンスを確認してみます。
検証環境は DeveloperEdition組織 Summer '23 です。
設定手順
IAMユーザーを作成(AWS側)
AWSアカウント内へIAMユーザーを作成します。
許可オプションは「ポリシーを直接アタッチ」を選択、ポリシーは 「AmazonS3ReadOnlyAccess」をアタッチしました。
ユーザー作成後、アクセスキーを作成、アクセスキーとシークレットアクセスキーを控えておきます。
外部ログイン情報を作成
設定から[指定ログイン情報] ページへアクセス、[外部ログイン情報] タブをクリックし、[新規] ボタンをクリックします。
表示ラベルと名前へ 「S3Access」と指定し、認証プロトコルへ 「AWS署名バージョン4」を選択します。
サービスへ 「s3」、地域へ「us-east-1」を入力し、保存します。
続いてプリンシパルセクションの[新規]ボタンをクリックします。
パラメータ名へ「S3ControlUser」を入力、アクセスキーとアクセスの秘密へそれぞれIAMユーザーのアクセスキー、シークレットアクセスキーを入力し、保存します。
指定ログイン情報を作成
設定から[指定ログイン情報] ページへアクセス、[指定ログイン情報] タブの[新規] ボタンをクリックします。
表示ラベル、名前へ 「S3Access」、URLへ 「https://s3.amazonaws.com 」を入力します。
外部ログイン情報へは上記で設定した「S3Access」を選択します。
その他の項目はデフォルトのまま、保存します。
外部ログインプリンシパルのアクセス許可
実行するセールスフォースユーザへ外部ログインプリンシパルのアクセス許可設定を行います。
下記設定の新規権限セット S3AccessPermset
を作成し、対象ユーザへ割り当てます。
外部ログイン情報プリンシパルアクセス
上記で設定した外部ログイン情報+プリンシパルの設定が表示されますので選択して追加、保存します。
ユーザの外部ログイン情報オブジェクト権限
すべて許可設定します。
(設定時にシステム管理者権限等、「すべてのデータの編集」が有効になっている場合は不要ですが、一般的な利用ユーザの場合は必要です)
動作確認
デベロッパーコンソールの Anonymous WindowからApexコードを実行して確認します。
(従来の指定ログイン情報と記述は同じで良さそうです)
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:S3Access/');
req.setMethod('GET');
Http http = new Http();
HttpResponse res = http.send(req);
System.debug(res.getBody());
ログを確認すると(長いXMLなので途中で切れますが)レスポンスを確認できます。
また、デバッグログでNamedCalloutが実行されて、Statusコードが200であることなども確認可能です。
感想
従来の指定ログイン情報(NamdeCredentials)設定に比べると設定項目が分離し、権限も含めて各要素を関連付ける仕組みとなっています。シンプルに設定箇所が多く、関連を把握するのが面倒な印象を受けました。
ただ、権限をより明確に割り当てられるのと、AWSコールアウトについてはAssumeRoleできるようなので機能としてはパワーアップしていますし、柔軟で細かい設定が可能になっていると思います。
現時点では、従来機能での設定も引き続き利用可能、新たに設定することもできますが、非推奨となっているため、移行を検討する必要がありますね。
その他補足
従来の設定は、設定画面上 「種別:旧」 と表示、区別されています。
リンク
- Salesforceヘルプ:指定ログイン情報と外部ログイン情報
- Amazon S3 APIリファレンス
- 従来機能で試した過去のポスト
- Winter '23から変更になったということのようですね。